diff options
author | Dominik Riebeling <Dominik.Riebeling@gmail.com> | 2007-07-25 20:21:06 +0000 |
---|---|---|
committer | Dominik Riebeling <Dominik.Riebeling@gmail.com> | 2007-07-25 20:21:06 +0000 |
commit | 680408f4ac8b04d716fd8921c01b73d30a3c66c7 (patch) | |
tree | 08908a7d5e3b95daa9a1d3ed0703e64cff712022 /rbutil/rbutilqt/rbutilqt.cpp | |
parent | aa643db434e230643e18e454032fb708e0f1848d (diff) | |
download | rockbox-680408f4ac8b04d716fd8921c01b73d30a3c66c7.tar.gz rockbox-680408f4ac8b04d716fd8921c01b73d30a3c66c7.zip |
First stab at porting rbutil to Qt4. Currently only installing a current or archived build is working. To build, run qmake && make in the source folder. Beware that the syntax of rbutil.ini has slightly changed. Caching of the downloaded files is also still missing.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@13989 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'rbutil/rbutilqt/rbutilqt.cpp')
-rw-r--r-- | rbutil/rbutilqt/rbutilqt.cpp | 231 |
1 files changed, 231 insertions, 0 deletions
diff --git a/rbutil/rbutilqt/rbutilqt.cpp b/rbutil/rbutilqt/rbutilqt.cpp new file mode 100644 index 0000000000..14234244bf --- /dev/null +++ b/rbutil/rbutilqt/rbutilqt.cpp | |||
@@ -0,0 +1,231 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * | ||
9 | * Copyright (C) 2007 by Dominik Riebeling | ||
10 | * $Id:$ | ||
11 | * | ||
12 | * All files in this archive are subject to the GNU General Public License. | ||
13 | * See the file COPYING in the source tree root for full license agreement. | ||
14 | * | ||
15 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
16 | * KIND, either express or implied. | ||
17 | * | ||
18 | ****************************************************************************/ | ||
19 | |||
20 | #include <QtGui> | ||
21 | |||
22 | #include "version.h" | ||
23 | #include "rbutilqt.h" | ||
24 | #include "ui_rbutilqtfrm.h" | ||
25 | #include "ui_aboutbox.h" | ||
26 | #include "configure.h" | ||
27 | #include "install.h" | ||
28 | #include "httpget.h" | ||
29 | |||
30 | RbUtilQt::RbUtilQt(QWidget *parent) : QMainWindow(parent) | ||
31 | { | ||
32 | QString programPath = qApp->arguments().at(0); | ||
33 | absolutePath = QFileInfo(programPath).absolutePath() + "/"; | ||
34 | // use built-in rbutil.ini if no external file in binary folder | ||
35 | QString iniFile = absolutePath + "rbutil.ini"; | ||
36 | if(QFileInfo(iniFile).isFile()) { | ||
37 | qDebug() << "using external rbutil.ini"; | ||
38 | devices = new QSettings(iniFile, QSettings::IniFormat, 0); | ||
39 | } | ||
40 | else { | ||
41 | qDebug() << "using built-in rbutil.ini"; | ||
42 | devices = new QSettings(":/ini/rbutil.ini", QSettings::IniFormat, 0); | ||
43 | } | ||
44 | |||
45 | ui.setupUi(this); | ||
46 | initDeviceNames(); | ||
47 | |||
48 | // portable installation: | ||
49 | // check for a configuration file in the program folder. | ||
50 | QFileInfo config; | ||
51 | config.setFile(absolutePath + "RockboxUtility.ini"); | ||
52 | if(config.isFile()) { | ||
53 | userSettings = new QSettings(absolutePath + "RockboxUtility.ini", | ||
54 | QSettings::IniFormat, 0); | ||
55 | qDebug() << "config: portable"; | ||
56 | } | ||
57 | else { | ||
58 | userSettings = new QSettings(QSettings::IniFormat, | ||
59 | QSettings::UserScope, "rockbox.org", "RockboxUtility"); | ||
60 | qDebug() << "config: system"; | ||
61 | } | ||
62 | |||
63 | userSettings->beginGroup("defaults"); | ||
64 | platform = userSettings->value("platform").toString(); | ||
65 | userSettings->endGroup(); | ||
66 | ui.comboBoxDevice->setCurrentIndex(ui.comboBoxDevice->findData(platform)); | ||
67 | updateDevice(ui.comboBoxDevice->currentIndex()); | ||
68 | |||
69 | connect(ui.actionAbout_Qt, SIGNAL(triggered()), qApp, SLOT(aboutQt())); | ||
70 | connect(ui.action_About, SIGNAL(triggered()), this, SLOT(about())); | ||
71 | connect(ui.action_Configure, SIGNAL(triggered()), this, SLOT(configDialog())); | ||
72 | connect(ui.comboBoxDevice, SIGNAL(currentIndexChanged(int)), this, SLOT(updateDevice(int))); | ||
73 | connect(ui.buttonRockbox, SIGNAL(clicked()), this, SLOT(install())); | ||
74 | |||
75 | // disable unimplemented stuff | ||
76 | ui.buttonThemes->setEnabled(false); | ||
77 | ui.buttonSmall->setEnabled(false); | ||
78 | ui.buttonRemoveRockbox->setEnabled(false); | ||
79 | ui.buttonRemoveBootloader->setEnabled(false); | ||
80 | ui.buttonGames->setEnabled(false); | ||
81 | ui.buttonFonts->setEnabled(false); | ||
82 | ui.buttonComplete->setEnabled(false); | ||
83 | |||
84 | downloadInfo(); | ||
85 | |||
86 | } | ||
87 | |||
88 | |||
89 | void RbUtilQt::downloadInfo() | ||
90 | { | ||
91 | // try to get the current build information | ||
92 | daily = new HttpGet(this); | ||
93 | connect(daily, SIGNAL(done(bool)), this, SLOT(downloadDone(bool))); | ||
94 | connect(daily, SIGNAL(requestFinished(int, bool)), this, SLOT(downloadDone(int, bool))); | ||
95 | if(userSettings->value("defaults/proxytype") == "manual") | ||
96 | daily->setProxy(QUrl(userSettings->value("defaults/proxy").toString())); | ||
97 | |||
98 | qDebug() << "downloading build info"; | ||
99 | daily->setFile(&buildInfo); | ||
100 | daily->getFile(QUrl(devices->value("server_conf_url").toString())); | ||
101 | } | ||
102 | |||
103 | |||
104 | void RbUtilQt::downloadDone(bool error) | ||
105 | { | ||
106 | if(error) qDebug() << "network error:" << daily->error(); | ||
107 | qDebug() << "network status:" << daily->error(); | ||
108 | |||
109 | } | ||
110 | |||
111 | |||
112 | void RbUtilQt::downloadDone(int id, bool error) | ||
113 | { | ||
114 | QString errorString; | ||
115 | errorString = tr("Network error: %1. Please check your network and proxy settings.").arg(daily->errorString()); | ||
116 | if(error) QMessageBox::about(this, "Network Error", errorString); | ||
117 | qDebug() << "downloadDone:" << id << error; | ||
118 | } | ||
119 | |||
120 | |||
121 | void RbUtilQt::about() | ||
122 | { | ||
123 | QDialog *window = new QDialog; | ||
124 | Ui::aboutBox about; | ||
125 | about.setupUi(window); | ||
126 | |||
127 | QFile copy(":/docs/COPYING"); | ||
128 | copy.open(QIODevice::ReadOnly); | ||
129 | QTextStream c(©); | ||
130 | QString cline = c.readAll(); | ||
131 | about.browserLicense->insertPlainText(cline); | ||
132 | about.browserLicense->moveCursor(QTextCursor::Start, QTextCursor::MoveAnchor); | ||
133 | QFile credits(":/docs/CREDITS"); | ||
134 | credits.open(QIODevice::ReadOnly); | ||
135 | QTextStream r(&credits); | ||
136 | QString rline = r.readAll(); | ||
137 | about.browserCredits->insertPlainText(rline); | ||
138 | about.browserCredits->moveCursor(QTextCursor::Start, QTextCursor::MoveAnchor); | ||
139 | QString title = QString("<b>The Rockbox Utility</b> Version %1").arg(VERSION); | ||
140 | about.labelTitle->setText(title); | ||
141 | |||
142 | window->show(); | ||
143 | |||
144 | } | ||
145 | |||
146 | |||
147 | void RbUtilQt::configDialog() | ||
148 | { | ||
149 | Config *cw = new Config(this); | ||
150 | cw->setUserSettings(userSettings); | ||
151 | cw->show(); | ||
152 | connect(cw, SIGNAL(settingsUpdated()), this, SLOT(downloadInfo())); | ||
153 | } | ||
154 | |||
155 | |||
156 | void RbUtilQt::initDeviceNames() | ||
157 | { | ||
158 | qDebug() << "RbUtilQt::initDeviceNames()"; | ||
159 | devices->beginGroup("platforms"); | ||
160 | QStringList a = devices->childKeys(); | ||
161 | devices->endGroup(); | ||
162 | |||
163 | for(int it = 0; it < a.size(); it++) { | ||
164 | QString curdev; | ||
165 | devices->beginGroup("platforms"); | ||
166 | curdev = devices->value(a.at(it), "null").toString(); | ||
167 | devices->endGroup(); | ||
168 | QString curname; | ||
169 | devices->beginGroup(curdev); | ||
170 | curname = devices->value("name", "null").toString(); | ||
171 | devices->endGroup(); | ||
172 | ui.comboBoxDevice->addItem(curname, curdev); | ||
173 | } | ||
174 | } | ||
175 | |||
176 | |||
177 | void RbUtilQt::updateDevice(int index) | ||
178 | { | ||
179 | platform = ui.comboBoxDevice->itemData(index).toString(); | ||
180 | userSettings->setValue("defaults/platform", platform); | ||
181 | userSettings->sync(); | ||
182 | |||
183 | devices->beginGroup(platform); | ||
184 | if(devices->value("needsbootloader", "") == "no") { | ||
185 | ui.buttonBootloader->setEnabled(false); | ||
186 | ui.buttonRemoveBootloader->setEnabled(false); | ||
187 | ui.labelBootloader->setEnabled(false); | ||
188 | ui.labelRemoveBootloader->setEnabled(false); | ||
189 | } | ||
190 | else { | ||
191 | ui.buttonBootloader->setEnabled(true); | ||
192 | ui.labelBootloader->setEnabled(true); | ||
193 | if(devices->value("bootloadermethod") == "fwpatcher") { | ||
194 | ui.labelRemoveBootloader->setEnabled(false); | ||
195 | ui.buttonRemoveBootloader->setEnabled(false); | ||
196 | } | ||
197 | else { | ||
198 | ui.labelRemoveBootloader->setEnabled(true); | ||
199 | ui.buttonRemoveBootloader->setEnabled(true); | ||
200 | } | ||
201 | } | ||
202 | devices->endGroup(); | ||
203 | |||
204 | qDebug() << "new device selected:" << platform; | ||
205 | } | ||
206 | |||
207 | |||
208 | void RbUtilQt::install() | ||
209 | { | ||
210 | Install *installWindow = new Install(this); | ||
211 | installWindow->setUserSettings(userSettings); | ||
212 | installWindow->setDeviceSettings(devices); | ||
213 | if(userSettings->value("defaults/proxytype") == "manual") | ||
214 | installWindow->setProxy(QUrl(userSettings->value("defaults/proxy").toString())); | ||
215 | installWindow->setMountPoint(userSettings->value("defaults/mountpoint").toString()); | ||
216 | |||
217 | buildInfo.open(); | ||
218 | QSettings info(buildInfo.fileName(), QSettings::IniFormat, this); | ||
219 | buildInfo.close(); | ||
220 | installWindow->setArchivedString(info.value("dailies/date").toString()); | ||
221 | |||
222 | devices->beginGroup(platform); | ||
223 | QString released = devices->value("released").toString(); | ||
224 | devices->endGroup(); | ||
225 | if(released == "yes") | ||
226 | installWindow->setReleased(devices->value("last_release", "").toString()); | ||
227 | else | ||
228 | installWindow->setReleased(0); | ||
229 | |||
230 | installWindow->show(); | ||
231 | } | ||