EveSkillTraining::EveSkillTraining(QObject *parent) :
QObject(parent),
training(false),
- typeId(0),
- startSkillpoints(0),
- destSkillpoints(0),
- level(0),
m_character(NULL),
m_account(NULL),
m_reply(NULL)
bool EveSkillTraining::fromXml(QXmlStreamReader &xml)
{
+ xml.readNextStartElement();
+ if (xml.name() != "eveapi")
+ return false;
+ xml.readNextStartElement();
+ if (xml.name() != "currentTime") {
+ return false;
+ }
+
+ currentTime = QDateTime::fromString(xml.readElementText(),"yyyy-MM-dd hh:mm:ss");
+ //xml.readNextStartElement(); // end currentTime element
+ bool inResult = xml.readNextStartElement(); // start result element
if (xml.name() != "result") {
qDebug() << "Wrong element:" << xml.name();
return false;
}
- qDebug() << "passed, element is result";
- bool inResult = true;
+ inResult = xml.readNextStartElement();
+ if (!inResult || xml.name() != "rowset" ) {
+ qDebug() << "No rowset element";
+ return false;
+ }
+ inResult = xml.readNextStartElement();
while (inResult) {
- inResult = xml.readNextStartElement();
- qDebug() << "element:" << xml.name();
- if (xml.name() == "trainingEndTime") {
- qDebug() << "Parse end time";
- endTime = QDateTime::fromString(xml.readElementText(),"yyyy-MM-dd hh:mm:ss");//2008-08-17 06:43:00
- qDebug()<< endTime;
-
- } else if (xml.name() == "trainingStartTime") {
- qDebug() << "Parse start time";
- startTime = QDateTime::fromString(xml.readElementText(),"yyyy-MM-dd hh:mm:ss");//2008-08-17 06:43:00
- qDebug() << startTime;
-
- } else if (xml.name() == "trainingTypeID") {
- typeId = xml.readElementText().toInt();
-
- } else if (xml.name() == "trainingStartSP"){
- startSkillpoints = xml.readElementText().toInt();
+ if (xml.name() == "row") {
+ TrainingEntry entry;
+ entry.typeId = xml.attributes().value("","typeID").toString().toInt();
+ entry.destSkillpoints = xml.attributes().value("","endSP").toString().toInt();
+ entry.startSkillpoints = xml.attributes().value("","startSP").toString().toInt();
+ entry.level = xml.attributes().value("","level").toString().toInt();
+ if (xml.attributes().hasAttribute("","startTime")) {
+ entry.startTime = QDateTime::fromString(xml.attributes().value("","startTime").toString(),
+ "yyyy-MM-dd hh:mm:ss");
+ entry.startTime.setTimeSpec(Qt::UTC);
+ }
+ if (xml.attributes().hasAttribute("","endTime")) {
+ entry.endTime = QDateTime::fromString(xml.attributes().value("","endtTime").toString(),
+ "yyyy-MM-dd hh:mm:ss");
+ entry.endTime.setTimeSpec(Qt::UTC);
+ }
+ m_trainingQueue.append(entry);
- } else if (xml.name() == "trainingDestinationSP"){
- destSkillpoints = xml.readElementText().toInt();
-
- } else if (xml.name() == "trainingToLevel"){
- level = xml.readElementText().toInt();
- } else
- // Noop
- xml.skipCurrentElement();
-
- } // while
+ }
+ }
+ if (xml.name() == "cachedUntil" ) {
+ cachedUntil = QDateTime::fromString(xml.readElementText(),"yyyy-MM-dd hh:mm:ss");
+ cachedUntil.setTimeSpec(Qt::UTC);
+ qDebug() << "Cached until " << cachedUntil.toString(Qt::SystemLocaleShortDate);
+ }
qDebug() << "Parsing finished";
return true;
}
{
if (m_character == NULL || m_account == NULL)
return;
- QNetworkRequest req(QUrl(QString("http://api.eveonline.com/char/SkillInTraining.xml.aspx?apiKey=%1&userID=%2&characterID=%3")
+ if (cachedUntil.isValid()) {
+ if (cachedUntil > QDateTime::currentDateTime().toUTC() ) {
+ qDebug() << "Cached until " << cachedUntil.toString(Qt::SystemLocaleShortDate);
+ return;
+ }
+ }
+ QNetworkRequest req(QUrl(QString("http://api.eveonline.com/char/SkillQueue.xml.aspx?apiKey=%1&userID=%2&characterID=%3")
.arg(m_account->apiKey())
.arg(m_account->userId())
.arg(m_character->characterId)));
qDebug() << "Reply ready";
qDebug() << reply;
QXmlStreamReader reader(reply);
-
- reader.readNextStartElement();
- if (reader.name() != "eveapi")
- return;
- reader.readNextStartElement();
- if (reader.name() != "currentTime")
- return;
- reader.readNextStartElement(); // end currentTime element
- reader.readNextStartElement(); // start result element
fromXml(reader);
+ m_reply->deleteLater();
emit finished();
}