diff -r 531f64292489 -r 5a4ea2c7b9df QTfrontend/pagedata.cpp --- a/QTfrontend/pagedata.cpp Sat Oct 08 16:45:52 2011 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,221 +0,0 @@ -/* - * Hedgewars, a free turn based strategy game - * Copyright (c) 2006-2011 Andrey Korotaev - * - * 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; version 2 of the License - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "pagedata.h" -#include "databrowser.h" -#include "hwconsts.h" - -#include "quazip.h" -#include "quazipfile.h" - -PageDataDownload::PageDataDownload(QWidget* parent) : AbstractPage(parent) -{ - QGridLayout * pageLayout = new QGridLayout(this); - pageLayout->setColumnStretch(0, 1); - pageLayout->setColumnStretch(1, 1); - pageLayout->setColumnStretch(2, 1); - - BtnBack = addButton(":/res/Exit.png", pageLayout, 2, 0, true); - - web = new DataBrowser(this); - connect(web, SIGNAL(anchorClicked(QUrl)), this, SLOT(request(const QUrl&))); - web->setOpenLinks(false); - pageLayout->addWidget(web, 0, 0, 1, 3); - - progressBarsLayout = new QVBoxLayout(); - pageLayout->addLayout(progressBarsLayout, 1, 0, 1, 3); - - fetchList(); -} - -void PageDataDownload::request(const QUrl &url) -{ - QUrl finalUrl; - if(url.host().isEmpty()) - finalUrl = QUrl("http://www.hedgewars.org" + url.path()); - else - finalUrl = url; - - if(url.path().endsWith(".zip")) - { - qWarning() << "Download Request" << url.toString(); - QString fileName = QFileInfo(url.toString()).fileName(); - - QNetworkRequest newRequest(finalUrl); - newRequest.setAttribute(QNetworkRequest::User, fileName); - - QNetworkAccessManager *manager = new QNetworkAccessManager(this); - QNetworkReply *reply = manager->get(newRequest); - connect(reply, SIGNAL(finished()), this, SLOT(fileDownloaded())); - connect(reply, SIGNAL(downloadProgress(qint64, qint64)), this, SLOT(downloadProgress(qint64, qint64))); - - QProgressBar *progressBar = new QProgressBar(this); - progressBarsLayout->addWidget(progressBar); - progressBars.insert(reply, progressBar); - } else - { - qWarning() << "Page Request" << url.toString(); - - QNetworkRequest newRequest(finalUrl); - - QNetworkAccessManager *manager = new QNetworkAccessManager(this); - QNetworkReply *reply = manager->get(newRequest); - connect(reply, SIGNAL(finished()), this, SLOT(pageDownloaded())); - } -} - - -void PageDataDownload::pageDownloaded() -{ - QNetworkReply * reply = qobject_cast(sender()); - - if(reply) - { - QString html = QString::fromUtf8(reply->readAll()); - int begin = html.indexOf(""); - int end = html.indexOf(""); - if(begin != -1 && begin < end) - { - html.truncate(end); - html.remove(0, begin); - } - web->setHtml(html); - } -} - -void PageDataDownload::fileDownloaded() -{ - QNetworkReply * reply = qobject_cast(sender()); - - if(reply) - { - QByteArray fileContents = reply->readAll(); - QProgressBar *progressBar = progressBars.value(reply, 0); - - if(progressBar) - { - progressBars.remove(reply); - progressBar->deleteLater(); - } - - extractDataPack(&fileContents); - } -} - -void PageDataDownload::downloadProgress(qint64 bytesRecieved, qint64 bytesTotal) -{ - QNetworkReply * reply = qobject_cast(sender()); - - if(reply) - { - QProgressBar *progressBar = progressBars.value(reply, 0); - - if(progressBar) - { - progressBar->setValue(bytesRecieved); - progressBar->setMaximum(bytesTotal); - } - } -} - -void PageDataDownload::fetchList() -{ - request(QUrl("http://hedgewars.org/content.html")); -} - -bool PageDataDownload::extractDataPack(QByteArray * buf) -{ - QBuffer buffer; - buffer.setBuffer(buf); - - QuaZip zip; - zip.setIoDevice(&buffer); - if(!zip.open(QuaZip::mdUnzip)) - { - qWarning("testRead(): zip.open(): %d", zip.getZipError()); - return false; - } - - QuaZipFile file(&zip); - - QDir extractDir(*cfgdir); - extractDir.cd("Data"); - - for(bool more = zip.goToFirstFile(); more; more = zip.goToNextFile()) - { - if(!file.open(QIODevice::ReadOnly)) - { - qWarning("file.open(): %d", file.getZipError()); - return false; - } - - - QString fileName = file.getActualFileName(); - QString filePath = extractDir.filePath(fileName); - if (fileName.endsWith("/")) - { - QFileInfo fi(filePath); - QDir().mkpath(fi.filePath()); - } else - { - qDebug() << "Extracting" << filePath; - QFile out(filePath); - if(!out.open(QFile::WriteOnly)) - { - qWarning() << "out.open():" << out.errorString(); - return false; - } - - out.write(file.readAll()); - - out.close(); - - if(file.getZipError() != UNZ_OK) { - qWarning("file.getFileName(): %d", file.getZipError()); - return false; - } - - if(!file.atEnd()) { - qWarning("read all but not EOF"); - return false; - } - } - - file.close(); - - if(file.getZipError()!=UNZ_OK) { - qWarning("file.close(): %d", file.getZipError()); - return false; - } - } - - zip.close(); - - return true; -}