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);
60 qDebug() << "fetch error:" << reply->errorString();
64 void SkillTree::fromXml(QByteArray &content)
66 QXmlStreamReader xml(content);
67 xml.readNextStartElement(); //eveapi
68 //assert(xml.name() == "eveapi");
69 xml.readNextStartElement(); //currentTime
70 xml.skipCurrentElement();
71 //assert(xml.name() == "currentTime");
72 xml.readNextStartElement(); //result
73 xml.readNextStartElement(); // rowset for skill groups
74 bool groupsLeft = xml.readNextStartElement(); // row for skill group
76 xml.readNextStartElement(); // rowset for skills
77 bool skillsLeft = xml.readNextStartElement(); // row for skill
79 assert(xml.name() == "row");
80 QString name = xml.attributes().value("","typeName").toString();
81 int typeId = xml.attributes().value("","typeID").toString().toInt();
82 //qDebug() << "Found skill " << name << ":" << typeId;
83 skillNames[typeId] = name;
85 xml.skipCurrentElement(); // description
86 skillsLeft = xml.readNextStartElement(); // next skill row
88 xml.readNextStartElement(); // rowset ends
89 groupsLeft = xml.readNextStartElement(); // next skill group row
94 foreach (name,skillNames) {
95 if (name.length() > len) {
101 //qDebug() << skillNames;
102 qDebug() << longestName;
105 void SkillTree::save()
107 QFile cache("/var/tmp/skillCache");
108 cache.open(QIODevice::WriteOnly);
109 QDataStream output(&cache);
110 output << skillNames;