move NiriIpc and PowerProfileService singletons to services/
This commit is contained in:
parent
63e93f5de0
commit
0160e4a1fb
10 changed files with 18 additions and 19 deletions
74
shell/services/NiriIpc.qml
Normal file
74
shell/services/NiriIpc.qml
Normal file
|
|
@ -0,0 +1,74 @@
|
|||
pragma Singleton
|
||||
|
||||
import QtQuick
|
||||
import Quickshell.Io
|
||||
|
||||
QtObject {
|
||||
id: root
|
||||
|
||||
signal workspacesChanged(var workspaces)
|
||||
signal workspaceActivated(int id, bool focused)
|
||||
signal windowFocusChanged(var windowId)
|
||||
signal windowOpenedOrChanged(var window)
|
||||
|
||||
property bool available: false
|
||||
|
||||
property string focusedTitle: ""
|
||||
property string focusedAppId: ""
|
||||
property bool overviewOpen: false
|
||||
|
||||
property var _focusedProc: Process {
|
||||
running: true
|
||||
command: ["niri", "msg", "--json", "focused-window"]
|
||||
stdout: StdioCollector {
|
||||
onStreamFinished: {
|
||||
try {
|
||||
const w = JSON.parse(text);
|
||||
if (w) {
|
||||
root.focusedTitle = w.title || "";
|
||||
root.focusedAppId = w.app_id || "";
|
||||
} else {
|
||||
root.focusedTitle = "";
|
||||
root.focusedAppId = "";
|
||||
}
|
||||
} catch (e) {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
property var _eventStream: Process {
|
||||
running: true
|
||||
command: ["niri", "msg", "--json", "event-stream"]
|
||||
stdout: SplitParser {
|
||||
splitMarker: "\n"
|
||||
onRead: line => {
|
||||
try {
|
||||
const ev = JSON.parse(line);
|
||||
root.available = true;
|
||||
if (ev.WorkspacesChanged !== undefined)
|
||||
root.workspacesChanged(ev.WorkspacesChanged.workspaces);
|
||||
else if (ev.WorkspaceActivated !== undefined)
|
||||
root.workspaceActivated(ev.WorkspaceActivated.id, ev.WorkspaceActivated.focused);
|
||||
else if (ev.WindowFocusChanged !== undefined) {
|
||||
root.windowFocusChanged(ev.WindowFocusChanged.id);
|
||||
if (ev.WindowFocusChanged.id !== null)
|
||||
root._focusedProc.running = true;
|
||||
else {
|
||||
root.focusedTitle = "";
|
||||
root.focusedAppId = "";
|
||||
}
|
||||
} else if (ev.OverviewOpenedOrClosed !== undefined) {
|
||||
root.overviewOpen = ev.OverviewOpenedOrClosed.is_open;
|
||||
} else if (ev.WindowOpenedOrChanged !== undefined) {
|
||||
root.windowOpenedOrChanged(ev.WindowOpenedOrChanged.window);
|
||||
const w = ev.WindowOpenedOrChanged.window;
|
||||
if (w.is_focused) {
|
||||
root.focusedTitle = w.title || "";
|
||||
root.focusedAppId = w.app_id || "";
|
||||
}
|
||||
}
|
||||
} catch (e) {}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
53
shell/services/PowerProfileService.qml
Normal file
53
shell/services/PowerProfileService.qml
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
pragma Singleton
|
||||
|
||||
import QtQuick
|
||||
import Quickshell.Io
|
||||
import "." as S
|
||||
|
||||
QtObject {
|
||||
id: root
|
||||
|
||||
property string profile: ""
|
||||
readonly property bool powerSaver: profile === "power-saver"
|
||||
|
||||
property var _proc: Process {
|
||||
running: S.Modules.powerProfile.enable
|
||||
command: ["powerprofilesctl", "get"]
|
||||
stdout: StdioCollector {
|
||||
onStreamFinished: root.profile = text.trim()
|
||||
}
|
||||
}
|
||||
|
||||
property var _monitor: Process {
|
||||
running: S.Modules.powerProfile.enable
|
||||
command: ["sh", "-c", "dbus-monitor --system \"interface='org.freedesktop.DBus.Properties',member='PropertiesChanged',path='/net/hadess/PowerProfiles'\" 2>/dev/null"]
|
||||
stdout: SplitParser {
|
||||
splitMarker: "\n"
|
||||
onRead: _debounce.restart()
|
||||
}
|
||||
}
|
||||
|
||||
property var _debounce: Timer {
|
||||
interval: 300
|
||||
onTriggered: root._proc.running = true
|
||||
}
|
||||
|
||||
property var _poll: Timer {
|
||||
interval: 60000
|
||||
running: S.Modules.powerProfile.enable
|
||||
repeat: true
|
||||
onTriggered: root._proc.running = true
|
||||
}
|
||||
|
||||
function set(p) {
|
||||
_setter.next = p;
|
||||
_setter.running = true;
|
||||
}
|
||||
|
||||
property var _setter: Process {
|
||||
property string next: ""
|
||||
command: ["powerprofilesctl", "set", next]
|
||||
onRunningChanged: if (!running && next !== "")
|
||||
root._proc.running = true
|
||||
}
|
||||
}
|
||||
|
|
@ -2,3 +2,5 @@ module services
|
|||
singleton Theme 1.0 Theme.qml
|
||||
singleton SystemStats 1.0 SystemStats.qml
|
||||
singleton Modules 1.0 Modules.qml
|
||||
singleton NiriIpc 1.0 NiriIpc.qml
|
||||
singleton PowerProfileService 1.0 PowerProfileService.qml
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue