7c52284b29
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@27509 a1c6a512-1295-4272-9138-f99709370657
158 lines
4.1 KiB
C++
158 lines
4.1 KiB
C++
/***************************************************************************
|
|
* __________ __ ___.
|
|
* 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();
|
|
}
|