29#include <QNetworkReply>
35 m_reply =
mApp->networkManager()->get(QNetworkRequest(url));
37 connect(m_reply, &QNetworkReply::finished,
this, &GM_Downloader::scriptDownloaded);
39 connect(m_reply, &QNetworkReply::finished,
this, &GM_Downloader::requireDownloaded);
45 m_fileName = fileName;
48void GM_Downloader::scriptDownloaded()
50 Q_ASSERT(m_reply == qobject_cast<QNetworkReply*>(sender()));
53 m_reply->deleteLater();
55 if (m_reply->error() != QNetworkReply::NoError) {
56 qWarning() <<
"GreaseMonkey: Cannot download script" << m_reply->errorString();
61 const QByteArray response = QString::fromUtf8(m_reply->readAll()).toUtf8();
63 if (!response.contains(QByteArray(
"// ==UserScript=="))) {
64 qWarning() <<
"GreaseMonkey: Script does not contain UserScript header" << m_reply->request().url();
69 if (m_fileName.isEmpty()) {
74 QFile file(m_fileName);
76 if (!file.open(QFile::WriteOnly)) {
77 qWarning() <<
"GreaseMonkey: Cannot open file for writing" << m_fileName;
88void GM_Downloader::requireDownloaded()
90 Q_ASSERT(m_reply == qobject_cast<QNetworkReply*>(sender()));
93 m_reply->deleteLater();
95 if (m_reply != qobject_cast<QNetworkReply*>(sender())) {
100 if (m_reply->error() != QNetworkReply::NoError) {
101 qWarning() <<
"GreaseMonkey: Cannot download require script" << m_reply->errorString();
106 const QByteArray response = QString::fromUtf8(m_reply->readAll()).toUtf8();
108 if (response.isEmpty()) {
109 qWarning() <<
"GreaseMonkey: Empty script downloaded" << m_reply->request().url();
114 QSettings settings(m_manager->
settingsPath() +
QL1S(
"/greasemonkey/requires/requires.ini"), QSettings::IniFormat);
115 settings.beginGroup(
"Files");
117 if (m_fileName.isEmpty()) {
118 m_fileName = settings.value(m_reply->request().url().toString()).toString();
119 if (m_fileName.isEmpty()) {
120 QString name = QFileInfo(m_reply->request().url().path()).fileName();
121 if (name.isEmpty()) {
122 name =
QSL(
"require.js");
123 }
else if (!name.endsWith(
QL1S(
".js"))) {
124 name.append(
QSL(
".js"));
126 const QString filePath = m_manager->
settingsPath() +
QL1S(
"/greasemonkey/requires/") + name;
129 if (!QFileInfo(m_fileName).isAbsolute()) {
130 m_fileName.prepend(m_manager->
settingsPath() +
QL1S(
"/greasemonkey/requires/"));
134 QFile file(m_fileName);
136 if (!file.open(QFile::WriteOnly)) {
137 qWarning() <<
"GreaseMonkey: Cannot open file for writing" << m_fileName;
142 file.write(response);
145 settings.setValue(m_reply->request().url().toString(), QFileInfo(m_fileName).fileName());
void updateScript(const QString &fileName)
void finished(const QString &fileName)
GM_Downloader(const QUrl &url, GM_Manager *manager, Mode mode=DownloadMainScript)
QString settingsPath() const
QString scriptsDirectory() const