1 #include "remotedbmgr.h"
5 #include <QDomNodeList>
7 #include <QNetworkReply>
9 #include <QNetworkRequest>
13 RemoteDBMgr::RemoteDBMgr()
16 connect(&netAM, SIGNAL(finished(QNetworkReply *)),
17 this, SLOT(dbDownloadFinished(QNetworkReply *)));
20 RemoteDBMgr::~RemoteDBMgr()
22 foreach(MfgMap mfgMap, db.values()) {
23 foreach(RemoteList list, mfgMap.values()) {
29 void RemoteDBMgr::getDBAsync()
31 if (db.isEmpty() && !processing) {
32 QSettings settings(this);
33 netAM.get(QNetworkRequest(QUrl(settings.value("baseUrl",
34 "http://mercury.wipsl.com/irwi/").toString() + "db/db.xml")));
41 void RemoteDBMgr::dbDownloadFinished(QNetworkReply *reply)
43 if (processing = (reply->error() == QNetworkReply::NoError)) {
44 QByteArray ba = reply->readAll();
46 buf.open(QIODevice::ReadOnly);
56 emit downloadFailed(reply->error());
62 void RemoteDBMgr::parse(QDomDocument &doc)
64 QDomNodeList chars = doc.elementsByTagName("char");
66 for (int i = 0; i < chars.size(); ++i) {
67 QDomElement charEl = chars.at(i).toElement();
68 if (!charEl.isNull()) {
69 if (charEl.hasAttribute("id"))
70 db.insert(charEl.attribute("id"), parseMfgMap(charEl));
75 MfgMap RemoteDBMgr::parseMfgMap(QDomElement &charEl)
78 QDomNodeList mfgs = charEl.elementsByTagName("mfg");
80 for (int i = 0; i < mfgs.size(); ++i) {
81 QDomElement mfgEl = mfgs.at(i).toElement();
82 if (!mfgEl.isNull()) {
83 if (mfgEl.hasAttribute("id")) {
84 mfgMap.insert(mfgEl.attribute("id"), parseRemotes(mfgEl));
91 RemoteList RemoteDBMgr::parseRemotes(QDomElement &mfgEl)
94 QDomNodeList models = mfgEl.elementsByTagName("model");
96 for (int i = 0; i < models.size(); ++i) {
97 QDomElement modelEl = models.at(i).toElement();
98 if (!modelEl.isNull()) {
99 if (modelEl.hasAttribute("name")
100 && modelEl.hasAttribute("rating")
101 && modelEl.hasAttribute("vote_count")) {
102 remotes << new Remote(modelEl.attribute("name"),
103 mfgEl.attribute("id"),
104 modelEl.attribute("rating").toInt(),
105 modelEl.attribute("vote_count").toInt());