diff options
| author | Dominik Wenger <domonoky@googlemail.com> | 2007-07-26 21:06:09 +0000 |
|---|---|---|
| committer | Dominik Wenger <domonoky@googlemail.com> | 2007-07-26 21:06:09 +0000 |
| commit | 992ffc83be2be19d337f8a7970597730f560e684 (patch) | |
| tree | 54749cf6dbcb6981e0d1857e3017f52481ad9bc4 | |
| parent | a78d51c07c621413c68fee84f24dcc64607c4338 (diff) | |
| download | rockbox-992ffc83be2be19d337f8a7970597730f560e684.zip rockbox-992ffc83be2be19d337f8a7970597730f560e684.tar.gz rockbox-992ffc83be2be19d337f8a7970597730f560e684.tar.bz2 rockbox-992ffc83be2be19d337f8a7970597730f560e684.tar.xz | |
rbutilqt: forgot the new files.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@14013 a1c6a512-1295-4272-9138-f99709370657
| -rw-r--r-- | rbutil/rbutilqt/installrb.cpp | 144 | ||||
| -rw-r--r-- | rbutil/rbutilqt/installrb.h | 60 |
2 files changed, 204 insertions, 0 deletions
diff --git a/rbutil/rbutilqt/installrb.cpp b/rbutil/rbutilqt/installrb.cpp new file mode 100644 index 0000000..401722d --- /dev/null +++ b/rbutil/rbutilqt/installrb.cpp @@ -0,0 +1,144 @@ +/***************************************************************************
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * + * Copyright (C) 2007 by Dominik Riebeling + * $Id: installrb.cpp 13990 2007-07-25 22:26:10Z Dominik Wenger $ + * + * All files in this archive are subject to the GNU General Public License. + * See the file COPYING in the source tree root for full license agreement. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/
+
+#include "installrb.h"
+
+#include "zip/zip.h" +#include "zip/unzip.h"
+
+RBInstaller::RBInstaller(QObject* parent): QObject(parent)
+{
+
+}
+
+
+void RBInstaller::install(QString url,QString file,QString mountpoint, QUrl proxy,Ui::InstallProgressFrm* dp)
+{
+ m_url=url;
+ m_mountpoint = mountpoint;
+ m_file = file;
+ m_dp = dp;
+
+ m_dp->listProgress->addItem(tr("Downloading file %1.%2") + .arg(QFileInfo(m_url).baseName(), QFileInfo(m_url).completeSuffix())); +
+ // temporary file needs to be opened to get the filename + downloadFile.open(); + m_file = downloadFile.fileName(); + downloadFile.close(); + // get the real file. + getter = new HttpGet(this); + getter->setProxy(proxy); + getter->setFile(&downloadFile);
+ getter->getFile(QUrl(url));
+
+ connect(getter, SIGNAL(done(bool)), this, SLOT(downloadDone(bool)));
+ connect(getter, SIGNAL(downloadDone(int, bool)), this, SLOT(downloadRequestFinished(int, bool)));
+ connect(getter, SIGNAL(dataReadProgress(int, int)), this, SLOT(updateDataReadProgress(int, int)));
+
+}
+
+void RBInstaller::downloadRequestFinished(int id, bool error)
+{
+ qDebug() << "Install::downloadRequestFinished" << id << error; + qDebug() << "error:" << getter->errorString(); + + downloadDone(error);
+}
+
+void RBInstaller::downloadDone(bool error)
+{
+ qDebug() << "Install::downloadDone, error:" << error; +
+
+ // update progress bar + int max = m_dp->progressBar->maximum(); + if(max == 0) { + max = 100; + m_dp->progressBar->setMaximum(max); + } + m_dp->progressBar->setValue(max); + if(getter->httpResponse() != 200) { + m_dp->listProgress->addItem(tr("Download error: received HTTP error %1.").arg(getter->httpResponse())); + m_dp->buttonAbort->setText(tr("&Ok")); + emit done(true); + return; + } + if(error) { + m_dp->listProgress->addItem(tr("Download error: %1").arg(getter->errorString())); + m_dp->buttonAbort->setText(tr("&Ok")); + emit done(true); + return; + } + else m_dp->listProgress->addItem(tr("Download finished."));
+
+ // unzip downloaded file + qDebug() << "about to unzip the downloaded file" << m_file << "to" << m_mountpoint; + + m_dp->listProgress->addItem(tr("Extracting file."));
+
+ qDebug() << "file to unzip: " << m_file; + UnZip::ErrorCode ec; + UnZip uz; + ec = uz.openArchive(m_file); + if(ec != UnZip::Ok) { + m_dp->listProgress->addItem(tr("Opening archive failed: %1.") + .arg(uz.formatError(ec))); + m_dp->buttonAbort->setText(tr("&Ok")); + emit done(false); + return; + }
+
+ ec = uz.extractAll(m_mountpoint); + if(ec != UnZip::Ok) { + m_dp->listProgress->addItem(tr("Extracting failed: %1.") + .arg(uz.formatError(ec))); + m_dp->buttonAbort->setText(tr("&Ok")); + emit done(false); + return; + } + + m_dp->listProgress->addItem(tr("creating installation log"));
+
+ QStringList zipContents = uz.fileList(); + + QSettings installlog(m_mountpoint + "/.rockbox/rbutil.log", QSettings::IniFormat, 0); + + installlog.beginGroup("rockboxbase"); + for(int i = 0; i < zipContents.size(); i++) + { + installlog.setValue(zipContents.at(i),installlog.value(zipContents.at(i),0).toInt()+1); + } + installlog.endGroup(); + + // remove temporary file + downloadFile.remove(); + + m_dp->listProgress->addItem(tr("Extraction finished successfully.")); + m_dp->buttonAbort->setText(tr("&Ok"));
+
+ emit done(false);
+}
+
+void RBInstaller::updateDataReadProgress(int read, int total)
+{
+ m_dp->progressBar->setMaximum(total); + m_dp->progressBar->setValue(read); + qDebug() << "progress:" << read << "/" << total;
+
+}
+
diff --git a/rbutil/rbutilqt/installrb.h b/rbutil/rbutilqt/installrb.h new file mode 100644 index 0000000..91268d5 --- /dev/null +++ b/rbutil/rbutilqt/installrb.h @@ -0,0 +1,60 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * + * Copyright (C) 2007 by Dominik Riebeling + * $Id: installrb.h 13990 2007-07-25 22:26:10Z Dominik Wenger $ + * + * All files in this archive are subject to the GNU General Public License. + * See the file COPYING in the source tree root for full license agreement. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/
+
+
+#ifndef INSTALLRB_H
+#define INSTALLRB_H
+
+
+
+#include <QtGui> +#include <QtNetwork>
+
+#include "ui_installprogressfrm.h"
+#include "httpget.h"
+
+class RBInstaller : public QObject
+{
+ Q_OBJECT
+public:
+ RBInstaller(QObject* parent) ;
+ ~RBInstaller(){}
+ void install(QString url,QString filename,QString mountpoint, QUrl proxy,Ui::InstallProgressFrm* dp);
+
+signals:
+ void done(bool error);
+
+private slots:
+ void updateDataReadProgress(int, int); + void downloadDone(bool); + void downloadRequestFinished(int, bool);
+
+private:
+ QString m_url,m_file,m_mountpoint;
+
+ HttpGet *getter;
+ QTemporaryFile downloadFile;
+
+ Ui::InstallProgressFrm* m_dp;
+};
+
+
+
+#endif
+
|