mirror of
https://gitlab.com/kelteseth/ScreenPlay.git
synced 2024-11-09 12:32:40 +01:00
Merge SDKConnector into ScreenPlayManager
This commit is contained in:
parent
49b75a463a
commit
3ba635a077
@ -32,7 +32,6 @@ set(src main.cpp
|
|||||||
src/settings.cpp
|
src/settings.cpp
|
||||||
src/profilelistmodel.cpp
|
src/profilelistmodel.cpp
|
||||||
src/installedlistfilter.cpp
|
src/installedlistfilter.cpp
|
||||||
src/sdkconnector.cpp
|
|
||||||
src/projectsettingslistmodel.cpp
|
src/projectsettingslistmodel.cpp
|
||||||
src/screenplaymanager.cpp
|
src/screenplaymanager.cpp
|
||||||
src/sdkconnection.cpp
|
src/sdkconnection.cpp
|
||||||
@ -52,7 +51,6 @@ set(headers app.h
|
|||||||
src/profile.h
|
src/profile.h
|
||||||
src/projectfile.h
|
src/projectfile.h
|
||||||
src/installedlistfilter.h
|
src/installedlistfilter.h
|
||||||
src/sdkconnector.h
|
|
||||||
src/projectsettingslistitem.h
|
src/projectsettingslistitem.h
|
||||||
src/projectsettingslistmodel.h
|
src/projectsettingslistmodel.h
|
||||||
src/screenplaymanager.h
|
src/screenplaymanager.h
|
||||||
|
@ -28,7 +28,6 @@ namespace ScreenPlay {
|
|||||||
Create--> CreateVideoImport
|
Create--> CreateVideoImport
|
||||||
App --> Util
|
App --> Util
|
||||||
App --> Settings
|
App --> Settings
|
||||||
App --> SDKConnector
|
|
||||||
App --> InstalledListModel
|
App --> InstalledListModel
|
||||||
InstalledListModel --> ProjectFile
|
InstalledListModel --> ProjectFile
|
||||||
App --> InstalledListFilter
|
App --> InstalledListFilter
|
||||||
@ -79,7 +78,6 @@ App::App()
|
|||||||
qRegisterMetaType<ScreenPlayManager*>();
|
qRegisterMetaType<ScreenPlayManager*>();
|
||||||
qRegisterMetaType<Util*>();
|
qRegisterMetaType<Util*>();
|
||||||
qRegisterMetaType<Create*>();
|
qRegisterMetaType<Create*>();
|
||||||
qRegisterMetaType<SDKConnector*>();
|
|
||||||
qRegisterMetaType<Settings*>();
|
qRegisterMetaType<Settings*>();
|
||||||
|
|
||||||
qRegisterMetaType<InstalledListModel*>();
|
qRegisterMetaType<InstalledListModel*>();
|
||||||
@ -111,17 +109,15 @@ App::App()
|
|||||||
"SearchType",
|
"SearchType",
|
||||||
"Error: only enums");
|
"Error: only enums");
|
||||||
|
|
||||||
|
|
||||||
qmlRegisterAnonymousType<GlobalVariables>("ScreenPlay", 1);
|
qmlRegisterAnonymousType<GlobalVariables>("ScreenPlay", 1);
|
||||||
qmlRegisterAnonymousType<ScreenPlayManager>("ScreenPlay", 1);
|
qmlRegisterAnonymousType<ScreenPlayManager>("ScreenPlay", 1);
|
||||||
qmlRegisterAnonymousType<Util>("ScreenPlay", 1);
|
qmlRegisterAnonymousType<Util>("ScreenPlay", 1);
|
||||||
qmlRegisterAnonymousType<Create>("ScreenPlay", 1);
|
qmlRegisterAnonymousType<Create>("ScreenPlay", 1);
|
||||||
qmlRegisterAnonymousType<Settings>("ScreenPlay", 1);
|
qmlRegisterAnonymousType<Settings>("ScreenPlay", 1);
|
||||||
qmlRegisterAnonymousType<SDKConnector>("ScreenPlay", 1);
|
|
||||||
|
|
||||||
// SDKConnect first to check if another ScreenPlay Instace is running
|
// ScreenPlayManager first to check if another ScreenPlay Instace is running
|
||||||
m_sdkConnector = std::make_shared<SDKConnector>();
|
m_screenPlayManager = std::make_unique<ScreenPlayManager>();
|
||||||
m_isAnotherScreenPlayInstanceRunning = m_sdkConnector->m_isAnotherScreenPlayInstanceRunning;
|
m_isAnotherScreenPlayInstanceRunning = m_screenPlayManager->isAnotherScreenPlayInstanceRunning();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@ -144,6 +140,7 @@ void App::init()
|
|||||||
m_profileListModel = make_shared<ProfileListModel>(m_globalVariables);
|
m_profileListModel = make_shared<ProfileListModel>(m_globalVariables);
|
||||||
m_settings = make_shared<Settings>(m_globalVariables);
|
m_settings = make_shared<Settings>(m_globalVariables);
|
||||||
m_mainWindowEngine = make_unique<QQmlApplicationEngine>();
|
m_mainWindowEngine = make_unique<QQmlApplicationEngine>();
|
||||||
|
m_screenPlayManager->init(m_globalVariables, m_monitorListModel, m_telemetry, m_settings);
|
||||||
|
|
||||||
// Only create tracker if user did not disallow!
|
// Only create tracker if user did not disallow!
|
||||||
if (m_settings->anonymousTelemetry()) {
|
if (m_settings->anonymousTelemetry()) {
|
||||||
@ -155,8 +152,6 @@ void App::init()
|
|||||||
}
|
}
|
||||||
|
|
||||||
m_create = make_unique<Create>(m_globalVariables);
|
m_create = make_unique<Create>(m_globalVariables);
|
||||||
m_screenPlayManager = make_unique<ScreenPlayManager>(m_globalVariables, m_monitorListModel, m_sdkConnector, m_telemetry, m_settings);
|
|
||||||
QObject::connect(m_sdkConnector.get(), &SDKConnector::requestDecreaseWidgetCount, m_screenPlayManager.get(), &ScreenPlayManager::decreaseActiveWidgetsCounter);
|
|
||||||
|
|
||||||
// When the installed storage path changed
|
// When the installed storage path changed
|
||||||
QObject::connect(m_settings.get(), &Settings::resetInstalledListmodel, m_installedListModel.get(), &InstalledListModel::reset);
|
QObject::connect(m_settings.get(), &Settings::resetInstalledListmodel, m_installedListModel.get(), &InstalledListModel::reset);
|
||||||
@ -167,7 +162,7 @@ void App::init()
|
|||||||
m_settings->resetInstalledListmodel();
|
m_settings->resetInstalledListmodel();
|
||||||
m_settings->setqSetting("ScreenPlayContentPath", localStoragePath.toString());
|
m_settings->setqSetting("ScreenPlayContentPath", localStoragePath.toString());
|
||||||
});
|
});
|
||||||
QObject::connect(m_monitorListModel.get(), &MonitorListModel::monitorConfigurationChanged, m_sdkConnector.get(), &SDKConnector::closeAllWallpapers);
|
QObject::connect(m_monitorListModel.get(), &MonitorListModel::monitorConfigurationChanged, m_screenPlayManager.get(), &ScreenPlayManager::closeAllWallpapers);
|
||||||
|
|
||||||
// Init after we have the paths from settings
|
// Init after we have the paths from settings
|
||||||
m_installedListModel->init();
|
m_installedListModel->init();
|
||||||
|
@ -60,7 +60,6 @@
|
|||||||
#include "src/monitorlistmodel.h"
|
#include "src/monitorlistmodel.h"
|
||||||
#include "src/profilelistmodel.h"
|
#include "src/profilelistmodel.h"
|
||||||
#include "src/screenplaymanager.h"
|
#include "src/screenplaymanager.h"
|
||||||
#include "src/sdkconnector.h"
|
|
||||||
#include "src/settings.h"
|
#include "src/settings.h"
|
||||||
#include "src/util.h"
|
#include "src/util.h"
|
||||||
|
|
||||||
@ -75,7 +74,6 @@ class App : public QObject {
|
|||||||
Q_PROPERTY(Create* create READ create WRITE setCreate NOTIFY createChanged)
|
Q_PROPERTY(Create* create READ create WRITE setCreate NOTIFY createChanged)
|
||||||
Q_PROPERTY(Util* util READ util WRITE setUtil NOTIFY utilChanged)
|
Q_PROPERTY(Util* util READ util WRITE setUtil NOTIFY utilChanged)
|
||||||
Q_PROPERTY(Settings* settings READ settings WRITE setSettings NOTIFY settingsChanged)
|
Q_PROPERTY(Settings* settings READ settings WRITE setSettings NOTIFY settingsChanged)
|
||||||
Q_PROPERTY(SDKConnector* sdkConnector READ sdkConnector WRITE setSdkConnector NOTIFY sdkConnectorChanged)
|
|
||||||
|
|
||||||
Q_PROPERTY(InstalledListModel* installedListModel READ installedListModel WRITE setInstalledListModel NOTIFY installedListModelChanged)
|
Q_PROPERTY(InstalledListModel* installedListModel READ installedListModel WRITE setInstalledListModel NOTIFY installedListModelChanged)
|
||||||
Q_PROPERTY(InstalledListFilter* installedListFilter READ installedListFilter WRITE setInstalledListFilter NOTIFY installedListFilterChanged)
|
Q_PROPERTY(InstalledListFilter* installedListFilter READ installedListFilter WRITE setInstalledListFilter NOTIFY installedListFilterChanged)
|
||||||
@ -133,10 +131,6 @@ public:
|
|||||||
return m_installedListFilter.get();
|
return m_installedListFilter.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
SDKConnector* sdkConnector() const
|
|
||||||
{
|
|
||||||
return m_sdkConnector.get();
|
|
||||||
}
|
|
||||||
|
|
||||||
QQmlApplicationEngine* mainWindowEngine() const
|
QQmlApplicationEngine* mainWindowEngine() const
|
||||||
{
|
{
|
||||||
@ -153,7 +147,6 @@ signals:
|
|||||||
void monitorListModelChanged(MonitorListModel* monitorListModel);
|
void monitorListModelChanged(MonitorListModel* monitorListModel);
|
||||||
void profileListModelChanged(ProfileListModel* profileListModel);
|
void profileListModelChanged(ProfileListModel* profileListModel);
|
||||||
void installedListFilterChanged(InstalledListFilter* installedListFilter);
|
void installedListFilterChanged(InstalledListFilter* installedListFilter);
|
||||||
void sdkConnectorChanged(SDKConnector* sdkConnector);
|
|
||||||
void mainWindowEngineChanged(QQmlApplicationEngine* mainWindowEngine);
|
void mainWindowEngineChanged(QQmlApplicationEngine* mainWindowEngine);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
@ -245,14 +238,6 @@ public slots:
|
|||||||
emit installedListFilterChanged(m_installedListFilter.get());
|
emit installedListFilterChanged(m_installedListFilter.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
void setSdkConnector(SDKConnector* sdkConnector)
|
|
||||||
{
|
|
||||||
if (m_sdkConnector.get() == sdkConnector)
|
|
||||||
return;
|
|
||||||
|
|
||||||
m_sdkConnector.reset(sdkConnector);
|
|
||||||
emit sdkConnectorChanged(m_sdkConnector.get());
|
|
||||||
}
|
|
||||||
|
|
||||||
void setMainWindowEngine(QQmlApplicationEngine* mainWindowEngine)
|
void setMainWindowEngine(QQmlApplicationEngine* mainWindowEngine)
|
||||||
{
|
{
|
||||||
@ -273,7 +258,6 @@ private:
|
|||||||
std::shared_ptr<GAnalytics> m_telemetry;
|
std::shared_ptr<GAnalytics> m_telemetry;
|
||||||
std::shared_ptr<GlobalVariables> m_globalVariables;
|
std::shared_ptr<GlobalVariables> m_globalVariables;
|
||||||
std::shared_ptr<Settings> m_settings;
|
std::shared_ptr<Settings> m_settings;
|
||||||
std::shared_ptr<SDKConnector> m_sdkConnector;
|
|
||||||
|
|
||||||
std::shared_ptr<InstalledListModel> m_installedListModel;
|
std::shared_ptr<InstalledListModel> m_installedListModel;
|
||||||
std::shared_ptr<MonitorListModel> m_monitorListModel;
|
std::shared_ptr<MonitorListModel> m_monitorListModel;
|
||||||
|
@ -123,7 +123,7 @@ ApplicationWindow {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Connections {
|
Connections {
|
||||||
target: ScreenPlay.sdkConnector
|
target: ScreenPlay.screenPlayManager
|
||||||
function onRequestRaise() {
|
function onRequestRaise() {
|
||||||
window.show()
|
window.show()
|
||||||
}
|
}
|
||||||
|
@ -16,20 +16,57 @@ namespace ScreenPlay {
|
|||||||
\brief Constructor-.
|
\brief Constructor-.
|
||||||
*/
|
*/
|
||||||
ScreenPlayManager::ScreenPlayManager(
|
ScreenPlayManager::ScreenPlayManager(
|
||||||
const std::shared_ptr<GlobalVariables>& globalVariables,
|
|
||||||
const std::shared_ptr<MonitorListModel>& mlm,
|
|
||||||
const std::shared_ptr<SDKConnector>& sdkc,
|
|
||||||
const std::shared_ptr<GAnalytics>& telemetry,
|
|
||||||
const std::shared_ptr<Settings>& settings,
|
|
||||||
QObject* parent)
|
QObject* parent)
|
||||||
: QObject { parent }
|
: QObject { parent }
|
||||||
, m_globalVariables { globalVariables }
|
|
||||||
, m_monitorListModel { mlm }
|
, m_server { std::make_unique<QLocalServer>() }
|
||||||
, m_sdkconnector { sdkc }
|
|
||||||
, m_telemetry { telemetry }
|
|
||||||
, m_settings { settings }
|
|
||||||
{
|
{
|
||||||
QObject::connect(m_sdkconnector.get(), &SDKConnector::appConnected, this, &ScreenPlayManager::appConnected);
|
|
||||||
|
if (checkIsAnotherScreenPlayInstanceRunning()) {
|
||||||
|
m_isAnotherScreenPlayInstanceRunning = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
QObject::connect(m_server.get(), &QLocalServer::newConnection, this, &ScreenPlayManager::newConnection);
|
||||||
|
m_server->setSocketOptions(QLocalServer::WorldAccessOption);
|
||||||
|
if (!m_server->listen("ScreenPlay")) {
|
||||||
|
qCritical("Could not open Local Socket with the name ScreenPlay!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief Checks if another ScreenPlay instance is running by trying to connect to a pipe
|
||||||
|
with the name ScreenPlay.
|
||||||
|
If successful we send a raise command and quit via m_isAnotherScreenPlayInstanceRunning = true.
|
||||||
|
*/
|
||||||
|
bool ScreenPlayManager::checkIsAnotherScreenPlayInstanceRunning()
|
||||||
|
{
|
||||||
|
QLocalSocket socket;
|
||||||
|
socket.connectToServer("ScreenPlay");
|
||||||
|
|
||||||
|
if (!socket.isOpen()) {
|
||||||
|
socket.close();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
qInfo("Another ScreenPlay app is already running!");
|
||||||
|
QByteArray msg = "command=requestRaise";
|
||||||
|
socket.write(msg);
|
||||||
|
socket.waitForBytesWritten(500);
|
||||||
|
socket.close();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ScreenPlayManager::init(
|
||||||
|
const std::shared_ptr<GlobalVariables>& globalVariables,
|
||||||
|
const std::shared_ptr<MonitorListModel>& mlm,
|
||||||
|
const std::shared_ptr<GAnalytics>& telemetry,
|
||||||
|
const std::shared_ptr<Settings>& settings)
|
||||||
|
{
|
||||||
|
m_globalVariables = globalVariables;
|
||||||
|
m_monitorListModel = mlm;
|
||||||
|
m_telemetry = telemetry;
|
||||||
|
m_settings = settings;
|
||||||
loadProfiles();
|
loadProfiles();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -95,7 +132,6 @@ void ScreenPlayManager::createWallpaper(
|
|||||||
wallpaper = std::make_shared<ScreenPlayWallpaper>(
|
wallpaper = std::make_shared<ScreenPlayWallpaper>(
|
||||||
monitorIndex,
|
monitorIndex,
|
||||||
m_globalVariables,
|
m_globalVariables,
|
||||||
m_sdkconnector,
|
|
||||||
appID,
|
appID,
|
||||||
path,
|
path,
|
||||||
previewImage,
|
previewImage,
|
||||||
@ -166,7 +202,7 @@ void ScreenPlayManager::removeAllWallpapers()
|
|||||||
{
|
{
|
||||||
if (!m_screenPlayWallpapers.empty()) {
|
if (!m_screenPlayWallpapers.empty()) {
|
||||||
|
|
||||||
m_sdkconnector->closeAllWallpapers();
|
closeAllWallpapers();
|
||||||
m_screenPlayWallpapers.clear();
|
m_screenPlayWallpapers.clear();
|
||||||
|
|
||||||
m_monitorListModel->clearActiveWallpaper();
|
m_monitorListModel->clearActiveWallpaper();
|
||||||
@ -195,7 +231,7 @@ void ScreenPlayManager::removeAllWallpapers()
|
|||||||
void ScreenPlayManager::removeAllWidgets()
|
void ScreenPlayManager::removeAllWidgets()
|
||||||
{
|
{
|
||||||
if (!m_screenPlayWidgets.empty()) {
|
if (!m_screenPlayWidgets.empty()) {
|
||||||
m_sdkconnector->closeAllWidgets();
|
closeAllWidgets();
|
||||||
m_screenPlayWidgets.clear();
|
m_screenPlayWidgets.clear();
|
||||||
saveProfiles();
|
saveProfiles();
|
||||||
setActiveWidgetsCounter(0);
|
setActiveWidgetsCounter(0);
|
||||||
@ -213,7 +249,7 @@ bool ScreenPlayManager::removeWallpaperAt(int index)
|
|||||||
if (auto appID = m_monitorListModel->getAppIDByMonitorIndex(index)) {
|
if (auto appID = m_monitorListModel->getAppIDByMonitorIndex(index)) {
|
||||||
saveProfiles();
|
saveProfiles();
|
||||||
|
|
||||||
if (!m_sdkconnector->closeWallpaper(*appID)) {
|
if (!closeWallpaper(*appID)) {
|
||||||
qWarning() << "Could not close socket. Abort!";
|
qWarning() << "Could not close socket. Abort!";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -262,7 +298,7 @@ void ScreenPlayManager::setWallpaperValueAtMonitorIndex(const int index, const Q
|
|||||||
{
|
{
|
||||||
if (auto appID = m_monitorListModel->getAppIDByMonitorIndex(index)) {
|
if (auto appID = m_monitorListModel->getAppIDByMonitorIndex(index)) {
|
||||||
|
|
||||||
m_sdkconnector->setWallpaperValue(*appID, key, value);
|
setWallpaperValue(*appID, key, value);
|
||||||
|
|
||||||
if (auto wallpaper = getWallpaperByAppID(*appID)) {
|
if (auto wallpaper = getWallpaperByAppID(*appID)) {
|
||||||
}
|
}
|
||||||
@ -275,7 +311,7 @@ void ScreenPlayManager::setWallpaperValueAtMonitorIndex(const int index, const Q
|
|||||||
void ScreenPlayManager::setAllWallpaperValue(const QString& key, const QString& value)
|
void ScreenPlayManager::setAllWallpaperValue(const QString& key, const QString& value)
|
||||||
{
|
{
|
||||||
for (const std::shared_ptr<ScreenPlayWallpaper>& uPtrWallpaper : qAsConst(m_screenPlayWallpapers)) {
|
for (const std::shared_ptr<ScreenPlayWallpaper>& uPtrWallpaper : qAsConst(m_screenPlayWallpapers)) {
|
||||||
m_sdkconnector->setWallpaperValue(uPtrWallpaper->appID(), key, value);
|
setWallpaperValue(uPtrWallpaper->appID(), key, value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -292,6 +328,125 @@ std::optional<std::shared_ptr<ScreenPlayWallpaper>> ScreenPlayManager::getWallpa
|
|||||||
return std::nullopt;
|
return std::nullopt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief Appends a new SDKConnection object shared_ptr to the m_clients list.
|
||||||
|
*/
|
||||||
|
void ScreenPlayManager::newConnection()
|
||||||
|
{
|
||||||
|
auto connection = std::make_shared<SDKConnection>(m_server->nextPendingConnection());
|
||||||
|
// Because user can close widgets by pressing x the widgets must send us the event
|
||||||
|
QObject::connect(connection.get(), &SDKConnection::requestDecreaseWidgetCount, this, [this]() { setActiveWidgetsCounter(activeWallpaperCounter() - 1); });
|
||||||
|
QObject::connect(connection.get(), &SDKConnection::requestRaise, this, &ScreenPlayManager::requestRaise);
|
||||||
|
// Only after we receive the first message with appID and type we can set the shared reference to the
|
||||||
|
// ScreenPlayWallpaper or ScreenPlayWidgets class
|
||||||
|
QObject::connect(connection.get(), &SDKConnection::appConnected, this, [this](const SDKConnection* connection) {
|
||||||
|
for (const auto& client : m_clients) {
|
||||||
|
if (client.get() == connection) {
|
||||||
|
appConnected(client);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
m_clients.append(connection);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief Closes all m_clients connections and clears the QVector.
|
||||||
|
*/
|
||||||
|
void ScreenPlayManager::closeAllConnections()
|
||||||
|
{
|
||||||
|
for (auto& client : m_clients) {
|
||||||
|
client->close();
|
||||||
|
}
|
||||||
|
m_clients.clear();
|
||||||
|
m_clients.squeeze();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief Closes all wallpaper connection with the following type:
|
||||||
|
\list
|
||||||
|
\li videoWallpaper
|
||||||
|
\li qmlWallpaper
|
||||||
|
\li htmlWallpaper
|
||||||
|
\li godotWallpaper
|
||||||
|
\endlist
|
||||||
|
*/
|
||||||
|
void ScreenPlayManager::closeAllWallpapers()
|
||||||
|
{
|
||||||
|
closeConntectionByType(GlobalVariables::getAvailableWallpaper());
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief Closes all widgets connection with the following type:
|
||||||
|
\list
|
||||||
|
\li qmlWidget
|
||||||
|
\li htmlWidget
|
||||||
|
\li standaloneWidget
|
||||||
|
\endlist
|
||||||
|
*/
|
||||||
|
void ScreenPlayManager::closeAllWidgets()
|
||||||
|
{
|
||||||
|
closeConntectionByType(GlobalVariables::getAvailableWidgets());
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief Closes a connection by type. Used only by closeAllWidgets() and closeAllWallpapers()
|
||||||
|
*/
|
||||||
|
void ScreenPlayManager::closeConntectionByType(const QStringList& list)
|
||||||
|
{
|
||||||
|
for (auto& client : m_clients) {
|
||||||
|
if (list.contains(client->type(), Qt::CaseInsensitive)) {
|
||||||
|
client->close();
|
||||||
|
m_clients.removeOne(client);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief Closes a wallpaper by the given \a appID.
|
||||||
|
*/
|
||||||
|
bool ScreenPlayManager::closeWallpaper(const QString& appID)
|
||||||
|
{
|
||||||
|
for (auto& client : m_clients) {
|
||||||
|
if (client->appID() == appID) {
|
||||||
|
client->close();
|
||||||
|
m_clients.removeOne(client);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief Sets a given \a value to a given \a key. The \a appID is used to identify the receiver socket.
|
||||||
|
*/
|
||||||
|
void ScreenPlayManager::setWallpaperValue(QString appID, QString key, QString value)
|
||||||
|
{
|
||||||
|
|
||||||
|
for (int i = 0; i < m_clients.count(); ++i) {
|
||||||
|
if (m_clients.at(i)->appID() == appID) {
|
||||||
|
QJsonObject obj;
|
||||||
|
obj.insert(key, QJsonValue(value));
|
||||||
|
|
||||||
|
QByteArray send = QJsonDocument(obj).toJson();
|
||||||
|
m_clients.at(i)->socket()->write(send);
|
||||||
|
m_clients.at(i)->socket()->waitForBytesWritten();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ScreenPlayManager::replace(const QString& appID, const QJsonObject& obj)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < m_clients.count(); ++i) {
|
||||||
|
if (m_clients.at(i)->appID() == appID) {
|
||||||
|
|
||||||
|
QByteArray send = QJsonDocument(obj).toJson();
|
||||||
|
m_clients.at(i)->socket()->write(send);
|
||||||
|
m_clients.at(i)->socket()->waitForBytesWritten();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\brief Saves a given wallpaper \a newProfileObject to a \a profileName. We ignore the profileName argument
|
\brief Saves a given wallpaper \a newProfileObject to a \a profileName. We ignore the profileName argument
|
||||||
because we currently only support one profile. Returns \c true if successfuly saved to profiles.json, otherwise \c false.
|
because we currently only support one profile. Returns \c true if successfuly saved to profiles.json, otherwise \c false.
|
||||||
@ -435,4 +590,5 @@ void ScreenPlayManager::loadProfiles()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -48,7 +48,6 @@
|
|||||||
#include "projectsettingslistmodel.h"
|
#include "projectsettingslistmodel.h"
|
||||||
#include "screenplaywallpaper.h"
|
#include "screenplaywallpaper.h"
|
||||||
#include "screenplaywidget.h"
|
#include "screenplaywidget.h"
|
||||||
#include "sdkconnector.h"
|
|
||||||
#include "settings.h"
|
#include "settings.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
|
|
||||||
@ -65,11 +64,7 @@ class ScreenPlayManager : public QObject {
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
explicit ScreenPlayManager(
|
explicit ScreenPlayManager(
|
||||||
const std::shared_ptr<GlobalVariables>& globalVariables,
|
|
||||||
const std::shared_ptr<MonitorListModel>& mlm,
|
|
||||||
const std::shared_ptr<SDKConnector>& sdkc,
|
|
||||||
const std::shared_ptr<GAnalytics>& telemetry,
|
|
||||||
const std::shared_ptr<Settings>& settings,
|
|
||||||
QObject* parent = nullptr);
|
QObject* parent = nullptr);
|
||||||
|
|
||||||
int activeWallpaperCounter() const
|
int activeWallpaperCounter() const
|
||||||
@ -81,6 +76,16 @@ public:
|
|||||||
{
|
{
|
||||||
return m_activeWidgetsCounter;
|
return m_activeWidgetsCounter;
|
||||||
}
|
}
|
||||||
|
bool isAnotherScreenPlayInstanceRunning()
|
||||||
|
{
|
||||||
|
return m_isAnotherScreenPlayInstanceRunning;
|
||||||
|
}
|
||||||
|
|
||||||
|
void init(
|
||||||
|
const std::shared_ptr<GlobalVariables>& globalVariables,
|
||||||
|
const std::shared_ptr<MonitorListModel>& mlm,
|
||||||
|
const std::shared_ptr<GAnalytics>& telemetry,
|
||||||
|
const std::shared_ptr<Settings>& settings);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void projectSettingsListModelResult(
|
void projectSettingsListModelResult(
|
||||||
@ -89,10 +94,9 @@ signals:
|
|||||||
const ScreenPlay::InstalledType::InstalledType type = ScreenPlay::InstalledType::InstalledType::VideoWallpaper);
|
const ScreenPlay::InstalledType::InstalledType type = ScreenPlay::InstalledType::InstalledType::VideoWallpaper);
|
||||||
void activeWallpaperCounterChanged(int activeWallpaperCounter);
|
void activeWallpaperCounterChanged(int activeWallpaperCounter);
|
||||||
void activeWidgetsCounterChanged(int activeWidgetsCounter);
|
void activeWidgetsCounterChanged(int activeWidgetsCounter);
|
||||||
|
void requestRaise();
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void saveProfiles();
|
|
||||||
|
|
||||||
// moc needs full enum namespace info see QTBUG-58454
|
// moc needs full enum namespace info see QTBUG-58454
|
||||||
void createWallpaper(
|
void createWallpaper(
|
||||||
const ScreenPlay::InstalledType::InstalledType type,
|
const ScreenPlay::InstalledType::InstalledType type,
|
||||||
@ -109,8 +113,6 @@ public slots:
|
|||||||
const QString& previewImage,
|
const QString& previewImage,
|
||||||
const bool saveToProfilesConfigFile);
|
const bool saveToProfilesConfigFile);
|
||||||
|
|
||||||
void appConnected(const std::shared_ptr<SDKConnection>& connection);
|
|
||||||
|
|
||||||
void removeAllWallpapers();
|
void removeAllWallpapers();
|
||||||
void removeAllWidgets();
|
void removeAllWidgets();
|
||||||
bool removeWallpaperAt(const int index);
|
bool removeWallpaperAt(const int index);
|
||||||
@ -120,6 +122,16 @@ public slots:
|
|||||||
void setAllWallpaperValue(const QString& key, const QString& value);
|
void setAllWallpaperValue(const QString& key, const QString& value);
|
||||||
std::optional<std::shared_ptr<ScreenPlayWallpaper>> getWallpaperByAppID(const QString& appID);
|
std::optional<std::shared_ptr<ScreenPlayWallpaper>> getWallpaperByAppID(const QString& appID);
|
||||||
|
|
||||||
|
void saveProfiles();
|
||||||
|
void newConnection();
|
||||||
|
void closeAllConnections();
|
||||||
|
void closeAllWallpapers();
|
||||||
|
void closeAllWidgets();
|
||||||
|
void closeConntectionByType(const QStringList& list);
|
||||||
|
bool closeWallpaper(const QString& appID);
|
||||||
|
void setWallpaperValue(QString appID, QString key, QString value);
|
||||||
|
void replace(const QString& appID, const QJsonObject& obj);
|
||||||
|
|
||||||
void setActiveWallpaperCounter(int activeWallpaperCounter)
|
void setActiveWallpaperCounter(int activeWallpaperCounter)
|
||||||
{
|
{
|
||||||
if (m_activeWallpaperCounter == activeWallpaperCounter)
|
if (m_activeWallpaperCounter == activeWallpaperCounter)
|
||||||
@ -170,20 +182,24 @@ public slots:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
void loadProfiles();
|
void loadProfiles();
|
||||||
|
void appConnected(const std::shared_ptr<SDKConnection>& connection);
|
||||||
|
bool checkIsAnotherScreenPlayInstanceRunning();
|
||||||
[[nodiscard]] bool removeWallpaperByAppID(const QString& appID);
|
[[nodiscard]] bool removeWallpaperByAppID(const QString& appID);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const std::shared_ptr<GlobalVariables>& m_globalVariables;
|
std::shared_ptr<GlobalVariables> m_globalVariables;
|
||||||
const std::shared_ptr<MonitorListModel>& m_monitorListModel;
|
std::shared_ptr<MonitorListModel> m_monitorListModel;
|
||||||
const std::shared_ptr<SDKConnector>& m_sdkconnector;
|
std::shared_ptr<GAnalytics> m_telemetry;
|
||||||
const std::shared_ptr<GAnalytics>& m_telemetry;
|
std::shared_ptr<Settings> m_settings;
|
||||||
const std::shared_ptr<Settings>& m_settings;
|
std::unique_ptr<QLocalServer> m_server;
|
||||||
|
|
||||||
QVector<std::shared_ptr<ScreenPlayWallpaper>> m_screenPlayWallpapers;
|
QVector<std::shared_ptr<ScreenPlayWallpaper>> m_screenPlayWallpapers;
|
||||||
QVector<std::shared_ptr<ScreenPlayWidget>> m_screenPlayWidgets;
|
QVector<std::shared_ptr<ScreenPlayWidget>> m_screenPlayWidgets;
|
||||||
|
QVector<std::shared_ptr<SDKConnection>> m_clients;
|
||||||
int m_activeWallpaperCounter { 0 };
|
int m_activeWallpaperCounter { 0 };
|
||||||
int m_activeWidgetsCounter { 0 };
|
int m_activeWidgetsCounter { 0 };
|
||||||
|
|
||||||
|
bool m_isAnotherScreenPlayInstanceRunning = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -16,7 +16,6 @@ namespace ScreenPlay {
|
|||||||
ScreenPlayWallpaper::ScreenPlayWallpaper(
|
ScreenPlayWallpaper::ScreenPlayWallpaper(
|
||||||
const QVector<int>& screenNumber,
|
const QVector<int>& screenNumber,
|
||||||
const std::shared_ptr<GlobalVariables>& globalVariables,
|
const std::shared_ptr<GlobalVariables>& globalVariables,
|
||||||
const std::shared_ptr<SDKConnector>& sdkConnector,
|
|
||||||
const QString& appID,
|
const QString& appID,
|
||||||
const QString& absolutePath,
|
const QString& absolutePath,
|
||||||
const QString& previewImage,
|
const QString& previewImage,
|
||||||
@ -29,7 +28,6 @@ ScreenPlayWallpaper::ScreenPlayWallpaper(
|
|||||||
: QObject(parent)
|
: QObject(parent)
|
||||||
, m_projectSettingsListModel { absolutePath + "/project.json" }
|
, m_projectSettingsListModel { absolutePath + "/project.json" }
|
||||||
, m_globalVariables { globalVariables }
|
, m_globalVariables { globalVariables }
|
||||||
, m_sdkConnector { sdkConnector }
|
|
||||||
, m_screenNumber { screenNumber }
|
, m_screenNumber { screenNumber }
|
||||||
, m_previewImage { previewImage }
|
, m_previewImage { previewImage }
|
||||||
, m_type { type }
|
, m_type { type }
|
||||||
@ -120,7 +118,6 @@ void ScreenPlayWallpaper::setSDKConnection(const std::shared_ptr<SDKConnection>
|
|||||||
{
|
{
|
||||||
m_connection = connection;
|
m_connection = connection;
|
||||||
qInfo() << "App Wallpaper connected!";
|
qInfo() << "App Wallpaper connected!";
|
||||||
//QObject::connect(m_connection.get(),&SDKConnection::readyRead,this,[](){});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScreenPlayWallpaper::replace(
|
void ScreenPlayWallpaper::replace(
|
||||||
@ -132,6 +129,9 @@ void ScreenPlayWallpaper::replace(
|
|||||||
const InstalledType::InstalledType type,
|
const InstalledType::InstalledType type,
|
||||||
const bool checkWallpaperVisible)
|
const bool checkWallpaperVisible)
|
||||||
{
|
{
|
||||||
|
if (!m_connection)
|
||||||
|
return;
|
||||||
|
|
||||||
m_previewImage = previewImage;
|
m_previewImage = previewImage;
|
||||||
m_type = type;
|
m_type = type;
|
||||||
m_fillMode = fillMode;
|
m_fillMode = fillMode;
|
||||||
@ -147,7 +147,7 @@ void ScreenPlayWallpaper::replace(
|
|||||||
obj.insert("file", file);
|
obj.insert("file", file);
|
||||||
obj.insert("checkWallpaperVisible", checkWallpaperVisible);
|
obj.insert("checkWallpaperVisible", checkWallpaperVisible);
|
||||||
|
|
||||||
m_sdkConnector->replace(m_appID, obj);
|
m_connection->sendMessage(QJsonDocument(obj).toJson());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -44,7 +44,6 @@
|
|||||||
#include "globalvariables.h"
|
#include "globalvariables.h"
|
||||||
#include "projectsettingslistmodel.h"
|
#include "projectsettingslistmodel.h"
|
||||||
#include "sdkconnection.h"
|
#include "sdkconnection.h"
|
||||||
#include "sdkconnector.h"
|
|
||||||
|
|
||||||
namespace ScreenPlay {
|
namespace ScreenPlay {
|
||||||
|
|
||||||
@ -69,7 +68,6 @@ public:
|
|||||||
explicit ScreenPlayWallpaper(
|
explicit ScreenPlayWallpaper(
|
||||||
const QVector<int>& screenNumber,
|
const QVector<int>& screenNumber,
|
||||||
const std::shared_ptr<GlobalVariables>& globalVariables,
|
const std::shared_ptr<GlobalVariables>& globalVariables,
|
||||||
const std::shared_ptr<SDKConnector>& sdkConnector,
|
|
||||||
const QString& appID,
|
const QString& appID,
|
||||||
const QString& absolutePath,
|
const QString& absolutePath,
|
||||||
const QString& previewImage,
|
const QString& previewImage,
|
||||||
@ -82,6 +80,8 @@ public:
|
|||||||
|
|
||||||
QJsonObject getActiveSettingsJson();
|
QJsonObject getActiveSettingsJson();
|
||||||
|
|
||||||
|
bool m_isAnotherScreenPlayInstanceRunning { false };
|
||||||
|
|
||||||
QVector<int> screenNumber() const
|
QVector<int> screenNumber() const
|
||||||
{
|
{
|
||||||
return m_screenNumber;
|
return m_screenNumber;
|
||||||
@ -245,7 +245,6 @@ private:
|
|||||||
|
|
||||||
ProjectSettingsListModel m_projectSettingsListModel;
|
ProjectSettingsListModel m_projectSettingsListModel;
|
||||||
const std::shared_ptr<GlobalVariables>& m_globalVariables;
|
const std::shared_ptr<GlobalVariables>& m_globalVariables;
|
||||||
const std::shared_ptr<SDKConnector>& m_sdkConnector;
|
|
||||||
std::shared_ptr<SDKConnection> m_connection;
|
std::shared_ptr<SDKConnection> m_connection;
|
||||||
|
|
||||||
QVector<int> m_screenNumber;
|
QVector<int> m_screenNumber;
|
||||||
|
@ -66,6 +66,12 @@ void ScreenPlay::SDKConnection::readyRead()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ScreenPlay::SDKConnection::sendMessage(const QByteArray &message)
|
||||||
|
{
|
||||||
|
m_socket->write(message);
|
||||||
|
m_socket->waitForBytesWritten();
|
||||||
|
}
|
||||||
|
|
||||||
void ScreenPlay::SDKConnection::close()
|
void ScreenPlay::SDKConnection::close()
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -103,7 +103,7 @@ signals:
|
|||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void readyRead();
|
void readyRead();
|
||||||
|
void sendMessage(const QByteArray& message);
|
||||||
void close();
|
void close();
|
||||||
|
|
||||||
void setAppID(QString appID)
|
void setAppID(QString appID)
|
||||||
|
@ -1,178 +0,0 @@
|
|||||||
#include "sdkconnector.h"
|
|
||||||
#include "sdkconnection.h"
|
|
||||||
|
|
||||||
namespace ScreenPlay {
|
|
||||||
|
|
||||||
/*!
|
|
||||||
\class ScreenPlay::SDKConnector
|
|
||||||
\inmodule ScreenPlay
|
|
||||||
\brief SDKConnector is used for the QLocalSocket connection between ScreenPlay and the standalone ScreenPlayWallpaper and ScreenPlayWidget executables.
|
|
||||||
|
|
||||||
To deal with crashes in faulty widgets and wallpaper we open an external application. The communication is done via the ScreenPlaySDK subproject.
|
|
||||||
To identify a incomming connection we use the appID. When a new connection is established we save the QLocalSocket and wait for the first message.
|
|
||||||
If the message contains "appID=MyUniqueKeyA-Z_a-z_0-9,type=qmlWallpaper" we cant map the socket to a wallpaper/widget.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*!
|
|
||||||
\brief Starts the QLocalServer with the pipename ScreenPlay.
|
|
||||||
*/
|
|
||||||
SDKConnector::SDKConnector(QObject* parent)
|
|
||||||
: QObject(parent)
|
|
||||||
, m_server { std::make_unique<QLocalServer>() }
|
|
||||||
{
|
|
||||||
|
|
||||||
if (isAnotherScreenPlayInstanceRunning()) {
|
|
||||||
m_isAnotherScreenPlayInstanceRunning = true;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
connect(m_server.get(), &QLocalServer::newConnection, this, &SDKConnector::newConnection);
|
|
||||||
m_server->setSocketOptions(QLocalServer::WorldAccessOption);
|
|
||||||
if (!m_server->listen("ScreenPlay")) {
|
|
||||||
qCritical("Could not open Local Socket with the name ScreenPlay!");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
\brief Checks if another ScreenPlay instance is running by trying to connect to a pipe
|
|
||||||
with the name ScreenPlay.
|
|
||||||
If successful we send a raise command and quit via m_isAnotherScreenPlayInstanceRunning = true.
|
|
||||||
*/
|
|
||||||
bool SDKConnector::isAnotherScreenPlayInstanceRunning()
|
|
||||||
{
|
|
||||||
QLocalSocket socket;
|
|
||||||
socket.connectToServer("ScreenPlay");
|
|
||||||
|
|
||||||
if (!socket.isOpen()) {
|
|
||||||
socket.close();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
qInfo("Another ScreenPlay app is already running!");
|
|
||||||
QByteArray msg = "command=requestRaise";
|
|
||||||
socket.write(msg);
|
|
||||||
socket.waitForBytesWritten(500);
|
|
||||||
socket.close();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
\brief Appends a new SDKConnection object shared_ptr to the m_clients list.
|
|
||||||
*/
|
|
||||||
void SDKConnector::newConnection()
|
|
||||||
{
|
|
||||||
auto connection = std::make_shared<SDKConnection>(m_server->nextPendingConnection());
|
|
||||||
// Because user can close widgets by pressing x the widgets must send us the event
|
|
||||||
QObject::connect(connection.get(), &SDKConnection::requestDecreaseWidgetCount, this, &SDKConnector::requestDecreaseWidgetCount);
|
|
||||||
QObject::connect(connection.get(), &SDKConnection::requestRaise, this, &SDKConnector::requestRaise);
|
|
||||||
// Only after we receive the first message with appID and type we can set the shared reference to the
|
|
||||||
// ScreenPlayWallpaper or ScreenPlayWidgets class
|
|
||||||
QObject::connect(connection.get(), &SDKConnection::appConnected, this, [this](const SDKConnection* connection) {
|
|
||||||
for (const auto& client : m_clients) {
|
|
||||||
if (client.get() == connection) {
|
|
||||||
emit appConnected(client);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
m_clients.append(connection);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
\brief Closes all m_clients connections and clears the QVector.
|
|
||||||
*/
|
|
||||||
void SDKConnector::closeAllConnections()
|
|
||||||
{
|
|
||||||
for (auto& client : m_clients) {
|
|
||||||
client->close();
|
|
||||||
}
|
|
||||||
m_clients.clear();
|
|
||||||
m_clients.squeeze();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
\brief Closes all wallpaper connection with the following type:
|
|
||||||
\list
|
|
||||||
\li videoWallpaper
|
|
||||||
\li qmlWallpaper
|
|
||||||
\li htmlWallpaper
|
|
||||||
\li godotWallpaper
|
|
||||||
\endlist
|
|
||||||
*/
|
|
||||||
void SDKConnector::closeAllWallpapers()
|
|
||||||
{
|
|
||||||
closeConntectionByType(GlobalVariables::getAvailableWallpaper());
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
\brief Closes all widgets connection with the following type:
|
|
||||||
\list
|
|
||||||
\li qmlWidget
|
|
||||||
\li htmlWidget
|
|
||||||
\li standaloneWidget
|
|
||||||
\endlist
|
|
||||||
*/
|
|
||||||
void SDKConnector::closeAllWidgets()
|
|
||||||
{
|
|
||||||
closeConntectionByType(GlobalVariables::getAvailableWidgets());
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
\brief Closes a connection by type. Used only by closeAllWidgets() and closeAllWallpapers()
|
|
||||||
*/
|
|
||||||
void SDKConnector::closeConntectionByType(const QStringList& list)
|
|
||||||
{
|
|
||||||
for (auto& client : m_clients) {
|
|
||||||
if (list.contains(client->type(), Qt::CaseInsensitive)) {
|
|
||||||
client->close();
|
|
||||||
m_clients.removeOne(client);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
\brief Closes a wallpaper by the given \a appID.
|
|
||||||
*/
|
|
||||||
bool SDKConnector::closeWallpaper(const QString& appID)
|
|
||||||
{
|
|
||||||
for (auto& client : m_clients) {
|
|
||||||
if (client->appID() == appID) {
|
|
||||||
client->close();
|
|
||||||
m_clients.removeOne(client);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
\brief Sets a given \a value to a given \a key. The \a appID is used to identify the receiver socket.
|
|
||||||
*/
|
|
||||||
void SDKConnector::setWallpaperValue(QString appID, QString key, QString value)
|
|
||||||
{
|
|
||||||
|
|
||||||
for (int i = 0; i < m_clients.count(); ++i) {
|
|
||||||
if (m_clients.at(i)->appID() == appID) {
|
|
||||||
QJsonObject obj;
|
|
||||||
obj.insert(key, QJsonValue(value));
|
|
||||||
|
|
||||||
QByteArray send = QJsonDocument(obj).toJson();
|
|
||||||
m_clients.at(i)->socket()->write(send);
|
|
||||||
m_clients.at(i)->socket()->waitForBytesWritten();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void SDKConnector::replace(const QString& appID, const QJsonObject& obj)
|
|
||||||
{
|
|
||||||
for (int i = 0; i < m_clients.count(); ++i) {
|
|
||||||
if (m_clients.at(i)->appID() == appID) {
|
|
||||||
|
|
||||||
QByteArray send = QJsonDocument(obj).toJson();
|
|
||||||
m_clients.at(i)->socket()->write(send);
|
|
||||||
m_clients.at(i)->socket()->waitForBytesWritten();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,90 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
**
|
|
||||||
** Copyright (C) 2020 Elias Steurer (Kelteseth)
|
|
||||||
** Contact: https://screen-play.app
|
|
||||||
**
|
|
||||||
** This file is part of ScreenPlay. ScreenPlay is licensed under a dual license in
|
|
||||||
** order to ensure its sustainability. When you contribute to ScreenPlay
|
|
||||||
** you accept that your work will be available under the two following licenses:
|
|
||||||
**
|
|
||||||
** $SCREENPLAY_BEGIN_LICENSE$
|
|
||||||
**
|
|
||||||
** #### Affero General Public License Usage (AGPLv3)
|
|
||||||
** Alternatively, this file may be used under the terms of the GNU Affero
|
|
||||||
** General Public License version 3 as published by the Free Software
|
|
||||||
** Foundation and appearing in the file "ScreenPlay License.md" included in the
|
|
||||||
** packaging of this App. Please review the following information to
|
|
||||||
** ensure the GNU Affero Lesser General Public License version 3 requirements
|
|
||||||
** will be met: https://www.gnu.org/licenses/agpl-3.0.en.html.
|
|
||||||
**
|
|
||||||
** #### Commercial License
|
|
||||||
** This code is owned by Elias Steurer. By changing/adding to the code you agree to the
|
|
||||||
** terms written in:
|
|
||||||
** * Legal/corporate_contributor_license_agreement.md - For corporate contributors
|
|
||||||
** * Legal/individual_contributor_license_agreement.md - For individual contributors
|
|
||||||
**
|
|
||||||
** #### Additional Limitations to the AGPLv3 and Commercial Lincese
|
|
||||||
** This License does not grant any rights in the trademarks,
|
|
||||||
** service marks, or logos.
|
|
||||||
**
|
|
||||||
**
|
|
||||||
** $SCREENPLAY_END_LICENSE$
|
|
||||||
**
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include <QApplication>
|
|
||||||
#include <QJsonDocument>
|
|
||||||
#include <QJsonObject>
|
|
||||||
#include <QJsonValue>
|
|
||||||
#include <QLocalServer>
|
|
||||||
#include <QLocalSocket>
|
|
||||||
#include <QObject>
|
|
||||||
#include <QTimer>
|
|
||||||
#include <QVector>
|
|
||||||
|
|
||||||
#include <memory>
|
|
||||||
|
|
||||||
#include "globalvariables.h"
|
|
||||||
#include "util.h"
|
|
||||||
|
|
||||||
/*!
|
|
||||||
\class SDKConnector
|
|
||||||
\brief Used for every Wallpaper, Scene or Widget communication via Windows pipes/QLocalSocket
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace ScreenPlay {
|
|
||||||
class SDKConnection;
|
|
||||||
|
|
||||||
class SDKConnector : public QObject {
|
|
||||||
Q_OBJECT
|
|
||||||
|
|
||||||
public:
|
|
||||||
explicit SDKConnector(QObject* parent = nullptr);
|
|
||||||
|
|
||||||
bool m_isAnotherScreenPlayInstanceRunning { false };
|
|
||||||
|
|
||||||
signals:
|
|
||||||
void requestDecreaseWidgetCount();
|
|
||||||
void requestRaise();
|
|
||||||
void appConnected(const std::shared_ptr<SDKConnection>& connection);
|
|
||||||
|
|
||||||
public slots:
|
|
||||||
void newConnection();
|
|
||||||
void closeConntectionByType(const QStringList& list);
|
|
||||||
void closeAllConnections();
|
|
||||||
void closeAllWallpapers();
|
|
||||||
void closeAllWidgets();
|
|
||||||
bool closeWallpaper(const QString& appID);
|
|
||||||
void setWallpaperValue(QString appID, QString key, QString value);
|
|
||||||
void replace(const QString& appID, const QJsonObject& obj);
|
|
||||||
|
|
||||||
private:
|
|
||||||
std::unique_ptr<QLocalServer> m_server;
|
|
||||||
QVector<std::shared_ptr<SDKConnection>> m_clients;
|
|
||||||
bool isAnotherScreenPlayInstanceRunning();
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user