mirror of
https://github.com/euzu/tuliprox.git
synced 2026-10-14 20:02:18 +02:00
feat(dvr)!: unify live and VOD/series recording into one recoverable DVR Merge fix/merge_live_and_vod_recording into develop. - One recording queue for scheduled live captures and VOD/series transfers, with a shared transition graph, provider-slot scheduling, resumable HTTP transfers (strong ETag / Last-Modified validation) and ffmpeg live capture. - Crash-recoverable persistence: B+Tree repository with a journal-first recovery history; one file can be shared by several library entries. - Admission checks quota and disk on request, at transfer start (real size) and before an entry attaches to a finished file; idempotent requests. - REST is command-only; state reaches clients via owner-filtered WebSocket snapshots. - Deleting a recording removes the file once no entry holds it; removing an entry keeps a finished file and cleans up orphaned partials. - User ids derive from the configured username (web:/api:); the identity registry is gone. - Spanish locale added; ru/ar completed; locale parity test. BREAKING CHANGE: `video.download` is now `video.recording` (nested `recording` keys move up, `download_priority`/`recording_priority` become `priority`); old configs fail to load with a migration hint. BREAKING CHANGE: `/api/v1/file/download*` and `/file/record` are removed in favour of `/api/v1/recording/*`. BREAKING CHANGE: `download.*` and `recording.write` permissions are replaced by `recording.read|create|manage|delete`; tokens from before the change must re-authenticate. BREAKING CHANGE: the old recording queue does not migrate; existing `identity_registry.json` is ignored.
121 lines
4.4 KiB
TOML
121 lines
4.4 KiB
TOML
[package]
|
|
name = "tuliprox"
|
|
version.workspace = true
|
|
edition.workspace = true
|
|
rust-version.workspace = true
|
|
default-run = "tuliprox"
|
|
|
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
|
|
|
[lints]
|
|
workspace = true
|
|
|
|
[package.metadata.cargo-machete]
|
|
# `paste` is pulled in by the `create_bitset!` declarative macro and
|
|
# expanded at the call site; cargo-machete's heuristic cannot see through it.
|
|
ignored = ["paste"]
|
|
|
|
[dependencies]
|
|
lol_html = "2.9.0"
|
|
shared = { workspace = true }
|
|
tuliprox-core = { workspace = true }
|
|
tuliprox-hls = { workspace = true }
|
|
tuliprox-iptv = { workspace = true }
|
|
tuliprox-library = { workspace = true }
|
|
tuliprox-messaging = { workspace = true }
|
|
tuliprox-processing = { workspace = true }
|
|
tuliprox-auth = { workspace = true }
|
|
tuliprox-config-loader = { workspace = true }
|
|
tuliprox-dvr = { workspace = true }
|
|
tuliprox-repository = { workspace = true }
|
|
tuliprox-session = { workspace = true }
|
|
tuliprox-media-server = { workspace = true }
|
|
tuliprox-metadata = { workspace = true }
|
|
tuliprox-mpegts = { workspace = true }
|
|
serde.workspace = true
|
|
serde-saphyr.workspace = true
|
|
serde_json = { workspace = true, features = ["raw_value", "preserve_order"] }
|
|
quick-xml = { version = "0.41", features = ["async-tokio", "serialize"] }
|
|
regex.workspace = true
|
|
clap = { version = "4.6.6", features = ["derive"] }
|
|
reqwest = { version = "0.13.4", features = ["json", "stream", "rustls", "socks", "form", "query"] }
|
|
url.workspace = true
|
|
chrono.workspace = true
|
|
iana-time-zone = "0.1.65"
|
|
cron.workspace = true
|
|
axum = { version = "0.8.9" , features = ["macros", "default", "ws"]}
|
|
serde_html_form = "0.4.1"
|
|
tower = "0.5.3"
|
|
tower-http = { version = "0.6.11", features = ["cors", "auth", "fs", "compression-full", "trace"] }
|
|
tower_governor = { version = "0.8.0", features = ["axum"] }
|
|
jsonwebtoken = { version = "10.4.0", default-features = false, features = ["aws_lc_rs"] }
|
|
futures.workspace = true
|
|
pest.workspace = true
|
|
thiserror.workspace = true
|
|
aes = "0.8.4"
|
|
mime = "0.3.17"
|
|
log.workspace = true
|
|
env_logger = "0.11.11"
|
|
dotenvy = { workspace = true }
|
|
rand = "0.9.5"
|
|
fastrand.workspace = true
|
|
blake3.workspace = true
|
|
bytes.workspace = true
|
|
tokio-stream = { version = "0.1.19", features = ["sync"] }
|
|
tokio = { workspace = true, features = ["rt-multi-thread", "parking_lot", "fs", "process", "signal", "time", "macros"] }
|
|
tokio-util = { version = "0.7.19", features = ["io", "io-util"] }
|
|
tempfile = "3.27.0"
|
|
base64.workspace = true
|
|
sha2.workspace = true
|
|
paste.workspace = true
|
|
brotli.workspace = true
|
|
smallvec = "1.15.2"
|
|
notify = "8.2.0"
|
|
arc-swap.workspace = true
|
|
dashmap.workspace = true
|
|
hyper = "1.11.0"
|
|
hyper-util = "0.1.20"
|
|
socket2 = { version = "0.6.5", features = ["all"] }
|
|
async-compression = { version = "0.4.43", features = ["tokio", "brotli", "deflate", "gzip", "zlib", "zstd"] }
|
|
chrono-tz = "0.10.4"
|
|
mime_guess = "2.0.5"
|
|
crc32fast = "1.5.1"
|
|
http-body-util = "0.1.5"
|
|
strum.workspace = true
|
|
|
|
[target.'cfg(unix)'.dependencies]
|
|
libc = "0.2"
|
|
[target.'cfg(not(target_os = "linux"))'.dependencies]
|
|
sysinfo = { version = "0.38.4", default-features = false, features = ["system", "network"] }
|
|
[target.'cfg(target_os = "windows")'.dependencies]
|
|
|
|
windows-sys = { version = "0.61.2", features = ["Win32_Foundation", "Win32_Storage_FileSystem", "Win32_System_ProcessStatus", "Win32_System_SystemInformation", "Win32_System_Threading"] }
|
|
#[target.'cfg(target_os = "linux")'.dependencies]
|
|
#mimalloc = "0.1"
|
|
#[target.'cfg(not(target_env = "msvc"))'.dependencies]
|
|
#tikv-jemallocator = "0.6"
|
|
# tikv-jemallocator = { version = "*", features = ["profiling", "unprefixed_malloc_on_supported_platforms"] }
|
|
|
|
[build-dependencies]
|
|
vergen = { version = "10.0.3", features = ["build"] }
|
|
|
|
[dev-dependencies]
|
|
tuliprox-processing = { workspace = true, features = ["test-support"] }
|
|
tuliprox-hls = { workspace = true, features = ["test-support"] }
|
|
# The migration and playlist-stream tests build legacy v2 databases and
|
|
# sorted-index sidecars by hand; those builders live in the engine.
|
|
tuliprox-btree = { workspace = true, features = ["test-support"] }
|
|
# HLS tests assert on the segment render/finalize counters.
|
|
tuliprox-mpegts = { workspace = true, features = ["test-support"] }
|
|
# API tests build a GeoIp that answers a fixed country.
|
|
tuliprox-repository = { workspace = true, features = ["test-support"] }
|
|
tokio = { workspace = true, features = ["test-util", "macros"] }
|
|
rcgen = "0.14.9"
|
|
rustls = "0.23.43"
|
|
tokio-rustls = "0.26.4"
|
|
|
|
|
|
[[bin]]
|
|
name = "flags-builder"
|
|
path = "src/tools/flags_builder.rs"
|