mirror of
https://github.com/Psychotoxical/psysonic.git
synced 2026-07-21 14:55:43 +00:00
c976b79c7d
Stand up the FE<->BE contract pipeline end to end with near-zero surface: a tauri_specta::Builder collects one proven command (greet) and exports typed TS bindings to src/generated/bindings.ts. The existing generate_handler! stays the live invoke handler — no FE change yet. Safety: the export runs only under #[cfg(debug_assertions)] (debug launch) and a headless test, never in a release build, so a specta RC break can never block a release cargo build; the committed bindings.ts is plain TypeScript for tsc. The snapshot is committed (gitignore exception) so CI diffs catch contract drift. Pinned deps: specta / tauri-specta =2.0.0-rc.25, specta-typescript =0.0.12 (the latest mutually-consistent set; rc.21 + specta-typescript 0.0.9 no longer resolve). Grow collect_commands! crate-by-crate next, starting with psysonic-library.
116 lines
3.8 KiB
TOML
116 lines
3.8 KiB
TOML
[workspace]
|
||
members = ["crates/*"]
|
||
resolver = "2"
|
||
|
||
[workspace.package]
|
||
version = "1.50.0-dev"
|
||
edition = "2021"
|
||
rust-version = "1.95"
|
||
license = "GPL-3.0-or-later"
|
||
|
||
[workspace.dependencies]
|
||
tempfile = "3"
|
||
wiremock = "0.6"
|
||
mockall = "0.13"
|
||
proptest = "1"
|
||
|
||
[package]
|
||
name = "psysonic"
|
||
version.workspace = true
|
||
description = "Psysonic Desktop Music Player"
|
||
authors = []
|
||
license.workspace = true
|
||
repository = ""
|
||
default-run = "psysonic"
|
||
edition.workspace = true
|
||
rust-version.workspace = true
|
||
|
||
[lib]
|
||
name = "psysonic_lib"
|
||
crate-type = ["staticlib", "cdylib", "rlib"]
|
||
|
||
[[bin]]
|
||
name = "psysonic"
|
||
path = "src/main.rs"
|
||
|
||
[build-dependencies]
|
||
tauri-build = { version = "2", features = [] }
|
||
|
||
[dependencies]
|
||
psysonic-core = { path = "crates/psysonic-core" }
|
||
psysonic-analysis = { path = "crates/psysonic-analysis" }
|
||
psysonic-audio = { path = "crates/psysonic-audio" }
|
||
psysonic-library = { path = "crates/psysonic-library" }
|
||
psysonic-syncfs = { path = "crates/psysonic-syncfs" }
|
||
psysonic-integration = { path = "crates/psysonic-integration" }
|
||
tauri = { version = "2", features = ["protocol-asset", "tray-icon", "image-png"] }
|
||
specta = "=2.0.0-rc.25"
|
||
specta-typescript = "=0.0.12"
|
||
tauri-specta = { version = "=2.0.0-rc.25", features = ["derive", "typescript"] }
|
||
tauri-plugin-single-instance = "2"
|
||
tauri-plugin-shell = "2"
|
||
tauri-plugin-global-shortcut = "2"
|
||
tauri-plugin-store = "2"
|
||
tauri-plugin-dialog = "2"
|
||
tauri-plugin-fs = "2"
|
||
serde = { version = "1", features = ["derive"] }
|
||
serde_json = "1"
|
||
rodio = { version = "0.22", default-features = false, features = ["playback"] }
|
||
symphonia = { version = "0.6", default-features = false, features = ["flac", "mp3", "pcm", "aac", "alac", "isomp4", "vorbis", "ogg", "wav", "adpcm", "all-meta"] }
|
||
reqwest = { version = "0.13", default-features = false, features = ["stream", "json", "multipart", "query", "form", "rustls", "blocking", "gzip", "brotli"] }
|
||
futures-util = "0.3"
|
||
md5 = "0.8"
|
||
tokio = { version = "1", features = ["rt", "time", "sync"] }
|
||
biquad = "0.6"
|
||
ringbuf = "0.5"
|
||
tauri-plugin-window-state = "2.4.1"
|
||
tauri-plugin-process = "2"
|
||
tauri-plugin-updater = "2"
|
||
souvlaki = { version = "0.8", default-features = false, features = ["use_zbus"] }
|
||
discord-rich-presence = "1.1"
|
||
url = "2"
|
||
thread-priority = "3"
|
||
lofty = "0.24"
|
||
sysinfo = { version = "0.39", default-features = false, features = ["disk", "system"] }
|
||
id3 = "1.17"
|
||
symphonia-adapter-libopus = "0.3"
|
||
rusqlite = { version = "0.40", features = ["bundled"] }
|
||
ebur128 = "0.1"
|
||
dasp_sample = "0.11.0"
|
||
zip = "8"
|
||
image = { version = "0.25", default-features = false, features = ["jpeg", "png", "webp"] }
|
||
webp = "0.3"
|
||
|
||
[target.'cfg(unix)'.dependencies]
|
||
libc = "0.2"
|
||
|
||
[target.'cfg(target_os = "macos")'.dependencies]
|
||
mach2 = "0.5"
|
||
|
||
[target.'cfg(target_os = "linux")'.dependencies]
|
||
zbus = { version = "5.16", default-features = false, features = ["blocking-api", "async-io"] }
|
||
# Match wry/tauri’s WebKitGTK stack — used only to turn off kinetic wheel scrolling.
|
||
webkit2gtk = { version = "2.0", default-features = false, features = ["v2_40"] }
|
||
webkit2gtk-nvidia-quirk = "1.3"
|
||
|
||
[target.'cfg(windows)'.dependencies]
|
||
windows = { version = "0.62", features = [
|
||
"Win32_Foundation",
|
||
"Win32_Graphics",
|
||
"Win32_Graphics_Gdi",
|
||
"Win32_System_Com",
|
||
"Win32_System_Power",
|
||
"Win32_System_Threading",
|
||
"Win32_UI_Controls",
|
||
"Win32_UI_Shell",
|
||
"Win32_UI_WindowsAndMessaging",
|
||
] }
|
||
|
||
# NOTE: The local `symphonia-format-isomp4` path patch (0.5-based) was removed for
|
||
# the Symphonia 0.6 migration. Symphonia 0.6 upstream already covers the esds
|
||
# missing-descriptor and SL predefined=null fixes. The malformed-trak skip and
|
||
# moov-at-end tail scan are validated against the fixture corpus on stock 0.6; if a
|
||
# case regresses, re-create the patch from the 0.6 isomp4 source and re-add the
|
||
# [patch.crates-io] entry here. See workdocs task 2026-05-symphonia-0.6-migration.
|
||
|