39#include <QWebEngineProfile>
40#include <QWebEngineScriptCollection>
44 , m_settingsPath(sPath)
61 m_settings.data()->show();
62 m_settings.data()->raise();
69 bool deleteScript =
true;
70 auto *script =
new GM_Script(
this, fileName);
71 if (script->isValid()) {
74 deleteScript = dialog.exec() != QDialog::Accepted;
83 QFile(fileName).remove();
90 return m_settingsPath;
95 return m_settingsPath +
QL1S(
"/greasemonkey");
100 QDir requiresDir(m_settingsPath +
QL1S(
"/greasemonkey/requires"));
101 if (!requiresDir.exists() || urlList.isEmpty()) {
105 QSettings settings(m_settingsPath +
QL1S(
"/greasemonkey/requires/requires.ini"), QSettings::IniFormat);
106 settings.beginGroup(
QSL(
"Files"));
110 for (
const QString &url : urlList) {
111 if (settings.contains(url)) {
112 QString fileName = settings.value(url).toString();
113 if (!QFileInfo(fileName).isAbsolute()) {
114 fileName = m_settingsPath +
QL1S(
"/greasemonkey/requires/") + fileName;
117 if (!data.isEmpty()) {
118 script.append(data +
QL1C(
'\n'));
128 return m_bootstrapScript;
133 return m_valuesScript;
139 QSettings settings(m_settingsPath +
QSL(
"/extensions.ini"), QSettings::IniFormat);
140 settings.beginGroup(
QSL(
"GreaseMonkey"));
141 settings.setValue(
QSL(
"disabledScripts"), m_disabledScripts);
144 delete m_settings.data();
147 QHashIterator<BrowserWindow*, GM_Icon*> it(m_windows);
148 while (it.hasNext()) {
161 for (
GM_Script* script : std::as_const(m_scripts)) {
162 if (fullName == script->fullName()) {
173 m_disabledScripts.removeOne(script->
fullName());
175 QWebEngineScriptCollection *collection =
mApp->webProfile()->scripts();
182 m_disabledScripts.append(script->
fullName());
184 QWebEngineScriptCollection *collection =
mApp->webProfile()->scripts();
185 for (
const auto &script : collection->find(script->
fullName())) {
186 collection->remove(script);
192 if (!script || !script->
isValid()) {
196 m_scripts.append(script);
199 QWebEngineScriptCollection *collection =
mApp->webProfile()->scripts();
212 m_scripts.removeOne(script);
214 QWebEngineScriptCollection *collection =
mApp->webProfile()->scripts();
215 for (
const auto &script : collection->find(script->
fullName())) {
216 collection->remove(script);
219 m_disabledScripts.removeOne(script->
fullName());
232 QIcon icon(
QSL(
":gm/data/icon.svg"));
234 mApp->desktopNotifications()->showNotification(icon.pixmap(48), title.isEmpty() ? tr(
"GreaseMonkey") : title, message);
237void GM_Manager::load()
239 QDir gmDir(m_settingsPath +
QL1S(
"/greasemonkey"));
240 if (!gmDir.exists()) {
241 gmDir.mkdir(m_settingsPath +
QL1S(
"/greasemonkey"));
244 if (!gmDir.exists(
QSL(
"requires"))) {
245 gmDir.mkdir(
QSL(
"requires"));
251 QSettings settings(m_settingsPath +
QL1S(
"/extensions.ini"), QSettings::IniFormat);
252 settings.beginGroup(
QSL(
"GreaseMonkey"));
253 m_disabledScripts = settings.value(
QSL(
"disabledScripts"), QStringList()).toStringList();
255 const auto fileNames = gmDir.entryList(QStringList(
QSL(
"*.js")), QDir::Files);
256 for (
const QString &fileName : fileNames) {
257 const QString absolutePath = gmDir.absoluteFilePath(fileName);
258 auto* script =
new GM_Script(
this, absolutePath);
260 if (!script->isValid()) {
265 m_scripts.append(script);
267 if (m_disabledScripts.contains(script->fullName())) {
268 script->setEnabled(
false);
271 mApp->webProfile()->scripts()->insert(script->webScript());
279void GM_Manager::scriptChanged()
281 auto *script = qobject_cast<GM_Script*>(sender());
285 QWebEngineScriptCollection *collection =
mApp->webProfile()->scripts();
286 for (
const auto &script : collection->find(script->fullName())) {
287 collection->remove(script);
289 collection->insert(script->webScript());
294 return (scheme == QLatin1String(
"http") || scheme == QLatin1String(
"https")
295 || scheme == QLatin1String(
"data") || scheme == QLatin1String(
"ftp"));
300 auto *icon =
new GM_Icon(
this);
303 m_windows[window] = icon;
308 GM_Icon *icon = m_windows.take(window);
NavigationBar * navigationBar() const
StatusBar * statusBar() const
static void unregisterExtraObject(QObject *object)
static void registerExtraObject(const QString &id, QObject *object)
void finished(const QString &fileName)
void setSettingsFile(const QString &name)
GM_Manager(const QString &sPath, QObject *parent=nullptr)
QString requireScripts(const QStringList &urlList) const
void downloadScript(const QUrl &url)
void mainWindowDeleted(BrowserWindow *window)
bool containsScript(const QString &fullName) const
bool removeScript(GM_Script *script, bool removeFile=true)
void enableScript(GM_Script *script)
void showSettings(QWidget *parent)
static bool canRunOnScheme(const QString &scheme)
QString settingsPath() const
void showNotification(const QString &message, const QString &title=QString())
QString scriptsDirectory() const
bool addScript(GM_Script *script)
QList< GM_Script * > allScripts() const
QString bootstrapScript() const
void disableScript(GM_Script *script)
void mainWindowCreated(BrowserWindow *window)
QString valuesScript() const
QWebEngineScript webScript() const
void setEnabled(bool enable)
void removeToolButton(AbstractButtonInterface *button)
void addToolButton(AbstractButtonInterface *button)
void addButton(AbstractButtonInterface *button)
void removeButton(AbstractButtonInterface *button)