Migrate bos-settings from GTK4 to Tauri + Svelte 5
Ports every remaining view (Keybinds, the last one — dual Flat/MultiLayout schema detection, per-action dedicated fields with a raw-JSON fallback for anything not modeled) and removes the now-fully-dead GTK4 crate (root Cargo.toml + src/), leaving src-tauri/ as the single Rust binary crate. Also folds in the UX pass done alongside the migration: responsive multi-column layout instead of a single centered column, chip/dropdown pickers replacing free-typed fields (Wi-Fi networks, Bar style, keyboard layout, tag lists), consistent pill-switch toggles and boxed-list card styling across every page, and a sidebar scroll-chaining fix.
This commit is contained in:
parent
62365ebf10
commit
93c3b88b10
147 changed files with 15804 additions and 7516 deletions
25
frontend/src/lib/streaming.ts
Normal file
25
frontend/src/lib/streaming.ts
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
// Frontend half of the event-streaming command pattern (see
|
||||
// src-tauri/src/commands/streaming.rs) — runs a command, appends each
|
||||
// stdout/stderr line to a reactive log as it arrives, and resolves once the
|
||||
// process exits with whether it succeeded.
|
||||
|
||||
import { invoke } from "@tauri-apps/api/core";
|
||||
import { listen } from "@tauri-apps/api/event";
|
||||
|
||||
export async function runStreamingCommand(
|
||||
program: string,
|
||||
args: string[],
|
||||
onLine: (line: string) => void,
|
||||
): Promise<boolean> {
|
||||
const sessionId = crypto.randomUUID();
|
||||
|
||||
const unlisten = await listen<{ session_id: string; line: string }>("cmd-output", (event) => {
|
||||
if (event.payload.session_id === sessionId) onLine(event.payload.line);
|
||||
});
|
||||
|
||||
try {
|
||||
return await invoke<boolean>("run_streaming_command", { sessionId, program, args });
|
||||
} finally {
|
||||
unlisten();
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue