Entwicklungsumgebung
Dieser Leitfaden behandelt alles, was Sie benötigen, um mit der Code-Beitragsentwicklung für Media Sort zu beginnen. Einen Überblick über die Organisation der Codebasis finden Sie auf der Seite Architekturüberblick.
Voraussetzungen
Abschnitt betitelt „Voraussetzungen“- Rust 1.96 oder neuer (Installation über rustup)
- Clang (erforderlich für
libmpv-sysfür FFI-Bindings) - libmpv-Entwicklungsdateien:
- Linux:
libmpv-dev(Debian/Ubuntu) oder äquivalent - macOS:
brew install mpv - Windows: vcpkg oder manuelle Installation
- Linux:
- Plattformbibliotheken (Linux):
libasound2-dev(ALSA für Audio)libx11-dev,libwayland-dev(Fenstersystem)- Vulkan-Treiber und -Loader
# Gesamten Workspace bauencargo build --workspace
# Nur die GUI-Binary bauencargo build -p media-sort-gui
# Release-Buildcargo build --workspace --releaseAusführen
Abschnitt betitelt „Ausführen“# GUI ausführen (öffnet standardmäßig Ihr systemeigenes Bilder-Verzeichnis)cargo run -p media-sort-gui
# Ein bestimmtes Verzeichnis öffnencargo run -p media-sort-gui -- /pfad/zu/medien
# Mit interaktivem Demo-Modus ausführencargo run -p media-sort-gui -- --demo# Alle Tests ausführencargo test --workspace
# Tests für eine bestimmte Crate ausführencargo test -p media-sort-corecargo test -p media-sort-backendcargo test -p media-sort-guiTests befinden sich in:
crates/media-sort-core/tests/: Integrationstestscrates/media-sort-backend/tests/: Integrationstests (mit Test-Fixtures intests/fixtures/)crates/media-sort-gui/src/:#[cfg(test)]-Unit-Tests
Code-Stil
Abschnitt betitelt „Code-Stil“Führen Sie vor dem Committen Formatter und Linter aus:
# Gesamten Code formatierencargo fmt --all --
# Clippy mit Warnungen als Fehler ausführencargo clippy --workspace --all-targets -- -D warningsPre-Commit-Hooks setzen dies automatisch durch. Wenn Clippy fehlschlägt, wird der Commit abgelehnt.
Internationalisierung
Abschnitt betitelt „Internationalisierung“Benutzersichtbare Zeichenketten befinden sich in Fluent-Dateien (.ftl):
resources/locale/├── en/main.ftl├── de/main.ftl└── ja/main.ftlWenn Sie eine neue benutzersichtbare Zeichenkette im Code hinzufügen, müssen Sie den entsprechenden Eintrag in allen drei Sprachdateien hinzufügen. Die englische Datei dient als Referenz.
Das Build-Skript (crates/media-sort-core/build.rs) erkennt automatisch Änderungen an den Sprachdateien und generiert den Lookup-Code neu.
Mit Einstellungen arbeiten
Abschnitt betitelt „Mit Einstellungen arbeiten“Einstellungen sind in crates/media-sort-core/src/settings/ definiert. So fügen Sie eine neue persistierte Einstellung hinzu:
- Das Feld zur entsprechenden Unterstruktur hinzufügen (z. B.
GeneralSettings) #[serde(default)]hinzufügen, damit alte Konfigurationen ladbar bleiben- Falls die Einstellung einen UI-Schalter hat, den Einstellungsdialog-View aktualisieren
- Nach der Änderung
state.settings.save()aufrufen - Die Dokumentation in
website/aktualisieren (sowohlsettings.mdxals auchconfig-file.mdx)
Video-Wiedergabe-Pipeline
Abschnitt betitelt „Video-Wiedergabe-Pipeline“Die Videowiedergabe umfasst mehrere Schichten:
- Start:
main.rsfragt mpv nach unterstützten Formaten ab und initialisiert dieMediaRegistry - Subscription: Ein
VideoWorker-Thread führt eine mpv-Ereignisschleife aus - Kommunikation: Die GUI sendet
VideoCommandüber einen Kanal; der Worker antwortet mitVideoEvent - Rendering: Frame-Daten kommen als RGBA-Pixel an und werden über einen benutzerdefinierten wgpu-Shader für kopierfreies Vulkan-Interop gerendert
- Lebenszyklus:
Deactivatestoppt das Rendering, wenn von einem Video wegnavigiert wird
Siehe crates/media-sort-backend/src/media/mpv_context.rs für die Video-Worker-Implementierung und crates/media-sort-gui/src/widgets/video_shader.rs für den GPU-Shader.
Demo-System
Abschnitt betitelt „Demo-System“Media Sort enthält eine Headless-Automatisierungs-Engine, die verwendet wird, um Demo-Videos für die Dokumentations-Website zu generieren:
# Alle Demo-Abläufe als MP4-Videos renderncd website && npm run render-demosDemo-Ablaufspezifikationen sind JSON-Dateien in resources/demo_flows/. Die Automatisierungs-Engine (crates/iced-automation/) führt die vollständige Anwendung headless (ohne Fenster) aus und erfasst Frames über die Rendering-Pipeline.
Dokumentation
Abschnitt betitelt „Dokumentation“Die Website unter mediasort.app ist ein Astro/Starlight-Projekt im Verzeichnis website/:
cd websitenpm cinpm run dev # Dev-Server startennpm run render-demos # Demo-Videos rendernnpm run build # Produktions-BuildDokumentationsseiten befinden sich in website/src/content/docs/ mit einem Unterverzeichnis pro Sprache (en/, de/, ja/). Die Seitenleiste wird in astro.config.mjs konfiguriert.
Umgebungsvariablen
Abschnitt betitelt „Umgebungsvariablen“| Variable | Zweck |
|---|---|
UI_TEST |
Schaltet den Konfigurationspfad auf ui_test_config.toml im aktuellen Verzeichnis um |
LANG / LC_ALL |
Überschreibt die Spracheerkennung (wird beim Rendern von Demo-Videos verwendet) |