1 // Copyright (C) 2010 Jaakko Kyro <jkyro@korjaussarja.net>
2 // This file is licenced under GPL, see COPYING
3 // for full licence information
5 #include "eveaccount.h"
6 #include <QNetworkAccessManager>
7 #include <QXmlStreamReader>
9 #include <QNetworkAccessManager>
10 #include <QNetworkRequest>
14 static QUrl imageUrl("http://img.eve.is/serv.asp");
16 EveModel::EveModel(QObject *parent) :
24 void EveModel::fetchAccounts()
26 QNetworkRequest fetch(QUrl(QString("http://api.eveonline.com/account/Characters.xml.aspx?apiKey=%1&userID=%2")
29 m_reply = mgr.get(fetch);
30 qDebug() << "Fetch accounts, reply " << m_reply;
31 connect(m_reply,SIGNAL(finished()),this,SLOT(replyReady()));
32 connect(m_reply,SIGNAL(error(QNetworkReply::NetworkError)),this,SLOT(networkError(QNetworkReply::NetworkError)));
35 void EveModel::replyReady()
37 if (m_reply->error()) {
38 qDebug() << "Failed! " << m_reply->errorString();
41 QByteArray reply = m_reply->readAll();
42 qDebug() << "Reply ready";
44 QXmlStreamReader reader(reply);
46 reader.readNextStartElement();
48 qDebug() << "Parse error: " << reader.errorString();
50 qDebug() << "Relement: " << reader.name();
51 if (reader.name() != "eveapi")
53 reader.readNextStartElement();
55 qDebug() << "Parse error: " << reader.errorString();
57 qDebug() << "1 element: " << reader.name();
58 if (reader.name() != "currentTime")
60 reader.readNextStartElement();
61 reader.readNextStartElement();
63 qDebug() << "Parse error: " << reader.errorString();
65 qDebug() << "2 element: " << reader.name();
66 if (reader.name() != "result")
68 reader.readNextStartElement();
69 qDebug() << "Relement: " << reader.name();
70 if (reader.name() != "rowset")
72 reader.readNextStartElement();
73 qDebug() << "3 element: " << reader.name();
74 if (reader.name() == "row")
76 while (reader.name() == "row") {
78 if (!chara.fromXml(reader)) {
79 qDebug() << "Error parsing character data";
82 m_characters.append(chara);
83 reader.readNextStartElement(); // end current row
84 reader.readNextStartElement(); // start next row
86 m_reply->deleteLater();
91 void EveModel::networkError(QNetworkReply::NetworkError error)
93 qDebug() << "Network error " << error;
96 EveCharacter *EveModel::selectedCharacter()
98 qDebug() << "Index:" << m_selectedIndex;
99 if (m_selectedIndex >= 0 && m_selectedIndex < m_characters.size())
100 return &(m_characters[m_selectedIndex]);
104 bool EveModel::loadSettings()
106 QSettings settings("net.korjaussarja","evehomescreen");
107 qDebug() << "Load settings";
108 // Absence of this key means first time load
109 if (!settings.contains("account/apiKey")) {
110 qDebug() << "No saved settings";
113 setApiKey(settings.value("account/apiKey").toString());
114 setUserId(settings.value("account/userId").toInt());
116 int size = settings.beginReadArray("characters");
117 for (int i = 0;i<size;++i) {
118 settings.setArrayIndex(i);
119 EveCharacter character;
120 character.name = settings.value("characterName").toString();
121 character.characterId = settings.value("characterId").toInt();
122 character.corpName = settings.value("corpName").toString();
123 character.corpId = settings.value("corpId").toInt();
125 if (settings.contains("characterIcon")) {
126 character.characterIcon = new QPixmap(settings.value("characterIcon").value<QPixmap>());
128 characters().append(character);
131 m_selectedIndex = settings.value("account/selectedCharacter",-1).toInt();
136 void EveModel::saveSettings()
139 QSettings settings("net.korjaussarja","evehomescreen");
140 settings.setValue("account/apiKey",apiKey());
141 settings.setValue("account/userId",userId());
142 if (m_selectedIndex >= 0 && m_selectedIndex < characters().size())
143 settings.setValue("account/selectedCharacter",m_selectedIndex);
144 settings.beginWriteArray("characters");
146 for (int i=0;i<characters().size();++i) {
147 settings.setArrayIndex(i);
148 settings.setValue("characterName", characters().at(i).name);
149 settings.setValue("characterId", characters().at(i).characterId);
150 settings.setValue("corpName", characters().at(i).corpName);
151 settings.setValue("corpId", characters().at(i).corpId);
152 if (characters().at(i).characterIcon != NULL) {
153 settings.setValue("characterIcon",*(characters().at(i).characterIcon));