summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDominik Riebeling <Dominik.Riebeling@gmail.com>2007-08-26 16:03:56 +0000
committerDominik Riebeling <Dominik.Riebeling@gmail.com>2007-08-26 16:03:56 +0000
commit848abc803760298b2f97d1ffb135418f16a8166a (patch)
treec977f4ff3ce5bc6773d2af4b9c19b67bd505c28b
parent663029ddfb18c2b8d0a202729459082e9191ec84 (diff)
downloadrockbox-848abc803760298b2f97d1ffb135418f16a8166a.tar.gz
rockbox-848abc803760298b2f97d1ffb135418f16a8166a.zip
Add info window which shows details about the currently installed files based on the installation log file. Rework the log file and save revision number / timestamps instead of an arbitrary number.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@14461 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--rbutil/rbutilqt/install.cpp76
-rw-r--r--rbutil/rbutilqt/install.h6
-rw-r--r--rbutil/rbutilqt/installthemes.cpp14
-rw-r--r--rbutil/rbutilqt/installzip.cpp5
-rw-r--r--rbutil/rbutilqt/installzip.h6
-rw-r--r--rbutil/rbutilqt/rbutilqt.cpp142
-rw-r--r--rbutil/rbutilqt/rbutilqt.h6
-rw-r--r--rbutil/rbutilqt/rbutilqtfrm.ui34
8 files changed, 228 insertions, 61 deletions
diff --git a/rbutil/rbutilqt/install.cpp b/rbutil/rbutilqt/install.cpp
index a537cb2cbe..93e9413d71 100644
--- a/rbutil/rbutilqt/install.cpp
+++ b/rbutil/rbutilqt/install.cpp
@@ -37,29 +37,6 @@ void Install::setCached(bool cache)
37} 37}
38 38
39 39
40void Install::setReleased(QString rel)
41{
42 releasever = rel;
43 if(!rel.isEmpty()) {
44 ui.radioStable->setChecked(true);
45 ui.radioStable->setEnabled(true);
46 QFont font;
47 font.setBold(true);
48 ui.radioStable->setFont(font);
49 }
50 else {
51 ui.radioCurrent->setChecked(true);
52 ui.radioStable->setEnabled(false);
53 ui.radioStable->setChecked(false);
54 QFont font;
55 font.setBold(true);
56 ui.radioCurrent->setFont(font);
57 }
58 qDebug() << "Install::setReleased" << releasever;
59
60}
61
62
63void Install::setProxy(QUrl proxy_url) 40void Install::setProxy(QUrl proxy_url)
64{ 41{
65 proxy = proxy_url; 42 proxy = proxy_url;
@@ -80,6 +57,7 @@ void Install::accept()
80 return; 57 return;
81 } 58 }
82 59
60 QString myversion;
83 if(ui.radioStable->isChecked()) { 61 if(ui.radioStable->isChecked()) {
84 file = QString("%1/rockbox-%2-%3.zip") 62 file = QString("%1/rockbox-%2-%3.zip")
85 .arg(devices->value("download_url").toString(), 63 .arg(devices->value("download_url").toString(),
@@ -89,17 +67,19 @@ void Install::accept()
89 .arg(devices->value("last_release").toString(), 67 .arg(devices->value("last_release").toString(),
90 userSettings->value("defaults/platform").toString()); 68 userSettings->value("defaults/platform").toString());
91 userSettings->setValue("defaults/build", "stable"); 69 userSettings->setValue("defaults/build", "stable");
70 myversion = version.value("rel_rev");
92 } 71 }
93 else if(ui.radioArchived->isChecked()) { 72 else if(ui.radioArchived->isChecked()) {
94 file = QString("%1%2/rockbox-%3-%4.zip") 73 file = QString("%1%2/rockbox-%3-%4.zip")
95 .arg(devices->value("daily_url").toString(), 74 .arg(devices->value("daily_url").toString(),
96 userSettings->value("defaults/platform").toString(), 75 userSettings->value("defaults/platform").toString(),
97 userSettings->value("defaults/platform").toString(), 76 userSettings->value("defaults/platform").toString(),
98 archived); 77 version.value("arch_date"));
99 fileName = QString("rockbox-%1-%2.zip") 78 fileName = QString("rockbox-%1-%2.zip")
100 .arg(userSettings->value("defaults/platform").toString(), 79 .arg(userSettings->value("defaults/platform").toString(),
101 archived); 80 version.value("arch_date"));
102 userSettings->setValue("defaults/build", "archived"); 81 userSettings->setValue("defaults/build", "archived");
82 myversion = "r" + version.value("arch_rev") + "-" + version.value("arch_date");
103 } 83 }
104 else if(ui.radioCurrent->isChecked()) { 84 else if(ui.radioCurrent->isChecked()) {
105 file = QString("%1%2/rockbox.zip") 85 file = QString("%1%2/rockbox.zip")
@@ -107,6 +87,7 @@ void Install::accept()
107 userSettings->value("defaults/platform").toString()); 87 userSettings->value("defaults/platform").toString());
108 fileName = QString("rockbox.zip"); 88 fileName = QString("rockbox.zip");
109 userSettings->setValue("defaults/build", "current"); 89 userSettings->setValue("defaults/build", "current");
90 myversion = "r" + version.value("bleed_rev");
110 } 91 }
111 else { 92 else {
112 qDebug() << "no build selected -- this shouldn't happen"; 93 qDebug() << "no build selected -- this shouldn't happen";
@@ -118,6 +99,7 @@ void Install::accept()
118 installer->setUrl(file); 99 installer->setUrl(file);
119 installer->setProxy(proxy); 100 installer->setProxy(proxy);
120 installer->setLogSection("rockboxbase"); 101 installer->setLogSection("rockboxbase");
102 installer->setLogVersion(myversion);
121 installer->setMountPoint(mountPoint); 103 installer->setMountPoint(mountPoint);
122 installer->install(logger); 104 installer->install(logger);
123 105
@@ -147,8 +129,9 @@ void Install::setDetailsCurrent(bool show)
147 if(show) { 129 if(show) {
148 ui.labelDetails->setText(tr("This is the absolute up to the minute " 130 ui.labelDetails->setText(tr("This is the absolute up to the minute "
149 "Rockbox built. A current build will get updated every time " 131 "Rockbox built. A current build will get updated every time "
150 "a change is made.")); 132 "a change is made. Latest version is r%1 (%2).")
151 if(releasever == "") 133 .arg(version.value("bleed_rev"), version.value("bleed_date")));
134 if(version.value("rel_rev").isEmpty())
152 ui.labelNote->setText(tr("<b>Note:</b> This option will always " 135 ui.labelNote->setText(tr("<b>Note:</b> This option will always "
153 "download a fresh copy. " 136 "download a fresh copy. "
154 "<b>This is the recommended version.</b>")); 137 "<b>This is the recommended version.</b>"));
@@ -165,9 +148,11 @@ void Install::setDetailsStable(bool show)
165 ui.labelDetails->setText( 148 ui.labelDetails->setText(
166 tr("This is the last released version of Rockbox.")); 149 tr("This is the last released version of Rockbox."));
167 150
168 if(releasever != "") ui.labelNote->setText(tr("<b>Note:</b>" 151 if(!version.value("rel_rev").isEmpty())
152 ui.labelNote->setText(tr("<b>Note:</b>"
169 "The lastest released version is %1. " 153 "The lastest released version is %1. "
170 "<b>This is the recommended version.</b>").arg(releasever)); 154 "<b>This is the recommended version.</b>")
155 .arg(version.value("rel_rev")));
171 else ui.labelNote->setText(""); 156 else ui.labelNote->setText("");
172 } 157 }
173} 158}
@@ -180,8 +165,8 @@ void Install::setDetailsArchived(bool show)
180 "from the current development source code. This generally has more " 165 "from the current development source code. This generally has more "
181 "features than the last release but may be much less stable. " 166 "features than the last release but may be much less stable. "
182 "Features may change regularly.")); 167 "Features may change regularly."));
183 ui.labelNote->setText(tr("<b>Note:</b> archived version is %1.") 168 ui.labelNote->setText(tr("<b>Note:</b> archived version is r%1 (%2).")
184 .arg(archived)); 169 .arg(version.value("arch_rev"), version.value("arch_date")));
185 } 170 }
186} 171}
187 172
@@ -193,14 +178,35 @@ void Install::setDeviceSettings(QSettings *dev)
193} 178}
194 179
195 180
196void Install::setArchivedString(QString string) 181void Install::setVersionStrings(QMap<QString, QString> ver)
197{ 182{
198 archived = string; 183 version = ver;
199 if(archived.isEmpty()) { 184 // version strings map is as following:
185 // rel_rev release version revision id
186 // rel_date release version release date
187 // same for arch_* and bleed_*
188
189 if(version.value("arch_rev").isEmpty()) {
200 ui.radioArchived->setEnabled(false); 190 ui.radioArchived->setEnabled(false);
201 qDebug() << "no information about archived version available!"; 191 qDebug() << "no information about archived version available!";
202 } 192 }
203 qDebug() << "Install::setArchivedString" << archived; 193
194 if(!version.value("rel_rev").isEmpty()) {
195 ui.radioStable->setChecked(true);
196 ui.radioStable->setEnabled(true);
197 QFont font;
198 font.setBold(true);
199 ui.radioStable->setFont(font);
200 }
201 else {
202 ui.radioCurrent->setChecked(true);
203 ui.radioStable->setEnabled(false);
204 ui.radioStable->setChecked(false);
205 QFont font;
206 font.setBold(true);
207 ui.radioCurrent->setFont(font);
208 }
209 qDebug() << "Install::setVersionStrings" << version;
204} 210}
205 211
206void Install::setUserSettings(QSettings *user) 212void Install::setUserSettings(QSettings *user)
diff --git a/rbutil/rbutilqt/install.h b/rbutil/rbutilqt/install.h
index ec60601e70..17c4ba1086 100644
--- a/rbutil/rbutilqt/install.h
+++ b/rbutil/rbutilqt/install.h
@@ -34,10 +34,9 @@ class Install : public QDialog
34 public: 34 public:
35 Install(QWidget *parent = 0); 35 Install(QWidget *parent = 0);
36 void setProxy(QUrl); 36 void setProxy(QUrl);
37 void setReleased(QString);
38 void setUserSettings(QSettings*); 37 void setUserSettings(QSettings*);
39 void setDeviceSettings(QSettings*); 38 void setDeviceSettings(QSettings*);
40 void setArchivedString(QString); 39 void setVersionStrings(QMap<QString, QString>);
41 40
42 public slots: 41 public slots:
43 void accept(void); 42 void accept(void);
@@ -46,15 +45,14 @@ class Install : public QDialog
46 Ui::InstallFrm ui; 45 Ui::InstallFrm ui;
47 ProgressLoggerGui* logger; 46 ProgressLoggerGui* logger;
48 QUrl proxy; 47 QUrl proxy;
49 QString releasever;
50 QSettings *devices; 48 QSettings *devices;
51 QSettings *userSettings; 49 QSettings *userSettings;
52 QHttp *download; 50 QHttp *download;
53 QFile *target; 51 QFile *target;
54 QString file; 52 QString file;
55 QString fileName; 53 QString fileName;
56 QString archived;
57 ZipInstaller* installer; 54 ZipInstaller* installer;
55 QMap<QString, QString> version;
58 56
59 private slots: 57 private slots:
60 void setCached(bool); 58 void setCached(bool);
diff --git a/rbutil/rbutilqt/installthemes.cpp b/rbutil/rbutilqt/installthemes.cpp
index d083231ba4..70a6ed6ec5 100644
--- a/rbutil/rbutilqt/installthemes.cpp
+++ b/rbutil/rbutilqt/installthemes.cpp
@@ -175,7 +175,8 @@ void ThemesInstallWindow::updateDetails(int row)
175 QString text; 175 QString text;
176 text = tr("<b>Author:</b> %1<hr/>").arg(iniDetails.value("author", tr("unknown")).toString()); 176 text = tr("<b>Author:</b> %1<hr/>").arg(iniDetails.value("author", tr("unknown")).toString());
177 text += tr("<b>Version:</b> %1<hr/>").arg(iniDetails.value("version", tr("unknown")).toString()); 177 text += tr("<b>Version:</b> %1<hr/>").arg(iniDetails.value("version", tr("unknown")).toString());
178 text += tr("<b>Description:</b> %1<br/>").arg(iniDetails.value("about", tr("no description")).toString()); 178 text += tr("<b>Description:</b> %1<hr/>").arg(iniDetails.value("about", tr("no description")).toString());
179
179 ui.themeDescription->setHtml(text); 180 ui.themeDescription->setHtml(text);
180 iniDetails.endGroup(); 181 iniDetails.endGroup();
181 182
@@ -259,13 +260,19 @@ void ThemesInstallWindow::accept()
259 } 260 }
260 QStringList themes; 261 QStringList themes;
261 QStringList names; 262 QStringList names;
263 QStringList version;
262 QString zip; 264 QString zip;
263 QSettings iniDetails(themesInfo.fileName(), QSettings::IniFormat, this); 265 QSettings iniDetails(themesInfo.fileName(), QSettings::IniFormat, this);
264 for(int i = 0; i < ui.listThemes->selectedItems().size(); i++) { 266 for(int i = 0; i < ui.listThemes->selectedItems().size(); i++) {
265 iniDetails.beginGroup(ui.listThemes->selectedItems().at(i)->data(Qt::UserRole).toString()); 267 iniDetails.beginGroup(ui.listThemes->selectedItems().at(i)->data(Qt::UserRole).toString());
266 zip = devices->value("themes_url").toString() + "/" + iniDetails.value("archive").toString(); 268 zip = devices->value("themes_url").toString()
269 + "/" + iniDetails.value("archive").toString();
267 themes.append(zip); 270 themes.append(zip);
268 names.append("Theme: " + ui.listThemes->selectedItems().at(i)->data(Qt::DisplayRole).toString()); 271 names.append("Theme: " +
272 ui.listThemes->selectedItems().at(i)->data(Qt::DisplayRole).toString());
273 // if no version info is available use installation (current) date
274 version.append(iniDetails.value("version",
275 QDate().currentDate().toString("yyyyMMdd")).toString());
269 iniDetails.endGroup(); 276 iniDetails.endGroup();
270 } 277 }
271 qDebug() << "installing themes:" << themes; 278 qDebug() << "installing themes:" << themes;
@@ -285,6 +292,7 @@ void ThemesInstallWindow::accept()
285 installer->setUrl(themes); 292 installer->setUrl(themes);
286 installer->setProxy(proxy); 293 installer->setProxy(proxy);
287 installer->setLogSection(names); 294 installer->setLogSection(names);
295 installer->setLogVersion(version);
288 installer->setMountPoint(mountPoint); 296 installer->setMountPoint(mountPoint);
289 installer->install(logger); 297 installer->install(logger);
290 connect(logger, SIGNAL(closed()), this, SLOT(close())); 298 connect(logger, SIGNAL(closed()), this, SLOT(close()));
diff --git a/rbutil/rbutilqt/installzip.cpp b/rbutil/rbutilqt/installzip.cpp
index fe16333a06..c5e91d8e36 100644
--- a/rbutil/rbutilqt/installzip.cpp
+++ b/rbutil/rbutilqt/installzip.cpp
@@ -36,6 +36,7 @@ void ZipInstaller::install(ProgressloggerInterface *dp)
36 connect(this, SIGNAL(cont()), this, SLOT(installContinue())); 36 connect(this, SIGNAL(cont()), this, SLOT(installContinue()));
37 m_url = m_urllist.at(runner); 37 m_url = m_urllist.at(runner);
38 m_logsection = m_loglist.at(runner); 38 m_logsection = m_loglist.at(runner);
39 m_logver = m_verlist.at(runner);
39 installStart(); 40 installStart();
40 41
41} 42}
@@ -52,6 +53,8 @@ void ZipInstaller::installContinue()
52 m_dp->addItem(tr("done."), LOGOK); 53 m_dp->addItem(tr("done."), LOGOK);
53 m_url = m_urllist.at(runner); 54 m_url = m_urllist.at(runner);
54 m_logsection = m_loglist.at(runner); 55 m_logsection = m_loglist.at(runner);
56 if(runner < m_verlist.size()) m_logver = m_verlist.at(runner);
57 else m_logver = "0";
55 installStart(); 58 installStart();
56 } 59 }
57 else { 60 else {
@@ -186,7 +189,7 @@ void ZipInstaller::downloadDone(bool error)
186 installlog.beginGroup(m_logsection); 189 installlog.beginGroup(m_logsection);
187 for(int i = 0; i < zipContents.size(); i++) 190 for(int i = 0; i < zipContents.size(); i++)
188 { 191 {
189 installlog.setValue(zipContents.at(i),installlog.value(zipContents.at(i),0).toInt()+1); 192 installlog.setValue(zipContents.at(i), m_logver);
190 } 193 }
191 installlog.endGroup(); 194 installlog.endGroup();
192 195
diff --git a/rbutil/rbutilqt/installzip.h b/rbutil/rbutilqt/installzip.h
index 7620865b31..376bc470e1 100644
--- a/rbutil/rbutilqt/installzip.h
+++ b/rbutil/rbutilqt/installzip.h
@@ -42,6 +42,8 @@ public:
42 void setProxy(QUrl proxy) {m_proxy= proxy;} 42 void setProxy(QUrl proxy) {m_proxy= proxy;}
43 void setLogSection(QString name) {m_loglist = QStringList(name);} 43 void setLogSection(QString name) {m_loglist = QStringList(name);}
44 void setLogSection(QStringList name) { m_loglist = name; } 44 void setLogSection(QStringList name) { m_loglist = name; }
45 void setLogVersion(QString v) { m_verlist = QStringList(v); qDebug() << m_verlist;}
46 void setLogVersion(QStringList v) { m_verlist = v; qDebug() << m_verlist;}
45 void setUnzip(bool i) { m_unzip = i; } 47 void setUnzip(bool i) { m_unzip = i; }
46 void setTarget(QString t) { m_target = t; } 48 void setTarget(QString t) { m_target = t; }
47 49
@@ -58,8 +60,8 @@ private slots:
58 60
59private: 61private:
60 void installSingle(ProgressloggerInterface *dp); 62 void installSingle(ProgressloggerInterface *dp);
61 QString m_url, m_file, m_mountpoint, m_logsection; 63 QString m_url, m_file, m_mountpoint, m_logsection, m_logver;
62 QStringList m_urllist, m_loglist; 64 QStringList m_urllist, m_loglist, m_verlist;
63 QUrl m_proxy; 65 QUrl m_proxy;
64 bool m_unzip; 66 bool m_unzip;
65 QString m_target; 67 QString m_target;
diff --git a/rbutil/rbutilqt/rbutilqt.cpp b/rbutil/rbutilqt/rbutilqt.cpp
index a0dc521a69..3d700b7e81 100644
--- a/rbutil/rbutilqt/rbutilqt.cpp
+++ b/rbutil/rbutilqt/rbutilqt.cpp
@@ -72,6 +72,13 @@ RbUtilQt::RbUtilQt(QWidget *parent) : QMainWindow(parent)
72 updateDevice(); 72 updateDevice();
73 ui.radioPdf->setChecked(true); 73 ui.radioPdf->setChecked(true);
74 74
75 // info tab
76 ui.treeInfo->setAlternatingRowColors(true);
77 ui.treeInfo->setHeaderLabels(QStringList() << tr("File") << tr("Version"));
78 ui.treeInfo->expandAll();
79 ui.treeInfo->setColumnCount(2);
80
81 connect(ui.tabWidget, SIGNAL(currentChanged(int)), this, SLOT(updateTabs(int)));
75 connect(ui.actionAbout_Qt, SIGNAL(triggered()), qApp, SLOT(aboutQt())); 82 connect(ui.actionAbout_Qt, SIGNAL(triggered()), qApp, SLOT(aboutQt()));
76 connect(ui.action_About, SIGNAL(triggered()), this, SLOT(about())); 83 connect(ui.action_About, SIGNAL(triggered()), this, SLOT(about()));
77 connect(ui.action_Configure, SIGNAL(triggered()), this, SLOT(configDialog())); 84 connect(ui.action_Configure, SIGNAL(triggered()), this, SLOT(configDialog()));
@@ -86,6 +93,7 @@ RbUtilQt::RbUtilQt(QWidget *parent) : QMainWindow(parent)
86 connect(ui.buttonRemoveRockbox, SIGNAL(clicked()), this, SLOT(uninstall())); 93 connect(ui.buttonRemoveRockbox, SIGNAL(clicked()), this, SLOT(uninstall()));
87 connect(ui.buttonRemoveBootloader, SIGNAL(clicked()), this, SLOT(uninstallBootloader())); 94 connect(ui.buttonRemoveBootloader, SIGNAL(clicked()), this, SLOT(uninstallBootloader()));
88 connect(ui.buttonDownloadManual, SIGNAL(clicked()), this, SLOT(downloadManual())); 95 connect(ui.buttonDownloadManual, SIGNAL(clicked()), this, SLOT(downloadManual()));
96
89 // disable unimplemented stuff 97 // disable unimplemented stuff
90 ui.buttonSmall->setEnabled(false); 98 ui.buttonSmall->setEnabled(false);
91 ui.buttonComplete->setEnabled(false); 99 ui.buttonComplete->setEnabled(false);
@@ -102,6 +110,16 @@ RbUtilQt::RbUtilQt(QWidget *parent) : QMainWindow(parent)
102} 110}
103 111
104 112
113void RbUtilQt::updateTabs(int count)
114{
115 switch(count) {
116 case 6:
117 updateInfo();
118 break;
119 default:
120 break;
121 }
122}
105 123
106 124
107void RbUtilQt::downloadInfo() 125void RbUtilQt::downloadInfo()
@@ -115,14 +133,44 @@ void RbUtilQt::downloadInfo()
115 qDebug() << "downloading build info"; 133 qDebug() << "downloading build info";
116 daily->setFile(&buildInfo); 134 daily->setFile(&buildInfo);
117 daily->getFile(QUrl(devices->value("server_conf_url").toString())); 135 daily->getFile(QUrl(devices->value("server_conf_url").toString()));
136
118} 137}
119 138
120 139
121void RbUtilQt::downloadDone(bool error) 140void RbUtilQt::downloadDone(bool error)
122{ 141{
123 if(error) qDebug() << "network error:" << daily->error(); 142 if(error) {
143 qDebug() << "network error:" << daily->error();
144 return;
145 }
124 qDebug() << "network status:" << daily->error(); 146 qDebug() << "network status:" << daily->error();
147
148 buildInfo.open();
149 QSettings info(buildInfo.fileName(), QSettings::IniFormat, this);
150 buildInfo.close();
151 versmap.insert("arch_rev", info.value("dailies/rev").toString());
152 versmap.insert("arch_date", info.value("dailies/date").toString());
153
154 bleeding = new HttpGet(this);
155 connect(bleeding, SIGNAL(done(bool)), this, SLOT(downloadBleedingDone(bool)));
156 connect(bleeding, SIGNAL(requestFinished(int, bool)), this, SLOT(downloadDone(int, bool)));
157 bleeding->setProxy(proxy());
125 158
159 bleeding->setFile(&bleedingInfo);
160 bleeding->getFile(QUrl(devices->value("bleeding_info").toString()));
161}
162
163
164void RbUtilQt::downloadBleedingDone(bool error)
165{
166 if(error) qDebug() << "network error:" << bleeding->error();
167
168 bleedingInfo.open();
169 QSettings info(bleedingInfo.fileName(), QSettings::IniFormat, this);
170 bleedingInfo.close();
171 versmap.insert("bleed_rev", info.value("bleeding/rev").toString());
172 versmap.insert("bleed_date", info.value("bleeding/timestamp").toString());
173 qDebug() << "versmap =" << versmap;
126} 174}
127 175
128 176
@@ -131,7 +179,9 @@ void RbUtilQt::downloadDone(int id, bool error)
131 QString errorString; 179 QString errorString;
132 errorString = tr("Network error: %1. Please check your network and proxy settings.") 180 errorString = tr("Network error: %1. Please check your network and proxy settings.")
133 .arg(daily->errorString()); 181 .arg(daily->errorString());
134 if(error) QMessageBox::about(this, "Network Error", errorString); 182 if(error) {
183 QMessageBox::about(this, "Network Error", errorString);
184 }
135 qDebug() << "downloadDone:" << id << error; 185 qDebug() << "downloadDone:" << id << error;
136} 186}
137 187
@@ -260,15 +310,17 @@ void RbUtilQt::install()
260 buildInfo.open(); 310 buildInfo.open();
261 QSettings info(buildInfo.fileName(), QSettings::IniFormat, this); 311 QSettings info(buildInfo.fileName(), QSettings::IniFormat, this);
262 buildInfo.close(); 312 buildInfo.close();
263 installWindow->setArchivedString(info.value("dailies/date").toString());
264 313
265 devices->beginGroup(platform); 314 devices->beginGroup(platform);
266 QString released = devices->value("released").toString(); 315 QString released = devices->value("released").toString();
267 devices->endGroup(); 316 devices->endGroup();
268 if(released == "yes") 317 if(released == "yes") {
269 installWindow->setReleased(devices->value("last_release", "").toString()); 318 // only set the keys if needed -- querying will yield an empty string
270 else 319 // if not set.
271 installWindow->setReleased(0); 320 versmap.insert("rel_rev", devices->value("last_release").toString());
321 versmap.insert("rel_date", ""); // FIXME: provide the release timestamp
322 }
323 installWindow->setVersionStrings(versmap);
272 324
273 installWindow->show(); 325 installWindow->show();
274} 326}
@@ -349,6 +401,7 @@ void RbUtilQt::installFonts()
349 installer->setUrl(devices->value("font_url").toString()); 401 installer->setUrl(devices->value("font_url").toString());
350 installer->setProxy(proxy()); 402 installer->setProxy(proxy());
351 installer->setLogSection("Fonts"); 403 installer->setLogSection("Fonts");
404 installer->setLogVersion(versmap.value("arch_date"));
352 installer->setMountPoint(userSettings->value("defaults/mountpoint").toString()); 405 installer->setMountPoint(userSettings->value("defaults/mountpoint").toString());
353 installer->install(logger); 406 installer->install(logger);
354 407
@@ -368,19 +421,16 @@ void RbUtilQt::installVoice()
368 // create zip installer 421 // create zip installer
369 installer = new ZipInstaller(this); 422 installer = new ZipInstaller(this);
370 installer->setUnzip(false); 423 installer->setUnzip(false);
371buildInfo.open(); 424
372 QSettings info(buildInfo.fileName(), QSettings::IniFormat, this);
373 buildInfo.close();
374 QString datestring = info.value("dailies/date").toString();
375
376 QString voiceurl = devices->value("voice_url").toString() + "/" + 425 QString voiceurl = devices->value("voice_url").toString() + "/" +
377 userSettings->value("defaults/platform").toString() + "-" + 426 userSettings->value("defaults/platform").toString() + "-" +
378 datestring + "-english.voice"; 427 versmap.value("arch_date") + "-english.voice";
379 qDebug() << voiceurl; 428 qDebug() << voiceurl;
380 429
381 installer->setProxy(proxy()); 430 installer->setProxy(proxy());
382 installer->setUrl(voiceurl); 431 installer->setUrl(voiceurl);
383 installer->setLogSection("Voice"); 432 installer->setLogSection("Voice");
433 installer->setLogVersion(versmap.value("arch_date"));
384 installer->setMountPoint(userSettings->value("defaults/mountpoint").toString()); 434 installer->setMountPoint(userSettings->value("defaults/mountpoint").toString());
385 installer->setTarget("/.rockbox/langs/english.voice"); 435 installer->setTarget("/.rockbox/langs/english.voice");
386 installer->install(logger); 436 installer->install(logger);
@@ -403,7 +453,8 @@ void RbUtilQt::installDoom()
403 453
404 installer->setUrl(devices->value("doom_url").toString()); 454 installer->setUrl(devices->value("doom_url").toString());
405 installer->setProxy(proxy()); 455 installer->setProxy(proxy());
406 installer->setLogSection("GameAddons"); 456 installer->setLogSection("Game Addons");
457 installer->setLogVersion(versmap.value("arch_date"));
407 installer->setMountPoint(userSettings->value("defaults/mountpoint").toString()); 458 installer->setMountPoint(userSettings->value("defaults/mountpoint").toString());
408 installer->install(logger); 459 installer->install(logger);
409 460
@@ -547,6 +598,69 @@ void RbUtilQt::installPortable(void)
547} 598}
548 599
549 600
601void RbUtilQt::updateInfo()
602{
603 qDebug() << "RbUtilQt::updateInfo()";
604
605 QSettings log(userSettings->value("defaults/mountpoint").toString() + "/.rockbox/rbutil.log", QSettings::IniFormat, this);
606 QStringList groups = log.childGroups();
607 QList<QTreeWidgetItem *> items;
608 QTreeWidgetItem *w, *w2;
609 QString min, max;
610 int olditems = 0;
611
612 // remove old list entries (if any)
613 int l = ui.treeInfo->topLevelItemCount();
614 while(l--) {
615 QTreeWidgetItem *m;
616 m = ui.treeInfo->takeTopLevelItem(l);
617 // delete childs (single level deep, no recursion here)
618 int n = m->childCount();
619 while(n--)
620 delete m->child(n);
621 }
622 // get and populate new items
623 for(int a = 0; a < groups.size(); a++) {
624 log.beginGroup(groups.at(a));
625 QStringList keys = log.allKeys();
626 w = new QTreeWidgetItem;
627 w->setFlags(Qt::ItemIsEnabled);
628 w->setText(0, groups.at(a));
629 items.append(w);
630 // get minimum and maximum version information so we can hilight old files
631 min = max = log.value(keys.at(0)).toString();
632 for(int b = 0; b < keys.size(); b++) {
633 if(log.value(keys.at(b)).toString() > max)
634 max = log.value(keys.at(b)).toString();
635 if(log.value(keys.at(b)).toString() < min)
636 min = log.value(keys.at(b)).toString();
637 }
638
639 for(int b = 0; b < keys.size(); b++) {
640 QString file;
641 file = userSettings->value("defaults/mountpoint").toString() + "/" + keys.at(b);
642 if(QFileInfo(file).isDir())
643 continue;
644 w2 = new QTreeWidgetItem(w, QStringList() << "/"
645 + keys.at(b) << log.value(keys.at(b)).toString());
646 if(log.value(keys.at(b)).toString() != max) {
647 w2->setForeground(0, QBrush(QColor(255, 0, 0)));
648 w2->setForeground(1, QBrush(QColor(255, 0, 0)));
649 olditems++;
650 }
651 items.append(w2);
652 }
653 log.endGroup();
654 if(min != max)
655 w->setData(1, Qt::DisplayRole, QString("%1 / %2").arg(min, max));
656 else
657 w->setData(1, Qt::DisplayRole, max);
658 }
659 ui.treeInfo->insertTopLevelItems(0, items);
660 ui.treeInfo->resizeColumnToContents(0);
661}
662
663
550QUrl RbUtilQt::proxy() 664QUrl RbUtilQt::proxy()
551{ 665{
552 if(userSettings->value("defaults/proxytype") == "manual") 666 if(userSettings->value("defaults/proxytype") == "manual")
diff --git a/rbutil/rbutilqt/rbutilqt.h b/rbutil/rbutilqt/rbutilqt.h
index 1a6dda8259..a2e25112f3 100644
--- a/rbutil/rbutilqt/rbutilqt.h
+++ b/rbutil/rbutilqt/rbutilqt.h
@@ -45,13 +45,16 @@ class RbUtilQt : public QMainWindow
45 QString deviceName(QString); 45 QString deviceName(QString);
46 QString platform; 46 QString platform;
47 HttpGet *daily; 47 HttpGet *daily;
48 HttpGet *bleeding;
48 QString absolutePath; 49 QString absolutePath;
49 QTemporaryFile buildInfo; 50 QTemporaryFile buildInfo;
51 QTemporaryFile bleedingInfo;
50 void updateManual(void); 52 void updateManual(void);
51 ProgressLoggerGui *logger; 53 ProgressLoggerGui *logger;
52 ZipInstaller *installer; 54 ZipInstaller *installer;
53 BootloaderInstaller* blinstaller; 55 BootloaderInstaller* blinstaller;
54 QUrl proxy(void); 56 QUrl proxy(void);
57 QMap<QString, QString> versmap;
55 58
56 private slots: 59 private slots:
57 void about(void); 60 void about(void);
@@ -65,6 +68,7 @@ class RbUtilQt : public QMainWindow
65 void createTalkFiles(void); 68 void createTalkFiles(void);
66 void downloadDone(bool); 69 void downloadDone(bool);
67 void downloadDone(int, bool); 70 void downloadDone(int, bool);
71 void downloadBleedingDone(bool);
68 void downloadInfo(void); 72 void downloadInfo(void);
69 void installVoice(void); 73 void installVoice(void);
70 void installThemes(void); 74 void installThemes(void);
@@ -72,6 +76,8 @@ class RbUtilQt : public QMainWindow
72 void uninstallBootloader(void); 76 void uninstallBootloader(void);
73 void downloadManual(void); 77 void downloadManual(void);
74 void installPortable(void); 78 void installPortable(void);
79 void updateInfo(void);
80 void updateTabs(int);
75}; 81};
76 82
77#endif 83#endif
diff --git a/rbutil/rbutilqt/rbutilqtfrm.ui b/rbutil/rbutilqt/rbutilqtfrm.ui
index 826ac15133..2a79cee26c 100644
--- a/rbutil/rbutilqt/rbutilqtfrm.ui
+++ b/rbutil/rbutilqt/rbutilqtfrm.ui
@@ -5,7 +5,7 @@
5 <rect> 5 <rect>
6 <x>0</x> 6 <x>0</x>
7 <y>0</y> 7 <y>0</y>
8 <width>600</width> 8 <width>662</width>
9 <height>550</height> 9 <height>550</height>
10 </rect> 10 </rect>
11 </property> 11 </property>
@@ -761,6 +761,36 @@ p, li { white-space: pre-wrap; }
761 </item> 761 </item>
762 </layout> 762 </layout>
763 </widget> 763 </widget>
764 <widget class="QWidget" name="info" >
765 <attribute name="title" >
766 <string>Inf&amp;o</string>
767 </attribute>
768 <layout class="QGridLayout" >
769 <item row="0" column="0" >
770 <widget class="QLabel" name="labelInfo" >
771 <property name="text" >
772 <string>&lt;html>&lt;head>&lt;meta name="qrichtext" content="1" />&lt;style type="text/css">
773p, li { white-space: pre-wrap; }
774&lt;/style>&lt;/head>&lt;body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;">
775&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Currently installed packages.&lt;/p>
776&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">&lt;span style=" font-weight:600;">Note&lt;/span>: if you manually installed packages this might not be correct!&lt;/p>&lt;/body>&lt;/html></string>
777 </property>
778 <property name="wordWrap" >
779 <bool>true</bool>
780 </property>
781 </widget>
782 </item>
783 <item row="1" column="0" >
784 <widget class="QTreeWidget" name="treeInfo" >
785 <column>
786 <property name="text" >
787 <string>1</string>
788 </property>
789 </column>
790 </widget>
791 </item>
792 </layout>
793 </widget>
764 </widget> 794 </widget>
765 </item> 795 </item>
766 </layout> 796 </layout>
@@ -770,7 +800,7 @@ p, li { white-space: pre-wrap; }
770 <rect> 800 <rect>
771 <x>0</x> 801 <x>0</x>
772 <y>0</y> 802 <y>0</y>
773 <width>600</width> 803 <width>662</width>
774 <height>29</height> 804 <height>29</height>
775 </rect> 805 </rect>
776 </property> 806 </property>