Skip to content

Commit

Permalink
Merge pull request #4 from korapp/dev
Browse files Browse the repository at this point in the history
Dev
  • Loading branch information
korapp authored Dec 15, 2023
2 parents 4021872 + 0b65d86 commit 8f85ca9
Show file tree
Hide file tree
Showing 3 changed files with 63 additions and 42 deletions.
21 changes: 21 additions & 0 deletions package/contents/ui/Notifications.qml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import QtQuick 2.0

import org.kde.plasma.core 2.0 as PlasmaCore

PlasmaCore.DataSource {
id: notificationSource
engine: "notifications"
connectedSources: "org.freedesktop.Notifications"

function createNotification(text, { appName = plasmoid.title, appIcon = plasmoid.icon } = {}) {
const service = notificationSource.serviceForSource("notification");
const operation = service.operationDescription("createNotification");

operation.appName = appName
operation.appIcon = appIcon
operation.body = text
operation.expireTimeout = 5000

service.startOperationCall(operation);
}
}
32 changes: 17 additions & 15 deletions package/contents/ui/Warp.qml
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import QtQuick 2.0

import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.private.quicklaunch 1.0

Item {
property bool watchStats: false
Expand All @@ -18,21 +17,24 @@ Item {
readonly property bool isBusy: p.isConnecting || p.isOperationInProgress

PlasmaCore.DataSource {
id: dataSource
readonly property string sourceStatus: "warp-cli status"
readonly property string sourceStats: "warp-cli warp-stats"
id: watcher
readonly property string cmdStatus: "warp-cli status"
readonly property string cmdStats: "warp-cli warp-stats"
readonly property var handlers: ({
[sourceStatus]: p.updateStatus,
[sourceStats]: p.updateStats
[cmdStatus]: p.updateStatus,
[cmdStats]: p.updateStats
})
engine: "executable"
connectedSources: [sourceStatus]
connectedSources: [cmdStatus]
interval: p.isServiceRunning ? 1000 : 5000
onNewData: handlers[sourceName](data)
}

Logic {
id: kRun
PlasmaCore.DataSource {
id: exec
engine: "executable"
onNewData: disconnectSource(sourceName)
readonly property var run: connectSource
}

QtObject {
Expand All @@ -49,16 +51,16 @@ Item {

function connect() {
isOperationInProgress = true
return kRun.openExec("warp-cli connect")
exec.run("warp-cli connect")
}

function disconnect() {
isOperationInProgress = true
return kRun.openExec("warp-cli disconnect")
exec.run("warp-cli disconnect")
}

function disableDefaultApp() {
return kRun.openExec("systemctl --user stop warp-taskbar")
exec.run("systemctl --user stop warp-taskbar")
}

function parseStdoutProperties(text) {
Expand All @@ -76,7 +78,7 @@ Item {
function updateStatus(data) {
const isRunning = !data["exit code"]
if (!isRunning) {
errorMessage = parseStdoutProperties(data.stderr)[0][1]
errorMessage = data.stderr
status = ""
} else {
const statusMessage = parseStdoutProperties(data.stdout)[0][1]
Expand All @@ -98,9 +100,9 @@ Item {

onWatchStatsFlagChanged: {
if (watchStatsFlag) {
dataSource.connectSource(dataSource.sourceStats)
watcher.connectSource(watcher.cmdStats)
} else {
dataSource.disconnectSource(dataSource.sourceStats)
watcher.disconnectSource(watcher.cmdStats)
stats = null
}
}
Expand Down
52 changes: 25 additions & 27 deletions package/contents/ui/main.qml
Original file line number Diff line number Diff line change
@@ -1,17 +1,21 @@
import QtQuick 2.0
import QtQuick 2.7
import QtQuick.Layouts 1.1
import QtQuick.Controls 2.3

import Qt.labs.platform 1.1

import org.kde.plasma.plasmoid 2.0
import org.kde.plasma.core 2.0 as PlasmaCore

Item {
id: root
Plasmoid.compactRepresentation: CompactRepresentation {}
Plasmoid.fullRepresentation: FullRepresentation {}
Plasmoid.toolTipSubText: client.status || ''
Plasmoid.toolTipSubText: {
if (plasmoid.configuration.toggleConnectionOnMiddleButton) {
const hint = client.isConnected ? i18n("Middle-click to disconnect") : i18n("Middle-click to connect")
return client.status + "\n" + hint
}
return client.status
}
Plasmoid.busy: client.isBusy
Plasmoid.status: client.isServiceRunning && (client.isConnected || !plasmoid.configuration.hideWhenDisconnected)
? PlasmaCore.Types.ActiveStatus
Expand All @@ -23,17 +27,12 @@ Item {
Warp {
id: client
watchStats: plasmoid.expanded
onStatusChanged: {
if (plasmoid.configuration.showNotifications) {
createNotification(status)
}
}
onIsConnectedChanged: {
plasmoid.clearActions()
plasmoid.setAction(...actionToContextual(client.isConnected ? actionDisconnect : actionConnect))
}
onIsConnectedChanged: prepareContextualActions()

Component.onCompleted: disableDefaultApp()
Component.onCompleted: {
disableDefaultApp()
prepareContextualActions()
}
}

Action {
Expand All @@ -54,22 +53,21 @@ Item {
return [action.text.toLowerCase(), action.text, action.icon.name]
}

PlasmaCore.DataSource {
id: notificationSource
engine: "notifications"
connectedSources: "org.freedesktop.Notifications"
Loader {
id: nLoader
active: plasmoid.configuration.showNotifications
source: "Notifications.qml"
}

function createNotification(text, { appName = plasmoid.title, appIcon = plasmoid.icon } = {}) {
const service = notificationSource.serviceForSource("notification");
const operation = service.operationDescription("createNotification");

operation.appName = appName
operation.appIcon = appIcon
operation.body = text
operation.expireTimeout = 5000
Connections {
target: client
enabled: nLoader.status === Loader.Ready
onStatusChanged: nLoader.item.createNotification(client.status)
}

service.startOperationCall(operation);
function prepareContextualActions() {
plasmoid.clearActions()
plasmoid.setAction(...actionToContextual(client.isConnected ? actionDisconnect : actionConnect))
}

function action_disconnect() {
Expand Down

0 comments on commit 8f85ca9

Please sign in to comment.