Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 9 additions & 4 deletions src/main/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ import { cleanupOrphanedAttachments, preparePoracodeDataRoot } from "./poracodeD
import { createLocalIpcHandlers, showAddFilesDialog } from "./ipc/localHandlers";
import { registerIpcHandlers } from "./ipc/registerHandlers";
import { createSleepInhibitor } from "./sleepInhibitor";
import { shouldPreventSystemSleep } from "./sleepPolicy";
import {
installLocalFileProtocolHandler,
registerLocalFileProtocolScheme,
Expand Down Expand Up @@ -611,10 +612,12 @@ function requirePoracodePaths(): PoracodePaths {
}

function updatePowerSaveBlocker(): void {
const enabled = poracodePaths
? readSharedSettingsFile(poracodePaths.settingsPath).preventSleepWhileWorking
: true;
sleepInhibitor.setActive(enabled && workingThreads.size > 0);
if (!poracodePaths) {
sleepInhibitor.setActive(workingThreads.size > 0);
return;
}
const settings = readSharedSettingsFile(poracodePaths.settingsPath);
sleepInhibitor.setActive(shouldPreventSystemSleep(settings, workingThreads.size));
}

function handleSupervisorEventForSleep(event: SupervisorEvent): void {
Expand Down Expand Up @@ -1058,6 +1061,7 @@ if (!hasSingleInstanceLock) {
},
getBrowserPanelManager: () => browserPanelManager,
notifySharedSettingsChanged: (settings) => {
updatePowerSaveBlocker();
mainWindow?.webContents.send(IPC_EVENT_CHANNELS.sharedSettingsChanged, settings);
},
notifyRemoteAccessPairingChanged: (info) => {
Expand Down Expand Up @@ -1211,6 +1215,7 @@ if (!hasSingleInstanceLock) {
// The remote controller performs one bounded warm-up when enabled.
// Recurring Git refreshes remain demand-driven by connected clients.

updatePowerSaveBlocker();
void controller.startIfEnabled();

initialMainWindow.once("ready-to-show", () => {
Expand Down
2 changes: 2 additions & 0 deletions src/main/sharedSettingsFile.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,7 @@ describe("sharedSettingsFile", () => {
guiChatFontSize: 13,
terminalPanelFontSize: 12,
preventSleepWhileWorking: true,
remoteAccessPreventSleep: true,
launchAtStartup: true,
startMinimized: true,
closeToTray: true,
Expand Down Expand Up @@ -256,6 +257,7 @@ describe("sharedSettingsFile", () => {
guiChatFontSize: 13,
terminalPanelFontSize: 12,
preventSleepWhileWorking: true,
remoteAccessPreventSleep: true,
launchAtStartup: true,
startMinimized: true,
closeToTray: true,
Expand Down
8 changes: 1 addition & 7 deletions src/main/sleepInhibitor.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -126,13 +126,7 @@ describe("createSleepInhibitor", () => {
expect(spawnFn).toHaveBeenCalledTimes(1);
expect(spawnFn).toHaveBeenCalledWith(
"systemd-inhibit",
[
"--what=sleep:idle",
"--who=Poracode",
"--why=Agent thread is working",
"--mode=block",
"cat",
],
["--what=sleep:idle", "--who=Poracode", "--why=Poracode is active", "--mode=block", "cat"],
expect.objectContaining({ detached: false }),
);
});
Expand Down
8 changes: 1 addition & 7 deletions src/main/sleepInhibitor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -90,13 +90,7 @@ class SystemdInhibitor implements Inhibitor {
try {
child = this.spawnFn(
"systemd-inhibit",
[
"--what=sleep:idle",
"--who=Poracode",
"--why=Agent thread is working",
"--mode=block",
"cat",
],
["--what=sleep:idle", "--who=Poracode", "--why=Poracode is active", "--mode=block", "cat"],
{ stdio: ["pipe", "ignore", "ignore"], detached: false },
);
} catch (error) {
Expand Down
43 changes: 43 additions & 0 deletions src/main/sleepPolicy.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
import { describe, expect, it } from "vitest";
import { shouldPreventSystemSleep } from "./sleepPolicy";

describe("shouldPreventSystemSleep", () => {
it("keeps the system awake for a working thread when enabled", () => {
expect(
shouldPreventSystemSleep(
{
preventSleepWhileWorking: true,
remoteAccessPreventSleep: false,
remoteAccessEnabled: false,
},
1,
),
).toBe(true);
});

it("keeps the system awake for enabled remote access independently of thread activity", () => {
expect(
shouldPreventSystemSleep(
{
preventSleepWhileWorking: false,
remoteAccessPreventSleep: true,
remoteAccessEnabled: true,
},
0,
),
).toBe(true);
});

it("allows sleep when each active reason is opted out", () => {
expect(
shouldPreventSystemSleep(
{
preventSleepWhileWorking: false,
remoteAccessPreventSleep: false,
remoteAccessEnabled: true,
},
1,
),
).toBe(false);
});
});
16 changes: 16 additions & 0 deletions src/main/sleepPolicy.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import type { SharedSettings } from "@/shared/settings";

type SleepPolicySettings = Pick<
SharedSettings,
"preventSleepWhileWorking" | "remoteAccessPreventSleep" | "remoteAccessEnabled"
>;

export function shouldPreventSystemSleep(
settings: SleepPolicySettings,
workingThreadCount: number,
): boolean {
const threadRequiresAwake = settings.preventSleepWhileWorking && workingThreadCount > 0;
const remoteAccessRequiresAwake =
settings.remoteAccessPreventSleep && settings.remoteAccessEnabled;
return threadRequiresAwake || remoteAccessRequiresAwake;
}
10 changes: 10 additions & 0 deletions src/renderer/locales/de/messages.po
Original file line number Diff line number Diff line change
Expand Up @@ -5601,6 +5601,11 @@ msgstr "Poracode beim Start im Infobereich der Taskleiste belassen."
msgid "Keep the system awake while any thread is actively working."
msgstr "Halten Sie das System wach, während ein Thread aktiv arbeitet."

#: src/renderer/views/SettingsOverlay/parts/RemoteAccessSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/settingsSearchIndex.ts
msgid "Keep the system awake while remote access is enabled."
msgstr "Das System aktiv halten, solange der Fernzugriff aktiviert ist."

#: src/renderer/components/startup/StartupRecoveryScreen.tsx
msgid "Keep waiting"
msgstr "Weiter warten"
Expand Down Expand Up @@ -8090,6 +8095,11 @@ msgstr "Voreinstellungen"
msgid "Press shortcut…"
msgstr "Tastenkürzel drücken…"

#: src/renderer/views/SettingsOverlay/parts/RemoteAccessSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/settingsSearchIndex.ts
msgid "Prevent sleep during remote access"
msgstr "Ruhezustand bei Fernzugriff verhindern"

#: src/renderer/views/SettingsOverlay/parts/GeneralSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/settingsSearchIndex.ts
msgid "Prevent sleep while working"
Expand Down
10 changes: 10 additions & 0 deletions src/renderer/locales/en/messages.po
Original file line number Diff line number Diff line change
Expand Up @@ -5601,6 +5601,11 @@ msgstr "Keep Poracode in the system tray when it launches at startup."
msgid "Keep the system awake while any thread is actively working."
msgstr "Keep the system awake while any thread is actively working."

#: src/renderer/views/SettingsOverlay/parts/RemoteAccessSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/settingsSearchIndex.ts
msgid "Keep the system awake while remote access is enabled."
msgstr "Keep the system awake while remote access is enabled."

#: src/renderer/components/startup/StartupRecoveryScreen.tsx
msgid "Keep waiting"
msgstr "Keep waiting"
Expand Down Expand Up @@ -8090,6 +8095,11 @@ msgstr "Presets"
msgid "Press shortcut…"
msgstr "Press shortcut…"

#: src/renderer/views/SettingsOverlay/parts/RemoteAccessSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/settingsSearchIndex.ts
msgid "Prevent sleep during remote access"
msgstr "Prevent sleep during remote access"

#: src/renderer/views/SettingsOverlay/parts/GeneralSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/settingsSearchIndex.ts
msgid "Prevent sleep while working"
Expand Down
10 changes: 10 additions & 0 deletions src/renderer/locales/es/messages.po
Original file line number Diff line number Diff line change
Expand Up @@ -5601,6 +5601,11 @@ msgstr "Mantener Poracode en la bandeja del sistema cuando se inicie automática
msgid "Keep the system awake while any thread is actively working."
msgstr "Mantener el sistema activo mientras cualquier hilo esté trabajando."

#: src/renderer/views/SettingsOverlay/parts/RemoteAccessSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/settingsSearchIndex.ts
msgid "Keep the system awake while remote access is enabled."
msgstr "Mantén el sistema activo mientras el acceso remoto esté habilitado."

#: src/renderer/components/startup/StartupRecoveryScreen.tsx
msgid "Keep waiting"
msgstr "Seguir esperando"
Expand Down Expand Up @@ -8090,6 +8095,11 @@ msgstr "Preajustes"
msgid "Press shortcut…"
msgstr "Pulsa el atajo…"

#: src/renderer/views/SettingsOverlay/parts/RemoteAccessSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/settingsSearchIndex.ts
msgid "Prevent sleep during remote access"
msgstr "Impedir la suspensión durante el acceso remoto"

#: src/renderer/views/SettingsOverlay/parts/GeneralSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/settingsSearchIndex.ts
msgid "Prevent sleep while working"
Expand Down
10 changes: 10 additions & 0 deletions src/renderer/locales/fr/messages.po
Original file line number Diff line number Diff line change
Expand Up @@ -5601,6 +5601,11 @@ msgstr "Garder Poracode dans la zone de notification lors de son lancement au d
msgid "Keep the system awake while any thread is actively working."
msgstr "Gardez le système éveillé pendant qu'un thread fonctionne activement."

#: src/renderer/views/SettingsOverlay/parts/RemoteAccessSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/settingsSearchIndex.ts
msgid "Keep the system awake while remote access is enabled."
msgstr "Garder le système éveillé tant que l’accès à distance est activé."

#: src/renderer/components/startup/StartupRecoveryScreen.tsx
msgid "Keep waiting"
msgstr "Continuer à attendre"
Expand Down Expand Up @@ -8089,6 +8094,11 @@ msgstr "Préréglages"
msgid "Press shortcut…"
msgstr "Appuyez sur le raccourci…"

#: src/renderer/views/SettingsOverlay/parts/RemoteAccessSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/settingsSearchIndex.ts
msgid "Prevent sleep during remote access"
msgstr "Empêcher la mise en veille pendant l’accès à distance"

#: src/renderer/views/SettingsOverlay/parts/GeneralSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/settingsSearchIndex.ts
msgid "Prevent sleep while working"
Expand Down
10 changes: 10 additions & 0 deletions src/renderer/locales/ja/messages.po
Original file line number Diff line number Diff line change
Expand Up @@ -5600,6 +5600,11 @@ msgstr "スタートアップ時は Poracode をシステムトレイに格納
msgid "Keep the system awake while any thread is actively working."
msgstr "スレッドがアクティブに動作している間は、システムを起動したままにします。"

#: src/renderer/views/SettingsOverlay/parts/RemoteAccessSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/settingsSearchIndex.ts
msgid "Keep the system awake while remote access is enabled."
msgstr "リモートアクセスが有効な間、システムをスリープさせません。"

#: src/renderer/components/startup/StartupRecoveryScreen.tsx
msgid "Keep waiting"
msgstr "待機を続ける"
Expand Down Expand Up @@ -8088,6 +8093,11 @@ msgstr "プリセット"
msgid "Press shortcut…"
msgstr "ショートカットを押してください…"

#: src/renderer/views/SettingsOverlay/parts/RemoteAccessSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/settingsSearchIndex.ts
msgid "Prevent sleep during remote access"
msgstr "リモートアクセス中のスリープを防止"

#: src/renderer/views/SettingsOverlay/parts/GeneralSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/settingsSearchIndex.ts
msgid "Prevent sleep while working"
Expand Down
10 changes: 10 additions & 0 deletions src/renderer/locales/ko/messages.po
Original file line number Diff line number Diff line change
Expand Up @@ -5601,6 +5601,11 @@ msgstr "시작 시 Poracode를 시스템 트레이에 둡니다."
msgid "Keep the system awake while any thread is actively working."
msgstr "스레드가 활발하게 작동하는 동안 시스템을 활성 상태로 유지합니다."

#: src/renderer/views/SettingsOverlay/parts/RemoteAccessSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/settingsSearchIndex.ts
msgid "Keep the system awake while remote access is enabled."
msgstr "원격 액세스가 활성화된 동안 시스템이 절전 모드로 전환되지 않도록 합니다."

#: src/renderer/components/startup/StartupRecoveryScreen.tsx
msgid "Keep waiting"
msgstr "계속 기다리기"
Expand Down Expand Up @@ -8090,6 +8095,11 @@ msgstr "프리셋"
msgid "Press shortcut…"
msgstr "단축키를 누르세요…"

#: src/renderer/views/SettingsOverlay/parts/RemoteAccessSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/settingsSearchIndex.ts
msgid "Prevent sleep during remote access"
msgstr "원격 액세스 중 절전 모드 방지"

#: src/renderer/views/SettingsOverlay/parts/GeneralSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/settingsSearchIndex.ts
msgid "Prevent sleep while working"
Expand Down
10 changes: 10 additions & 0 deletions src/renderer/locales/pl/messages.po
Original file line number Diff line number Diff line change
Expand Up @@ -5601,6 +5601,11 @@ msgstr "Po uruchomieniu przy starcie pozostaw Poracode w zasobniku systemowym."
msgid "Keep the system awake while any thread is actively working."
msgstr "Utrzymuj system w stanie czuwania, gdy dowolny wątek aktywnie działa."

#: src/renderer/views/SettingsOverlay/parts/RemoteAccessSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/settingsSearchIndex.ts
msgid "Keep the system awake while remote access is enabled."
msgstr "Utrzymuj system w stanie aktywnym, gdy dostęp zdalny jest włączony."

#: src/renderer/components/startup/StartupRecoveryScreen.tsx
msgid "Keep waiting"
msgstr "Czekaj dalej"
Expand Down Expand Up @@ -8090,6 +8095,11 @@ msgstr "Ustawienia predefiniowane"
msgid "Press shortcut…"
msgstr "Naciśnij skrót…"

#: src/renderer/views/SettingsOverlay/parts/RemoteAccessSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/settingsSearchIndex.ts
msgid "Prevent sleep during remote access"
msgstr "Zapobiegaj uśpieniu podczas dostępu zdalnego"

#: src/renderer/views/SettingsOverlay/parts/GeneralSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/settingsSearchIndex.ts
msgid "Prevent sleep while working"
Expand Down
10 changes: 10 additions & 0 deletions src/renderer/locales/pt-BR/messages.po
Original file line number Diff line number Diff line change
Expand Up @@ -5601,6 +5601,11 @@ msgstr "Manter o Poracode na bandeja do sistema quando ele for iniciado com o Wi
msgid "Keep the system awake while any thread is actively working."
msgstr "Mantém o sistema ativo enquanto qualquer thread estiver trabalhando ativamente."

#: src/renderer/views/SettingsOverlay/parts/RemoteAccessSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/settingsSearchIndex.ts
msgid "Keep the system awake while remote access is enabled."
msgstr "Mantenha o sistema ativo enquanto o acesso remoto estiver habilitado."

#: src/renderer/components/startup/StartupRecoveryScreen.tsx
msgid "Keep waiting"
msgstr "Continuar aguardando"
Expand Down Expand Up @@ -8090,6 +8095,11 @@ msgstr "Predefinições"
msgid "Press shortcut…"
msgstr "Pressione o atalho…"

#: src/renderer/views/SettingsOverlay/parts/RemoteAccessSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/settingsSearchIndex.ts
msgid "Prevent sleep during remote access"
msgstr "Impedir suspensão durante o acesso remoto"

#: src/renderer/views/SettingsOverlay/parts/GeneralSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/settingsSearchIndex.ts
msgid "Prevent sleep while working"
Expand Down
10 changes: 10 additions & 0 deletions src/renderer/locales/ru/messages.po
Original file line number Diff line number Diff line change
Expand Up @@ -5601,6 +5601,11 @@ msgstr "При запуске вместе с системой оставлят
msgid "Keep the system awake while any thread is actively working."
msgstr "Не давать системе засыпать, пока хотя бы один тред активно работает."

#: src/renderer/views/SettingsOverlay/parts/RemoteAccessSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/settingsSearchIndex.ts
msgid "Keep the system awake while remote access is enabled."
msgstr "Не переводить систему в спящий режим, пока включён удалённый доступ."

#: src/renderer/components/startup/StartupRecoveryScreen.tsx
msgid "Keep waiting"
msgstr "Продолжить ожидание"
Expand Down Expand Up @@ -8090,6 +8095,11 @@ msgstr "Пресеты"
msgid "Press shortcut…"
msgstr "Нажмите сочетание клавиш…"

#: src/renderer/views/SettingsOverlay/parts/RemoteAccessSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/settingsSearchIndex.ts
msgid "Prevent sleep during remote access"
msgstr "Запрещать спящий режим при удалённом доступе"

#: src/renderer/views/SettingsOverlay/parts/GeneralSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/settingsSearchIndex.ts
msgid "Prevent sleep while working"
Expand Down
10 changes: 10 additions & 0 deletions src/renderer/locales/tr/messages.po
Original file line number Diff line number Diff line change
Expand Up @@ -5601,6 +5601,11 @@ msgstr "Başlangıçta açıldığında Poracode'u sistem tepsisinde tutun."
msgid "Keep the system awake while any thread is actively working."
msgstr "Herhangi bir konu aktif olarak çalışırken sistemi uyanık tutun."

#: src/renderer/views/SettingsOverlay/parts/RemoteAccessSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/settingsSearchIndex.ts
msgid "Keep the system awake while remote access is enabled."
msgstr "Uzaktan erişim etkinken sistemi uyanık tutun."

#: src/renderer/components/startup/StartupRecoveryScreen.tsx
msgid "Keep waiting"
msgstr "Beklemeye devam et"
Expand Down Expand Up @@ -8090,6 +8095,11 @@ msgstr "Hazır ayarlar"
msgid "Press shortcut…"
msgstr "Kısayola basın…"

#: src/renderer/views/SettingsOverlay/parts/RemoteAccessSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/settingsSearchIndex.ts
msgid "Prevent sleep during remote access"
msgstr "Uzaktan erişim sırasında uyku modunu engelle"

#: src/renderer/views/SettingsOverlay/parts/GeneralSettings.tsx
#: src/renderer/views/SettingsOverlay/parts/settingsSearchIndex.ts
msgid "Prevent sleep while working"
Expand Down
Loading