159 lines
4.1 KiB
C++
159 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();
|
||
|
}
|