summaryrefslogtreecommitdiffstats
path: root/rbutil/rbutilqt/gui
diff options
context:
space:
mode:
Diffstat (limited to 'rbutil/rbutilqt/gui')
-rw-r--r--rbutil/rbutilqt/gui/backupdialog.cpp141
-rw-r--r--rbutil/rbutilqt/gui/backupdialog.h49
-rw-r--r--rbutil/rbutilqt/gui/backupdialogfrm.ui142
3 files changed, 332 insertions, 0 deletions
diff --git a/rbutil/rbutilqt/gui/backupdialog.cpp b/rbutil/rbutilqt/gui/backupdialog.cpp
new file mode 100644
index 0000000000..5d04b322ed
--- /dev/null
+++ b/rbutil/rbutilqt/gui/backupdialog.cpp
@@ -0,0 +1,141 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ *
+ * Copyright (C) 2012 by Dominik Riebeling
+ *
+ * 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 <QtGui>
+#include "backupdialog.h"
+#include "ui_backupdialogfrm.h"
+#include "rbsettings.h"
+#include "progressloggergui.h"
+#include "ziputil.h"
+#include "rockboxinfo.h"
+
+class BackupSizeThread : public QThread
+{
+ public:
+ void run(void);
+ void setPath(QString p) { m_path = p; }
+ qint64 currentSize(void) { return m_currentSize; }
+
+ private:
+ QString m_path;
+ qint64 m_currentSize;
+};
+
+
+void BackupSizeThread::run(void)
+{
+ qDebug() << "BackupSizeThread] Thread started, calculating" << m_path;
+ m_currentSize = 0;
+
+ QDirIterator it(m_path, QDirIterator::Subdirectories);
+ while(it.hasNext()) {
+ m_currentSize += QFileInfo(it.next()).size();
+ }
+ qDebug() << "[BackupSizeThread] Thread done, sum:" << m_currentSize;
+}
+
+
+BackupDialog::BackupDialog(QWidget* parent) : QDialog(parent)
+{
+ ui.setupUi(this);
+
+ m_thread = new BackupSizeThread();
+ connect(m_thread, SIGNAL(finished()), this, SLOT(updateSizeInfo()));
+ connect(m_thread, SIGNAL(terminated()), this, SLOT(updateSizeInfo()));
+
+ connect(ui.buttonCancel, SIGNAL(clicked()), this, SLOT(close()));
+ connect(ui.buttonCancel, SIGNAL(clicked()), m_thread, SLOT(quit()));
+ connect(ui.buttonChange, SIGNAL(clicked()), this, SLOT(changeBackupPath()));
+ connect(ui.buttonBackup, SIGNAL(clicked()), this, SLOT(backup()));
+
+ ui.backupSize->setText(tr("Installation size: calculating ..."));
+ m_mountpoint = RbSettings::value(RbSettings::Mountpoint).toString();
+
+ m_backupName = RbSettings::value(RbSettings::BackupPath).toString();
+ if(m_backupName.isEmpty()) {
+ m_backupName = m_mountpoint;
+ }
+ RockboxInfo info(m_mountpoint);
+ m_backupName += "/.backup/rockbox-backup-" + info.version() + ".zip";
+ ui.backupLocation->setText(QDir::toNativeSeparators(m_backupName));
+
+ m_thread->setPath(m_mountpoint + "/.rockbox");
+ m_thread->start();
+}
+
+
+void BackupDialog::changeBackupPath(void)
+{
+ QString backupString = QFileDialog::getSaveFileName(this,
+ tr("Select Backup Filename"), m_backupName, "*.zip");
+ // only update if a filename was entered, ignore if cancelled
+ if(!backupString.isEmpty()) {
+ m_backupName = backupString;
+ ui.backupLocation->setText(QDir::toNativeSeparators(m_backupName));
+ RbSettings::setValue(RbSettings::BackupPath, QFileInfo(m_backupName).absolutePath());
+ }
+}
+
+
+void BackupDialog::updateSizeInfo(void)
+{
+ double size = m_thread->currentSize() / (1024 * 1024);
+ QString unit = "MiB";
+
+ if(size > 1024) {
+ size /= 1024;
+ unit = "GiB";
+ }
+
+ ui.backupSize->setText(tr("Installation size: %L1 %2").arg(size, 0, 'g', 4).arg(unit));
+}
+
+
+void BackupDialog::backup(void)
+{
+ m_logger = new ProgressLoggerGui(this);
+ connect(m_logger, SIGNAL(closed()), this, SLOT(close()));
+ m_logger->show();
+ m_logger->addItem(tr("Starting backup ..."),LOGINFO);
+ QCoreApplication::processEvents();
+
+ // create dir, if it doesnt exist
+ QFileInfo backupFile(m_backupName);
+ if(!QDir(backupFile.path()).exists())
+ {
+ QDir a;
+ a.mkpath(backupFile.path());
+ }
+
+ // create backup
+ ZipUtil zip(this);
+ connect(&zip, SIGNAL(logProgress(int, int)), m_logger, SLOT(setProgress(int, int)));
+ connect(&zip, SIGNAL(logItem(QString, int)), m_logger, SLOT(addItem(QString, int)));
+ zip.open(m_backupName, QuaZip::mdCreate);
+
+ QString mp = m_mountpoint + "/.rockbox";
+ if(zip.appendDirToArchive(mp, m_mountpoint)) {
+ m_logger->addItem(tr("Backup successful."), LOGINFO);
+ }
+ else {
+ m_logger->addItem(tr("Backup failed!"), LOGERROR);
+ }
+ zip.close();
+ m_logger->setFinished();
+}
+
diff --git a/rbutil/rbutilqt/gui/backupdialog.h b/rbutil/rbutilqt/gui/backupdialog.h
new file mode 100644
index 0000000000..cd5ea398d9
--- /dev/null
+++ b/rbutil/rbutilqt/gui/backupdialog.h
@@ -0,0 +1,49 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ *
+ * Copyright (C) 2012 by Dominik Riebeling
+ *
+ * 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 BACKUPDIALOG_H
+#define BACKUPDIALOG_H
+
+#include <QWidget>
+#include <QDialog>
+#include "ui_backupdialogfrm.h"
+#include "progressloggergui.h"
+
+class BackupSizeThread;
+
+class BackupDialog : public QDialog
+{
+ Q_OBJECT
+ public:
+ BackupDialog(QWidget* parent = 0);
+
+ private slots:
+ void changeBackupPath(void);
+ void updateSizeInfo(void);
+ void backup(void);
+
+ private:
+ Ui::BackupDialog ui;
+ QString m_backupName;
+ QString m_mountpoint;
+ BackupSizeThread *m_thread;
+ ProgressLoggerGui *m_logger;
+};
+
+#endif
+
diff --git a/rbutil/rbutilqt/gui/backupdialogfrm.ui b/rbutil/rbutilqt/gui/backupdialogfrm.ui
new file mode 100644
index 0000000000..5de61d1e91
--- /dev/null
+++ b/rbutil/rbutilqt/gui/backupdialogfrm.ui
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>BackupDialog</class>
+ <widget class="QDialog" name="BackupDialog">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>554</width>
+ <height>448</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Backup</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout_2">
+ <item row="0" column="0" rowspan="4">
+ <widget class="QLabel" name="label_4">
+ <property name="text">
+ <string/>
+ </property>
+ <property name="pixmap">
+ <pixmap resource="../rbutilqt.qrc">:/icons/wizard.jpg</pixmap>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1" colspan="3">
+ <widget class="QLabel" name="label_2">
+ <property name="text">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;This dialog will create a backup by archiving the contents of the Rockbox installation on the player into a zip file. This will include installed themes and settings stored below the .rockbox folder on the player.&lt;/p&gt;&lt;p&gt;The backup filename will be created based on the installed version. &lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="wordWrap">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1" colspan="3">
+ <widget class="QGroupBox" name="groupBox">
+ <property name="title">
+ <string>Backup</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout">
+ <item row="0" column="0">
+ <widget class="QLabel" name="backupSize">
+ <property name="text">
+ <string>Size: unknown</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="backupLocation">
+ <property name="text">
+ <string>Backup to: unknown</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <spacer name="horizontalSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>78</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="1" column="2">
+ <widget class="QPushButton" name="buttonChange">
+ <property name="text">
+ <string>&amp;Change</string>
+ </property>
+ <property name="icon">
+ <iconset resource="../rbutilqt.qrc">
+ <normaloff>:/icons/edit-find.png</normaloff>:/icons/edit-find.png</iconset>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item row="2" column="2" colspan="2">
+ <spacer name="verticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>1</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="3" column="1">
+ <spacer name="horizontalSpacer_2">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>143</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="3" column="2">
+ <widget class="QPushButton" name="buttonBackup">
+ <property name="text">
+ <string>&amp;Backup</string>
+ </property>
+ <property name="icon">
+ <iconset resource="../rbutilqt.qrc">
+ <normaloff>:/icons/go-next.png</normaloff>:/icons/go-next.png</iconset>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="3">
+ <widget class="QPushButton" name="buttonCancel">
+ <property name="text">
+ <string>&amp;Cancel</string>
+ </property>
+ <property name="icon">
+ <iconset resource="../rbutilqt.qrc">
+ <normaloff>:/icons/process-stop.png</normaloff>:/icons/process-stop.png</iconset>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <tabstops>
+ <tabstop>buttonBackup</tabstop>
+ <tabstop>buttonCancel</tabstop>
+ </tabstops>
+ <resources>
+ <include location="../rbutilqt.qrc"/>
+ </resources>
+ <connections/>
+</ui>