From c02b26e8ae10b4c1e8a210b18fbd8d9fd812ce56 Mon Sep 17 00:00:00 2001 From: HorizonCode Date: Thu, 29 Oct 2026 15:41:33 +0100 Subject: [PATCH] feat: polish theme tooling, diagnostics and launcher workflows Expand the theme editor with multi-select, snapping, context menus, draft recovery and export validation; add theme backups and trust prompts. Add in-app diagnostics and rotating log bundle viewing, hardware-accelerated theme video playback on macOS, and refresh the settings, setup wizard and theme gallery layouts. --- README.md | 26 +- THEME_API_V2.md | 56 +- src-tauri/Cargo.toml | 2 +- src-tauri/src/commands.rs | 869 +++++++- src-tauri/src/lib.rs | 58 +- src-tauri/src/logging.rs | 102 +- src-tauri/src/macos.rs | 106 + src-tauri/src/theme_server.rs | 77 +- .../diagnostics/DiagnosticsPanel.svelte | 416 ++++ src/lib/components/logs/LogViewer.svelte | 337 +++ .../components/theme/ThemeEditorWindow.svelte | 1243 ++++++++++- .../theme/ThemeElementInspector.svelte | 34 + src/lib/components/theme/ThemeStage.svelte | 20 +- .../components/theme/ThemeV2Background.svelte | 3 +- .../components/theme/ThemeV2Elements.svelte | 317 ++- .../context-menu-checkbox-item.svelte | 43 + .../context-menu/context-menu-content.svelte | 28 + .../context-menu-group-heading.svelte | 21 + .../ui/context-menu/context-menu-group.svelte | 7 + .../ui/context-menu/context-menu-item.svelte | 27 + .../ui/context-menu/context-menu-label.svelte | 24 + .../context-menu/context-menu-portal.svelte | 7 + .../context-menu-radio-group.svelte | 16 + .../context-menu-radio-item.svelte | 37 + .../context-menu-separator.svelte | 17 + .../context-menu/context-menu-shortcut.svelte | 23 + .../context-menu-sub-content.svelte | 31 + .../context-menu-sub-trigger.svelte | 29 + .../ui/context-menu/context-menu-sub.svelte | 7 + .../context-menu/context-menu-trigger.svelte | 17 + .../ui/context-menu/context-menu.svelte | 7 + src/lib/components/ui/context-menu/index.ts | 52 + src/lib/themeMedia.ts | 221 +- src/lib/themePreview.ts | 1 + src/lib/themeTrust.ts | 37 + src/lib/themeV2.ts | 9 + src/lib/themes.ts | 88 +- src/lib/utils.ts | 10 + src/routes/+layout.svelte | 25 +- src/screens/Launch.svelte | 1984 +++++++++++------ src/screens/SetupWizard.svelte | 5 +- 41 files changed, 5574 insertions(+), 865 deletions(-) create mode 100644 src/lib/components/diagnostics/DiagnosticsPanel.svelte create mode 100644 src/lib/components/logs/LogViewer.svelte create mode 100644 src/lib/components/ui/context-menu/context-menu-checkbox-item.svelte create mode 100644 src/lib/components/ui/context-menu/context-menu-content.svelte create mode 100644 src/lib/components/ui/context-menu/context-menu-group-heading.svelte create mode 100644 src/lib/components/ui/context-menu/context-menu-group.svelte create mode 100644 src/lib/components/ui/context-menu/context-menu-item.svelte create mode 100644 src/lib/components/ui/context-menu/context-menu-label.svelte create mode 100644 src/lib/components/ui/context-menu/context-menu-portal.svelte create mode 100644 src/lib/components/ui/context-menu/context-menu-radio-group.svelte create mode 100644 src/lib/components/ui/context-menu/context-menu-radio-item.svelte create mode 100644 src/lib/components/ui/context-menu/context-menu-separator.svelte create mode 100644 src/lib/components/ui/context-menu/context-menu-shortcut.svelte create mode 100644 src/lib/components/ui/context-menu/context-menu-sub-content.svelte create mode 100644 src/lib/components/ui/context-menu/context-menu-sub-trigger.svelte create mode 100644 src/lib/components/ui/context-menu/context-menu-sub.svelte create mode 100644 src/lib/components/ui/context-menu/context-menu-trigger.svelte create mode 100644 src/lib/components/ui/context-menu/context-menu.svelte create mode 100644 src/lib/components/ui/context-menu/index.ts create mode 100644 src/lib/themeTrust.ts diff --git a/README.md b/README.md index 4327a60..14200dd 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,9 @@ It enhances the osu! experience with quality-of-life features and integration sp - [x] Discord Rich Presence - [x] Performance Display Overlay (currently in experimental patcher release stream) - [x] Launcher Theming (API 1.0 bundles and API 2.0 declarative themes) -- [x] Advanced theme editor in its own window with freeform text/image/video/shape layers, fonts, live launcher preview and export +- [x] Advanced theme editor in its own window with freeform text/image/video/shape layers, multi-select and snapping, layer locks, draft recovery, validation and export +- [x] Theme update backups with one-click rollback, plus a trust prompt before running executable API 1.0 themes +- [x] In-app diagnostics for osu!, Wine, the patcher, and the experimental stream's .NET 8 runtime, plus a log-bundle viewer --- @@ -37,8 +39,9 @@ It enhances the osu! experience with quality-of-life features and integration sp | Linux | šŸ•§ Partially supported (via osu-winello) | > **Windows** remains the fully supported platform. OpenTabletDriver is Windows-only. On macOS, -> in-game patching runs the Windows patcher through the same Wine prefix as osu!, so that prefix -> needs a .NET runtime installed. +> in-game patching runs the Windows patcher through the same Wine prefix as osu!. The stable +> patcher stream needs no extra runtime; the experimental stream needs the .NET 8 Desktop Runtime +> installed in that prefix. ### macOS @@ -51,6 +54,14 @@ If detection fails, choose **Browse** and pick the `osu!.app` wrapper itself (or folder); the launcher resolves the osu! installation inside it, so there is no need to open the bundle's package contents. +Large VP8/VP9/AV1 theme videos are transcoded once to a cached 720p H.264/AAC file so WebKit +can use the Mac's hardware decoder. The first large video triggers a one-time (~63 MB) download +of a signed static FFmpeg 9.0.2 build from `ffmpeg.martin-riedl.de` into `~/.ezpplauncher/bin`; +the launcher verifies its pinned SHA-256 and makes it executable. The managed build requires +macOS 12 or newer. If the download fails, a system FFmpeg (Homebrew or MacPorts) is used; without +either, themes still load but large WebM videos remain on WebKit's software decoder and may +stutter. Theme authors can also ship an H.264/MP4 version alongside the WebM. + --- ## 🪵 Logs @@ -65,10 +76,15 @@ Launcher, osu! and patcher output is written to `.ezpplauncher/logs` in your hom A file is only created when that stream actually writes a line. On each new session, or when any file reaches 5 MiB, all three active files are bundled into a single -`logs__