summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDominik Wenger <domonoky@googlemail.com>2007-07-26 21:06:09 +0000
committerDominik Wenger <domonoky@googlemail.com>2007-07-26 21:06:09 +0000
commit992ffc83be2be19d337f8a7970597730f560e684 (patch)
tree54749cf6dbcb6981e0d1857e3017f52481ad9bc4
parenta78d51c07c621413c68fee84f24dcc64607c4338 (diff)
downloadrockbox-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.cpp144
-rw-r--r--rbutil/rbutilqt/installrb.h60
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
+