1
0
mirror of https://gitlab.com/kelteseth/ScreenPlay.git synced 2024-09-15 06:52:34 +02:00

Add connection type to sdkconnector. This means we no can distinguish between wallpaper and widgets.

Add remove all wallpaper button. No we can close all wallpapers and widgets seperate.
Add static function to write an QJsonObject into a file. Truncate is optional.
This commit is contained in:
Elias Steurer 2019-09-14 19:33:58 +02:00
parent 99751491c8
commit 272a86a61f
13 changed files with 254 additions and 154 deletions

View File

@ -137,11 +137,11 @@ Item {
} }
Button { Button {
id: btnRemoveAllWallpaper id: btnRemoveAllWallpaper
text: qsTr("Remove all wallpaper and Widgets") text: qsTr("Remove all Wallpapers")
Material.background: Material.Orange Material.background: Material.Orange
Material.foreground: "white" Material.foreground: "white"
onClicked: { onClicked: {
screenPlay.closeAllConnections() screenPlay.removeAllWallpapers()
monitors.state = "inactive" monitors.state = "inactive"
} }
} }

View File

@ -11,8 +11,7 @@ ScreenPlayManager::ScreenPlayManager(const shared_ptr<GlobalVariables>& globalVa
, m_monitorListModel { mlm } , m_monitorListModel { mlm }
, m_sdkconnector { sdkc } , m_sdkconnector { sdkc }
{ {
loadActiveProfiles(); loadWallpaperProfiles();
QObject::connect(m_monitorListModel.get(), &MonitorListModel::monitorListChanged, this, &ScreenPlayManager::monitorListChanged);
} }
void ScreenPlayManager::createWallpaper( void ScreenPlayManager::createWallpaper(
@ -23,7 +22,6 @@ void ScreenPlayManager::createWallpaper(
const QString& fillMode, const QString& fillMode,
const QString& type) const QString& type)
{ {
increaseActiveWallpaperCounter();
QString path = absoluteStoragePath; QString path = absoluteStoragePath;
if (absoluteStoragePath.contains("file:///")) if (absoluteStoragePath.contains("file:///"))
@ -45,13 +43,21 @@ void ScreenPlayManager::createWallpaper(
m_screenPlayWallpapers.append(wallpaper); m_screenPlayWallpapers.append(wallpaper);
m_monitorListModel->setWallpaperActiveMonitor(wallpaper, monitorIndex); m_monitorListModel->setWallpaperActiveMonitor(wallpaper, monitorIndex);
QJsonArray monitors;
for (const int index : monitorIndex) {
monitors.append(index);
}
QJsonObject settings; QJsonObject settings;
settings.insert("monitors", QJsonArray {}); settings.insert("monitors", monitors);
settings.insert("type", type); settings.insert("type", type);
settings.insert("volume", volume); settings.insert("volume", static_cast<double>(volume));
settings.insert("isLooping", true); settings.insert("isLooping", true);
settings.insert("fillMode", fillMode);
settings.insert("previeImage", previewImage);
settings.insert("absolutePath", absoluteStoragePath);
saveConfigWallpaper("default", monitorIndex, settings); saveWallpaperProfile("default", settings);
increaseActiveWallpaperCounter();
} }
void ScreenPlayManager::createWidget(const QUrl& absoluteStoragePath, const QString& previewImage) void ScreenPlayManager::createWidget(const QUrl& absoluteStoragePath, const QString& previewImage)
@ -70,17 +76,52 @@ void ScreenPlayManager::createWidget(const QUrl& absoluteStoragePath, const QStr
this)); this));
} }
void ScreenPlayManager::closeAllConnections() void ScreenPlayManager::removeAllWallpapers()
{ {
if (!m_screenPlayWidgets.empty() || !m_screenPlayWallpapers.empty()) { if (!m_screenPlayWidgets.empty() || !m_screenPlayWallpapers.empty()) {
m_sdkconnector->closeAllConnections(); m_sdkconnector->closeAllWallpapers();
setActiveWallpaperCounter(0);
setActiveWidgetsCounter(0);
m_screenPlayWallpapers.clear(); m_screenPlayWallpapers.clear();
m_screenPlayWidgets.clear();
m_monitorListModel->clearActiveWallpaper(); m_monitorListModel->clearActiveWallpaper();
QString absoluteProfilesFilePath = m_globalVariables->localSettingsPath().toLocalFile() + "/profiles.json";
auto configOptional = Util::openJsonFileToObject(absoluteProfilesFilePath);
if (!configOptional.has_value()) {
qWarning() << "Could not load active profiles.";
return;
}
QJsonObject configObj = configOptional.value();
// TODO right now we limit ourself to one default profile
QJsonArray activeProfilesTmp = configObj.value("profiles").toArray();
if (activeProfilesTmp.size() != 1) {
qWarning() << "We currently only support one profile!";
return;
}
for (const QJsonValueRef wallpaper : activeProfilesTmp) {
wallpaper.toObject().remove("wallpaper");
wallpaper.toObject().insert("wallpaper", QJsonArray());
}
configObj.remove("profiles");
configObj.insert("profiles", activeProfilesTmp);
qDebug() << configObj;
Util::writeJsonObjectToFile(absoluteProfilesFilePath, configObj);
setActiveWallpaperCounter(0);
}
}
void ScreenPlayManager::removeWallpaperAt(int at)
{
if (auto appID = m_monitorListModel->getAppIDByMonitorIndex(at)) {
m_sdkconnector->closeWallpaper(appID.value());
m_monitorListModel->closeWallpaper(appID.value());
decreaseActiveWallpaperCounter();
} }
return;
} }
void ScreenPlayManager::requestProjectSettingsListModelAt(const int index) void ScreenPlayManager::requestProjectSettingsListModelAt(const int index)
@ -98,8 +139,16 @@ void ScreenPlayManager::requestProjectSettingsListModelAt(const int index)
void ScreenPlayManager::setWallpaperValue(const int index, const QString& key, const QString& value) void ScreenPlayManager::setWallpaperValue(const int index, const QString& key, const QString& value)
{ {
if (auto appID = m_monitorListModel->getAppIDByMonitorIndex(index)) { auto appID = m_monitorListModel->getAppIDByMonitorIndex(index);
m_sdkconnector->setWallpaperValue(appID.value(), key, value); if (appID.has_value()) {
return;
}
m_sdkconnector->setWallpaperValue(appID.value(), key, value);
for (auto& wallpaper : m_screenPlayWallpapers) {
if (wallpaper->appID() == appID.value()){
}
} }
} }
@ -110,31 +159,13 @@ void ScreenPlayManager::setAllWallpaperValue(const QString& key, const QString&
} }
} }
void ScreenPlayManager::removeWallpaperAt(int at) bool ScreenPlayManager::saveWallpaperProfile(const QString& profileName, const QJsonObject& newProfileObject)
{ {
if (auto appID = m_monitorListModel->getAppIDByMonitorIndex(at)) { // Remove when implementing profiles
m_sdkconnector->closeWallpaper(appID.value()); Q_UNUSED(profileName)
m_monitorListModel->closeWallpaper(appID.value());
decreaseActiveWallpaperCounter();
}
}
void ScreenPlayManager::monitorListChanged() QString absoluteProfilesFilePath = m_globalVariables->localSettingsPath().toLocalFile() + "/profiles.json";
{ auto configObj = Util::openJsonFileToObject(absoluteProfilesFilePath);
for (const auto& wallpaperUnique_ptr : m_screenPlayWallpapers) {
if (wallpaperUnique_ptr->screenNumber().length() > 1) {
for (const int moitor : wallpaperUnique_ptr->screenNumber()) {
emit m_monitorListModel->setNewActiveMonitor(
moitor,
wallpaperUnique_ptr->previewImage());
}
}
}
}
bool ScreenPlayManager::saveConfigWallpaper(const QString& profileName, const QVector<int>& monitors, const QJsonObject& content)
{
auto configObj = Util::openJsonFileToObject(m_globalVariables->localSettingsPath().toLocalFile() + "/profiles.json");
if (!configObj.has_value()) { if (!configObj.has_value()) {
qWarning() << "Could not load active profiles."; qWarning() << "Could not load active profiles.";
@ -149,40 +180,33 @@ bool ScreenPlayManager::saveConfigWallpaper(const QString& profileName, const QV
return false; return false;
} }
int i { 0 };
for (const QJsonValueRef wallpaper : activeProfilesTmp) { for (const QJsonValueRef wallpaper : activeProfilesTmp) {
auto wallpaperList = wallpaper.toObject().value("wallpaper").toArray(); auto wallpaperList = wallpaper.toObject().value("wallpaper").toArray();
for (const QJsonValueRef wallpaper : wallpaperList) { for (const QJsonValueRef wallpaper : wallpaperList) {
QJsonObject wallpaperObj = wallpaper.toObject(); QJsonObject currentProfileObject = wallpaper.toObject();
if (wallpaperObj.empty()) if (currentProfileObject.empty())
return false; return false;
QJsonArray monitorsArray = wallpaperObj.value("monitors").toArray(); if (currentProfileObject.value("monitors").toArray() != newProfileObject.value("monitors").toArray())
// A wallpaper can span across multiple monitors
// But first we need to convert the QJsonArray to an QVector<int>
QVector<int> monitorsParsed;
for (const QJsonValueRef item : monitorsArray) {
int tmp = item.toInt(-1);
if (tmp == -1) {
continue;
}
monitorsParsed.append(tmp);
}
// We need to find the right wallpaper with the same monitors.
if (monitorsParsed != monitors) {
continue; continue;
}
wallpaperList.removeAt(i);
wallpaperList.append(newProfileObject);
Util::writeJsonObjectToFile(absoluteProfilesFilePath, configObj.value());
return true; return true;
} }
++i;
} }
return true; return false;
} }
void ScreenPlayManager::loadActiveProfiles() void ScreenPlayManager::loadWallpaperProfiles()
{ {
auto configObj = Util::openJsonFileToObject(m_globalVariables->localSettingsPath().toLocalFile() + "/profiles.json"); auto configObj = Util::openJsonFileToObject(m_globalVariables->localSettingsPath().toLocalFile() + "/profiles.json");
@ -251,7 +275,6 @@ void ScreenPlayManager::loadActiveProfiles()
QString previewImage = wallpaperObj.value("previewImage").toString(); QString previewImage = wallpaperObj.value("previewImage").toString();
QString file = wallpaperObj.value("file").toString(); QString file = wallpaperObj.value("file").toString();
QString type = wallpaperObj.value("type").toString(); QString type = wallpaperObj.value("type").toString();
QString name = wallpaperObj.value("name").toString();
createWallpaper(monitors, absolutePath, previewImage, volume, fillMode, type); createWallpaper(monitors, absolutePath, previewImage, volume, fillMode, type);
monitors.clear(); monitors.clear();

View File

@ -100,13 +100,13 @@ public slots:
void createWidget(const QUrl& absoluteStoragePath, const QString& previewImage); void createWidget(const QUrl& absoluteStoragePath, const QString& previewImage);
void closeAllConnections(); void removeAllWallpapers();
void removeWallpaperAt(const int at = 0); void removeWallpaperAt(const int at = 0);
void requestProjectSettingsListModelAt(const int index); void requestProjectSettingsListModelAt(const int index);
void setWallpaperValue(const int index, const QString& key, const QString& value); void setWallpaperValue(const int index, const QString& key, const QString& value);
void setAllWallpaperValue(const QString& key, const QString& value); void setAllWallpaperValue(const QString& key, const QString& value);
void monitorListChanged();
void setActiveWallpaperCounter(int activeWallpaperCounter) void setActiveWallpaperCounter(int activeWallpaperCounter)
{ {
@ -127,8 +127,9 @@ public slots:
} }
private: private:
void loadActiveProfiles(); void loadWallpaperProfiles();
bool saveConfigWallpaper(const QString& profileName, const QVector<int>& monitors, const QJsonObject& content); bool saveWallpaperProfile(const QString& profileName, const QJsonObject& content);
private: private:
const shared_ptr<GlobalVariables>& m_globalVariables; const shared_ptr<GlobalVariables>& m_globalVariables;

View File

@ -10,20 +10,20 @@ ScreenPlayWallpaper::ScreenPlayWallpaper(
const QVector<int>& screenNumber, const QVector<int>& screenNumber,
const shared_ptr<GlobalVariables>& globalVariables, const shared_ptr<GlobalVariables>& globalVariables,
const QString& appID, const QString& appID,
const QString& projectPath, const QString& absolutePath,
const QString& previewImage, const QString& previewImage,
const float volume, const float volume,
const QString& fillMode, const QString& fillMode,
const QString& type, const QString& type,
QObject* parent) QObject* parent)
: QObject(parent) : QObject(parent)
, m_projectSettingsListModel { make_shared<ProjectSettingsListModel>(projectPath + "/project.json") } , m_projectSettingsListModel { make_shared<ProjectSettingsListModel>(absolutePath + "/project.json") }
, m_globalVariables { globalVariables } , m_globalVariables { globalVariables }
, m_screenNumber { screenNumber } , m_screenNumber { screenNumber }
, m_projectPath { projectPath } , m_previewImage { QString { absolutePath + "/" + previewImage } }
, m_previewImage { QString { projectPath + "/" + previewImage } }
, m_type { type } , m_type { type }
, m_appID { appID } , m_appID { appID }
, m_absolutePath { absolutePath }
{ {
QObject::connect(&m_process, QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished), QObject::connect(&m_process, QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished),
@ -53,10 +53,11 @@ ScreenPlayWallpaper::ScreenPlayWallpaper(
const QStringList proArgs { const QStringList proArgs {
tmpScreenNumber, tmpScreenNumber,
m_projectPath, m_absolutePath,
QString { "appID=" + m_appID }, QString { "appID=" + m_appID },
QString::number(static_cast<double>(volume)), QString::number(static_cast<double>(volume)),
fillMode fillMode,
type
}; };
qDebug() << "Creating ScreenPlayWallpaper " << proArgs; qDebug() << "Creating ScreenPlayWallpaper " << proArgs;

View File

@ -1,43 +1,44 @@
#pragma once #pragma once
#include <QJsonObject>
#include <QObject> #include <QObject>
#include <QProcess> #include <QProcess>
#include <memory> #include <memory>
#include "projectsettingslistmodel.h"
#include "globalvariables.h" #include "globalvariables.h"
#include "projectsettingslistmodel.h"
namespace ScreenPlay { namespace ScreenPlay {
using std::shared_ptr, using std::shared_ptr,
std::make_shared; std::make_shared;
class ScreenPlayWallpaper : public QObject { class ScreenPlayWallpaper : public QObject {
Q_OBJECT Q_OBJECT
Q_PROPERTY(QVector<int> screenNumber READ screenNumber WRITE setScreenNumber NOTIFY screenNumberChanged) Q_PROPERTY(QVector<int> screenNumber READ screenNumber WRITE setScreenNumber NOTIFY screenNumberChanged)
Q_PROPERTY(QString file READ file WRITE setFile NOTIFY fileChanged) Q_PROPERTY(QString file READ file WRITE setFile NOTIFY fileChanged)
Q_PROPERTY(QString fillMode READ fillMode WRITE setFillMode NOTIFY fillModeChanged) Q_PROPERTY(QString fillMode READ fillMode WRITE setFillMode NOTIFY fillModeChanged)
Q_PROPERTY(QString projectPath READ projectPath WRITE setProjectPath NOTIFY projectPathChanged) Q_PROPERTY(QString absolutePath READ absolutePath WRITE setAbsolutePath NOTIFY absolutePathChanged)
Q_PROPERTY(QString previewImage READ previewImage WRITE setPreviewImage NOTIFY previewImageChanged) Q_PROPERTY(QString previewImage READ previewImage WRITE setPreviewImage NOTIFY previewImageChanged)
Q_PROPERTY(QString appID READ appID WRITE setAppID NOTIFY appIDChanged) Q_PROPERTY(QString appID READ appID WRITE setAppID NOTIFY appIDChanged)
Q_PROPERTY(QString type READ type WRITE setType NOTIFY typeChanged) Q_PROPERTY(QString type READ type WRITE setType NOTIFY typeChanged)
Q_PROPERTY(QJsonObject profileJsonObject READ profileJsonObject WRITE setProfileJsonObject NOTIFY profileJsonObjectChanged)
public: public:
explicit ScreenPlayWallpaper(const QVector<int>& screenNumber, explicit ScreenPlayWallpaper(
const QVector<int>& screenNumber,
const shared_ptr<GlobalVariables>& globalVariables, const shared_ptr<GlobalVariables>& globalVariables,
const QString& appID, const QString& appID,
const QString& projectPath, const QString& absolutePath,
const QString& previewImage, const QString& previewImage,
const float volume, const float volume,
const QString& fillMode, const QString& fillMode,
const QString& type, const QString& type,
QObject* parent = nullptr); QObject* parent = nullptr);
~ScreenPlayWallpaper() {} ~ScreenPlayWallpaper() {}
const shared_ptr<ProjectSettingsListModel>& projectSettingsListModel() const const shared_ptr<ProjectSettingsListModel>& projectSettingsListModel() const
@ -50,11 +51,6 @@ public:
return m_screenNumber; return m_screenNumber;
} }
QString projectPath() const
{
return m_projectPath;
}
QString previewImage() const QString previewImage() const
{ {
return m_previewImage; return m_previewImage;
@ -80,16 +76,26 @@ public:
return m_fillMode; return m_fillMode;
} }
QString absolutePath() const
{
return m_absolutePath;
}
QJsonObject profileJsonObject() const
{
return m_profileJsonObject;
}
signals: signals:
void screenNumberChanged(QVector<int> screenNumber); void screenNumberChanged(QVector<int> screenNumber);
void projectPathChanged(QString projectPath);
void previewImageChanged(QString previewImage); void previewImageChanged(QString previewImage);
void appIDChanged(QString appID); void appIDChanged(QString appID);
void typeChanged(QString type); void typeChanged(QString type);
void fileChanged(QString file); void fileChanged(QString file);
void fillModeChanged(QString fillMode); void fillModeChanged(QString fillMode);
void absolutePathChanged(QString absolutePath);
void profileJsonObjectChanged(QJsonObject profileJsonObject);
public slots: public slots:
void setScreenNumber(QVector<int> screenNumber) void setScreenNumber(QVector<int> screenNumber)
@ -101,15 +107,6 @@ public slots:
emit screenNumberChanged(m_screenNumber); emit screenNumberChanged(m_screenNumber);
} }
void setProjectPath(QString projectPath)
{
if (m_projectPath == projectPath)
return;
m_projectPath = projectPath;
emit projectPathChanged(m_projectPath);
}
void setPreviewImage(QString previewImage) void setPreviewImage(QString previewImage)
{ {
if (m_previewImage == previewImage) if (m_previewImage == previewImage)
@ -155,6 +152,24 @@ public slots:
emit fillModeChanged(m_fillMode); emit fillModeChanged(m_fillMode);
} }
void setAbsolutePath(QString absolutePath)
{
if (m_absolutePath == absolutePath)
return;
m_absolutePath = absolutePath;
emit absolutePathChanged(m_absolutePath);
}
void setProfileJsonObject(QJsonObject profileJsonObject)
{
if (m_profileJsonObject == profileJsonObject)
return;
m_profileJsonObject = profileJsonObject;
emit profileJsonObjectChanged(m_profileJsonObject);
}
private: private:
QProcess m_process; QProcess m_process;
@ -163,11 +178,12 @@ private:
QVector<int> m_screenNumber; QVector<int> m_screenNumber;
QString m_projectPath;
QString m_previewImage; QString m_previewImage;
QString m_type; QString m_type;
QString m_appID; QString m_appID;
QString m_file; QString m_file;
QString m_fillMode; QString m_fillMode;
QString m_absolutePath;
QJsonObject m_profileJsonObject;
}; };
} }

View File

@ -1,7 +1,5 @@
#include "sdkconnector.h" #include "sdkconnector.h"
#include <QJsonDocument>
#include <QJsonObject>
namespace ScreenPlay { namespace ScreenPlay {
SDKConnector::SDKConnector(QObject* parent) SDKConnector::SDKConnector(QObject* parent)
: QObject(parent) : QObject(parent)
@ -10,7 +8,7 @@ SDKConnector::SDKConnector(QObject* parent)
connect(m_server.get(), &QLocalServer::newConnection, this, &SDKConnector::newConnection); connect(m_server.get(), &QLocalServer::newConnection, this, &SDKConnector::newConnection);
if (!m_server->listen("ScreenPlay")) { if (!m_server->listen("ScreenPlay")) {
qErrnoWarning("Could not open Local Socket with the name ScreenPlay. Usually this means another ScreenPlay instance is running!"); qCritical("Could not open Local Socket with the name ScreenPlay. Usually this means another ScreenPlay instance is running!");
} }
} }
@ -25,10 +23,18 @@ void SDKConnector::newConnection()
void SDKConnector::closeAllConnections() void SDKConnector::closeAllConnections()
{ {
for (int i = 0; i < m_clients.size(); ++i) { for (auto& client : m_clients) {
m_clients.at(i)->close(); client->close();
m_clients.clear(); }
m_clients.squeeze(); m_clients.clear();
}
void SDKConnector::closeAllWallpapers()
{
for (auto& client : m_clients) {
if(client->type() == "videoWallpaper"){
client->close();
}
} }
} }
@ -37,7 +43,6 @@ void SDKConnector::closeWallpapersAt(int at)
for (const shared_ptr<SDKConnection>& refSDKConnection : m_clients) { for (const shared_ptr<SDKConnection>& refSDKConnection : m_clients) {
refSDKConnection->close(); refSDKConnection->close();
if (!refSDKConnection->monitor().empty()) { if (!refSDKConnection->monitor().empty()) {
// problem here !!
if (refSDKConnection->monitor().at(0) == at) { if (refSDKConnection->monitor().at(0) == at) {
refSDKConnection->close(); refSDKConnection->close();
qDebug() << "Wall Closed...!"; qDebug() << "Wall Closed...!";

View File

@ -1,5 +1,7 @@
#pragma once #pragma once
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonValue> #include <QJsonValue>
#include <QLocalServer> #include <QLocalServer>
#include <QLocalSocket> #include <QLocalSocket>
@ -32,6 +34,7 @@ public slots:
void readyRead(); void readyRead();
void newConnection(); void newConnection();
void closeAllConnections(); void closeAllConnections();
void closeAllWallpapers();
void closeWallpapersAt(int at); void closeWallpapersAt(int at);
void closeWallpaper(const QString& appID); void closeWallpaper(const QString& appID);
@ -46,6 +49,7 @@ private:
class SDKConnection : public QObject { class SDKConnection : public QObject {
Q_OBJECT Q_OBJECT
Q_PROPERTY(QString appID READ appID WRITE setAppID NOTIFY appIDChanged) Q_PROPERTY(QString appID READ appID WRITE setAppID NOTIFY appIDChanged)
Q_PROPERTY(QString type READ type WRITE setType NOTIFY typeChanged)
Q_PROPERTY(QVector<int> monitor READ monitor WRITE setMonitor NOTIFY monitorChanged) Q_PROPERTY(QVector<int> monitor READ monitor WRITE setMonitor NOTIFY monitorChanged)
public: public:
@ -79,11 +83,18 @@ public:
return m_monitor; return m_monitor;
} }
QString type() const
{
return m_type;
}
signals: signals:
void requestCloseAt(int at); void requestCloseAt(int at);
void appIDChanged(QString appID); void appIDChanged(QString appID);
void monitorChanged(QVector<int> monitor); void monitorChanged(QVector<int> monitor);
void typeChanged(QString type);
public slots: public slots:
void readyRead() void readyRead()
{ {
@ -92,11 +103,13 @@ public slots:
// The first message allways contains the appID // The first message allways contains the appID
if (msg.startsWith("appID=")) { if (msg.startsWith("appID=")) {
QStringList args = msg.split(",");
//Only use the first 32 chars for the appID //Only use the first 32 chars for the appID
m_appID = msg.remove("appID=").mid(0, 32); QString appID = args.at(0);
msg.remove(m_appID); m_appID = appID.remove("appID=");
qDebug() << "###### Wallpaper width APPID created:" m_type = args.at(1);
<< "\n######" << m_appID; qDebug() << "###### Wallpaper created:"
<< "\t AppID:" << m_appID << "\t type: " << m_type;
} else { } else {
qDebug() << "### Message from: " << m_appID << "\n###" << msg; qDebug() << "### Message from: " << m_appID << "\n###" << msg;
} }
@ -131,9 +144,19 @@ public slots:
emit monitorChanged(m_monitor); emit monitorChanged(m_monitor);
} }
void setType(QString type)
{
if (m_type == type)
return;
m_type = type;
emit typeChanged(m_type);
}
private: private:
QLocalSocket* m_socket; QLocalSocket* m_socket;
QString m_appID; QString m_appID;
QVector<int> m_monitor; QVector<int> m_monitor;
QString m_type;
}; };
} }

View File

@ -148,13 +148,7 @@ void Settings::writeSingleSettingConfig(QString name, QVariant value)
obj.value().insert(name, value.toJsonValue()); obj.value().insert(name, value.toJsonValue());
QFile configTmp; Util::writeJsonObjectToFile(filename,obj.value());
configTmp.setFileName(filename);
configTmp.open(QIODevice::ReadWrite | QIODevice::Truncate);
QTextStream out(&configTmp);
out << QJsonDocument(obj.value()).toJson();
configTmp.close();
} }
void Settings::setqSetting(const QString& key, const QString& value) void Settings::setqSetting(const QString& key, const QString& value)

View File

@ -112,6 +112,28 @@ std::optional<QVersionNumber> Util::getVersionNumberFromString(const QString& st
return QVersionNumber(major, minor, patch); return QVersionNumber(major, minor, patch);
} }
bool Util::writeJsonObjectToFile(const QString& absoluteFilePath, const QJsonObject& object, bool truncate)
{
QFile configTmp;
configTmp.setFileName(absoluteFilePath);
QIODevice::OpenMode openMode;
if (truncate) {
openMode = QIODevice::ReadWrite | QIODevice::Truncate;
} else {
openMode = QIODevice::ReadWrite | QIODevice::Append;
}
if (!configTmp.open(openMode)) {
return false;
}
QTextStream out(&configTmp);
out << QJsonDocument(object).toJson();
configTmp.close();
return true;
}
void Util::setNavigation(QString nav) void Util::setNavigation(QString nav)
{ {
emit requestNavigation(nav); emit requestNavigation(nav);
@ -332,5 +354,4 @@ bool Util::saveExtractedByteArray(libzippp::ZipEntry& entry, std::string& absolu
return true; return true;
} }
} }

View File

@ -1,19 +1,21 @@
#pragma once #pragma once
#include <QCoreApplication> #include <QCoreApplication>
#include <QDateTime>
#include <QDebug> #include <QDebug>
#include <QDir> #include <QDir>
#include <QGuiApplication> #include <QGuiApplication>
#include <QJsonDocument>
#include <QJsonObject>
#include <QNetworkAccessManager> #include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QObject> #include <QObject>
#include <QProcess> #include <QProcess>
#include <QScopeGuard> #include <QScopeGuard>
#include <QString> #include <QString>
#include <QtConcurrent/QtConcurrent> #include <QTextStream>
#include <QDateTime>
#include <QNetworkReply>
#include <QProcess>
#include <QVersionNumber> #include <QVersionNumber>
#include <QtConcurrent/QtConcurrent>
#include <qqml.h> #include <qqml.h>
#include <fstream> #include <fstream>
@ -24,20 +26,16 @@
namespace ScreenPlay { namespace ScreenPlay {
class Util : public QObject { class Util : public QObject {
Q_OBJECT Q_OBJECT
Q_PROPERTY(bool ffmpegAvailable READ ffmpegAvailable NOTIFY ffmpegAvailableChanged) Q_PROPERTY(bool ffmpegAvailable READ ffmpegAvailable NOTIFY ffmpegAvailableChanged)
Q_PROPERTY(AquireFFMPEGStatus aquireFFMPEGStatus READ aquireFFMPEGStatus NOTIFY aquireFFMPEGStatusChanged) Q_PROPERTY(AquireFFMPEGStatus aquireFFMPEGStatus READ aquireFFMPEGStatus NOTIFY aquireFFMPEGStatusChanged)
Q_PROPERTY(QString debugMessages READ debugMessages NOTIFY debugMessagesChanged) Q_PROPERTY(QString debugMessages READ debugMessages NOTIFY debugMessagesChanged)
public: public:
explicit Util(QNetworkAccessManager* networkAccessManager, QObject* parent = nullptr); explicit Util(QNetworkAccessManager* networkAccessManager, QObject* parent = nullptr);
enum class AquireFFMPEGStatus { enum class AquireFFMPEGStatus {
Init, Init,
Download, Download,
@ -83,8 +81,8 @@ signals:
public slots: public slots:
static std::optional<QJsonObject> openJsonFileToObject(const QString& path); static std::optional<QJsonObject> openJsonFileToObject(const QString& path);
static std::optional<QString> openJsonFileToString(const QString& path); static std::optional<QString> openJsonFileToString(const QString& path);
static std::optional<QVersionNumber> getVersionNumberFromString(const QString& str); static std::optional<QVersionNumber> getVersionNumberFromString(const QString& str);
static bool writeJsonObjectToFile(const QString& absoluteFilePath, const QJsonObject& object, bool truncate = true);
static QString generateRandomString(quint32 length = 32); static QString generateRandomString(quint32 length = 32);
@ -123,7 +121,7 @@ public slots:
void appendDebugMessages(QString debugMessages) void appendDebugMessages(QString debugMessages)
{ {
if(m_debugMessages.size() > 1000000) { if (m_debugMessages.size() > 1000000) {
m_debugMessages = "###### DEBUG CLEARED ######"; m_debugMessages = "###### DEBUG CLEARED ######";
} }
@ -143,5 +141,5 @@ private:
}; };
// Used for redirect content from static logToGui to setDebugMessages // Used for redirect content from static logToGui to setDebugMessages
static Util* utilPointer {nullptr}; static Util* utilPointer { nullptr };
} }

View File

@ -5,6 +5,22 @@ static ScreenPlaySDK* global_sdkPtr = nullptr;
ScreenPlaySDK::ScreenPlaySDK(QQuickItem* parent) ScreenPlaySDK::ScreenPlaySDK(QQuickItem* parent)
: QQuickItem(parent) : QQuickItem(parent)
{
init();
}
ScreenPlaySDK::ScreenPlaySDK(
const QString& appID,
const QString& type,
QQuickItem* parent)
: QQuickItem(parent)
, m_type { type }
, m_appID { appID }
{
init();
}
void ScreenPlaySDK::init()
{ {
// Redirect all messages from this to ScreenPlay // Redirect all messages from this to ScreenPlay
global_sdkPtr = this; global_sdkPtr = this;
@ -26,6 +42,10 @@ ScreenPlaySDK::~ScreenPlaySDK()
void ScreenPlaySDK::connected() void ScreenPlaySDK::connected()
{ {
QByteArray welcomeMessage = QString(m_appID + "," + m_type).toUtf8();
m_socket.write(welcomeMessage);
m_socket.waitForBytesWritten();
setIsConnected(true); setIsConnected(true);
emit sdkConnected(); emit sdkConnected();
} }

View File

@ -20,15 +20,16 @@ class ScreenPlaySDK : public QQuickItem {
public: public:
ScreenPlaySDK(QQuickItem* parent = nullptr); ScreenPlaySDK(QQuickItem* parent = nullptr);
ScreenPlaySDK( const QString& appID, const QString& type,QQuickItem* parent = nullptr);
~ScreenPlaySDK(); ~ScreenPlaySDK();
Q_PROPERTY(QString contentType READ contentType WRITE setContentType NOTIFY contentTypeChanged) Q_PROPERTY(QString type READ type WRITE setType NOTIFY typeChanged)
Q_PROPERTY(bool isConnected READ isConnected WRITE setIsConnected NOTIFY isConnectedChanged) Q_PROPERTY(bool isConnected READ isConnected WRITE setIsConnected NOTIFY isConnectedChanged)
Q_PROPERTY(QString appID READ appID WRITE setAppID NOTIFY appIDChanged) Q_PROPERTY(QString appID READ appID WRITE setAppID NOTIFY appIDChanged)
QString contentType() const QString type() const
{ {
return m_contentType; return m_type;
} }
bool isConnected() const bool isConnected() const
@ -49,19 +50,13 @@ public slots:
void error(QLocalSocket::LocalSocketError socketError); void error(QLocalSocket::LocalSocketError socketError);
void redirectMessage(QByteArray& msg); void redirectMessage(QByteArray& msg);
void setContentType(QString contentType) void setType(QString type)
{ {
if (m_contentType == contentType) if (m_type == type)
return; return;
m_contentType = contentType; m_type = type;
emit typeChanged(m_type);
if (isConnected()) {
m_socket.write(QByteArray(m_contentType.toLatin1()));
m_socket.flush();
m_socket.waitForBytesWritten();
}
emit contentTypeChanged(m_contentType);
} }
void setIsConnected(bool isConnected) void setIsConnected(bool isConnected)
@ -80,9 +75,6 @@ public slots:
m_appID = appID; m_appID = appID;
emit appIDChanged(m_appID); emit appIDChanged(m_appID);
m_socket.write(QByteArray(appID.toUtf8()));
m_socket.waitForBytesWritten();
} }
static void redirectMessageOutputToMainWindow(QtMsgType type, const QMessageLogContext& context, const QString& msg); static void redirectMessageOutputToMainWindow(QtMsgType type, const QMessageLogContext& context, const QString& msg);
@ -94,16 +86,19 @@ signals:
void sdkConnected(); void sdkConnected();
void sdkDisconnected(); void sdkDisconnected();
void contentTypeChanged(QString contentType); void typeChanged(QString type);
void isConnectedChanged(bool isConnected); void isConnectedChanged(bool isConnected);
void appIDChanged(QString appID); void appIDChanged(QString appID);
void newRedirectMessage(QByteArray& msg); void newRedirectMessage(QByteArray& msg);
private:
void init();
private: private:
QLocalSocket m_socket; QLocalSocket m_socket;
QString m_contentType = "undefined"; QString m_type = "undefined";
bool m_isConnected = false; bool m_isConnected = false;
QString m_appID; QString m_appID;

View File

@ -35,11 +35,14 @@ int main(int argc, char* argv[])
// It means we want to test a single wallpaper // It means we want to test a single wallpaper
QStringList argumentList = app.arguments(); QStringList argumentList = app.arguments();
if (argumentList.length() == 1) { if (argumentList.length() == 1) {
QVector<int> list;
list.append(0); //Set the monitor number to test
#if defined(Q_OS_WIN) #if defined(Q_OS_WIN)
WinWindow window(list, "test", "appid", "1", "fill"); WinWindow window1({ 0 }, "test", "appid", "1", "fill");
WinWindow window2({ 1 }, "test", "appid", "1", "fill");
WinWindow window3({ 2 }, "test", "appid", "1", "fill");
//WinWindow window(list, "D:/672870/827874818", "appid", "1", "fill"); //WinWindow window(list, "D:/672870/827874818", "appid", "1", "fill");
#endif #endif
#if defined(Q_OS_LINUX) #if defined(Q_OS_LINUX)
@ -52,13 +55,13 @@ int main(int argc, char* argv[])
return app.exec(); return app.exec();
} }
// 5 parameter + 1 OS working directory default paramter // 6 parameter + 1 OS working directory default paramter
if (argumentList.length() != 6) { if (argumentList.length() != 7) {
return -3; return -3;
} }
ScreenPlaySDK sdk; // AppID, Type
sdk.setAppID(argumentList.at(3)); ScreenPlaySDK sdk(argumentList.at(3),argumentList.at(6));
QString monitorNumbers = argumentList.at(1); QString monitorNumbers = argumentList.at(1);
QStringList activeScreensList = monitorNumbers.split(","); QStringList activeScreensList = monitorNumbers.split(",");
@ -85,7 +88,7 @@ int main(int argc, char* argv[])
} }
} }
// Args: which monitor, (2) path to project, (3)wallpaper secret to identify the connected socket, (4) volume, (5) fillmode // Args: which monitor, (2) path to project, (3)wallpaper secret to identify the connected socket, (4) volume, (5) fillmode, (6) type
// See screenplay.h @ScreenPlayWallpaper constructor how the args get created // See screenplay.h @ScreenPlayWallpaper constructor how the args get created
qDebug() << argumentList; qDebug() << argumentList;