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