1
mirror of https://invent.kde.org/network/falkon.git synced 2024-12-20 10:46:35 +01:00

GM_Script: Download icon and display it in settings

This commit is contained in:
David Rosca 2018-01-29 21:54:33 +01:00
parent 4283260504
commit f9feab7d9d
No known key found for this signature in database
GPG Key ID: EBC3FC294452C6D8
3 changed files with 30 additions and 2 deletions

View File

@ -22,12 +22,15 @@
#include "delayedfilewatcher.h" #include "delayedfilewatcher.h"
#include "mainapplication.h" #include "mainapplication.h"
#include "webpage.h" #include "webpage.h"
#include "networkmanager.h"
#include <QFile> #include <QFile>
#include <QTextStream> #include <QTextStream>
#include <QStringList> #include <QStringList>
#include <QWebEngineScript> #include <QWebEngineScript>
#include <QCryptographicHash> #include <QCryptographicHash>
#include <QNetworkReply>
#include <QNetworkRequest>
GM_Script::GM_Script(GM_Manager* manager, const QString &filePath) GM_Script::GM_Script(GM_Manager* manager, const QString &filePath)
: QObject(manager) : QObject(manager)
@ -76,6 +79,11 @@ QString GM_Script::version() const
return m_version; return m_version;
} }
QIcon GM_Script::icon() const
{
return m_icon;
}
QUrl GM_Script::iconUrl() const QUrl GM_Script::iconUrl() const
{ {
return m_iconUrl; return m_iconUrl;
@ -183,6 +191,7 @@ void GM_Script::parseScript()
m_include.clear(); m_include.clear();
m_exclude.clear(); m_exclude.clear();
m_require.clear(); m_require.clear();
m_icon = QIcon();
m_iconUrl.clear(); m_iconUrl.clear();
m_downloadUrl.clear(); m_downloadUrl.clear();
m_updateUrl.clear(); m_updateUrl.clear();
@ -295,6 +304,7 @@ void GM_Script::parseScript()
m_script = QSL("(function(){%1\n%2\n%3\n})();").arg(gmValues, m_manager->requireScripts(m_require), fileData); m_script = QSL("(function(){%1\n%2\n%3\n})();").arg(gmValues, m_manager->requireScripts(m_require), fileData);
m_valid = true; m_valid = true;
downloadIcon();
downloadRequires(); downloadRequires();
} }
@ -308,6 +318,19 @@ void GM_Script::reloadScript()
emit scriptChanged(); emit scriptChanged();
} }
void GM_Script::downloadIcon()
{
if (m_iconUrl.isValid()) {
QNetworkReply *reply = mApp->networkManager()->get(QNetworkRequest(m_iconUrl));
connect(reply, &QNetworkReply::finished, this, [=]() {
reply->deleteLater();
if (reply->error() == QNetworkReply::NoError) {
m_icon = QPixmap::fromImage(QImage::fromData(reply->readAll()));
}
});
}
}
void GM_Script::downloadRequires() void GM_Script::downloadRequires()
{ {
for (const QString &url : qAsConst(m_require)) { for (const QString &url : qAsConst(m_require)) {

View File

@ -19,7 +19,7 @@
#define GM_SCRIPT_H #define GM_SCRIPT_H
#include <QObject> #include <QObject>
#include <QVector> #include <QIcon>
#include <QUrl> #include <QUrl>
class QWebEngineScript; class QWebEngineScript;
@ -44,7 +44,9 @@ public:
QString description() const; QString description() const;
QString version() const; QString version() const;
QIcon icon() const;
QUrl iconUrl() const; QUrl iconUrl() const;
QUrl downloadUrl() const; QUrl downloadUrl() const;
QUrl updateUrl() const; QUrl updateUrl() const;
@ -76,6 +78,7 @@ private slots:
private: private:
void parseScript(); void parseScript();
void reloadScript(); void reloadScript();
void downloadIcon();
void downloadRequires(); void downloadRequires();
GM_Manager* m_manager; GM_Manager* m_manager;
@ -90,6 +93,7 @@ private:
QStringList m_exclude; QStringList m_exclude;
QStringList m_require; QStringList m_require;
QIcon m_icon;
QUrl m_iconUrl; QUrl m_iconUrl;
QUrl m_downloadUrl; QUrl m_downloadUrl;
QUrl m_updateUrl; QUrl m_updateUrl;

View File

@ -1,6 +1,6 @@
/* ============================================================ /* ============================================================
* GreaseMonkey plugin for Falkon * GreaseMonkey plugin for Falkon
* Copyright (C) 2012-2017 David Rosca <nowrep@gmail.com> * Copyright (C) 2012-2018 David Rosca <nowrep@gmail.com>
* *
* This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -155,6 +155,7 @@ void GM_Settings::loadScripts()
foreach (GM_Script* script, m_manager->allScripts()) { foreach (GM_Script* script, m_manager->allScripts()) {
QListWidgetItem* item = new QListWidgetItem(ui->listWidget); QListWidgetItem* item = new QListWidgetItem(ui->listWidget);
item->setText(script->name()); item->setText(script->name());
item->setIcon(script->icon());
item->setFlags(item->flags() | Qt::ItemIsUserCheckable); item->setFlags(item->flags() | Qt::ItemIsUserCheckable);
item->setCheckState(script->isEnabled() ? Qt::Checked : Qt::Unchecked); item->setCheckState(script->isEnabled() ? Qt::Checked : Qt::Unchecked);
item->setData(Qt::UserRole + 10, QVariant::fromValue((void*)script)); item->setData(Qt::UserRole + 10, QVariant::fromValue((void*)script));