rockbox/rbutil/rbutilqt/gui/manualwidget.cpp
Dominik Riebeling 968448c9cd ZipIntaller: use file timestamp if version string is missing.
Instead of using some arbitrary and not really useful string use the timestamp
of the downloaded file if version string is provided by the caller. This also
makes it possible to check if the downloaded file is actually a different one.

Use it for manual and game file downloads, as this gives more reasonable values
than using the date transmitted for daily (archived) build and as support for
archived builds will be removed shortly.

Change-Id: I0c751fabe7bb516edca93a5f73f077a611d4ef87
2012-05-23 21:10:38 +02:00

140 lines
4.8 KiB
C++

/***************************************************************************
* __________ __ ___.
* 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 <QDebug>
#include "manualwidget.h"
#include "rbutilqt.h"
#include "rbsettings.h"
#include "serverinfo.h"
#include "systeminfo.h"
ManualWidget::ManualWidget(QWidget *parent) : QWidget(parent)
{
ui.setupUi(this);
ui.radioPdf->setChecked(true);
connect(ui.buttonDownloadManual, SIGNAL(clicked()), this, SLOT(downloadManual()));
}
QString ManualWidget::manualUrl(ManualFormat format)
{
if(RbSettings::value(RbSettings::Platform).toString().isEmpty()) {
return QString();
}
QString buildservermodel = SystemInfo::value(SystemInfo::CurBuildserverModel).toString();
QString modelman = SystemInfo::value(SystemInfo::CurManual).toString();
QString manualbasename;
if(modelman.isEmpty()) {
manualbasename = "rockbox-" + buildservermodel;
}
else {
manualbasename = "rockbox-" + modelman;
}
QString manual = SystemInfo::value(SystemInfo::ManualUrl).toString();
switch(format) {
case ManualPdf:
manual.replace("%EXTENSION%", "pdf");
break;
case ManualHtml:
manual.replace("%EXTENSION%", "html");
manualbasename += "/rockbox-build";
break;
case ManualZip:
manual.replace("%EXTENSION%", "zip");
manualbasename += "-html";
break;
default:
break;
};
manual.replace("%MANUALBASENAME%", manualbasename);
return manual;
}
void ManualWidget::updateManual()
{
if(!RbSettings::value(RbSettings::Platform).toString().isEmpty())
{
ui.labelPdfManual->setText(tr("<a href='%1'>PDF Manual</a>")
.arg(manualUrl(ManualPdf)));
ui.labelHtmlManual->setText(tr("<a href='%1'>HTML Manual (opens in browser)</a>")
.arg(manualUrl(ManualHtml)));
}
else {
ui.labelPdfManual->setText(tr("Select a device for a link to the correct manual"));
ui.labelHtmlManual->setText(tr("<a href='%1'>Manual Overview</a>")
.arg("http://www.rockbox.org/manual.shtml"));
}
}
void ManualWidget::downloadManual(void)
{
if(RbUtilQt::chkConfig(this)) {
return;
}
if(QMessageBox::question(this, tr("Confirm download"),
tr("Do you really want to download the manual? The manual will be saved "
"to the root folder of your player."),
QMessageBox::Yes | QMessageBox::No) != QMessageBox::Yes) {
return;
}
QString manual = SystemInfo::value(SystemInfo::CurManual).toString();
if(manual.isEmpty()) {
manual = "rockbox-" + SystemInfo::value(SystemInfo::CurBuildserverModel).toString();
}
QDate date = QDate::fromString(ServerInfo::value(
ServerInfo::DailyDate).toString(), Qt::ISODate);
QString manualurl;
ProgressLoggerGui* logger = new ProgressLoggerGui(this);
logger->show();
ZipInstaller *installer = new ZipInstaller(this);
installer->setMountPoint(RbSettings::value(RbSettings::Mountpoint).toString());
if(!RbSettings::value(RbSettings::CacheDisabled).toBool())
installer->setCache(true);
if(ui.radioPdf->isChecked()) {
manualurl = manualUrl(ManualPdf);
installer->setLogSection("Manual (PDF)");
installer->setTarget("/" + manual + ".pdf");
}
else {
manualurl = manualUrl(ManualZip);
installer->setLogSection("Manual (HTML)");
installer->setTarget("/" + manual + "-" + date.toString("yyyyMMdd") + "-html.zip");
}
qDebug() << "[ManualWidget] Manual URL:" << manualurl;
installer->setLogVersion();
installer->setUrl(manualurl);
installer->setUnzip(false);
connect(installer, SIGNAL(logItem(QString, int)), logger, SLOT(addItem(QString, int)));
connect(installer, SIGNAL(logProgress(int, int)), logger, SLOT(setProgress(int, int)));
connect(installer, SIGNAL(done(bool)), logger, SLOT(setFinished()));
connect(logger, SIGNAL(aborted()), installer, SLOT(abort()));
installer->install();
}