From df2a4e4a7269261882088bb045c967f61eab846b Mon Sep 17 00:00:00 2001 From: euzu Date: Fri, 2 Jan 2026 13:18:08 +0100 Subject: [PATCH] - Fix for telegram send error - Fix for series strm generation - Input disabled is now disabled and can't be forced through cli to be enabled --- Cargo.lock | 188 ++++++++++-------- backend/Cargo.toml | 6 +- backend/src/processing/processor/playlist.rs | 9 +- .../src/processing/processor/xtream_series.rs | 94 +++++---- backend/src/repository/playlist_repository.rs | 1 + backend/src/utils/telegram.rs | 4 +- frontend/Cargo.toml | 4 +- shared/Cargo.toml | 4 +- 8 files changed, 179 insertions(+), 131 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ad8f627a5..d94daa087 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -83,7 +83,7 @@ version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.60.2", ] [[package]] @@ -94,7 +94,7 @@ checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" dependencies = [ "anstyle", "once_cell_polyfill", - "windows-sys 0.61.2", + "windows-sys 0.60.2", ] [[package]] @@ -111,9 +111,12 @@ checksum = "d301b3b94cb4b2f23d7917810addbbaff90738e0ca2be692bd027e70d7e0330c" [[package]] name = "arc-swap" -version = "1.7.1" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" +checksum = "51d03449bb8ca2cc2ef70869af31463d1ae5ccc8fa3e334b307203fbf815207e" +dependencies = [ + "rustversion", +] [[package]] name = "arrayref" @@ -148,7 +151,7 @@ checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -227,7 +230,7 @@ checksum = "604fde5e028fea851ce1d8570bbdc034bec850d157f7569d10f347d06808c05c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -356,6 +359,12 @@ version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b35204fbdc0b3f4446b89fc1ac2cf84a8a68971995d0bf2e925ec7cd960f9cb3" +[[package]] +name = "cast" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" + [[package]] name = "cc" version = "1.2.46" @@ -461,7 +470,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -642,7 +651,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" dependencies = [ "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -669,7 +678,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -693,7 +702,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -704,7 +713,7 @@ checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -765,7 +774,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -775,7 +784,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" dependencies = [ "derive_builder_core", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -795,7 +804,7 @@ checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -830,7 +839,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -948,7 +957,7 @@ checksum = "685adfa4d6f3d765a26bc5dbc936577de9abf756c1feeb3089b01dd395034842" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -987,7 +996,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] @@ -1102,7 +1111,7 @@ dependencies = [ [[package]] name = "frontend" -version = "3.2.28" +version = "3.2.29" dependencies = [ "anyhow", "base64", @@ -1212,7 +1221,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -1286,7 +1295,7 @@ checksum = "913dce4c5f06c2ea40fc178c06f777ac89fc6b1383e90c254fafb1abe4ba3c82" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", "uuid", ] @@ -1745,7 +1754,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -2172,7 +2181,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "699c1b6d335e63d0ba5c1e1c7f647371ce989c3bcbe1f7ed2b85fa56e3bd1a21" dependencies = [ "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -2263,7 +2272,7 @@ checksum = "980af8b43c3ad5d8d349ace167ec8170839f753a42d233ba19e08afe1850fa69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -2278,9 +2287,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.82" +version = "0.3.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b011eec8cc36da2aab2d5cff675ec18454fad408585853910a202391cf9f8e65" +checksum = "464a3709c7f55f1f721e5389aa6ea4e3bc6aba669353300af094b29ffbdde1d8" dependencies = [ "once_cell", "wasm-bindgen", @@ -2340,9 +2349,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.177" +version = "0.2.178" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" +checksum = "37c93d8daa9d8a012fd8ab92f088405fb202ea0b6ab73ee2482ae66af4f42091" [[package]] name = "libm" @@ -2573,6 +2582,15 @@ dependencies = [ "winapi", ] +[[package]] +name = "nu-ansi-term" +version = "0.50.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" +dependencies = [ + "windows-sys 0.59.0", +] + [[package]] name = "num-bigint" version = "0.4.6" @@ -2685,6 +2703,12 @@ version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" +[[package]] +name = "oorandom" +version = "11.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6790f58c7ff633d8771f42965289203411a5e5c68388703c06e14f24770b41e" + [[package]] name = "openssl" version = "0.10.75" @@ -2708,7 +2732,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -2853,7 +2877,7 @@ dependencies = [ "pest_meta", "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -2915,7 +2939,7 @@ dependencies = [ "phf_shared 0.11.3", "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -2953,7 +2977,7 @@ checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -3058,7 +3082,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -3150,7 +3174,7 @@ dependencies = [ "itertools", "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -3565,15 +3589,15 @@ dependencies = [ [[package]] name = "rustix" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" +checksum = "146c9e247ccc180c1f61615433868c99f3de3ae256a30a43b49f67c2d9171f34" dependencies = [ "bitflags 2.10.0", "errno", "libc", "linux-raw-sys", - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] @@ -3619,9 +3643,9 @@ checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" [[package]] name = "ryu" -version = "1.0.20" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" +checksum = "62049b2877bf12821e8f9ad256ee38fdc31db7387ec2d3b3f403024de2034aea" [[package]] name = "same-file" @@ -3758,7 +3782,7 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -3843,7 +3867,7 @@ dependencies = [ [[package]] name = "shared" -version = "3.2.28" +version = "3.2.29" dependencies = [ "base64", "bitflags 2.10.0", @@ -3986,9 +4010,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.110" +version = "2.0.111" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a99801b5bd34ede4cf3fc688c5919368fea4e4814a4664359503e6015b280aea" +checksum = "390cc9a294ab71bdb1aa2e99d13be9c753cd2d7bd6560c77118597410c4d2e87" dependencies = [ "proc-macro2", "quote", @@ -4012,7 +4036,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -4052,15 +4076,15 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.23.0" +version = "3.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" +checksum = "655da9c7eb6305c55742045d5a8d2037996d61d8de95806335c7c86ce0f82e9c" dependencies = [ "fastrand", "getrandom 0.3.4", "once_cell", "rustix", - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] @@ -4089,7 +4113,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -4100,7 +4124,7 @@ checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -4185,7 +4209,7 @@ checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -4389,7 +4413,7 @@ checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -4409,7 +4433,7 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "tuliprox" -version = "3.2.28" +version = "3.2.29" dependencies = [ "arc-swap", "async-compression", @@ -4656,9 +4680,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.105" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da95793dfc411fbbd93f5be7715b0578ec61fe87cb1a42b12eb625caa5c5ea60" +checksum = "0d759f433fa64a2d763d1340820e46e111a7a5ab75f993d1852d70b03dbb80fd" dependencies = [ "cfg-if", "once_cell", @@ -4671,9 +4695,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.55" +version = "0.4.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "551f88106c6d5e7ccc7cd9a16f312dd3b5d36ea8b4954304657d5dfba115d4a0" +checksum = "836d9622d604feee9e5de25ac10e3ea5f2d65b41eac0d9ce72eb5deae707ce7c" dependencies = [ "cfg-if", "js-sys", @@ -4684,9 +4708,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.105" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04264334509e04a7bf8690f2384ef5265f05143a4bff3889ab7a3269adab59c2" +checksum = "48cb0d2638f8baedbc542ed444afc0644a29166f1595371af4fecf8ce1e7eeb3" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -4694,34 +4718,42 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.105" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "420bc339d9f322e562942d52e115d57e950d12d88983a14c79b86859ee6c7ebc" +checksum = "cefb59d5cd5f92d9dcf80e4683949f15ca4b511f4ac0a6e14d4e1ac60c6ecd40" dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.105" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76f218a38c84bcb33c25ec7059b07847d465ce0e0a76b995e134a45adcb6af76" +checksum = "cbc538057e648b67f72a982e708d485b2efa771e1ac05fec311f9f63e5800db4" dependencies = [ "unicode-ident", ] [[package]] name = "wasm-bindgen-test" -version = "0.3.55" +version = "0.3.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfc379bfb624eb59050b509c13e77b4eb53150c350db69628141abce842f2373" +checksum = "25e90e66d265d3a1efc0e72a54809ab90b9c0c515915c67cdf658689d2c22c6c" dependencies = [ + "async-trait", + "cast", "js-sys", + "libm", "minicov", + "nu-ansi-term", + "num-traits", + "oorandom", + "serde", + "serde_json", "wasm-bindgen", "wasm-bindgen-futures", "wasm-bindgen-test-macro", @@ -4729,13 +4761,13 @@ dependencies = [ [[package]] name = "wasm-bindgen-test-macro" -version = "0.3.55" +version = "0.3.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "085b2df989e1e6f9620c1311df6c996e83fe16f57792b272ce1e024ac16a90f1" +checksum = "7150335716dce6028bead2b848e72f47b45e7b9422f64cccdc23bedca89affc1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -4764,9 +4796,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.82" +version = "0.3.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a1f95c0d03a47f4ae1f7a64643a6bb97465d9b740f0fa8f90ea33915c99a9a1" +checksum = "9b32828d774c412041098d182a8b38b16ea816958e07cf40eec2bc080ae137ac" dependencies = [ "js-sys", "wasm-bindgen", @@ -4813,7 +4845,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] @@ -4889,7 +4921,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -4900,7 +4932,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -5239,7 +5271,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -5269,7 +5301,7 @@ checksum = "42bfd190a07ca8cfde7cd4c52b3ac463803dc07323db8c34daa697e86365978c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -5291,7 +5323,7 @@ checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", "synstructure", ] @@ -5312,7 +5344,7 @@ checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -5332,7 +5364,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", "synstructure", ] @@ -5372,7 +5404,7 @@ checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] diff --git a/backend/Cargo.toml b/backend/Cargo.toml index 1ad9baa09..dbc861699 100644 --- a/backend/Cargo.toml +++ b/backend/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "tuliprox" -version = "3.2.28" +version = "3.2.29" edition = "2021" rust-version = "1.87.0" @@ -49,7 +49,7 @@ tokio = { version = "1.48", features = ["rt-multi-thread", "parking_lot", "fs"] #tracing = "0.1" #tracing-subscriber = { version = "0.3", features = ["fmt", "env-filter"] } tokio-util = { version = "0.7", features = ["io", "io-util"] } -tempfile = "3.23" +tempfile = "3.24" filetime = "0.2" strsim = "0.11" rphonetic = "3.0" @@ -60,7 +60,7 @@ indexmap = "2" lz4_flex = "0.11" fs2 = "0.4" notify = "8.2" -arc-swap = "1.7" +arc-swap = "1.8" dashmap = "6.1" hyper = "1.8" hyper-util = "0.1" diff --git a/backend/src/processing/processor/playlist.rs b/backend/src/processing/processor/playlist.rs index f8686f76a..f7cc67457 100644 --- a/backend/src/processing/processor/playlist.rs +++ b/backend/src/processing/processor/playlist.rs @@ -234,13 +234,10 @@ fn map_playlist_counter(target: &ConfigTarget, playlist: &mut [PlaylistGroup]) { } } -// If no input is enabled but the user set the target as command line argument, -// we force the input to be enabled. -// If there are enabled input, then only these are used. +// Inputs disabled in the config are always disabled. +// Command-line targets can only restrict enabled inputs, never enable them. fn is_input_enabled(input: &ConfigInput, user_targets: &ProcessTargets) -> bool { - let input_enabled = input.enabled; - let input_id = input.id; - (!user_targets.enabled && input_enabled) || user_targets.has_input(input_id) + input.enabled && (!user_targets.enabled || user_targets.has_input(input.id)) } fn is_target_enabled(target: &ConfigTarget, user_targets: &ProcessTargets) -> bool { diff --git a/backend/src/processing/processor/xtream_series.rs b/backend/src/processing/processor/xtream_series.rs index d98651e6a..b7f1fa887 100644 --- a/backend/src/processing/processor/xtream_series.rs +++ b/backend/src/processing/processor/xtream_series.rs @@ -1,9 +1,9 @@ use crate::model::FetchedPlaylist; use crate::model::{AppConfig, ConfigTarget}; use crate::processing::parser::xtream::parse_xtream_series_info; +use crate::processing::processor::create_resolve_options_function_for_xtream_target; use crate::processing::processor::playlist::ProcessingPipe; use crate::processing::processor::xtream::playlist_resolve_download_playlist_item; -use crate::processing::processor::create_resolve_options_function_for_xtream_target; use crate::repository::storage::get_input_storage_path; use crate::repository::xtream_repository::persists_input_series_info; use log::{error, info, log_enabled, Level}; @@ -15,8 +15,11 @@ use std::time::Instant; create_resolve_options_function_for_xtream_target!(series); -async fn playlist_resolve_series_info(app_config: &Arc, client: &reqwest::Client, errors: &mut Vec, - fpl: &mut FetchedPlaylist<'_>, resolve_delay: u16) -> Vec { +async fn playlist_resolve_series_info(app_config: &Arc, client: &reqwest::Client, + errors: &mut Vec, + fpl: &mut FetchedPlaylist<'_>, + resolve_series: bool, + resolve_delay: u16) -> Vec { let input = fpl.input; let working_dir = &app_config.config.load().working_dir; let storage_path = match get_input_storage_path(&input.name, working_dir) { @@ -27,56 +30,69 @@ async fn playlist_resolve_series_info(app_config: &Arc, client: &reqw } }; - let series_info_count = fpl.playlist_groups.iter() - .flat_map(|plg| &plg.channels) - .filter(|&pli| pli.header.xtream_cluster == XtreamCluster::Series - && pli.header.item_type == PlaylistItemType::SeriesInfo - && !pli.has_details()).count(); + let series_info_count = if resolve_series { + let count = fpl.playlist_groups.iter() + .flat_map(|plg| &plg.channels) + .filter(|&pli| pli.header.xtream_cluster == XtreamCluster::Series + && pli.header.item_type == PlaylistItemType::SeriesInfo + && !pli.has_details()).count(); + info!("Found {count} series info to resolve"); + count + } else { + 0 + }; - info!("Found {series_info_count} series info to resolve"); let mut last_log_time = Instant::now(); let mut processed_series_info_count = 0; - let input = fpl.input; let mut result: Vec = vec![]; for plg in &mut fpl.playlist_groups { let mut group_series = vec![]; for pli in &mut plg.channels { if pli.header.xtream_cluster != XtreamCluster::Series - || pli.header.item_type != PlaylistItemType::SeriesInfo - || pli.has_details() { + || pli.header.item_type != PlaylistItemType::SeriesInfo { continue; } + let Some(provider_id) = pli.get_provider_id() else { continue; }; - processed_series_info_count += 1; - let (group, series_name) = { - let header = &pli.header; - (header.group.clone(), if header.name.is_empty() { header.title.clone() } else { header.name.clone() }) - }; - if provider_id != 0 { + if provider_id == 0 { + continue; + } + + let should_download = resolve_series && !pli.has_details(); + if should_download { + processed_series_info_count += 1; if let Some(content) = playlist_resolve_download_playlist_item(client, pli, fpl.input, errors, resolve_delay, XtreamCluster::Series).await { - if content.is_empty() { continue; } - match serde_json::from_str::(&content) { - Ok(info) => { - let series_stream_props = SeriesStreamProperties::from_info(&info, pli); - // the input db needs to be updated - let _ = persists_input_series_info(app_config, &storage_path, pli.header.xtream_cluster, &input.name, provider_id, &series_stream_props).await; - // extract episodes from info - if let Some(episodes) = parse_xtream_series_info(&pli.get_uuid(), &series_stream_props, &group, &series_name, input) { - group_series.extend(episodes.into_iter()); + if !content.is_empty() { + match serde_json::from_str::(&content) { + Ok(info) => { + let series_stream_props = SeriesStreamProperties::from_info(&info, pli); + // the input db needs to be updated + let _ = persists_input_series_info(app_config, &storage_path, pli.header.xtream_cluster, &input.name, provider_id, &series_stream_props).await; + // Update in-memory playlist items with the newly fetched vod info. + // This makes the data available for later processing steps like STRM export. + pli.header.additional_properties = Some(StreamProperties::Series(Box::new(series_stream_props))); + } + Err(err) => { + error!("Failed to parse series info for provider_id {provider_id}: {err}"); } - // Update in-memory playlist items with the newly fetched vod info. - // This makes the data available for later processing steps like STRM export. - pli.header.additional_properties = Some(StreamProperties::Series(Box::new(series_stream_props))); - } - Err(err) => { - error!("Failed to parse series info for provider_id {provider_id}: {err}"); } } } } - if log_enabled!(Level::Info) - && last_log_time.elapsed().as_secs() >= 30 { + + // extract episodes from info + if let Some(StreamProperties::Series(properties)) = pli.header.additional_properties.as_ref() { + let (group, series_name) = { + let header = &pli.header; + (header.group.clone(), if header.name.is_empty() { header.title.clone() } else { header.name.clone() }) + }; + if let Some(episodes) = parse_xtream_series_info(&pli.get_uuid(), properties, &group, &series_name, input) { + group_series.extend(episodes.into_iter()); + } + } + + if resolve_series && log_enabled!(Level::Info) && last_log_time.elapsed().as_secs() >= 30 { info!("resolved {processed_series_info_count}/{series_info_count} series info"); last_log_time = Instant::now(); } @@ -90,7 +106,9 @@ async fn playlist_resolve_series_info(app_config: &Arc, client: &reqw }); } } - info!("resolved {processed_series_info_count}/{series_info_count} series info"); + if resolve_series { + info!("resolved {processed_series_info_count}/{series_info_count} series info"); + } result } @@ -103,8 +121,8 @@ pub async fn playlist_resolve_series(cfg: &Arc, processed_fpl: &mut FetchedPlaylist<'_>, ) { let (resolve_series, resolve_delay) = get_resolve_series_options(target, processed_fpl); - if !resolve_series { return; } - let series_playlist = playlist_resolve_series_info(cfg, client, errors, processed_fpl, resolve_delay).await; + + let series_playlist = playlist_resolve_series_info(cfg, client, errors, processed_fpl, resolve_series, resolve_delay).await; if series_playlist.is_empty() { return; } // original content saved into original list diff --git a/backend/src/repository/playlist_repository.rs b/backend/src/repository/playlist_repository.rs index 84321b4fd..cd02e40fe 100644 --- a/backend/src/repository/playlist_repository.rs +++ b/backend/src/repository/playlist_repository.rs @@ -167,6 +167,7 @@ fn assign_provider_series_info_episode_key(provider_series: &mut HashMap>) { let header = &mut pli.header; + header.parent_code = String::new(); if let Some(episode_keys) = local_library_series.get(&header.id) { if let Some(StreamProperties::Series(series)) = header.additional_properties.as_mut() { if let Some(episodes) = diff --git a/backend/src/utils/telegram.rs b/backend/src/utils/telegram.rs index b178cd5dc..e6660f405 100644 --- a/backend/src/utils/telegram.rs +++ b/backend/src/utils/telegram.rs @@ -40,10 +40,10 @@ fn get_send_message_parse_mode_str(mode: &SendMessageParseMode) -> &'static str #[derive(Debug, serde::Serialize)] struct RequestObj { pub chat_id: String, - #[serde(default)] + #[serde(default, skip_serializing_if = "Option::is_none")] pub message_thread_id: Option, pub text: String, - #[serde(default)] + #[serde(default, skip_serializing_if = "Option::is_none")] pub parse_mode: Option, } diff --git a/frontend/Cargo.toml b/frontend/Cargo.toml index 54ca4b7ca..91a094d18 100644 --- a/frontend/Cargo.toml +++ b/frontend/Cargo.toml @@ -1,11 +1,11 @@ [package] name = "frontend" -version = "3.2.28" +version = "3.2.29" edition = "2021" rust-version = "1.87.0" [dependencies] -shared = { version = "3.2.28", path = "../shared" } +shared = { version = "3.2.29", path = "../shared" } chrono = "0" yew = "0.21" yew-router = "0.18" diff --git a/shared/Cargo.toml b/shared/Cargo.toml index c7b5cb942..409454a0b 100644 --- a/shared/Cargo.toml +++ b/shared/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "shared" -version = "3.2.28" +version = "3.2.29" edition = "2021" rust-version = "1.87.0" @@ -28,4 +28,4 @@ lz4_flex = "0.12.0" deunicode = "1.6.2" [target.'cfg(target_arch = "wasm32")'.dependencies] -js-sys = "0.3.82" +js-sys = "0.3.83"