1
0
mirror of https://gitlab.com/kelteseth/ScreenPlay.git synced 2024-11-07 03:22:33 +01:00

Refactor KDE plugin to work at any state...

... ScreenPlay no longer needs to run before
the wallpaper. This paves the way to start
the wallpaper from QSettings even when
the main application is not running.

Add quit command and action
This commit is contained in:
Elias Steurer 2021-11-08 19:49:51 +01:00
parent b6b134a81b
commit e6272e0db5
4 changed files with 154 additions and 52 deletions

View File

@ -83,7 +83,8 @@ void ScreenPlayManager::init(
if (m_settings->desktopEnvironment() == Settings::DesktopEnvironment::KDE) {
m_websocketServer = std::make_unique<QWebSocketServer>(QStringLiteral("ScreenPlayWebSocket"), QWebSocketServer::SslMode::NonSecureMode);
m_websocketServer->listen(QHostAddress::Any, m_webSocketPort);
const bool success = m_websocketServer->listen(QHostAddress::Any, m_webSocketPort);
qInfo() << "Open Websocket:" << success << "port:" <<m_webSocketPort;
QObject::connect(m_websocketServer.get(), &QWebSocketServer::newConnection, this, [this]() {
qInfo() << "New Websocket Connection";
auto* socket = m_websocketServer->nextPendingConnection();
@ -97,7 +98,7 @@ void ScreenPlayManager::init(
m_connections.push_back(socket);
socket->flush();
// socket->flush();
});
}
@ -127,6 +128,7 @@ bool ScreenPlayManager::createWallpaper(
const QJsonObject& properties,
const bool saveToProfilesConfigFile)
{
const int screenCount = QGuiApplication::screens().count();
QJsonArray monitors;
@ -283,6 +285,16 @@ bool ScreenPlayManager::removeAllWallpapers()
return false;
}
}
if(m_settings->desktopEnvironment() == Settings::DesktopEnvironment::KDE){
for(auto& connection : m_connections){
QJsonObject obj;
obj.insert("command", "quit");
connection->sendTextMessage(QJsonDocument(obj).toJson(QJsonDocument::Compact));
connection->flush();
connection->close();
}
}
emit requestSaveProfiles();
@ -456,6 +468,8 @@ bool ScreenPlayManager::removeWallpaper(const QString& appID)
if (wallpaper->appID() != appID) {
return false;
}
if(m_settings->desktopEnvironment() == Settings::DesktopEnvironment::Windows ||
m_settings->desktopEnvironment() == Settings::DesktopEnvironment::OSX)
wallpaper->messageQuit();
qInfo() << "Remove wallpaper " << wallpaper->file() << "at monitor " << wallpaper->screenNumber();

View File

@ -3,6 +3,7 @@ import QtQuick.Controls 2.12
import QtWebSockets 1.1
import QtWebEngine 1.8
import QtMultimedia 5.12
import Qt.labs.settings 1.1
Rectangle {
@ -17,14 +18,38 @@ Rectangle {
property string projectSourceFileAbsolute
property bool loops: true
function stop(){
player1.stop()
player2.stop()
videoOutput1.visible = false
videoOutput2.visible = false
root.enabled = false
}
function play(){
root.enabled = true
videoOutput2.visible = false
videoOutput1.visible = true
//if(wallpaper.configuration.DualPlayback){
player2.source = root.projectSourceFileAbsolute
player2.play()
player2.pause()
//}
player1.play()
}
MediaPlayer {
id: player1
volume: root.volume
source: root.projectSourceFileAbsolute
onStopped: {
if(!root.enabled)
return
videoOutput1.visible = false
videoOutput2.visible = true
if(player2.source != root.projectSourceFileAbsolute){
if(player2.source !== root.projectSourceFileAbsolute){
player2.source = root.projectSourceFileAbsolute
}
player1.play()
@ -37,6 +62,8 @@ Rectangle {
id: player2
volume: root.volume
onStopped: {
if(!root.enabled)
return
videoOutput2.visible = false
videoOutput1.visible = true
player2.play()
@ -60,51 +87,6 @@ Rectangle {
source: player2
}
Component.onCompleted: {
print("test")
}
WebSocket {
id: socket
url: "ws://127.0.0.1:16395"
active: true
onStatusChanged: {
if (socket.status === WebSocket.Open)
socket.sendTextMessage("Hello World from QML wallpaper")
}
onTextMessageReceived: (message)=> {
socket.sendTextMessage(message)
print(message)
var obj = JSON.parse(message)
wp.connected = true
if (obj.command === "replace") {
socket.sendTextMessage("replace")
root.type = obj.type
root.fillMode = obj.fillMode
root.volume = obj.volume
root.projectSourceFileAbsolute = "file://" + obj.absolutePath + "/" + obj.file
print("got: " + root.projectSourceFileAbsolute)
//mediaplayer.source = root.projectSourceFileAbsolute
//mediaplayer.play()
//videplayer.source = root.projectSourceFileAbsolute
//playlist.addItem(root.projectSourceFileAbsolute)
//playlist.addItem(root.projectSourceFileAbsolute)
//videplayer.play()
videoOutput2.visible = false
videoOutput1.visible = true
//if(wallpaper.configuration.DualPlayback){
player2.source = root.projectSourceFileAbsolute
player2.play()
player2.pause()
//}
player1.play()
}
}
}
}

View File

@ -1,8 +1,114 @@
import QtQuick 2.15
import QtQuick.Window 2.15
import QtQuick 2.0
import QtQuick.Controls 2.12
import QtWebSockets 1.1
import QtWebEngine 1.8
import QtMultimedia 5.12
import Qt.labs.settings 1.1
WallpaperContainer {
Rectangle {
id:root
color:"orange"
property bool connected: false
Settings {
id:settings
}
Component.onCompleted: {
wallpaper.projectSourceFileAbsolute = settings.value("SP_projectSourceFileAbsolute","NULL")
// if(root.projectSourceFileAbsolute === "NULL")
// return
wallpaper.type = settings.value("SP_type")
wallpaper.fillMode = settings.value("SP_fillMode")
wallpaper.volume = settings.value("SP_volume")
wallpaper.play()
}
Wallpaper {
id:wallpaper
anchors.fill: parent
// visible: root.connected
onFullContentPathChanged: settings.setValue("SP_fullContentPath",fullContentPath)
onVolumeChanged: settings.setValue("SP_volume",volume)
onFillModeChanged: settings.setValue("SP_fillMode",fillMode)
onTypeChanged: settings.setValue("SP_type",type)
onProjectSourceFileAbsoluteChanged: settings.setValue("SP_projectSourceFileAbsolute",projectSourceFileAbsolute)
onLoopsChanged: settings.setValue("SP_loops",loops)
}
Timer {
id:reconnectTimer
interval: 1000
running: true
repeat: true
onTriggered: {
if (socket.status === WebSocket.Open)
return
socket.active = false
socket.active = true
reconnectTimer.retryCounter += 1
}
property int retryCounter: 0
}
WebSocket {
id: socket
url: "ws://127.0.0.1:16395"
onStatusChanged: {
if (socket.status === WebSocket.Open)
socket.sendTextMessage("Hello World from QML wallpaper")
}
onTextMessageReceived: (message)=> {
var obj = JSON.parse(message)
root.connected = true
txtCommand.text = obj.command
if (obj.command === "replace") {
socket.sendTextMessage("replace")
wallpaper.type = obj.type
wallpaper.fillMode = obj.fillMode
wallpaper.volume = obj.volume
wallpaper.projectSourceFileAbsolute = "file://" + obj.absolutePath + "/" + obj.file
print("got: " + root.projectSourceFileAbsolute)
wallpaper.play()
return;
}
if(obj.command === "quit"){
wallpaper.stop()
}
}
}
// WaitingForScreenplay {
// anchors.fill: parent
// visible: !root.connected
// }
Column {
anchors {
horizontalCenter: parent.horizontalCenter
bottom: parent.bottom
margins: 60
}
Text {
id:txtCommand
color: "white"
}
Text {
color: "white"
text:wallpaper.type + wallpaper.projectSourceFileAbsolute
}
Text {
color: "white"
text:"Actitve: " +socket.active +" status: "+ socket.status + " reconnectTimer.retryCounter : "+ reconnectTimer.retryCounter
}
}
}

View File

@ -92,6 +92,6 @@ if(APPLE)
else()
if(${SCREENPLAY_STEAM})
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/steam_appid.txt ${CMAKE_BINARY_DIR}/bin/steam_appid.txt COPYONLY)
endif()
configure_file(${STEAM_BIN} ${CMAKE_BINARY_DIR}/bin/ COPYONLY)
endif()
endif()