Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
24 lines
1.3 KiB
TypeScript
24 lines
1.3 KiB
TypeScript
import type { DatabaseSync } from "node:sqlite";
|
|
|
|
/** The global handbrake: while paused, no run is queued or claimed (one in flight finishes); it survives restarts. */
|
|
export function setAutonomousPaused(db: DatabaseSync, paused: boolean): void {
|
|
db.prepare(`
|
|
insert into app_state(id, active_org_id, autorun_paused, updated_at)
|
|
values (1, null, ?, ?)
|
|
on conflict(id) do update set autorun_paused = excluded.autorun_paused, updated_at = excluded.updated_at
|
|
`).run(paused ? 1 : 0, new Date().toISOString());
|
|
}
|
|
|
|
/** The app-wide theme and language, kept for every company. */
|
|
export function updateUiPreferences(db: DatabaseSync, input: { theme?: "system" | "light" | "dark"; language?: "en" | "zh" }): void {
|
|
const current = db.prepare("select theme, language from app_state where id = 1")
|
|
.get() as { theme: string; language: string } | undefined;
|
|
const theme = input.theme ?? current?.theme ?? "system";
|
|
const language = input.language ?? current?.language ?? "en";
|
|
db.prepare(`
|
|
insert into app_state(id, active_org_id, theme, language, updated_at)
|
|
values (1, null, ?, ?, ?)
|
|
on conflict(id) do update set theme = excluded.theme, language = excluded.language, updated_at = excluded.updated_at
|
|
`).run(theme, language, new Date().toISOString());
|
|
}
|