From 0153bee4a34870980350db54c7bcb3ef707105a1 Mon Sep 17 00:00:00 2001 From: Elias Steurer Date: Fri, 13 Nov 2020 11:49:17 +0100 Subject: [PATCH] Add not yet working WebSocketServer --- ScreenPlay/src/screenplaymanager.cpp | 17 +++++++++++--- ScreenPlay/src/screenplaymanager.h | 4 ++++ ScreenPlay/src/settings.cpp | 14 ++++++++++++ ScreenPlay/src/settings.h | 34 +++++++++++++++++++++++++++- 4 files changed, 65 insertions(+), 4 deletions(-) diff --git a/ScreenPlay/src/screenplaymanager.cpp b/ScreenPlay/src/screenplaymanager.cpp index 6e6e9fc9..0904cd8f 100644 --- a/ScreenPlay/src/screenplaymanager.cpp +++ b/ScreenPlay/src/screenplaymanager.cpp @@ -19,7 +19,6 @@ namespace ScreenPlay { ScreenPlayManager::ScreenPlayManager( QObject* parent) : QObject { parent } - , m_server { std::make_unique() } { if (checkIsAnotherScreenPlayInstanceRunning()) { @@ -27,6 +26,8 @@ ScreenPlayManager::ScreenPlayManager( return; } + m_server = std::make_unique(); + QObject::connect(m_server.get(), &QLocalServer::newConnection, this, &ScreenPlayManager::newConnection); m_server->setSocketOptions(QLocalServer::WorldAccessOption); if (!m_server->listen("ScreenPlay")) { @@ -76,6 +77,16 @@ void ScreenPlayManager::init( m_monitorListModel = mlm; m_telemetry = telemetry; m_settings = settings; + + if (m_settings->desktopEnvironment() == Settings::DesktopEnvironment::KDE) { + m_websocketServer = std::make_unique(QStringLiteral("ScreenPlayWebSocket"), QWebSocketServer::SslMode::NonSecureMode); + m_websocketServer->listen(QHostAddress::Any, m_webSocketPort); + QObject::connect(m_websocketServer.get(), &QWebSocketServer::newConnection, this, [this]() { + qInfo() << "New Websocket Connection"; + auto* socket = m_websocketServer->nextPendingConnection(); + }); + } + loadProfiles(); } @@ -388,7 +399,7 @@ void ScreenPlayManager::newConnection() */ void ScreenPlayManager::closeAllWallpapers() { - if(m_screenPlayWallpapers.empty() && m_activeWallpaperCounter == 0) + if (m_screenPlayWallpapers.empty() && m_activeWallpaperCounter == 0) return; closeConntectionByType(GlobalVariables::getAvailableWallpaper()); @@ -405,7 +416,7 @@ void ScreenPlayManager::closeAllWallpapers() */ void ScreenPlayManager::closeAllWidgets() { - if(m_screenPlayWidgets.empty() && m_activeWidgetsCounter == 0) + if (m_screenPlayWidgets.empty() && m_activeWidgetsCounter == 0) return; closeConntectionByType(GlobalVariables::getAvailableWidgets()); diff --git a/ScreenPlay/src/screenplaymanager.h b/ScreenPlay/src/screenplaymanager.h index c934e065..40a8a5f2 100644 --- a/ScreenPlay/src/screenplaymanager.h +++ b/ScreenPlay/src/screenplaymanager.h @@ -38,6 +38,7 @@ #include #include #include +#include #include "ganalytics.h" #include "globalvariables.h" @@ -199,6 +200,7 @@ private: std::shared_ptr m_telemetry; std::shared_ptr m_settings; std::unique_ptr m_server; + std::unique_ptr m_websocketServer; QVector> m_screenPlayWallpapers; QVector> m_screenPlayWidgets; @@ -208,6 +210,8 @@ private: bool m_isAnotherScreenPlayInstanceRunning = false; QTimer m_saveLimiter; + + const quint16 m_webSocketPort = 16395; }; } diff --git a/ScreenPlay/src/settings.cpp b/ScreenPlay/src/settings.cpp index 5bfe5364..0bed95cb 100644 --- a/ScreenPlay/src/settings.cpp +++ b/ScreenPlay/src/settings.cpp @@ -40,6 +40,7 @@ Settings::Settings(const std::shared_ptr& globalVariables, qRegisterMetaType("Settings::Language"); qRegisterMetaType("Settings::Theme"); + qRegisterMetaType("Settings::DesktopEnvironment"); qmlRegisterUncreatableType("Settings", 1, 0, "Settings", "Error only for enums"); @@ -119,6 +120,19 @@ Settings::Settings(const std::shared_ptr& globalVariables, setupWidgetAndWindowPaths(); setGitBuildHash(COMPILE_INFO); + +#ifdef Q_OS_WIN + setDesktopEnvironment(DesktopEnvironment::Windows); +#endif + +#ifdef Q_OS_OSX + setDesktopEnvironment(DesktopEnvironment::OSX); +#endif + +#ifdef Q_OS_LINUX + // We only support KDE for now + setDesktopEnvironment(DesktopEnvironment::KDE); +#endif } /*! diff --git a/ScreenPlay/src/settings.h b/ScreenPlay/src/settings.h index a4574ecd..f66a2fda 100644 --- a/ScreenPlay/src/settings.h +++ b/ScreenPlay/src/settings.h @@ -50,6 +50,7 @@ #include #include #include +#include #include #include #include @@ -84,6 +85,7 @@ class Settings : public QObject { Q_PROPERTY(bool steamVersion READ steamVersion WRITE setSteamVersion NOTIFY steamVersionChanged) Q_PROPERTY(ScreenPlay::FillMode::FillMode videoFillMode READ videoFillMode WRITE setVideoFillMode NOTIFY videoFillModeChanged) + Q_PROPERTY(DesktopEnvironment desktopEnvironment READ desktopEnvironment WRITE setDesktopEnvironment NOTIFY desktopEnvironmentChanged) Q_PROPERTY(Language language READ language WRITE setLanguage NOTIFY languageChanged) Q_PROPERTY(Theme theme READ theme WRITE setTheme NOTIFY themeChanged) @@ -96,6 +98,21 @@ public: const std::shared_ptr& globalVariables, QObject* parent = nullptr); + enum class DesktopEnvironment { + Unknown, + OSX, + Windows, + Cinnamon, + Enlightenment, + Gnome, + KDE, + Lxde, + Lxqt, + Mate, + Unity, + XFCE, + }; + enum class Language { En, De, @@ -188,6 +205,11 @@ public: return m_steamVersion; } + DesktopEnvironment desktopEnvironment() const + { + return m_desktopEnvironment; + } + signals: void requestRetranslation(); void resetInstalledListmodel(); @@ -206,8 +228,8 @@ signals: void languageChanged(ScreenPlay::Settings::Language language); void fontChanged(QString font); void themeChanged(ScreenPlay::Settings::Theme theme); - void steamVersionChanged(bool steamVersion); + void desktopEnvironmentChanged(DesktopEnvironment desktopEnvironment); public slots: void writeJsonFileFromResource(const QString& filename); @@ -397,6 +419,15 @@ public slots: emit steamVersionChanged(m_steamVersion); } + void setDesktopEnvironment(DesktopEnvironment desktopEnvironment) + { + if (m_desktopEnvironment == desktopEnvironment) + return; + + m_desktopEnvironment = desktopEnvironment; + emit desktopEnvironmentChanged(m_desktopEnvironment); + } + private: void restoreDefault(const QString& appConfigLocation, const QString& settingsFileType); @@ -420,5 +451,6 @@ private: Theme m_theme { Theme::System }; QString m_font { "Roboto" }; bool m_steamVersion { false }; + DesktopEnvironment m_desktopEnvironment = DesktopEnvironment::Unknown; }; }