Make cachedUntil public
[evehomescreen] / src / evemodel.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 "evemodel.h"
5 #include "eveaccount.h"
6 #include <QNetworkAccessManager>
7 #include <QXmlStreamReader>
8 #include <QUrl>
9 #include <QNetworkAccessManager>
10 #include <QNetworkRequest>
11 #include <QtDebug>
12 #include <QSettings>
13
14 static QUrl imageUrl("http://img.eve.is/serv.asp");
15
16 EveModel::EveModel(QObject *parent) :
17     QObject(parent),
18     m_userId(0),
19     m_selectedIndex(-1)
20 {
21
22 }
23
24 void EveModel::fetchAccounts()
25 {
26     QNetworkRequest fetch(QUrl(QString("http://api.eveonline.com/account/Characters.xml.aspx?apiKey=%1&userID=%2")
27                                .arg(apiKey())
28                                .arg(userId())));
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)));
33 }
34
35 void EveModel::replyReady()
36 {
37     if (m_reply->error()) {
38         qDebug() << "Failed! " << m_reply->errorString();
39         return;
40     }
41     QByteArray reply = m_reply->readAll();
42     qDebug() << "Reply ready";
43     qDebug() << reply;
44     QXmlStreamReader reader(reply);
45
46     reader.readNextStartElement();
47     if (reader.error()) {
48         qDebug() << "Parse error: " << reader.errorString();
49     }
50     qDebug() << "Relement: " << reader.name();
51     if (reader.name() != "eveapi")
52         return;
53     reader.readNextStartElement();
54     if (reader.error()) {
55         qDebug() << "Parse error: " << reader.errorString();
56     }
57     qDebug() << "1 element: " << reader.name();
58     if (reader.name() != "currentTime")
59         return;
60     reader.readNextStartElement();
61     reader.readNextStartElement();
62     if (reader.error()) {
63         qDebug() << "Parse error: " << reader.errorString();
64     }
65     qDebug() << "2 element: " << reader.name();
66     if (reader.name() != "result")
67         return;
68     reader.readNextStartElement();
69     qDebug() << "Relement: " << reader.name();
70     if (reader.name() != "rowset")
71         return;
72     reader.readNextStartElement();
73     qDebug() << "3 element: " << reader.name();
74     if (reader.name() == "row")
75         m_characters.clear();
76     while (reader.name() == "row") {
77         EveCharacter chara;
78         if (!chara.fromXml(reader)) {
79             qDebug() << "Error parsing character data";
80             break;
81         }
82         m_characters.append(chara);
83         reader.readNextStartElement(); // end current row
84         reader.readNextStartElement(); // start next row
85     }
86     m_reply->deleteLater();
87
88     emit accountsReady();
89 }
90
91 void EveModel::networkError(QNetworkReply::NetworkError error)
92 {
93     qDebug() << "Network error " << error;
94 }
95
96 EveCharacter *EveModel::selectedCharacter()
97 {
98     qDebug() << "Index:" << m_selectedIndex;
99     if (m_selectedIndex >= 0 && m_selectedIndex < m_characters.size())
100         return &(m_characters[m_selectedIndex]);
101     return NULL;
102 }
103
104 bool EveModel::loadSettings()
105 {
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";
111         return false;
112     }
113     setApiKey(settings.value("account/apiKey").toString());
114     setUserId(settings.value("account/userId").toInt());
115
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();
124
125         if (settings.contains("characterIcon")) {
126             character.characterIcon = new QPixmap(settings.value("characterIcon").value<QPixmap>());
127         }
128         characters().append(character);
129     }
130     settings.endArray();
131     m_selectedIndex = settings.value("account/selectedCharacter",-1).toInt();
132     return true;
133 }
134
135 // TODO
136 void EveModel::saveSettings()
137 {
138     qDebug() << "Save";
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");
145
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));
154         }
155     }
156     settings.endArray();
157 }