]> git.sur5r.net Git - minitube/blob - src/updatechecker.cpp
Merge tag 'upstream/2.5.2'
[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 #include "compatibility/qurlqueryhelper.h"
28
29 namespace The {
30 NetworkAccess* http();
31 }
32
33 UpdateChecker::UpdateChecker() {
34     m_needUpdate = false;
35 }
36
37 void UpdateChecker::checkForUpdate() {
38     QUrl url(QLatin1String(Constants::WEBSITE) + "-ws/release.xml");
39
40     {
41         QUrlQueryHelper urlHelper(url);
42         urlHelper.addQueryItem("v", Constants::VERSION);
43
44 #ifdef APP_MAC
45         urlHelper.addQueryItem("os", "mac");
46 #endif
47 #ifdef APP_WIN
48         urlHelper.addQueryItem("os", "win");
49 #endif
50 #ifdef APP_ACTIVATION
51         QString t = "demo";
52         if (Activation::instance().isActivated()) t = "active";
53         urlHelper.addQueryItem("t", t);
54 #endif
55 #ifdef APP_MAC_STORE
56         urlHelper.addQueryItem("store", "mac");
57 #endif
58     }
59
60     QObject *reply = The::http()->get(url);
61     connect(reply, SIGNAL(data(QByteArray)), SLOT(requestFinished(QByteArray)));
62
63 }
64
65 void UpdateChecker::requestFinished(QByteArray data) {
66     UpdateCheckerStreamReader reader;
67     reader.read(data);
68     m_needUpdate = reader.needUpdate();
69     m_remoteVersion = reader.remoteVersion();
70     if (m_needUpdate && !m_remoteVersion.isEmpty()) emit newVersion(m_remoteVersion);
71 }
72
73 QString UpdateChecker::remoteVersion() {
74     return m_remoteVersion;
75 }
76
77 // --- Reader ---
78
79 bool UpdateCheckerStreamReader::read(QByteArray data) {
80     addData(data);
81
82     while (!atEnd()) {
83         readNext();
84         if (isStartElement()) {
85             if (name() == QLatin1String("release")) {
86                 while (!atEnd()) {
87                     readNext();
88                     if (isStartElement() && name() == QLatin1String("version")) {
89                         QString remoteVersion = readElementText();
90                         qDebug() << remoteVersion << QString(Constants::VERSION);
91                         m_needUpdate = remoteVersion != QString(Constants::VERSION);
92                         m_remoteVersion = remoteVersion;
93                         break;
94                     }
95                 }
96             }
97         }
98     }
99
100     return !error();
101 }
102
103 QString UpdateCheckerStreamReader::remoteVersion() {
104     return m_remoteVersion;
105 }