diff options
author | Dominik Riebeling <Dominik.Riebeling@gmail.com> | 2010-06-11 19:18:13 +0000 |
---|---|---|
committer | Dominik Riebeling <Dominik.Riebeling@gmail.com> | 2010-06-11 19:18:13 +0000 |
commit | 13d8649a3445717b8527dfb2ef3c301bdc2e0188 (patch) | |
tree | 30b44b00a24ccb5c5d4f609d51864540c99ef9c9 /rbutil/rbutilqt/base | |
parent | db54033a15dc3235693431463ae868f3b239d868 (diff) | |
download | rockbox-13d8649a3445717b8527dfb2ef3c301bdc2e0188.tar.gz rockbox-13d8649a3445717b8527dfb2ef3c301bdc2e0188.zip |
Rework Rockbox Utility update version number check.
The version check failed on subrelease versions (as the 1.2.5-1 rebuild done
for Mac) and detected an updated version that is in fact an outdated one.
Rework the comparison completely, move it to the Utils class and display some
more information in the status bar upon update check. Especially keep a notice
in the status bar if an updated version was found.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@26788 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'rbutil/rbutilqt/base')
-rw-r--r-- | rbutil/rbutilqt/base/utils.cpp | 67 | ||||
-rw-r--r-- | rbutil/rbutilqt/base/utils.h | 1 |
2 files changed, 68 insertions, 0 deletions
diff --git a/rbutil/rbutilqt/base/utils.cpp b/rbutil/rbutilqt/base/utils.cpp index 767b3c1c52..ce8cb1c5a9 100644 --- a/rbutil/rbutilqt/base/utils.cpp +++ b/rbutil/rbutilqt/base/utils.cpp | |||
@@ -203,4 +203,71 @@ QString Utils::checkEnvironment(bool permission) | |||
203 | else | 203 | else |
204 | return text; | 204 | return text; |
205 | } | 205 | } |
206 | /** @brief Compare two version strings. | ||
207 | * @param s1 first version string | ||
208 | * @param s2 second version string | ||
209 | * @return 0 if strings identical, 1 if second is newer, -1 if first. | ||
210 | */ | ||
211 | int Utils::compareVersionStrings(QString s1, QString s2) | ||
212 | { | ||
213 | QString a = s1.trimmed(); | ||
214 | QString b = s2.trimmed(); | ||
215 | qDebug() << "[Utils] comparing version strings" << a << "and" << b; | ||
216 | // if strings are identical return 0. | ||
217 | if(a.isEmpty()) | ||
218 | return 1; | ||
219 | if(b.isEmpty()) | ||
220 | return -1; | ||
221 | |||
222 | while(!a.isEmpty() || !b.isEmpty()) { | ||
223 | // trim all leading non-digits and non-dots (dots are removed afterwards) | ||
224 | a.remove(QRegExp("^[^\\d\\.]*")); | ||
225 | b.remove(QRegExp("^[^\\d\\.]*")); | ||
226 | |||
227 | // trim all trailing non-digits for conversion (QString::toInt() | ||
228 | // requires this). Copy strings first as replace() changes the string. | ||
229 | QString numa = a; | ||
230 | QString numb = b; | ||
231 | numa.remove(QRegExp("\\D+.*$")); | ||
232 | numb.remove(QRegExp("\\D+.*$")); | ||
233 | |||
234 | // convert to number | ||
235 | bool ok1, ok2; | ||
236 | int vala = numa.toUInt(&ok1); | ||
237 | int valb = numb.toUInt(&ok2); | ||
238 | // if none of the numbers converted successfully we're at trailing garbage. | ||
239 | if(!ok1 && !ok2) | ||
240 | break; | ||
241 | if(!ok1) | ||
242 | return 1; | ||
243 | if(!ok2) | ||
244 | return -1; | ||
245 | |||
246 | // if numbers mismatch we have a decision. | ||
247 | if(vala != valb) | ||
248 | return (vala > valb) ? -1 : 1; | ||
249 | |||
250 | // trim leading digits. | ||
251 | a.remove(QRegExp("^\\d*")); | ||
252 | b.remove(QRegExp("^\\d*")); | ||
253 | |||
254 | // if number is immediately followed by a character consider it as | ||
255 | // version addon (like 1.2.3b). In this case compare characters too. | ||
256 | QChar ltra; | ||
257 | QChar ltrb; | ||
258 | if(a.contains(QRegExp("^[a-zA-Z]"))) | ||
259 | ltra = a.at(0); | ||
260 | if(b.contains(QRegExp("^[a-zA-Z]"))) | ||
261 | ltrb = b.at(0); | ||
262 | if(ltra != ltrb) | ||
263 | return (ltra < ltrb) ? 1 : -1; | ||
264 | // both are identical or no addon characters, ignore. | ||
265 | // remove modifiers and following dot. | ||
266 | a.remove(QRegExp("^[a-zA-Z]*\\.")); | ||
267 | b.remove(QRegExp("^[a-zA-Z]*\\.")); | ||
268 | } | ||
269 | |||
270 | // no differences found. | ||
271 | return 0; | ||
272 | } | ||
206 | 273 | ||
diff --git a/rbutil/rbutilqt/base/utils.h b/rbutil/rbutilqt/base/utils.h index cdc3d3be5b..266044d567 100644 --- a/rbutil/rbutilqt/base/utils.h +++ b/rbutil/rbutilqt/base/utils.h | |||
@@ -34,6 +34,7 @@ public: | |||
34 | static qulonglong filesystemFree(QString path); | 34 | static qulonglong filesystemFree(QString path); |
35 | static QString findExecutable(QString name); | 35 | static QString findExecutable(QString name); |
36 | static QString checkEnvironment(bool permission); | 36 | static QString checkEnvironment(bool permission); |
37 | static int compareVersionStrings(QString s1, QString s2); | ||
37 | }; | 38 | }; |
38 | 39 | ||
39 | #endif | 40 | #endif |