diff options
Diffstat (limited to 'src/libs/kdtools/filedownloaderfactory.cpp')
-rw-r--r-- | src/libs/kdtools/filedownloaderfactory.cpp | 197 |
1 files changed, 197 insertions, 0 deletions
diff --git a/src/libs/kdtools/filedownloaderfactory.cpp b/src/libs/kdtools/filedownloaderfactory.cpp new file mode 100644 index 000000000..cebedcc30 --- /dev/null +++ b/src/libs/kdtools/filedownloaderfactory.cpp @@ -0,0 +1,197 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Klaralvdalens Datakonsult AB (KDAB) +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Installer Framework. +** +** $QT_BEGIN_LICENSE:LGPL21$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "filedownloaderfactory.h" +#include "filedownloader_p.h" + +#include <QtNetwork/QSslSocket> + +using namespace KDUpdater; + +/*! + \inmodule kdupdater + \class KDUpdater::FileDownloaderFactory + \brief The FileDownloaderFactory class acts as a factory for KDUpdater::FileDownloader. + + You can register one or more file downloaders with this factory and query them based on their + scheme. The class follows the singleton design pattern. Only one instance of this class can + be created and its reference can be fetched from the instance() method. +*/ + +/*! + Returns the file downloader factory instance. +*/ +FileDownloaderFactory& FileDownloaderFactory::instance() +{ + static KDUpdater::FileDownloaderFactory theFactory; + return theFactory; +} + +/*! + Constructs a file downloader factory and registers the default file downloader set. +*/ +FileDownloaderFactory::FileDownloaderFactory() + : d (new FileDownloaderFactoryData) +{ + // Register the default file downloader set + registerFileDownloader<LocalFileDownloader>( QLatin1String("file")); + registerFileDownloader<HttpDownloader>(QLatin1String("ftp")); + registerFileDownloader<HttpDownloader>(QLatin1String("http")); + registerFileDownloader<ResourceFileDownloader >(QLatin1String("resource")); + +#ifndef QT_NO_SSL + if (QSslSocket::supportsSsl()) + registerFileDownloader<HttpDownloader>(QLatin1String("https")); + else + qWarning() << "Cannot register file downloader for https protocol: QSslSocket::supportsSsl() returns false"; +#endif + + d->m_followRedirects = false; +} + +/*! + Returns whether redirects should be followed. +*/ +bool FileDownloaderFactory::followRedirects() +{ + return FileDownloaderFactory::instance().d->m_followRedirects; +} + +/*! + Determines that redirects should be followed if \a val is \c true. +*/ +void FileDownloaderFactory::setFollowRedirects(bool val) +{ + FileDownloaderFactory::instance().d->m_followRedirects = val; +} + +/*! + Sets \a factory as the file downloader proxy factory. +*/ +void FileDownloaderFactory::setProxyFactory(FileDownloaderProxyFactory *factory) +{ + delete FileDownloaderFactory::instance().d->m_factory; + FileDownloaderFactory::instance().d->m_factory = factory; +} + +/*! + Returns \c true if SSL errors should be ignored. +*/ +bool FileDownloaderFactory::ignoreSslErrors() +{ + return FileDownloaderFactory::instance().d->m_ignoreSslErrors; +} + +/*! + Determines that SSL errors should be ignored if \a ignore is \c true. +*/ +void FileDownloaderFactory::setIgnoreSslErrors(bool ignore) +{ + FileDownloaderFactory::instance().d->m_ignoreSslErrors = ignore; +} + +/*! + Destroys the file downloader factory. +*/ +FileDownloaderFactory::~FileDownloaderFactory() +{ + delete d; +} + +/*! + Returns a list of supported schemes. +*/ +QStringList FileDownloaderFactory::supportedSchemes() +{ + return FileDownloaderFactory::instance().d->m_supportedSchemes; +} + +/*! + Returns \c true if \a scheme is a supported scheme. +*/ +bool FileDownloaderFactory::isSupportedScheme(const QString &scheme) +{ + return FileDownloaderFactory::instance().d->m_supportedSchemes.contains(scheme + , Qt::CaseInsensitive); +} + +/*! + Returns a new instance of a KDUpdater::FileDownloader subclass. The + instantiation of a subclass depends on the communication protocol string + stored in \a scheme with the parent \a parent. + + \note Ownership of the created object remains with the programmer. +*/ +FileDownloader *FileDownloaderFactory::create(const QString &scheme, QObject *parent) const +{ + FileDownloader *downloader = + GenericFactory<FileDownloader, QString, QObject*>::create(scheme, parent); + if (downloader != 0) { + downloader->setFollowRedirects(d->m_followRedirects); + downloader->setIgnoreSslErrors(d->m_ignoreSslErrors); + if (d->m_factory) + downloader->setProxyFactory(d->m_factory->clone()); + } + return downloader; +} + +/*! + \fn void KDUpdater::FileDownloaderFactory::registerFileDownloader(const QString &scheme) + + Registers a new file downloader with the factory based on \a scheme. If there is already + a downloader with the same scheme, the downloader is replaced. When create() is called + with that \a scheme, the file downloader is constructed using its default constructor. +*/ + +/*! + \inmodule kdupdater + \class KDUpdater::FileDownloaderProxyFactory + \brief The FileDownloaderProxyFactory class provides fine-grained proxy selection. + + File downloader objects use a proxy factory to determine a more specific + list of proxies to be used for a given request, instead of trying to use the + same proxy value for all requests. This might only be of use for HTTP or FTP + requests. +*/ + +/*! + \fn FileDownloaderProxyFactory::~FileDownloaderProxyFactory() + + Destroys the file downloader proxy factory. +*/ + +/*! + \fn FileDownloaderProxyFactory::clone() const + + Clones a file downloader proxy factory. +*/ |