1 // Copyright (C) 2010 Jaakko Kyro <jkyro@korjaussarja.net>
2 // This file is licenced under GPL, see COPYING
3 // for full licence information
7 #include <QNetworkAccessManager>
8 #include <QNetworkReply>
9 #include <QNetworkRequest>
11 #include <QXmlStreamReader>
14 SkillTree::SkillTree(QObject *parent) :
19 QFile cacheFile("/var/tmp/skillCache");
20 if (cacheFile.exists()) {
21 QDataStream input(&cacheFile);
30 void SkillTree::loadSkills()
32 QFile cacheFile("/var/tmp/skillCache");
33 if (cacheFile.exists()) {
34 cacheFile.open(QIODevice::ReadOnly);
35 qDebug() << "Load from file";
36 QDataStream input(&cacheFile);
41 qDebug() << "load skills from network";
42 mgr = new QNetworkAccessManager(this);
43 QNetworkRequest req(QUrl("http://api.eveonline.com//eve/SkillTree.xml.aspx"));
44 reply = mgr->get(req);
45 connect(reply,SIGNAL(finished()),this,SLOT(replyReady()));
49 void SkillTree::replyReady()
51 qDebug() << "Reply ready";
52 if (!reply->error()) {
53 QByteArray replyContent = reply->readAll();
54 qDebug() << replyContent;
55 fromXml(replyContent);
58 qDebug() << "fetch error:" << reply->errorString();
62 void SkillTree::fromXml(QByteArray &content)
64 QXmlStreamReader xml(content);
65 xml.readNextStartElement(); //eveapi
66 //assert(xml.name() == "eveapi");
67 xml.readNextStartElement(); //currentTime
68 xml.skipCurrentElement();
69 //assert(xml.name() == "currentTime");
70 xml.readNextStartElement(); //result
71 xml.readNextStartElement(); // rowset for skill groups
72 bool groupsLeft = xml.readNextStartElement(); // row for skill group
74 xml.readNextStartElement(); // rowset for skills
75 bool skillsLeft = xml.readNextStartElement(); // row for skill
77 assert(xml.name() == "row");
78 QString name = xml.attributes().value("","typeName").toString();
79 int typeId = xml.attributes().value("","typeID").toString().toInt();
80 qDebug() << "Found skill " << name << ":" << typeId;
81 skillNames[typeId] = name;
83 xml.skipCurrentElement(); // description
84 skillsLeft = xml.readNextStartElement(); // next skill row
86 xml.readNextStartElement(); // rowset ends
87 groupsLeft = xml.readNextStartElement(); // next skill group row
92 foreach (name,skillNames) {
93 if (name.length() > len) {
99 qDebug() << skillNames;
100 qDebug() << longestName;
103 void SkillTree::save()
105 QFile cache("/var/tmp/skillCache");
106 cache.open(QIODevice::WriteOnly);
107 QDataStream output(&cache);
108 output << skillNames;