summaryrefslogtreecommitdiff
path: root/rbutil/rbutilqt/multiinstaller.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'rbutil/rbutilqt/multiinstaller.cpp')
-rw-r--r--rbutil/rbutilqt/multiinstaller.cpp328
1 files changed, 328 insertions, 0 deletions
diff --git a/rbutil/rbutilqt/multiinstaller.cpp b/rbutil/rbutilqt/multiinstaller.cpp
new file mode 100644
index 0000000000..dae059f0cc
--- /dev/null
+++ b/rbutil/rbutilqt/multiinstaller.cpp
@@ -0,0 +1,328 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 *
9 * Copyright (C) 2007 by Dominik Wenger
10 * $Id: multinstaller.cpp 14462 2007-08-26 16:44:23Z domonoky $
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 "multiinstaller.h"
21
22#include "installbootloader.h"
23#include "progressloggergui.h"
24#include "installzip.h"
25#include "browseof.h"
26#include "installthemes.h"
27
28MultiInstaller::MultiInstaller(QObject* parent): QObject(parent)
29{
30
31}
32
33void MultiInstaller::setUserSettings(QSettings* user)
34{
35 userSettings = user;
36}
37void MultiInstaller::setDeviceSettings(QSettings* dev)
38{
39 devices = dev;
40}
41
42void MultiInstaller::setProxy(QUrl proxy)
43{
44 m_proxy = proxy;
45}
46
47void MultiInstaller::installSmall()
48{
49 // create logger
50 logger = new ProgressLoggerGui(this);
51 logger->show();
52
53 m_plattform = userSettings->value("defaults/platform").toString();
54 m_mountpoint = userSettings->value("defaults/mountpoint").toString();
55 // show dialog with error if mount point is wrong
56 if(!QFileInfo(m_mountpoint).isDir()) {
57 logger->addItem(tr("Mount point is wrong!"),LOGERROR);
58 logger->abort();
59 return;
60 }
61
62 // Bootloader
63 m_error = false;
64 installed = false;
65 if(!installBootloader())
66 return;
67 else
68 {
69 // wait for boot loader installation finished
70 while(!installed)
71 QApplication::processEvents();
72 }
73 if(m_error) return;
74 logger->undoAbort();
75
76 // Rockbox
77 m_error = false;
78 installed = false;
79 if(!installRockbox())
80 return;
81 else
82 {
83 // wait for boot loader installation finished
84 while(!installed)
85 QApplication::processEvents();
86 }
87}
88
89void MultiInstaller::installComplete()
90{
91 // create logger
92 logger = new ProgressLoggerGui(this);
93 logger->show();
94
95 m_plattform = userSettings->value("defaults/platform").toString();
96 m_mountpoint = userSettings->value("defaults/mountpoint").toString();
97 // show dialog with error if mount point is wrong
98 if(!QFileInfo(m_mountpoint).isDir()) {
99 logger->addItem(tr("Mount point is wrong!"),LOGERROR);
100 logger->abort();
101 return;
102 }
103 // Bootloader
104 m_error = false;
105 installed = false;
106 if(!installBootloader())
107 return;
108 else
109 {
110 // wait for boot loader installation finished
111 while(!installed)
112 QApplication::processEvents();
113 }
114 if(m_error) return;
115 logger->undoAbort();
116
117 // Rockbox
118 m_error = false;
119 installed = false;
120 if(!installRockbox())
121 return;
122 else
123 {
124 // wait for boot loader installation finished
125 while(!installed)
126 QApplication::processEvents();
127 }
128 if(m_error) return;
129 logger->undoAbort();
130
131 // Fonts
132 m_error = false;
133 installed = false;
134 if(!installFonts())
135 return;
136 else
137 {
138 // wait for boot loader installation finished
139 while(!installed)
140 QApplication::processEvents();
141 }
142 if(m_error) return;
143 logger->undoAbort();
144
145 // Doom
146 m_error = false;
147 installed = false;
148 if(!installDoom())
149 return;
150 else
151 {
152 // wait for boot loader installation finished
153 while(!installed)
154 QApplication::processEvents();
155 }
156 if(m_error) return;
157
158
159 // theme
160 // this is a window
161 // it has its own logger window,so close our.
162 logger->close();
163 installThemes();
164
165}
166
167
168void MultiInstaller::installdone(bool error)
169{
170 installed = true;
171 m_error = error;
172}
173
174
175void MultiInstaller::setVersionStrings(QMap<QString, QString> ver)
176{
177 version = ver;
178 // version strings map is as following:
179 // rel_rev release version revision id
180 // rel_date release version release date
181 // same for arch_* and bleed_*
182
183 qDebug() << "Install::setVersionStrings" << version;
184}
185
186bool MultiInstaller::installBootloader()
187{
188 BootloaderInstaller* blinstaller = new BootloaderInstaller(this);
189 blinstaller->setMountPoint(m_mountpoint);
190 blinstaller->setProxy(m_proxy);
191 blinstaller->setDevice(m_plattform);
192 blinstaller->setBootloaderMethod(devices->value(m_plattform + "/bootloadermethod").toString());
193 blinstaller->setBootloaderName(devices->value(m_plattform + "/bootloadername").toString());
194 blinstaller->setBootloaderBaseUrl(devices->value("bootloader_url").toString());
195 blinstaller->setBootloaderInfoUrl(devices->value("bootloader_info_url").toString());
196 if(!blinstaller->downloadInfo())
197 {
198 logger->addItem(tr("Could not get the bootloader info file!"),LOGERROR);
199 logger->abort();
200 return false;
201 }
202
203 if(blinstaller->uptodate())
204 {
205 int ret = QMessageBox::question(NULL, tr("Bootloader Installation"),
206 tr("It seem your Bootloader is already uptodate.\n"
207 "Do really want to install it?"),
208 QMessageBox::Ok | QMessageBox::Ignore |
209 QMessageBox::Cancel,
210 QMessageBox::Ignore);
211 if(ret == QMessageBox::Cancel)
212 {
213 logger->addItem(tr("Bootloader installation Canceled!"),LOGERROR);
214 logger->abort();
215 return false;
216 }
217 else if(ret == QMessageBox::Ignore)
218 {
219 // skip to next install step
220 logger->addItem(tr("Skipped Bootloader installation!"),LOGWARNING);
221 installed = true;
222 return true;
223 }
224 }
225
226 // if fwpatcher , ask for extra file
227 QString offirmware;
228 if(devices->value(m_plattform + "/bootloadermethod").toString() == "fwpatcher")
229 {
230 BrowseOF ofbrowser(NULL);
231 ofbrowser.setFile(userSettings->value("defaults/ofpath").toString());
232 if(ofbrowser.exec() == QDialog::Accepted)
233 {
234 offirmware = ofbrowser.getFile();
235 qDebug() << offirmware;
236 if(!QFileInfo(offirmware).exists())
237 {
238 logger->addItem(tr("Original Firmware Path is wrong!"),LOGERROR);
239 logger->abort();
240 return false;
241 }
242 else
243 {
244 userSettings->setValue("defaults/ofpath",offirmware);
245 userSettings->sync();
246 }
247 }
248 else
249 {
250 logger->addItem(tr("Original Firmware selection Canceled!"),LOGERROR);
251 logger->abort();
252 return false;
253 }
254 }
255 blinstaller->setOrigFirmwarePath(offirmware);
256
257 blinstaller->install(logger);
258 connect(blinstaller,SIGNAL(done(bool)),this,SLOT(installdone(bool)));
259 return true;
260}
261
262bool MultiInstaller::installRockbox()
263{
264 QString file = QString("%1%2/rockbox.zip")
265 .arg(devices->value("bleeding_url").toString(),
266 userSettings->value("defaults/platform").toString());
267 QString myversion = "r" + version.value("bleed_rev");
268
269 ZipInstaller* installer = new ZipInstaller(this);
270 installer->setUrl(file);
271 installer->setProxy(m_proxy);
272 installer->setLogSection("rockboxbase");
273 installer->setLogVersion(myversion);
274 installer->setMountPoint(m_mountpoint);
275 installer->install(logger);
276
277 connect(installer, SIGNAL(done(bool)), this, SLOT(installdone(bool)));
278
279 return true;
280}
281
282bool MultiInstaller::installFonts()
283{
284 // create zip installer
285 ZipInstaller* installer = new ZipInstaller(this);
286
287 installer->setUrl(devices->value("font_url").toString());
288 installer->setProxy(m_proxy);
289 installer->setLogSection("Fonts");
290 installer->setLogVersion(version.value("arch_date"));
291 installer->setMountPoint(m_mountpoint);
292 installer->install(logger);
293
294 connect(installer, SIGNAL(done(bool)), this, SLOT(installdone(bool)));
295
296 return true;
297}
298
299bool MultiInstaller::installDoom()
300{
301 // create zip installer
302 ZipInstaller* installer = new ZipInstaller(this);
303
304 installer->setUrl(devices->value("doom_url").toString());
305 installer->setProxy(m_proxy);
306 installer->setLogSection("Game Addons");
307 installer->setLogVersion(version.value("arch_date"));
308 installer->setMountPoint(m_mountpoint);
309 installer->install(logger);
310
311 connect(installer, SIGNAL(done(bool)), this, SLOT(installdone(bool)));
312
313 return true;
314}
315
316bool MultiInstaller::installThemes()
317{
318 ThemesInstallWindow* tw = new ThemesInstallWindow(NULL);
319 tw->setDeviceSettings(devices);
320 tw->setUserSettings(userSettings);
321 tw->setProxy(m_proxy);
322 tw->setModal(true);
323 tw->show();
324
325 return true;
326}
327
328