summaryrefslogtreecommitdiffstats
path: root/rbutil/rbutilqt
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 /rbutil/rbutilqt
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
Diffstat (limited to 'rbutil/rbutilqt')
-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 {
{ RbSettings::ServerConfUrl, "server_conf_url", "" },
{ RbSettings::GenlangUrl, "genlang_url", "" },
{ RbSettings::ThemesUrl, "themes_url", "" },
+ { RbSettings::RbutilUrl, "rbutil_url", "" },
{ RbSettings::BleedingInfo, "bleeding_info", "" },
{ RbSettings::CurPlatformName, ":platform:/name", "" },
{ 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
ServerConfUrl,
GenlangUrl,
ThemesUrl,
+ RbutilUrl,
BleedingInfo,
CurPlatformName,
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
doom_url=http://download.rockbox.org/useful/rockdoom.zip
voice_url=http://download.rockbox.org/daily/voices/
genlang_url=http://www.rockbox.org/genlang/
+rbutil_url=http://download.rockbox.org/rbutil/
[platforms]
platform01=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)
bleeding = new HttpGet(this);
connect(bleeding, SIGNAL(done(bool)), this, SLOT(downloadBleedingDone(bool)));
connect(bleeding, SIGNAL(requestFinished(int, bool)), this, SLOT(downloadDone(int, bool)));
- connect(qApp, SIGNAL(lastWindowClosed()), daily, SLOT(abort()));
+ connect(qApp, SIGNAL(lastWindowClosed()), bleeding, SLOT(abort()));
if(RbSettings::value(RbSettings::CacheOffline).toBool())
bleeding->setCache(true);
bleeding->setFile(&bleedingInfo);
@@ -251,6 +251,9 @@ void RbUtilQt::downloadBleedingDone(bool error)
qDebug() << "[RbUtil] version map:" << versmap;
m_gotInfo = true;
+
+ //start check for updates
+ checkUpdate();
}
}
@@ -1217,4 +1220,138 @@ bool RbUtilQt::chkConfig(bool warn)
return error;
}
+void RbUtilQt::checkUpdate(void)
+{
+ QString url = RbSettings::value(RbSettings::RbutilUrl).toString();
+#if defined(Q_OS_WIN32)
+ url += "win32/";
+#elif defined(Q_OS_LINUX)
+ url += "linux/";
+#elif defined(Q_OS_MACX)
+ url += "macosx/";
+#endif
+
+ update = new HttpGet(this);
+ connect(update, SIGNAL(done(bool)), this, SLOT(downloadUpdateDone(bool)));
+ connect(update, SIGNAL(requestFinished(int, bool)), this, SLOT(downloadDone(int, bool)));
+ connect(qApp, SIGNAL(lastWindowClosed()), update, SLOT(abort()));
+ if(RbSettings::value(RbSettings::CacheOffline).toBool())
+ update->setCache(true);
+
+ update->getFile(QUrl(url));
+}
+void RbUtilQt::downloadUpdateDone(bool error)
+{
+ if(error) {
+ qDebug() << "[RbUtil] network error:" << update->error();
+ }
+ else {
+ QString toParse(update->readAll());
+ qDebug() << "[Checkupdate] " << toParse;
+
+ QRegExp searchString("<a[^>]*>(rbutilqt[^<]*)</a>");
+ QStringList rbutilList;
+ int pos = 0;
+ while ((pos = searchString.indexIn(toParse, pos)) != -1)
+ {
+ rbutilList << searchString.cap(1);
+ pos += searchString.matchedLength();
+ }
+
+ QString newVersion ="";
+ //check if there is a binary with higher version in this list
+ for(int i=0; i < rbutilList.size(); i++)
+ {
+#if defined(Q_OS_LINUX)
+#if defined(__amd64__)
+ //skip if it isnt a 64bit build
+ if( !rbutilList.at(i).contains("64bit"))
+ continue;
+#else
+ //skip if it is a 64bit build
+ if(rbutilList.at(i).contains("64bit"))
+ continue;
+#endif
+#endif
+ //check if it is newer, and remember newest
+ if(newerVersion(VERSION,rbutilList.at(i)))
+ {
+ if(newVersion == "" || newerVersion(newVersion,rbutilList.at(i)))
+ {
+ newVersion = rbutilList.at(i);
+ }
+ }
+ }
+
+ // if we found something newer, display info
+ if(newVersion != "")
+ {
+ QString url = RbSettings::value(RbSettings::RbutilUrl).toString();
+#if defined(Q_OS_WIN32)
+ url += "win32/";
+#elif defined(Q_OS_LINUX)
+ url += "linux/";
+#elif defined(Q_OS_MACX)
+ url += "macosx/";
+#endif
+ url += newVersion;
+
+ QMessageBox::information(this,tr("RockboxUtility Update available"),
+ tr("<b>New RockboxUtility Version available.</b> <br><br>"
+ "Download it from here: <a href='%1'>%2</a>").arg(url).arg(newVersion) );
+ }
+ }
+}
+
+bool RbUtilQt::newerVersion(QString versionOld,QString versionNew)
+{
+ QRegExp chars("\\d*(\\D)");
+
+ //strip non-number from beginning
+ versionOld = versionOld.remove(0,versionOld.indexOf(QRegExp("\\d")));
+ versionNew = versionNew.remove(0,versionNew.indexOf(QRegExp("\\d")));
+
+ // split versions by "."
+ QStringList versionListOld = versionOld.split(".");
+ QStringList versionListNew = versionNew.split(".");
+
+ QStringListIterator iteratorOld(versionListOld);
+ QStringListIterator iteratorNew(versionListNew);
+
+ //check every section
+ while(iteratorOld.hasNext() && iteratorNew.hasNext())
+ {
+ QString newPart = iteratorNew.next();
+ QString oldPart = iteratorOld.next();
+ QString newPartChar = "", oldPartChar = "";
+ int newPartInt = 0, oldPartInt =0;
+
+ //convert to int, if it contains chars, put into seperated variable
+ if(newPart.contains(chars))
+ {
+ newPartChar = chars.cap(1);
+ newPart = newPart.remove(newPartChar);
+ }
+ newPartInt = newPart.toInt();
+ //convert to int, if it contains chars, put into seperated variable
+ if(oldPart.contains(chars))
+ {
+ oldPartChar = chars.cap(1);
+ oldPart = oldPart.remove(oldPartChar);
+ }
+ oldPartInt = oldPart.toInt();
+
+ if(newPartInt > oldPartInt) // this section int is higher -> true
+ return true;
+ else if(newPartInt < oldPartInt) //this section int is lower -> false
+ return false;
+ else if(newPartChar > oldPartChar) //ints are the same, chars is higher -> true
+ return true;
+ else if(newPartChar < oldPartChar) //ints are the same, chars is lower -> false
+ return false;
+ //all the same, next section
+ }
+ // all the same -> false
+ return false;
+}
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
QString platform;
HttpGet *daily;
HttpGet *bleeding;
+ HttpGet *update;
QString absolutePath;
QTemporaryFile buildInfo;
QTemporaryFile bleedingInfo;
@@ -110,6 +111,10 @@ class RbUtilQt : public QMainWindow
void installPortable(void);
void updateInfo(void);
void updateTabs(int);
+
+ void checkUpdate(void);
+ void downloadUpdateDone(bool errror);
+ bool newerVersion(QString versionOld,QString versionNew);
};
#endif