]> git.sur5r.net Git - minitube/blob - src/updatechecker.cpp
af7c349e6d3c9522cb00e669a40e8c946b1fc0cd
[minitube] / src / updatechecker.cpp
1 /* $BEGIN_LICENSE
2
3 This file is part of Minitube.
4 Copyright 2009, Flavio Tordini <flavio.tordini@gmail.com>
5
6 Minitube is free software: you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation, either version 3 of the License, or
9 (at your option) any later version.
10
11 Minitube is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with Minitube.  If not, see <http://www.gnu.org/licenses/>.
18
19 $END_LICENSE */
20
21 #include "updatechecker.h"
22 #include "networkaccess.h"
23 #include "constants.h"
24 #ifdef APP_ACTIVATION
25 #include "activation.h"
26 #endif
27
28 namespace The {
29     NetworkAccess* http();
30 }
31
32 UpdateChecker::UpdateChecker() {
33     m_needUpdate = false;
34 }
35
36 void UpdateChecker::checkForUpdate() {
37     QUrl updateUrl(QLatin1String(Constants::WEBSITE) + "-ws/release.xml");
38     updateUrl.addQueryItem("v", Constants::VERSION);
39
40 #ifdef APP_MAC
41     updateUrl.addQueryItem("os", "mac");
42 #endif
43 #ifdef APP_WIN
44     updateUrl.addQueryItem("os", "win");
45 #endif
46 #ifdef APP_ACTIVATION
47     QString t = "demo";
48     if (Activation::instance().isActivated()) t = "active";
49     updateUrl.addQueryItem("t", t);
50 #endif
51 #ifdef APP_MAC_STORE
52     updateUrl.addQueryItem("store", "mac");
53 #endif
54
55     QObject *reply = The::http()->get(updateUrl);
56     connect(reply, SIGNAL(data(QByteArray)), SLOT(requestFinished(QByteArray)));
57
58 }
59
60 void UpdateChecker::requestFinished(QByteArray data) {
61         UpdateCheckerStreamReader reader;
62         reader.read(data);
63         m_needUpdate = reader.needUpdate();
64         m_remoteVersion = reader.remoteVersion();
65         if (m_needUpdate && !m_remoteVersion.isEmpty()) emit newVersion(m_remoteVersion);
66 }
67
68 QString UpdateChecker::remoteVersion() {
69     return m_remoteVersion;
70 }
71
72 // --- Reader ---
73
74 bool UpdateCheckerStreamReader::read(QByteArray data) {
75     addData(data);
76
77     while (!atEnd()) {
78         readNext();
79         if (isStartElement()) {
80             if (name() == QLatin1String("release")) {
81                 while (!atEnd()) {
82                     readNext();
83                     if (isStartElement() && name() == QLatin1String("version")) {
84                         QString remoteVersion = readElementText();
85                         qDebug() << remoteVersion << QString(Constants::VERSION);
86                         m_needUpdate = remoteVersion != QString(Constants::VERSION);
87                         m_remoteVersion = remoteVersion;
88                         break;
89                     }
90                 }
91             }
92         }
93     }
94
95     return !error();
96 }
97
98 QString UpdateCheckerStreamReader::remoteVersion() {
99     return m_remoteVersion;
100 }