Check for existing skill training, detect if there is a skill in training
[evehomescreen] / src / eveskilltraining.cpp
1 // Copyright (C) 2010 Jaakko Kyro <jkyro@korjaussarja.net>
2 // This file is licenced under GPL, see COPYING
3 // for full licence information
4 #include "eveskilltraining.h"
5 #include "evemodel.h"
6 #include "eveaccount.h"
7
8 #include <QXmlStreamReader>
9 #include <QNetworkAccessManager>
10 #include <QNetworkRequest>
11 #include <QNetworkReply>
12 #include <QtDebug>
13 EveSkillTraining::EveSkillTraining(QObject *parent) :
14     QObject(parent),
15     training(false),
16     typeId(0),
17     startSkillpoints(0),
18     destSkillpoints(0),
19     level(0),
20     m_character(NULL),
21     m_account(NULL),
22     m_reply(NULL)
23 {
24 }
25
26 bool EveSkillTraining::fromXml(QXmlStreamReader &xml)
27 {
28     if (xml.name() != "result") {
29         qDebug() << "Wrong element:" << xml.name();
30         return false;
31     }
32     qDebug() << "passed, element is result";
33     bool inResult = true;
34     while (inResult) {
35         inResult = xml.readNextStartElement();
36         qDebug() << "element:" << xml.name();
37         if (xml.name() == "trainingEndTime") {
38             qDebug() << "Parse end time";
39             endTime = QDateTime::fromString(xml.readElementText(),"yyyy-MM-dd hh:mm:ss");//2008-08-17 06:43:00
40             qDebug()<< endTime;
41
42         } else if (xml.name() == "trainingStartTime") {
43             qDebug() << "Parse start time";
44             startTime = QDateTime::fromString(xml.readElementText(),"yyyy-MM-dd hh:mm:ss");//2008-08-17 06:43:00
45             qDebug() << startTime;
46
47         } else if (xml.name() == "trainingTypeID") {
48             typeId = xml.readElementText().toInt();
49
50         } else if (xml.name() == "trainingStartSP"){
51             startSkillpoints = xml.readElementText().toInt();
52
53         } else if (xml.name() == "trainingDestinationSP"){
54             destSkillpoints = xml.readElementText().toInt();
55
56         } else if (xml.name() == "trainingToLevel"){
57             level = xml.readElementText().toInt();
58         } else if (xml.name() == "skillInTraining" ) {
59
60             training = xml.readElementText().toInt() == 1;
61             qDebug() << "Training?" << training;
62         } else
63             // Noop
64             xml.skipCurrentElement();
65
66     } // while
67     qDebug() << "Parsing finished";
68     return true;
69 }
70
71 void EveSkillTraining::fetchInfo()
72 {
73     if (m_character == NULL || m_account == NULL)
74         return;
75     QNetworkRequest req(QUrl(QString("http://api.eveonline.com/char/SkillInTraining.xml.aspx?apiKey=%1&userID=%2&characterID=%3")
76                              .arg(m_account->apiKey())
77                              .arg(m_account->userId())
78                              .arg(m_character->characterId)));
79     m_reply = m_mgr.get(req);
80     connect(m_reply,SIGNAL(finished()),this,SLOT(infoReady()));
81 }
82
83 void EveSkillTraining::infoReady()
84 {
85     if (m_reply->error()) {
86         qDebug() << "Failed! " << m_reply->errorString();
87         return;
88     }
89     qDebug() << "Skill reply";
90     QByteArray reply = m_reply->readAll();
91     qDebug() << "Reply ready";
92     qDebug() << reply;
93     QXmlStreamReader reader(reply);
94
95     reader.readNextStartElement();
96     if (reader.name() != "eveapi")
97         return;
98     reader.readNextStartElement();
99     if (reader.name() != "currentTime")
100         return;
101     reader.readNextStartElement(); // end currentTime element
102     reader.readNextStartElement(); // start result element
103     fromXml(reader);
104     emit finished();
105 }