File indexing completed on 2024-04-28 16:51:33

0001 /*
0002     SPDX-FileCopyrightText: 2017 Kai Uwe Broulik <kde@privat.broulik.de>
0003     SPDX-FileCopyrightText: 2017 David Edmundson <davidedmundson@kde.org>
0004 
0005     SPDX-License-Identifier: MIT
0006 */
0007 
0008 #pragma once
0009 
0010 #include "abstractbrowserplugin.h"
0011 
0012 #include <QString>
0013 
0014 struct EnvironmentDescription {
0015     QString applicationName;
0016     QString applicationDisplayName;
0017     QString desktopFileName;
0018     QString organizationDomain;
0019     QString organizationName;
0020     QString iconName;
0021 };
0022 
0023 namespace TaskManager
0024 {
0025 class WindowTasksModel;
0026 }
0027 
0028 /*
0029  * This class manages the extension's settings (so that settings in the browser
0030  * propagate to our extension) and also detects the environment the host is run
0031  * in (e.g. whether we're started by Firefox, Chrome, Chromium, or Opera)
0032  */
0033 class Settings : public AbstractBrowserPlugin
0034 {
0035     Q_OBJECT
0036 
0037 public:
0038     static Settings &self();
0039 
0040     enum class Environment {
0041         Unknown,
0042         Chrome,
0043         Chromium,
0044         Firefox,
0045         Opera,
0046         Vivaldi,
0047         Brave,
0048         Edge,
0049     };
0050     Q_ENUM(Environment)
0051 
0052     void handleData(const QString &event, const QJsonObject &data) override;
0053     QJsonObject handleData(int serial, const QString &event, const QJsonObject &data) override;
0054 
0055     Environment environment() const;
0056 
0057     bool pluginEnabled(const QString &subsystem) const;
0058     QJsonObject settingsForPlugin(const QString &subsystem) const;
0059 
0060 Q_SIGNALS:
0061     void changed(const QJsonObject &settings);
0062 
0063 private:
0064     Settings();
0065     ~Settings() override = default;
0066 
0067     bool setEnvironmentFromTasksModelIndex(const QModelIndex &idx);
0068     void setEnvironmentFromExtensionMessage(const QJsonObject &data);
0069 
0070     static const QMap<Environment, QString> environmentNames;
0071     static const QMap<Environment, EnvironmentDescription> environmentDescriptions;
0072 
0073     Environment m_environment = Environment::Unknown;
0074     EnvironmentDescription m_currentEnvironment;
0075 
0076     QJsonObject m_settings;
0077 
0078     TaskManager::WindowTasksModel *m_tasksModel;
0079 };