From be3b47d0d504a3409ce66bd77bb8c0acff87c4f5 Mon Sep 17 00:00:00 2001 From: kh1 Date: Thu, 15 Mar 2012 14:53:47 +0100 Subject: Reorganize the tree, have better ifw.pri. Shadow build support. Change-Id: I01fb12537f863ed0744979973c7e4153889cc5cb Reviewed-by: Tim Jenssen --- tests/downloadspeed/downloadspeed.pro | 16 +++ tests/downloadspeed/main.cpp | 203 ++++++++++++++++++++++++++++++++++ 2 files changed, 219 insertions(+) create mode 100644 tests/downloadspeed/downloadspeed.pro create mode 100644 tests/downloadspeed/main.cpp (limited to 'tests/downloadspeed') diff --git a/tests/downloadspeed/downloadspeed.pro b/tests/downloadspeed/downloadspeed.pro new file mode 100644 index 000000000..2ee3923f1 --- /dev/null +++ b/tests/downloadspeed/downloadspeed.pro @@ -0,0 +1,16 @@ +TEMPLATE = app +DEPENDPATH += . .. +INCLUDEPATH += . .. +TARGET = downloadspeed + +include(../../installerfw.pri) + +QT -= gui +QT += network +LIBS += -linstaller + +CONFIG += console +CONFIG -= app_bundle +DESTDIR = $$IFW_APP_PATH + +SOURCES += main.cpp diff --git a/tests/downloadspeed/main.cpp b/tests/downloadspeed/main.cpp new file mode 100644 index 000000000..e0516b90b --- /dev/null +++ b/tests/downloadspeed/main.cpp @@ -0,0 +1,203 @@ +/************************************************************************** +** +** This file is part of Installer Framework +** +** Copyright (c) 2011-2012 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +**************************************************************************/ + +#include +#include + +#include +#include +#include +#include + +#include + +static QString humanReadableSize(quint64 intSize) +{ + QString unit; + double size; + + if (intSize < 1024 * 1024) { + size = 1. + intSize / 1024.; + unit = QObject::tr("kB"); + } else if (intSize < 1024 * 1024 * 1024) { + size = 1. + intSize / 1024. / 1024.; + unit = QObject::tr("MB"); + } else { + size = 1. + intSize / 1024. / 1024. / 1024.; + unit = QObject::tr("GB"); + } + + size = qRound(size * 10) / 10.0; + return QString::fromLatin1("%L1 %2").arg(size, 0, 'g', 4).arg(unit); +} + +// -- Receiver + +class Receiver : public QObject +{ + Q_OBJECT + +public: + Receiver() : QObject(), m_downloadFinished(false) {} + ~Receiver() {} + + inline bool downloaded() { return m_downloadFinished; } + +public slots: + void downloadStarted() + { + m_downloadFinished = false; + } + + void downloadFinished() + { + m_downloadFinished = true; + } + + void downloadAborted(const QString &error) + { + m_downloadFinished = true; + qDebug() << "Error:" << error; + } + + void downloadSpeed(qint64 speed) + { + qDebug() << "Download speed:" << humanReadableSize(speed) + QLatin1String("/sec"); + } + + void downloadProgress(double progress) + { + qDebug() << "Progress:" << progress; + } + + void estimatedDownloadTime(int time) + { + if (time <= 0) { + qDebug() << "Unknown time remaining."; + return; + } + + const int d = time / 86400; + const int h = (time / 3600) - (d * 24); + const int m = (time / 60) - (d * 1440) - (h * 60); + const int s = time % 60; + + QString days; + if (d > 0) + days = QString::number(d) + QLatin1String(d < 2 ? " day" : " days") + QLatin1String(", "); + + QString hours; + if (h > 0) + hours = QString::number(h) + QLatin1String(h < 2 ? " hour" : " hours") + QLatin1String(", "); + + QString minutes; + if (m > 0) + minutes = QString::number(m) + QLatin1String(m < 2 ? " minute" : " minutes"); + + QString seconds; + if (s >= 0 && minutes.isEmpty()) + seconds = QString::number(s) + QLatin1String(s < 2 ? " second" : " seconds"); + + qDebug() << days + hours + minutes + seconds + tr("remaining."); + } + + void downloadStatus(const QString &status) + { + qDebug() << status; + } + + void downloadProgress(qint64 bytesReceived, qint64 bytesToReceive) + { + qDebug() << "Bytes received:" << bytesReceived << ", Bytes to receive:" << bytesToReceive; + } + +private: + volatile bool m_downloadFinished; +}; + + +// http://get.qt.nokia.com/qt/source/qt-mac-opensource-4.7.4.dmg +// ftp://ftp.trolltech.com/qt/source/qt-mac-opensource-4.7.4.dmg + +class ProxyFactory : public KDUpdater::FileDownloaderProxyFactory +{ +public: + ProxyFactory() {} + + ProxyFactory *clone() const + { + return new ProxyFactory(); + } + + QList queryProxy(const QNetworkProxyQuery &query = QNetworkProxyQuery()) + { + return QNetworkProxyFactory::systemProxyForQuery(query); + } +}; + +int main(int argc, char *argv[]) +{ + QCoreApplication a(argc, argv); + + if (a.arguments().count() < 2) + return EXIT_FAILURE; + + const QUrl url(a.arguments().value(1)); + qDebug() << url.toString(); + KDUpdater::FileDownloader *loader = KDUpdater::FileDownloaderFactory::instance().create(url.scheme(), 0); + if (loader) { + loader->setUrl(url); + loader->setProxyFactory(new ProxyFactory()); + + Receiver r; + r.connect(loader, SIGNAL(downloadStarted()), &r, SLOT(downloadStarted())); + r.connect(loader, SIGNAL(downloadCanceled()), &r, SLOT(downloadFinished())); + r.connect(loader, SIGNAL(downloadCompleted()), &r, SLOT(downloadFinished())); + r.connect(loader, SIGNAL(downloadAborted(QString)), &r, SLOT(downloadAborted(QString))); + + r.connect(loader, SIGNAL(downloadSpeed(qint64)), &r, SLOT(downloadSpeed(qint64))); + r.connect(loader, SIGNAL(downloadStatus(QString)), &r, SLOT(downloadStatus(QString))); + r.connect(loader, SIGNAL(downloadProgress(double)), &r, SLOT(downloadProgress(double))); + r.connect(loader, SIGNAL(estimatedDownloadTime(int)), &r, SLOT(estimatedDownloadTime(int))); + r.connect(loader, SIGNAL(downloadProgress(qint64, qint64)), &r, SLOT(downloadProgress(qint64, qint64))); + + loader->download(); + while (!r.downloaded()) + QCoreApplication::processEvents(); + + delete loader; + } + + return EXIT_SUCCESS; +} + +#include "main.moc" -- cgit v1.2.3