From d0c48875c7ece5081a23e96ee9ceaf1f3db7eb3b Mon Sep 17 00:00:00 2001 From: Uyanide Date: Wed, 18 Mar 2026 21:00:53 +0100 Subject: [PATCH] qs: enhance replay functionality (still disabled by default --- .../Modules/Sidebar/Modules/WallpaperCard.qml | 2 +- .../quickshell/Services/RecordService.qml | 47 ++++++++++++++----- 2 files changed, 35 insertions(+), 14 deletions(-) diff --git a/config/quickshell/.config/quickshell/Modules/Sidebar/Modules/WallpaperCard.qml b/config/quickshell/.config/quickshell/Modules/Sidebar/Modules/WallpaperCard.qml index 27682bd..2c7dd53 100644 --- a/config/quickshell/.config/quickshell/Modules/Sidebar/Modules/WallpaperCard.qml +++ b/config/quickshell/.config/quickshell/Modules/Sidebar/Modules/WallpaperCard.qml @@ -15,7 +15,7 @@ RowLayout { Layout.fillWidth: true height: Style.baseWidgetSize * 3.2 + Style.marginS * 3 radius: Style.radiusM - imagePath: BackgroundService.cachedPath + imagePath: BackgroundService.displayPath fallbackIcon: "wallpaper" layer.enabled: true diff --git a/config/quickshell/.config/quickshell/Services/RecordService.qml b/config/quickshell/.config/quickshell/Services/RecordService.qml index e63daff..9502bfa 100644 --- a/config/quickshell/.config/quickshell/Services/RecordService.qml +++ b/config/quickshell/.config/quickshell/Services/RecordService.qml @@ -7,17 +7,9 @@ import qs.Utils pragma Singleton Singleton { - // Connections { - // function onSinkChanged() { - // if (!isReplayInitStarted && AudioService.sink) { - // Logger.i("RecordService", "Audio sink available, starting replay buffer."); - // startReplay(); - // isReplayInitStarted = true; - // } - // } - // target: AudioService - // } - + // Enabling replay may consume noticeably more resources - + // around 500MiB of RAM and 4% of CPU on my machine. Use with caution + readonly property bool replayEnabled: false readonly property string recordingDir: Paths.recordingDir property bool isRecording: false property bool isReplayInitStarted: false @@ -147,7 +139,7 @@ Singleton { replayProcess.running = true; } - function stopReplay() { + function stopReplay(save = true) { if (!isReplayStarted) { Logger.w("RecordService", "Replay buffer not active, cannot stop."); return ; @@ -158,7 +150,10 @@ Singleton { } isReplayStopping = true; replayStopTimeout.restart(); - replayProcess.signal(10); // SIGUSR1 + if (save) + replayProcess.signal(10); + else + replayProcess.signal(2); } Component.onDestruction: function() { @@ -170,6 +165,32 @@ Singleton { } + Connections { + function onSinkChanged() { + if (!replayEnabled) + return ; + + // if (!isReplayInitStarted && AudioService.sink) { + // Logger.i("RecordService", "Audio sink available, starting replay buffer."); + // startReplay(); + // isReplayInitStarted = true; + // } + if (!AudioService.sink) { + Logger.w("RecordService", "Audio sink lost."); + return ; + } + if (isReplayStarted) { + Logger.i("RecordService", "Audio sink changed, restarting replay buffer."); + stopReplay(false); + } else { + Logger.i("RecordService", "Audio sink available, starting replay buffer."); + startReplay(); + } + } + + target: AudioService + } + Process { id: recordProcess