summaryrefslogtreecommitdiffstats
path: root/utils/themeeditor/gui/fontdownloader.cpp
diff options
context:
space:
mode:
authorRobert Bieber <robby@bieberphoto.com>2010-07-21 07:45:29 +0000
committerRobert Bieber <robby@bieberphoto.com>2010-07-21 07:45:29 +0000
commit7c52284b294cb33bc2e5d747e2e3c14d8ab937ae (patch)
treeba7bbf82a8ca0852deee158068330365f0f97e97 /utils/themeeditor/gui/fontdownloader.cpp
parentb72f475d44cf83c10c99eaf765b1c55cfdc00bb0 (diff)
downloadrockbox-7c52284b294cb33bc2e5d747e2e3c14d8ab937ae.tar.gz
rockbox-7c52284b294cb33bc2e5d747e2e3c14d8ab937ae.tar.bz2
rockbox-7c52284b294cb33bc2e5d747e2e3c14d8ab937ae.zip
Theme Editor: Implemented download and decompression of font pack in the preferences dialog. Dialog will also allow the user to set a directory for a custom target database, but the update button doesn't work yet. Also fixed the file filters for open file/open project actions and resized the preferences dialog
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@27509 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'utils/themeeditor/gui/fontdownloader.cpp')
-rw-r--r--utils/themeeditor/gui/fontdownloader.cpp158
1 files changed, 158 insertions, 0 deletions
diff --git a/utils/themeeditor/gui/fontdownloader.cpp b/utils/themeeditor/gui/fontdownloader.cpp
new file mode 100644
index 0000000000..7aa4cd8d57
--- /dev/null
+++ b/utils/themeeditor/gui/fontdownloader.cpp
@@ -0,0 +1,158 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2010 Robert Bieber
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ****************************************************************************/
+
+#include "fontdownloader.h"
+#include "ui_fontdownloader.h"
+
+#include "quazip.h"
+#include "quazipfile.h"
+#include "quazipfileinfo.h"
+
+#include <QNetworkRequest>
+#include <QNetworkReply>
+#include <QCloseEvent>
+
+#include <QDebug>
+
+FontDownloader::FontDownloader(QWidget *parent, QString path) :
+ QDialog(parent),
+ ui(new Ui::FontDownloader), dir(path), reply(0)
+{
+ ui->setupUi(this);
+
+ manager = new QNetworkAccessManager();
+
+ if(dir.isReadable())
+ {
+ fout.setFileName(dir.absolutePath() + "/fonts.zip");
+ if(fout.open(QFile::WriteOnly))
+ {
+ ui->label->setText(tr("Downloading font pack"));
+
+ QNetworkRequest request;
+ request.setUrl(QUrl("http://download.rockbox.org"
+ "/daily/fonts/rockbox-fonts.zip"));
+ request.setRawHeader("User-Agent", "Rockbox Theme Editor");
+
+ reply = manager->get(request);
+
+ QObject::connect(reply, SIGNAL(readyRead()),
+ this, SLOT(dataReceived()));
+ QObject::connect(reply, SIGNAL(finished()),
+ this, SLOT(finished()));
+ QObject::connect(reply, SIGNAL(downloadProgress(qint64,qint64)),
+ this, SLOT(progress(qint64,qint64)));
+ }
+ else
+ {
+ ui->label->setText(tr("Error: Couldn't open archive file"));
+ }
+ }
+ else
+ {
+ ui->label->setText(tr("Error: Fonts directory not readable"));
+ }
+
+}
+
+FontDownloader::~FontDownloader()
+{
+ delete ui;
+ fout.close();
+ manager->deleteLater();
+
+ if(reply)
+ {
+ reply->abort();
+ reply->deleteLater();
+ }
+}
+
+void FontDownloader::cancel()
+{
+ if(reply)
+ {
+ reply->abort();
+ reply->deleteLater();
+ reply = 0;
+ }
+}
+
+void FontDownloader::dataReceived()
+{
+ fout.write(reply->readAll());
+}
+
+void FontDownloader::progress(qint64 bytes, qint64 available)
+{
+ if(available > 0)
+ {
+ ui->progressBar->setMaximum(available);
+ ui->progressBar->setValue(bytes);
+ }
+}
+
+void FontDownloader::finished()
+{
+ fout.close();
+ reply->deleteLater();
+ reply = 0;
+ ui->label->setText(tr("Download complete"));
+
+ /* Extracting the ZIP archive */
+ QuaZip archive(fout.fileName());
+ QuaZipFile zipFile(&archive);
+ archive.open(QuaZip::mdUnzip);
+
+ bool more;
+ for(more = archive.goToFirstFile(); more; more = archive.goToNextFile())
+ {
+ if(archive.getCurrentFileName().split("/").last() == "")
+ continue;
+
+ QFile fontFile(dir.absolutePath() + "/" +
+ archive.getCurrentFileName().split("/").last());
+ fontFile.open(QFile::WriteOnly);
+
+ zipFile.open(QIODevice::ReadOnly);
+ fontFile.write(zipFile.readAll());
+ zipFile.close();
+
+ fontFile.close();
+ }
+
+ archive.close();
+ QFile::remove(dir.absolutePath() + "/fonts.zip");
+
+ hide();
+ this->deleteLater();
+}
+
+void FontDownloader::netError(QNetworkReply::NetworkError code)
+{
+ ui->label->setText(tr("Network error: ") + reply->errorString());
+}
+
+void FontDownloader::closeEvent(QCloseEvent *event)
+{
+ cancel();
+ event->accept();
+}