4 #include <QNetworkAccessManager>
5 #include <QNetworkReply>
6 #include <QNetworkRequest>
8 #include <QXmlStreamReader>
11 SkillTree::SkillTree(QObject *parent) :
16 QFile cacheFile("/var/tmp/skillCache");
17 if (cacheFile.exists()) {
18 QDataStream input(&cacheFile);
27 void SkillTree::loadSkills()
29 QFile cacheFile("/var/tmp/skillCache");
30 if (cacheFile.exists()) {
31 cacheFile.open(QIODevice::ReadOnly);
32 qDebug() << "Load from file";
33 QDataStream input(&cacheFile);
38 qDebug() << "load skills from network";
39 mgr = new QNetworkAccessManager(this);
40 QNetworkRequest req(QUrl("http://api.eveonline.com//eve/SkillTree.xml.aspx"));
41 reply = mgr->get(req);
42 connect(reply,SIGNAL(finished()),this,SLOT(replyReady()));
46 void SkillTree::replyReady()
48 qDebug() << "Reply ready";
49 if (!reply->error()) {
50 QByteArray replyContent = reply->readAll();
51 qDebug() << replyContent;
52 fromXml(replyContent);
55 qDebug() << "fetch error:" << reply->errorString();
59 void SkillTree::fromXml(QByteArray &content)
61 QXmlStreamReader xml(content);
62 xml.readNextStartElement(); //eveapi
63 //assert(xml.name() == "eveapi");
64 xml.readNextStartElement(); //currentTime
65 xml.skipCurrentElement();
66 //assert(xml.name() == "currentTime");
67 xml.readNextStartElement(); //result
68 xml.readNextStartElement(); // rowset for skill groups
69 bool groupsLeft = xml.readNextStartElement(); // row for skill group
71 xml.readNextStartElement(); // rowset for skills
72 bool skillsLeft = xml.readNextStartElement(); // row for skill
74 assert(xml.name() == "row");
75 QString name = xml.attributes().value("","typeName").toString();
76 int typeId = xml.attributes().value("","typeID").toString().toInt();
77 qDebug() << "Found skill " << name << ":" << typeId;
78 skillNames[typeId] = name;
80 xml.skipCurrentElement(); // description
81 skillsLeft = xml.readNextStartElement(); // next skill row
83 xml.readNextStartElement(); // rowset ends
84 groupsLeft = xml.readNextStartElement(); // next skill group row
89 foreach (name,skillNames) {
90 if (name.length() > len) {
96 qDebug() << skillNames;
97 qDebug() << longestName;
100 void SkillTree::save()
102 QFile cache("/var/tmp/skillCache");
103 cache.open(QIODevice::WriteOnly);
104 QDataStream output(&cache);
105 output << skillNames;