Merge pull request #10346 from glassez/download-manager

Improve "Download manager"
This commit is contained in:
Vladimir Golovnev
2019-03-10 09:13:07 +03:00
committed by GitHub
28 changed files with 555 additions and 681 deletions

View File

@@ -40,7 +40,6 @@
#include <QTableView>
#include "base/global.h"
#include "base/net/downloadhandler.h"
#include "base/net/downloadmanager.h"
#include "base/utils/fs.h"
#include "autoexpandabledialog.h"
@@ -291,11 +290,9 @@ void PluginSelectDialog::addNewPlugin(const QString &pluginName)
else {
// Icon is missing, we must download it
using namespace Net;
DownloadHandler *handler = DownloadManager::instance()->download(
DownloadRequest(plugin->url + "/favicon.ico").saveToFile(true));
connect(handler, static_cast<void (DownloadHandler::*)(const QString &, const QString &)>(&DownloadHandler::downloadFinished)
, this, &PluginSelectDialog::iconDownloaded);
connect(handler, &DownloadHandler::downloadFailed, this, &PluginSelectDialog::iconDownloadFailed);
DownloadManager::instance()->download(
DownloadRequest(plugin->url + "/favicon.ico").saveToFile(true)
, this, &PluginSelectDialog::iconDownloadFinished);
}
item->setText(PLUGIN_VERSION, plugin->version);
}
@@ -369,9 +366,14 @@ void PluginSelectDialog::askForLocalPlugin()
}
}
void PluginSelectDialog::iconDownloaded(const QString &url, QString filePath)
void PluginSelectDialog::iconDownloadFinished(const Net::DownloadResult &result)
{
filePath = Utils::Fs::fromNativePath(filePath);
if (result.status != Net::DownloadStatus::Success) {
qDebug("Could not download favicon: %s, reason: %s", qUtf8Printable(result.url), qUtf8Printable(result.errorString));
return;
}
const QString filePath = Utils::Fs::fromNativePath(result.filePath);
// Icon downloaded
QIcon icon(filePath);
@@ -379,7 +381,7 @@ void PluginSelectDialog::iconDownloaded(const QString &url, QString filePath)
QList<QSize> sizes = icon.availableSizes();
bool invalid = (sizes.isEmpty() || icon.pixmap(sizes.first()).isNull());
if (!invalid) {
for (QTreeWidgetItem *item : asConst(findItemsWithUrl(url))) {
for (QTreeWidgetItem *item : asConst(findItemsWithUrl(result.url))) {
QString id = item->text(PLUGIN_ID);
PluginInfo *plugin = m_pluginManager->pluginInfo(id);
if (!plugin) continue;
@@ -387,7 +389,7 @@ void PluginSelectDialog::iconDownloaded(const QString &url, QString filePath)
QString iconPath = QString("%1/%2.%3")
.arg(SearchPluginManager::pluginsLocation()
, id
, url.endsWith(".ico", Qt::CaseInsensitive) ? "ico" : "png");
, result.url.endsWith(".ico", Qt::CaseInsensitive) ? "ico" : "png");
if (QFile::copy(filePath, iconPath)) {
// This 2nd check is necessary. Some favicons (eg from piratebay)
// decode fine without an ext, but fail to do so when appending the ext
@@ -409,11 +411,6 @@ void PluginSelectDialog::iconDownloaded(const QString &url, QString filePath)
Utils::Fs::forceRemove(filePath);
}
void PluginSelectDialog::iconDownloadFailed(const QString &url, const QString &reason)
{
qDebug("Could not download favicon: %s, reason: %s", qUtf8Printable(url), qUtf8Printable(reason));
}
void PluginSelectDialog::checkForUpdatesFinished(const QHash<QString, PluginVersion> &updateInfo)
{
finishAsyncOp();

View File

@@ -38,6 +38,11 @@ class QDropEvent;
class QStringList;
class QTreeWidgetItem;
namespace Net
{
struct DownloadResult;
}
namespace Ui
{
class PluginSelectDialog;
@@ -46,10 +51,11 @@ namespace Ui
class PluginSelectDialog : public QDialog
{
Q_OBJECT
Q_DISABLE_COPY(PluginSelectDialog)
public:
explicit PluginSelectDialog(SearchPluginManager *pluginManager, QWidget *parent = nullptr);
~PluginSelectDialog();
~PluginSelectDialog() override;
QList<QTreeWidgetItem*> findItemsWithUrl(const QString &url);
QTreeWidgetItem *findItemWithID(const QString &id);
@@ -69,8 +75,7 @@ private slots:
void enableSelection(bool enable);
void askForLocalPlugin();
void askForPluginUrl();
void iconDownloaded(const QString &url, QString filePath);
void iconDownloadFailed(const QString &url, const QString &reason);
void iconDownloadFinished(const Net::DownloadResult &result);
void checkForUpdatesFinished(const QHash<QString, PluginVersion> &updateInfo);
void checkForUpdatesFailed(const QString &reason);