summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDominik Wenger <domonoky@googlemail.com>2009-09-18 22:28:09 +0000
committerDominik Wenger <domonoky@googlemail.com>2009-09-18 22:28:09 +0000
commit293a4b62d7220f855cb4d13f79b8ff97467f0242 (patch)
treee0056021cd2839c5c703d08f861674e86e57aaf9
parent1b1bd7ef463d257903cf68348b7c8414ea7eeb53 (diff)
downloadrockbox-293a4b62d7220f855cb4d13f79b8ff97467f0242.tar.gz
rockbox-293a4b62d7220f855cb4d13f79b8ff97467f0242.zip
rbutil: check for new Versions at startup.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@22734 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--rbutil/rbutilqt/base/rbsettings.cpp1
-rw-r--r--rbutil/rbutilqt/base/rbsettings.h1
-rw-r--r--rbutil/rbutilqt/rbutil.ini1
-rw-r--r--rbutil/rbutilqt/rbutilqt.cpp139
-rw-r--r--rbutil/rbutilqt/rbutilqt.h5
5 files changed, 146 insertions, 1 deletions
diff --git a/rbutil/rbutilqt/base/rbsettings.cpp b/rbutil/rbutilqt/base/rbsettings.cpp
index 116f321a4c..b1c6500ed2 100644
--- a/rbutil/rbutilqt/base/rbsettings.cpp
+++ b/rbutil/rbutilqt/base/rbsettings.cpp
@@ -44,6 +44,7 @@ const static struct {
44 { RbSettings::ServerConfUrl, "server_conf_url", "" }, 44 { RbSettings::ServerConfUrl, "server_conf_url", "" },
45 { RbSettings::GenlangUrl, "genlang_url", "" }, 45 { RbSettings::GenlangUrl, "genlang_url", "" },
46 { RbSettings::ThemesUrl, "themes_url", "" }, 46 { RbSettings::ThemesUrl, "themes_url", "" },
47 { RbSettings::RbutilUrl, "rbutil_url", "" },
47 { RbSettings::BleedingInfo, "bleeding_info", "" }, 48 { RbSettings::BleedingInfo, "bleeding_info", "" },
48 { RbSettings::CurPlatformName, ":platform:/name", "" }, 49 { RbSettings::CurPlatformName, ":platform:/name", "" },
49 { RbSettings::CurManual, ":platform:/manualname","rockbox-:platform:" }, 50 { RbSettings::CurManual, ":platform:/manualname","rockbox-:platform:" },
diff --git a/rbutil/rbutilqt/base/rbsettings.h b/rbutil/rbutilqt/base/rbsettings.h
index e178be0e52..b3f0430208 100644
--- a/rbutil/rbutilqt/base/rbsettings.h
+++ b/rbutil/rbutilqt/base/rbsettings.h
@@ -83,6 +83,7 @@ class RbSettings : public QObject
83 ServerConfUrl, 83 ServerConfUrl,
84 GenlangUrl, 84 GenlangUrl,
85 ThemesUrl, 85 ThemesUrl,
86 RbutilUrl,
86 BleedingInfo, 87 BleedingInfo,
87 CurPlatformName, 88 CurPlatformName,
88 CurManual, 89 CurManual,
diff --git a/rbutil/rbutilqt/rbutil.ini b/rbutil/rbutilqt/rbutil.ini
index ca27dba437..f082163411 100644
--- a/rbutil/rbutilqt/rbutil.ini
+++ b/rbutil/rbutilqt/rbutil.ini
@@ -13,6 +13,7 @@ manual_url=http://download.rockbox.org/daily/manual
13doom_url=http://download.rockbox.org/useful/rockdoom.zip 13doom_url=http://download.rockbox.org/useful/rockdoom.zip
14voice_url=http://download.rockbox.org/daily/voices/ 14voice_url=http://download.rockbox.org/daily/voices/
15genlang_url=http://www.rockbox.org/genlang/ 15genlang_url=http://www.rockbox.org/genlang/
16rbutil_url=http://download.rockbox.org/rbutil/
16 17
17[platforms] 18[platforms]
18platform01=player 19platform01=player
diff --git a/rbutil/rbutilqt/rbutilqt.cpp b/rbutil/rbutilqt/rbutilqt.cpp
index ec06955eef..083d35d8d9 100644
--- a/rbutil/rbutilqt/rbutilqt.cpp
+++ b/rbutil/rbutilqt/rbutilqt.cpp
@@ -212,7 +212,7 @@ void RbUtilQt::downloadDone(bool error)
212 bleeding = new HttpGet(this); 212 bleeding = new HttpGet(this);
213 connect(bleeding, SIGNAL(done(bool)), this, SLOT(downloadBleedingDone(bool))); 213 connect(bleeding, SIGNAL(done(bool)), this, SLOT(downloadBleedingDone(bool)));
214 connect(bleeding, SIGNAL(requestFinished(int, bool)), this, SLOT(downloadDone(int, bool))); 214 connect(bleeding, SIGNAL(requestFinished(int, bool)), this, SLOT(downloadDone(int, bool)));
215 connect(qApp, SIGNAL(lastWindowClosed()), daily, SLOT(abort())); 215 connect(qApp, SIGNAL(lastWindowClosed()), bleeding, SLOT(abort()));
216 if(RbSettings::value(RbSettings::CacheOffline).toBool()) 216 if(RbSettings::value(RbSettings::CacheOffline).toBool())
217 bleeding->setCache(true); 217 bleeding->setCache(true);
218 bleeding->setFile(&bleedingInfo); 218 bleeding->setFile(&bleedingInfo);
@@ -251,6 +251,9 @@ void RbUtilQt::downloadBleedingDone(bool error)
251 qDebug() << "[RbUtil] version map:" << versmap; 251 qDebug() << "[RbUtil] version map:" << versmap;
252 252
253 m_gotInfo = true; 253 m_gotInfo = true;
254
255 //start check for updates
256 checkUpdate();
254 } 257 }
255} 258}
256 259
@@ -1217,4 +1220,138 @@ bool RbUtilQt::chkConfig(bool warn)
1217 return error; 1220 return error;
1218} 1221}
1219 1222
1223void RbUtilQt::checkUpdate(void)
1224{
1225 QString url = RbSettings::value(RbSettings::RbutilUrl).toString();
1226#if defined(Q_OS_WIN32)
1227 url += "win32/";
1228#elif defined(Q_OS_LINUX)
1229 url += "linux/";
1230#elif defined(Q_OS_MACX)
1231 url += "macosx/";
1232#endif
1233
1234 update = new HttpGet(this);
1235 connect(update, SIGNAL(done(bool)), this, SLOT(downloadUpdateDone(bool)));
1236 connect(update, SIGNAL(requestFinished(int, bool)), this, SLOT(downloadDone(int, bool)));
1237 connect(qApp, SIGNAL(lastWindowClosed()), update, SLOT(abort()));
1238 if(RbSettings::value(RbSettings::CacheOffline).toBool())
1239 update->setCache(true);
1240
1241 update->getFile(QUrl(url));
1242}
1220 1243
1244void RbUtilQt::downloadUpdateDone(bool error)
1245{
1246 if(error) {
1247 qDebug() << "[RbUtil] network error:" << update->error();
1248 }
1249 else {
1250 QString toParse(update->readAll());
1251 qDebug() << "[Checkupdate] " << toParse;
1252
1253 QRegExp searchString("<a[^>]*>(rbutilqt[^<]*)</a>");
1254 QStringList rbutilList;
1255 int pos = 0;
1256 while ((pos = searchString.indexIn(toParse, pos)) != -1)
1257 {
1258 rbutilList << searchString.cap(1);
1259 pos += searchString.matchedLength();
1260 }
1261
1262 QString newVersion ="";
1263 //check if there is a binary with higher version in this list
1264 for(int i=0; i < rbutilList.size(); i++)
1265 {
1266#if defined(Q_OS_LINUX)
1267#if defined(__amd64__)
1268 //skip if it isnt a 64bit build
1269 if( !rbutilList.at(i).contains("64bit"))
1270 continue;
1271#else
1272 //skip if it is a 64bit build
1273 if(rbutilList.at(i).contains("64bit"))
1274 continue;
1275#endif
1276#endif
1277 //check if it is newer, and remember newest
1278 if(newerVersion(VERSION,rbutilList.at(i)))
1279 {
1280 if(newVersion == "" || newerVersion(newVersion,rbutilList.at(i)))
1281 {
1282 newVersion = rbutilList.at(i);
1283 }
1284 }
1285 }
1286
1287 // if we found something newer, display info
1288 if(newVersion != "")
1289 {
1290 QString url = RbSettings::value(RbSettings::RbutilUrl).toString();
1291#if defined(Q_OS_WIN32)
1292 url += "win32/";
1293#elif defined(Q_OS_LINUX)
1294 url += "linux/";
1295#elif defined(Q_OS_MACX)
1296 url += "macosx/";
1297#endif
1298 url += newVersion;
1299
1300 QMessageBox::information(this,tr("RockboxUtility Update available"),
1301 tr("<b>New RockboxUtility Version available.</b> <br><br>"
1302 "Download it from here: <a href='%1'>%2</a>").arg(url).arg(newVersion) );
1303 }
1304 }
1305}
1306
1307bool RbUtilQt::newerVersion(QString versionOld,QString versionNew)
1308{
1309 QRegExp chars("\\d*(\\D)");
1310
1311 //strip non-number from beginning
1312 versionOld = versionOld.remove(0,versionOld.indexOf(QRegExp("\\d")));
1313 versionNew = versionNew.remove(0,versionNew.indexOf(QRegExp("\\d")));
1314
1315 // split versions by "."
1316 QStringList versionListOld = versionOld.split(".");
1317 QStringList versionListNew = versionNew.split(".");
1318
1319 QStringListIterator iteratorOld(versionListOld);
1320 QStringListIterator iteratorNew(versionListNew);
1321
1322 //check every section
1323 while(iteratorOld.hasNext() && iteratorNew.hasNext())
1324 {
1325 QString newPart = iteratorNew.next();
1326 QString oldPart = iteratorOld.next();
1327 QString newPartChar = "", oldPartChar = "";
1328 int newPartInt = 0, oldPartInt =0;
1329
1330 //convert to int, if it contains chars, put into seperated variable
1331 if(newPart.contains(chars))
1332 {
1333 newPartChar = chars.cap(1);
1334 newPart = newPart.remove(newPartChar);
1335 }
1336 newPartInt = newPart.toInt();
1337 //convert to int, if it contains chars, put into seperated variable
1338 if(oldPart.contains(chars))
1339 {
1340 oldPartChar = chars.cap(1);
1341 oldPart = oldPart.remove(oldPartChar);
1342 }
1343 oldPartInt = oldPart.toInt();
1344
1345 if(newPartInt > oldPartInt) // this section int is higher -> true
1346 return true;
1347 else if(newPartInt < oldPartInt) //this section int is lower -> false
1348 return false;
1349 else if(newPartChar > oldPartChar) //ints are the same, chars is higher -> true
1350 return true;
1351 else if(newPartChar < oldPartChar) //ints are the same, chars is lower -> false
1352 return false;
1353 //all the same, next section
1354 }
1355 // all the same -> false
1356 return false;
1357}
diff --git a/rbutil/rbutilqt/rbutilqt.h b/rbutil/rbutilqt/rbutilqt.h
index b5368c9ae3..31bae73630 100644
--- a/rbutil/rbutilqt/rbutilqt.h
+++ b/rbutil/rbutilqt/rbutilqt.h
@@ -47,6 +47,7 @@ class RbUtilQt : public QMainWindow
47 QString platform; 47 QString platform;
48 HttpGet *daily; 48 HttpGet *daily;
49 HttpGet *bleeding; 49 HttpGet *bleeding;
50 HttpGet *update;
50 QString absolutePath; 51 QString absolutePath;
51 QTemporaryFile buildInfo; 52 QTemporaryFile buildInfo;
52 QTemporaryFile bleedingInfo; 53 QTemporaryFile bleedingInfo;
@@ -110,6 +111,10 @@ class RbUtilQt : public QMainWindow
110 void installPortable(void); 111 void installPortable(void);
111 void updateInfo(void); 112 void updateInfo(void);
112 void updateTabs(int); 113 void updateTabs(int);
114
115 void checkUpdate(void);
116 void downloadUpdateDone(bool errror);
117 bool newerVersion(QString versionOld,QString versionNew);
113}; 118};
114 119
115#endif 120#endif