1 /* 2 SPDX-FileCopyrightText: 2017 Kai Uwe Broulik <kde@privat.broulik.de> 3 SPDX-FileCopyrightText: 2017 David Edmundson <davidedmundson@kde.org> 4 5 SPDX-License-Identifier: MIT 6 */ 7 8 #pragma once 9 10 #include "abstractbrowserplugin.h" 11 12 #include <QString> 13 14 struct EnvironmentDescription { 15 QString applicationName; 16 QString applicationDisplayName; 17 QString desktopFileName; 18 QString organizationDomain; 19 QString organizationName; 20 QString iconName; 21 }; 22 23 namespace TaskManager 24 { 25 class WindowTasksModel; 26 } 27 28 /* 29 * This class manages the extension's settings (so that settings in the browser 30 * propagate to our extension) and also detects the environment the host is run 31 * in (e.g. whether we're started by Firefox, Chrome, Chromium, or Opera) 32 */ 33 class Settings : public AbstractBrowserPlugin 34 { 35 Q_OBJECT 36 37 public: 38 static Settings &self(); 39 40 enum class Environment { 41 Unknown, 42 Chrome, 43 Chromium, 44 Firefox, 45 Opera, 46 Vivaldi, 47 Brave, 48 Edge, 49 }; 50 Q_ENUM(Environment) 51 52 void handleData(const QString &event, const QJsonObject &data) override; 53 QJsonObject handleData(int serial, const QString &event, const QJsonObject &data) override; 54 55 Environment environment() const; 56 57 bool pluginEnabled(const QString &subsystem) const; 58 QJsonObject settingsForPlugin(const QString &subsystem) const; 59 60 Q_SIGNALS: 61 void changed(const QJsonObject &settings); 62 63 private: 64 Settings(); 65 ~Settings() override = default; 66 67 bool setEnvironmentFromTasksModelIndex(const QModelIndex &idx); 68 void setEnvironmentFromExtensionMessage(const QJsonObject &data); 69 70 static const QMap<Environment, QString> environmentNames; 71 static const QMap<Environment, EnvironmentDescription> environmentDescriptions; 72 73 Environment m_environment = Environment::Unknown; 74 EnvironmentDescription m_currentEnvironment; 75 76 QJsonObject m_settings; 77 78 TaskManager::WindowTasksModel *m_tasksModel; 79 }; 80