mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-10-14 02:27:39 -04:00
rbutil: check for new Versions at startup.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@22734 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
1b1bd7ef46
commit
293a4b62d7
5 changed files with 146 additions and 1 deletions
|
@ -44,6 +44,7 @@ const static struct {
|
||||||
{ RbSettings::ServerConfUrl, "server_conf_url", "" },
|
{ RbSettings::ServerConfUrl, "server_conf_url", "" },
|
||||||
{ RbSettings::GenlangUrl, "genlang_url", "" },
|
{ RbSettings::GenlangUrl, "genlang_url", "" },
|
||||||
{ RbSettings::ThemesUrl, "themes_url", "" },
|
{ RbSettings::ThemesUrl, "themes_url", "" },
|
||||||
|
{ RbSettings::RbutilUrl, "rbutil_url", "" },
|
||||||
{ RbSettings::BleedingInfo, "bleeding_info", "" },
|
{ RbSettings::BleedingInfo, "bleeding_info", "" },
|
||||||
{ RbSettings::CurPlatformName, ":platform:/name", "" },
|
{ RbSettings::CurPlatformName, ":platform:/name", "" },
|
||||||
{ RbSettings::CurManual, ":platform:/manualname","rockbox-:platform:" },
|
{ RbSettings::CurManual, ":platform:/manualname","rockbox-:platform:" },
|
||||||
|
|
|
@ -83,6 +83,7 @@ class RbSettings : public QObject
|
||||||
ServerConfUrl,
|
ServerConfUrl,
|
||||||
GenlangUrl,
|
GenlangUrl,
|
||||||
ThemesUrl,
|
ThemesUrl,
|
||||||
|
RbutilUrl,
|
||||||
BleedingInfo,
|
BleedingInfo,
|
||||||
CurPlatformName,
|
CurPlatformName,
|
||||||
CurManual,
|
CurManual,
|
||||||
|
|
|
@ -13,6 +13,7 @@ manual_url=http://download.rockbox.org/daily/manual
|
||||||
doom_url=http://download.rockbox.org/useful/rockdoom.zip
|
doom_url=http://download.rockbox.org/useful/rockdoom.zip
|
||||||
voice_url=http://download.rockbox.org/daily/voices/
|
voice_url=http://download.rockbox.org/daily/voices/
|
||||||
genlang_url=http://www.rockbox.org/genlang/
|
genlang_url=http://www.rockbox.org/genlang/
|
||||||
|
rbutil_url=http://download.rockbox.org/rbutil/
|
||||||
|
|
||||||
[platforms]
|
[platforms]
|
||||||
platform01=player
|
platform01=player
|
||||||
|
|
|
@ -212,7 +212,7 @@ void RbUtilQt::downloadDone(bool error)
|
||||||
bleeding = new HttpGet(this);
|
bleeding = new HttpGet(this);
|
||||||
connect(bleeding, SIGNAL(done(bool)), this, SLOT(downloadBleedingDone(bool)));
|
connect(bleeding, SIGNAL(done(bool)), this, SLOT(downloadBleedingDone(bool)));
|
||||||
connect(bleeding, SIGNAL(requestFinished(int, bool)), this, SLOT(downloadDone(int, 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())
|
if(RbSettings::value(RbSettings::CacheOffline).toBool())
|
||||||
bleeding->setCache(true);
|
bleeding->setCache(true);
|
||||||
bleeding->setFile(&bleedingInfo);
|
bleeding->setFile(&bleedingInfo);
|
||||||
|
@ -251,6 +251,9 @@ void RbUtilQt::downloadBleedingDone(bool error)
|
||||||
qDebug() << "[RbUtil] version map:" << versmap;
|
qDebug() << "[RbUtil] version map:" << versmap;
|
||||||
|
|
||||||
m_gotInfo = true;
|
m_gotInfo = true;
|
||||||
|
|
||||||
|
//start check for updates
|
||||||
|
checkUpdate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1217,4 +1220,138 @@ bool RbUtilQt::chkConfig(bool warn)
|
||||||
return error;
|
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;
|
||||||
|
}
|
||||||
|
|
|
@ -47,6 +47,7 @@ class RbUtilQt : public QMainWindow
|
||||||
QString platform;
|
QString platform;
|
||||||
HttpGet *daily;
|
HttpGet *daily;
|
||||||
HttpGet *bleeding;
|
HttpGet *bleeding;
|
||||||
|
HttpGet *update;
|
||||||
QString absolutePath;
|
QString absolutePath;
|
||||||
QTemporaryFile buildInfo;
|
QTemporaryFile buildInfo;
|
||||||
QTemporaryFile bleedingInfo;
|
QTemporaryFile bleedingInfo;
|
||||||
|
@ -110,6 +111,10 @@ class RbUtilQt : public QMainWindow
|
||||||
void installPortable(void);
|
void installPortable(void);
|
||||||
void updateInfo(void);
|
void updateInfo(void);
|
||||||
void updateTabs(int);
|
void updateTabs(int);
|
||||||
|
|
||||||
|
void checkUpdate(void);
|
||||||
|
void downloadUpdateDone(bool errror);
|
||||||
|
bool newerVersion(QString versionOld,QString versionNew);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue