aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-11-09 14:12:18 +0100
committermetamuffin <metamuffin@disroot.org>2025-11-09 14:12:18 +0100
commit2efc5f9444402c5ef9db25887f2e95d184af8e05 (patch)
tree07f317780bdbe87d633e5340fe87bc604484730d
parent6032bfd0fa7cfd10d1bc17e44f91a789aa86efad (diff)
downloadjellything-2efc5f9444402c5ef9db25887f2e95d184af8e05.tar
jellything-2efc5f9444402c5ef9db25887f2e95d184af8e05.tar.bz2
jellything-2efc5f9444402c5ef9db25887f2e95d184af8e05.tar.zst
upgrade deps + clippy
-rw-r--r--Cargo.lock372
-rw-r--r--Cargo.toml8
-rw-r--r--cache/Cargo.toml8
-rw-r--r--common/Cargo.toml8
-rw-r--r--common/src/routes.rs10
-rw-r--r--database/Cargo.toml10
-rw-r--r--database/src/lib.rs6
-rw-r--r--database/src/search.rs6
-rw-r--r--ebml_derive/Cargo.toml4
-rw-r--r--import/Cargo.toml14
-rw-r--r--import/asset_token/Cargo.toml10
-rw-r--r--import/asset_token/src/lib.rs6
-rw-r--r--import/fallback_generator/Cargo.toml6
-rw-r--r--import/fallback_generator/src/lib.rs4
-rw-r--r--import/src/acoustid.rs4
-rw-r--r--import/src/lib.rs7
-rw-r--r--import/src/musicbrainz.rs6
-rw-r--r--import/src/vgmdb.rs10
-rw-r--r--import/src/wikidata.rs8
-rw-r--r--import/src/wikimedia_commons.rs6
-rw-r--r--logic/Cargo.toml10
-rw-r--r--logic/src/account.rs6
-rw-r--r--logic/src/admin/user.rs2
-rw-r--r--logic/src/assets.rs16
-rw-r--r--logic/src/home.rs2
-rw-r--r--logic/src/node.rs8
-rw-r--r--logic/src/search.rs2
-rw-r--r--logic/src/session.rs4
-rw-r--r--remuxer/Cargo.toml6
-rw-r--r--remuxer/src/demuxers/flac.rs2
-rw-r--r--remuxer/src/demuxers/matroska.rs8
-rw-r--r--remuxer/src/muxers/matroska.rs5
-rw-r--r--server/Cargo.toml16
-rw-r--r--server/src/helper/filter_sort.rs10
-rw-r--r--server/src/ui/admin/log.rs2
-rw-r--r--server/src/ui/admin/user.rs6
-rw-r--r--server/src/ui/error.rs2
-rw-r--r--server/src/ui/node.rs2
-rw-r--r--server/src/ui/search.rs2
-rw-r--r--stream/Cargo.toml4
-rw-r--r--stream/src/fragment.rs5
-rw-r--r--stream/src/lib.rs4
-rw-r--r--stream/src/stream_info.rs4
-rw-r--r--stream/types/Cargo.toml2
-rw-r--r--tool/Cargo.toml20
-rw-r--r--tool/src/add.rs2
-rw-r--r--tool/src/cli.rs2
-rw-r--r--transcoder/Cargo.toml16
-rw-r--r--transcoder/src/fragment.rs2
-rw-r--r--ui/Cargo.toml6
-rw-r--r--ui/src/account/mod.rs24
-rw-r--r--ui/src/account/settings.rs12
-rw-r--r--ui/src/filter_sort.rs4
-rw-r--r--ui/src/home.rs8
-rw-r--r--ui/src/items.rs8
-rw-r--r--ui/src/search.rs6
-rw-r--r--ui/src/stats.rs20
57 files changed, 467 insertions, 306 deletions
diff --git a/Cargo.lock b/Cargo.lock
index a7c08e1..c8d4b54 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -84,6 +84,15 @@ dependencies = [
]
[[package]]
+name = "aligned"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "377e4c0ba83e4431b10df45c1d4666f178ea9c552cac93e60c3a88bf32785923"
+dependencies = [
+ "as-slice",
+]
+
+[[package]]
name = "aligned-vec"
version = "0.6.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -220,6 +229,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50"
[[package]]
+name = "as-slice"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "516b6b4f0e40d50dcda9365d53964ec74560ad4284da2e7fc97122cd83174516"
+dependencies = [
+ "stable_deref_trait",
+]
+
+[[package]]
name = "async-recursion"
version = "1.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -291,6 +309,26 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
[[package]]
+name = "av-scenechange"
+version = "0.14.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f321d77c20e19b92c39e7471cf986812cbb46659d2af674adc4331ef3f18394"
+dependencies = [
+ "aligned",
+ "anyhow",
+ "arg_enum_proc_macro",
+ "arrayvec",
+ "log",
+ "num-rational",
+ "num-traits",
+ "pastey",
+ "rayon",
+ "thiserror 2.0.17",
+ "v_frame",
+ "y4m",
+]
+
+[[package]]
name = "av1-grain"
version = "0.2.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -379,6 +417,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6099cdc01846bc367c4e7dd630dc5966dccf36b652fae7a74e17b640411a91b2"
[[package]]
+name = "bitstream-io"
+version = "4.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "60d4bd9d1db2c6bdf285e223a7fa369d5ce98ec767dec949c6ca62863ce61757"
+dependencies = [
+ "core2",
+]
+
+[[package]]
name = "blake2"
version = "0.10.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -410,12 +457,43 @@ dependencies = [
]
[[package]]
+name = "bon"
+version = "3.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ebeb9aaf9329dff6ceb65c689ca3db33dbf15f324909c60e4e5eef5701ce31b1"
+dependencies = [
+ "bon-macros",
+ "rustversion",
+]
+
+[[package]]
+name = "bon-macros"
+version = "3.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77e9d642a7e3a318e37c2c9427b5a6a48aa1ad55dcd986f3034ab2239045a645"
+dependencies = [
+ "darling",
+ "ident_case",
+ "prettyplease",
+ "proc-macro2",
+ "quote",
+ "rustversion",
+ "syn",
+]
+
+[[package]]
name = "built"
version = "0.7.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "56ed6191a7e78c36abdb16ab65341eefd73d64d303fffccdbb00d51e4205967b"
[[package]]
+name = "built"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4ad8f11f288f48ca24471bbd51ac257aaeaaa07adae295591266b792902ae64"
+
+[[package]]
name = "bumpalo"
version = "3.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -591,15 +669,15 @@ checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75"
[[package]]
name = "console"
-version = "0.15.11"
+version = "0.16.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "054ccb5b10f9f2cbf51eb355ca1d05c2d279ce1804688d0db74b4733a5aeafd8"
+checksum = "b430743a6eb14e9764d4260d4c0d8123087d504eeb9c48f2b2a5e810dd369df4"
dependencies = [
"encode_unicode",
"libc",
"once_cell",
"unicode-width",
- "windows-sys 0.59.0",
+ "windows-sys 0.61.2",
]
[[package]]
@@ -632,6 +710,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
[[package]]
+name = "core2"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
name = "cpufeatures"
version = "0.2.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -795,15 +882,14 @@ dependencies = [
[[package]]
name = "dialoguer"
-version = "0.11.0"
+version = "0.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "658bce805d770f407bc62102fca7c2c64ceef2fbcb2b8bd19d2765ce093980de"
+checksum = "25f104b501bf2364e78d0d3974cbc774f738f5865306ed128e1e0d7499c0ad96"
dependencies = [
"console",
"fuzzy-matcher",
"shell-words",
"tempfile",
- "thiserror 1.0.69",
"zeroize",
]
@@ -831,9 +917,9 @@ dependencies = [
[[package]]
name = "downcast-rs"
-version = "1.2.1"
+version = "2.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2"
+checksum = "117240f60069e65410b3ae1bb213295bd828f707b5bec6596a1afc8793ce0cbc"
[[package]]
name = "ebml"
@@ -1050,12 +1136,12 @@ dependencies = [
[[package]]
name = "fs4"
-version = "0.8.4"
+version = "0.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f7e180ac76c23b45e767bd7ae9579bc0bb458618c4bc71835926e098e61d15f8"
+checksum = "8640e34b88f7652208ce9e88b1a37a2ae95227d84abec377ccd3c5cfeb141ed4"
dependencies = [
- "rustix 0.38.44",
- "windows-sys 0.52.0",
+ "rustix",
+ "windows-sys 0.59.0",
]
[[package]]
@@ -1484,13 +1570,22 @@ dependencies = [
"libc",
"percent-encoding",
"pin-project-lite",
- "socket2 0.6.1",
+ "socket2 0.5.10",
"tokio",
"tower-service",
"tracing",
]
[[package]]
+name = "hyperloglogplus"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "621debdf94dcac33e50475fdd76d34d5ea9c0362a834b9db08c3024696c1fbe3"
+dependencies = [
+ "serde",
+]
+
+[[package]]
name = "iana-time-zone"
version = "0.1.64"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1638,7 +1733,7 @@ dependencies = [
"num-traits",
"png",
"qoi",
- "ravif",
+ "ravif 0.11.20",
"rayon",
"rgb",
"tiff",
@@ -1666,7 +1761,7 @@ dependencies = [
"approx",
"getrandom 0.2.16",
"image",
- "itertools",
+ "itertools 0.12.1",
"nalgebra",
"num",
"rand 0.8.5",
@@ -1694,14 +1789,14 @@ dependencies = [
[[package]]
name = "indicatif"
-version = "0.17.11"
+version = "0.18.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "183b3088984b400f4cfac3620d5e076c84da5364016b4f49473de574b2586235"
+checksum = "ade6dfcba0dfb62ad59e59e7241ec8912af34fd29e0e743e3db992bd278e8b65"
dependencies = [
"console",
- "number_prefix",
"portable-atomic",
"unicode-width",
+ "unit-prefix",
"web-time",
]
@@ -1721,18 +1816,6 @@ dependencies = [
]
[[package]]
-name = "instant"
-version = "0.1.13"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222"
-dependencies = [
- "cfg-if",
- "js-sys",
- "wasm-bindgen",
- "web-sys",
-]
-
-[[package]]
name = "interpolate_name"
version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1786,6 +1869,15 @@ dependencies = [
]
[[package]]
+name = "itertools"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285"
+dependencies = [
+ "either",
+]
+
+[[package]]
name = "itoa"
version = "1.0.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2012,8 +2104,8 @@ dependencies = [
"libavif-image",
"log",
"matroska",
- "rav1e",
- "ravif",
+ "rav1e 0.8.1",
+ "ravif 0.12.0",
"rayon",
"rgb",
"serde",
@@ -2167,12 +2259,6 @@ dependencies = [
[[package]]
name = "linux-raw-sys"
-version = "0.4.15"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab"
-
-[[package]]
-name = "linux-raw-sys"
version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039"
@@ -2309,11 +2395,10 @@ checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00"
[[package]]
name = "measure_time"
-version = "0.8.3"
+version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dbefd235b0aadd181626f281e1d684e116972988c14c264e42069d5e8a5775cc"
+checksum = "51c55d61e72fc3ab704396c5fa16f4c184db37978ae4e94ca8959693a235fc0e"
dependencies = [
- "instant",
"log",
]
@@ -2417,11 +2502,12 @@ dependencies = [
[[package]]
name = "nasm-rs"
-version = "0.2.5"
+version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fe4d98d0065f4b1daf164b3eafb11974c94662e5e2396cf03f32d0bb5c17da51"
+checksum = "34f676553b60ccbb76f41f9ae8f2428dac3f259ff8f1c2468a174778d06a1af9"
dependencies = [
- "rayon",
+ "jobserver",
+ "log",
]
[[package]]
@@ -2566,12 +2652,6 @@ dependencies = [
]
[[package]]
-name = "number_prefix"
-version = "0.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3"
-
-[[package]]
name = "once_cell"
version = "1.21.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2606,9 +2686,9 @@ dependencies = [
[[package]]
name = "ownedbytes"
-version = "0.7.0"
+version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c3a059efb063b8f425b948e042e6b9bd85edfe60e913630ed727b23e2dfcc558"
+checksum = "2fbd56f7631767e61784dc43f8580f403f4475bd4aaa4da003e6295e1bab4a7e"
dependencies = [
"stable_deref_trait",
]
@@ -2685,6 +2765,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a"
[[package]]
+name = "pastey"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35fb2e5f958ec131621fdd531e9fc186ed768cbe395337403ae56c17a74c68ec"
+
+[[package]]
name = "pear"
version = "0.2.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2796,6 +2882,16 @@ dependencies = [
]
[[package]]
+name = "prettyplease"
+version = "0.2.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b"
+dependencies = [
+ "proc-macro2",
+ "syn",
+]
+
+[[package]]
name = "proc-macro2"
version = "1.0.103"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2871,9 +2967,9 @@ dependencies = [
"pin-project-lite",
"quinn-proto",
"quinn-udp",
- "rustc-hash 2.1.1",
+ "rustc-hash",
"rustls",
- "socket2 0.6.1",
+ "socket2 0.5.10",
"thiserror 2.0.17",
"tokio",
"tracing",
@@ -2891,7 +2987,7 @@ dependencies = [
"lru-slab",
"rand 0.9.2",
"ring",
- "rustc-hash 2.1.1",
+ "rustc-hash",
"rustls",
"rustls-pki-types",
"slab",
@@ -2910,16 +3006,16 @@ dependencies = [
"cfg_aliases",
"libc",
"once_cell",
- "socket2 0.6.1",
+ "socket2 0.5.10",
"tracing",
"windows-sys 0.60.2",
]
[[package]]
name = "quote"
-version = "1.0.41"
+version = "1.0.42"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1"
+checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f"
dependencies = [
"proc-macro2",
]
@@ -3037,17 +3133,15 @@ dependencies = [
"arg_enum_proc_macro",
"arrayvec",
"av1-grain",
- "bitstream-io",
- "built",
- "cc",
+ "bitstream-io 2.6.0",
+ "built 0.7.7",
"cfg-if",
"interpolate_name",
- "itertools",
+ "itertools 0.12.1",
"libc",
"libfuzzer-sys",
"log",
"maybe-rayon",
- "nasm-rs",
"new_debug_unreachable",
"noop_proc_macro",
"num-derive",
@@ -3065,6 +3159,43 @@ dependencies = [
]
[[package]]
+name = "rav1e"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43b6dd56e85d9483277cde964fd1bdb0428de4fec5ebba7540995639a21cb32b"
+dependencies = [
+ "aligned-vec",
+ "arbitrary",
+ "arg_enum_proc_macro",
+ "arrayvec",
+ "av-scenechange",
+ "av1-grain",
+ "bitstream-io 4.9.0",
+ "built 0.8.0",
+ "cc",
+ "cfg-if",
+ "interpolate_name",
+ "itertools 0.14.0",
+ "libc",
+ "libfuzzer-sys",
+ "log",
+ "maybe-rayon",
+ "nasm-rs",
+ "new_debug_unreachable",
+ "noop_proc_macro",
+ "num-derive",
+ "num-traits",
+ "paste",
+ "profiling",
+ "rand 0.9.2",
+ "rand_chacha 0.9.0",
+ "simd_helpers",
+ "thiserror 2.0.17",
+ "v_frame",
+ "wasm-bindgen",
+]
+
+[[package]]
name = "ravif"
version = "0.11.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -3074,7 +3205,22 @@ dependencies = [
"imgref",
"loop9",
"quick-error",
- "rav1e",
+ "rav1e 0.7.1",
+ "rayon",
+ "rgb",
+]
+
+[[package]]
+name = "ravif"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef69c1990ceef18a116855938e74793a5f7496ee907562bd0857b6ac734ab285"
+dependencies = [
+ "avif-serialize",
+ "imgref",
+ "loop9",
+ "quick-error",
+ "rav1e 0.8.1",
"rayon",
"rgb",
]
@@ -3116,9 +3262,9 @@ dependencies = [
[[package]]
name = "redb"
-version = "2.6.3"
+version = "3.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8eca1e9d98d5a7e9002d0013e18d5a9b000aee942eb134883a82f06ebffb6c01"
+checksum = "ae323eb086579a3769daa2c753bb96deb95993c534711e0dbe881b5192906a06"
dependencies = [
"libc",
]
@@ -3348,31 +3494,12 @@ dependencies = [
[[package]]
name = "rustc-hash"
-version = "1.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
-
-[[package]]
-name = "rustc-hash"
version = "2.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d"
[[package]]
name = "rustix"
-version = "0.38.44"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154"
-dependencies = [
- "bitflags",
- "errno",
- "libc",
- "linux-raw-sys 0.4.15",
- "windows-sys 0.59.0",
-]
-
-[[package]]
-name = "rustix"
version = "1.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e"
@@ -3380,7 +3507,7 @@ dependencies = [
"bitflags",
"errno",
"libc",
- "linux-raw-sys 0.11.0",
+ "linux-raw-sys",
"windows-sys 0.61.2",
]
@@ -3626,9 +3753,9 @@ dependencies = [
[[package]]
name = "sketches-ddsketch"
-version = "0.2.2"
+version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "85636c14b73d81f541e525f585c0a2109e6744e1565b5c1668e31c70c10ed65c"
+checksum = "c1e9a774a6c28142ac54bb25d25562e6bcf957493a184f15ad4eebccb23e410a"
dependencies = [
"serde",
]
@@ -3718,9 +3845,9 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
[[package]]
name = "syn"
-version = "2.0.108"
+version = "2.0.109"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "da58917d35242480a05c2897064da0a80589a2a0476c9a3f2fdc83b53502e917"
+checksum = "2f17c7e013e88258aa9543dcbe81aca68a667a9ac37cd69c9fbc07858bfe0e2f"
dependencies = [
"proc-macro2",
"quote",
@@ -3762,14 +3889,15 @@ dependencies = [
[[package]]
name = "tantivy"
-version = "0.22.1"
+version = "0.25.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "96599ea6fccd844fc833fed21d2eecac2e6a7c1afd9e044057391d78b1feb141"
+checksum = "502915c7381c5cb2d2781503962610cb880ad8f1a0ca95df1bae645d5ebf2545"
dependencies = [
"aho-corasick",
"arc-swap",
"base64",
"bitpacking",
+ "bon",
"byteorder",
"census",
"crc32fast",
@@ -3779,20 +3907,20 @@ dependencies = [
"fnv",
"fs4",
"htmlescape",
- "itertools",
+ "hyperloglogplus",
+ "itertools 0.14.0",
"levenshtein_automata",
"log",
"lru",
"lz4_flex",
"measure_time",
"memmap2",
- "num_cpus",
"once_cell",
"oneshot",
"rayon",
"regex",
"rust-stemmers",
- "rustc-hash 1.1.0",
+ "rustc-hash",
"serde",
"serde_json",
"sketches-ddsketch",
@@ -3805,7 +3933,7 @@ dependencies = [
"tantivy-stacker",
"tantivy-tokenizer-api",
"tempfile",
- "thiserror 1.0.69",
+ "thiserror 2.0.17",
"time",
"uuid",
"winapi",
@@ -3813,22 +3941,22 @@ dependencies = [
[[package]]
name = "tantivy-bitpacker"
-version = "0.6.0"
+version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "284899c2325d6832203ac6ff5891b297fc5239c3dc754c5bc1977855b23c10df"
+checksum = "c3b04eed5108d8283607da6710fe17a7663523440eaf7ea5a1a440d19a1448b6"
dependencies = [
"bitpacking",
]
[[package]]
name = "tantivy-columnar"
-version = "0.3.0"
+version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "12722224ffbe346c7fec3275c699e508fd0d4710e629e933d5736ec524a1f44e"
+checksum = "8b628488ae936c83e92b5c4056833054ca56f76c0e616aee8339e24ac89119cd"
dependencies = [
"downcast-rs",
"fastdivide",
- "itertools",
+ "itertools 0.14.0",
"serde",
"tantivy-bitpacker",
"tantivy-common",
@@ -3838,9 +3966,9 @@ dependencies = [
[[package]]
name = "tantivy-common"
-version = "0.7.0"
+version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8019e3cabcfd20a1380b491e13ff42f57bb38bf97c3d5fa5c07e50816e0621f4"
+checksum = "f880aa7cab0c063a47b62596d10991cdd0b6e0e0575d9c5eeb298b307a25de55"
dependencies = [
"async-trait",
"byteorder",
@@ -3862,19 +3990,23 @@ dependencies = [
[[package]]
name = "tantivy-query-grammar"
-version = "0.22.0"
+version = "0.25.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "847434d4af57b32e309f4ab1b4f1707a6c566656264caa427ff4285c4d9d0b82"
+checksum = "768fccdc84d60d86235d42d7e4c33acf43c418258ff5952abf07bd7837fcd26b"
dependencies = [
"nom 7.1.3",
+ "serde",
+ "serde_json",
]
[[package]]
name = "tantivy-sstable"
-version = "0.3.0"
+version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c69578242e8e9fc989119f522ba5b49a38ac20f576fc778035b96cc94f41f98e"
+checksum = "f8292095d1a8a2c2b36380ec455f910ab52dde516af36321af332c93f20ab7d5"
dependencies = [
+ "futures-util",
+ "itertools 0.14.0",
"tantivy-bitpacker",
"tantivy-common",
"tantivy-fst",
@@ -3883,9 +4015,9 @@ dependencies = [
[[package]]
name = "tantivy-stacker"
-version = "0.3.0"
+version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c56d6ff5591fc332739b3ce7035b57995a3ce29a93ffd6012660e0949c956ea8"
+checksum = "23d38a379411169f0b3002c9cba61cdfe315f757e9d4f239c00c282497a0749d"
dependencies = [
"murmurhash32",
"rand_distr",
@@ -3894,9 +4026,9 @@ dependencies = [
[[package]]
name = "tantivy-tokenizer-api"
-version = "0.3.0"
+version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2a0dcade25819a89cfe6f17d932c9cedff11989936bf6dd4f336d50392053b04"
+checksum = "23024f6aeb25ceb1a0e27740c84bdb0fae52626737b7e9a9de6ad5aa25c7b038"
dependencies = [
"serde",
]
@@ -3916,7 +4048,7 @@ dependencies = [
"fastrand",
"getrandom 0.3.4",
"once_cell",
- "rustix 1.1.2",
+ "rustix",
"windows-sys 0.61.2",
]
@@ -4335,6 +4467,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853"
[[package]]
+name = "unit-prefix"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "323402cff2dd658f39ca17c789b502021b3f18707c91cdf22e3838e1b4023817"
+
+[[package]]
name = "universal-hash"
version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -4453,9 +4591,9 @@ checksum = "051eb1abcf10076295e815102942cc58f9d5e3b4560e46e53c21e8ff6f3af7b1"
[[package]]
name = "vte"
-version = "0.14.1"
+version = "0.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "231fdcd7ef3037e8330d8e17e61011a2c244126acc0a982f4040ac3f9f0bc077"
+checksum = "a5924018406ce0063cd67f8e008104968b74b563ee1b85dde3ed1f7cb87d3dbd"
dependencies = [
"arrayvec",
"memchr",
@@ -4922,6 +5060,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9"
[[package]]
+name = "y4m"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5a4b21e1a62b67a2970e6831bc091d7b87e119e7f9791aef9702e3bef04448"
+
+[[package]]
name = "yansi"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
diff --git a/Cargo.toml b/Cargo.toml
index fa14194..15923db 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -22,11 +22,11 @@ resolver = "3"
rocket = "0.5"
rocket_ws = "0.1"
-log = "0.4.25"
-anyhow = "1.0.95"
-tokio = { version = "1.43.0", features = ["full"] }
+log = "0.4.28"
+anyhow = "1.0.100"
+tokio = { version = "1.48.0", features = ["full"] }
-reqwest = { version = "0.12.12", default-features = false, features = [
+reqwest = { version = "0.12.24", default-features = false, features = [
"rustls-tls",
"json",
"blocking",
diff --git a/cache/Cargo.toml b/cache/Cargo.toml
index aaf83e0..c171147 100644
--- a/cache/Cargo.toml
+++ b/cache/Cargo.toml
@@ -6,10 +6,10 @@ edition = "2024"
[dependencies]
base64 = "0.22.1"
humansize = "2.1.3"
-anyhow = "1.0.95"
+anyhow = "1.0.100"
log = { workspace = true }
tokio = { workspace = true }
-sha2 = "0.10.8"
-rand = "0.9.1"
-serde = "1.0.217"
+sha2 = "0.10.9"
+rand = "0.9.2"
+serde = "1.0.228"
serde_json = "1.0.145"
diff --git a/common/Cargo.toml b/common/Cargo.toml
index 7baed9f..cbe940b 100644
--- a/common/Cargo.toml
+++ b/common/Cargo.toml
@@ -4,9 +4,9 @@ version = "0.1.0"
edition = "2021"
[dependencies]
-serde = { version = "1.0.217", features = ["derive", "rc"] }
-bincode = { version = "2.0.0-rc.3", features = ["derive"] }
-chrono = { version = "0.4.39", features = ["serde"] }
-blake3 = "1.5.5"
+serde = { version = "1.0.228", features = ["derive", "rc"] }
+bincode = { version = "2.0.1", features = ["derive"] }
+chrono = { version = "0.4.42", features = ["serde"] }
+blake3 = "1.8.2"
hex = "0.4.3"
jellystream-types = { path = "../stream/types" }
diff --git a/common/src/routes.rs b/common/src/routes.rs
index 31e31d4..3e8682b 100644
--- a/common/src/routes.rs
+++ b/common/src/routes.rs
@@ -47,14 +47,14 @@ pub fn u_node_slug_progress(node: &str, time: f64) -> String {
format!("/n/{node}/progress?t={time}")
}
pub fn u_items() -> String {
- format!("/items")
+ "/items".to_string()
}
pub fn u_items_filter(page: usize, _filter: &NodeFilterSort) -> String {
// TODO
format!("/items?page={page}")
}
pub fn u_admin_users() -> String {
- format!("/admin/users")
+ "/admin/users".to_string()
}
pub fn u_admin_user(name: &str) -> String {
format!("/admin/user/{name}")
@@ -69,16 +69,16 @@ pub fn u_admin_log(warn_only: bool) -> String {
format!("/admin/log?warn_only={warn_only}")
}
pub fn u_admin_invite_create() -> String {
- format!("/admin/generate_invite")
+ "/admin/generate_invite".to_string()
}
pub fn u_admin_invite_remove() -> String {
- format!("/admin/remove_invite")
+ "/admin/remove_invite".to_string()
}
pub fn u_admin_import(incremental: bool) -> String {
format!("/admin/import?incremental={incremental}")
}
pub fn u_admin_update_search() -> String {
- format!("/admin/update_search")
+ "/admin/update_search".to_string()
}
pub fn u_account_register() -> String {
"/account/register".to_owned()
diff --git a/database/Cargo.toml b/database/Cargo.toml
index 6e5ddcf..2cf9909 100644
--- a/database/Cargo.toml
+++ b/database/Cargo.toml
@@ -4,13 +4,13 @@ version = "0.1.0"
edition = "2024"
[dependencies]
-tantivy = "0.22.0"
+tantivy = "0.25.0"
jellycommon = { path = "../common" }
-serde = { version = "1.0.217", features = ["derive"] }
+serde = { version = "1.0.228", features = ["derive"] }
log = { workspace = true }
-bincode = "2.0.0-rc.3"
-redb = "2.4.0"
-anyhow = "1.0.95"
+bincode = "2.0.1"
+redb = "3.1.0"
+anyhow = "1.0.100"
[features]
db_json = []
diff --git a/database/src/lib.rs b/database/src/lib.rs
index 32df667..8e47298 100644
--- a/database/src/lib.rs
+++ b/database/src/lib.rs
@@ -12,7 +12,7 @@ use jellycommon::{
user::{NodeUserData, User},
};
use log::info;
-use redb::{Durability, ReadableTable, StorageError, TableDefinition};
+use redb::{Durability, ReadableDatabase, ReadableTable, StorageError, TableDefinition};
use search::NodeTextSearchIndex;
use std::{
fs::create_dir_all,
@@ -153,7 +153,7 @@ impl Database {
t_import_file_mtime,
t_node_media_paths,
));
- txn.set_durability(Durability::Eventual);
+ txn.set_durability(Durability::Immediate)?;
txn.commit()?;
Ok(())
}
@@ -213,7 +213,7 @@ impl Database {
t_node_external_id,
t_tag_node,
));
- txn.set_durability(Durability::Eventual);
+ txn.set_durability(Durability::Immediate)?;
txn.commit()?;
Ok(())
}
diff --git a/database/src/search.rs b/database/src/search.rs
index a7c074f..bbe39ab 100644
--- a/database/src/search.rs
+++ b/database/src/search.rs
@@ -6,9 +6,9 @@
use anyhow::Context;
use std::{fs::create_dir_all, path::Path, sync::RwLock};
use tantivy::{
- DateOptions, Index, IndexReader, IndexWriter, ReloadPolicy,
+ Index, IndexReader, IndexWriter, ReloadPolicy,
directory::MmapDirectory,
- schema::{FAST, Field, INDEXED, STORED, STRING, Schema, TEXT},
+ schema::{DateOptions, DateTimePrecision, FAST, Field, INDEXED, STORED, STRING, Schema, TEXT},
};
pub struct NodeTextSearchIndex {
@@ -35,7 +35,7 @@ impl NodeTextSearchIndex {
"releasedate",
DateOptions::from(INDEXED)
.set_fast()
- .set_precision(tantivy::DateTimePrecision::Seconds),
+ .set_precision(DateTimePrecision::Seconds),
);
let schema = schema.build();
create_dir_all(path.join("node_index"))?;
diff --git a/ebml_derive/Cargo.toml b/ebml_derive/Cargo.toml
index 785360f..89e973d 100644
--- a/ebml_derive/Cargo.toml
+++ b/ebml_derive/Cargo.toml
@@ -7,6 +7,6 @@ edition = "2021"
proc-macro = true
[dependencies]
-syn = "2.0.96"
-quote = "1.0.38"
+syn = "2.0.109"
+quote = "1.0.42"
diff --git a/import/Cargo.toml b/import/Cargo.toml
index d0b16b4..4c638f4 100644
--- a/import/Cargo.toml
+++ b/import/Cargo.toml
@@ -11,22 +11,22 @@ jellydb = { path = "../database" }
jellyimport-fallback-generator = { path = "fallback_generator" }
jellyimport-asset-token = { path = "asset_token" }
-rayon = "1.10.0"
-crossbeam-channel = "0.5.14"
+rayon = "1.11.0"
+crossbeam-channel = "0.5.15"
log = { workspace = true }
-anyhow = "1.0.95"
+anyhow = "1.0.100"
reqwest = { workspace = true }
urlencoding = "2.1.3"
-bincode = { version = "2.0.0-rc.3", features = ["derive"] }
-serde = { version = "1.0.217", features = ["derive"] }
-serde_json = "1.0.138"
+bincode = { version = "2.0.1", features = ["derive"] }
+serde = { version = "1.0.228", features = ["derive"] }
+serde_json = "1.0.145"
serde_yaml = "0.9.34"
async-recursion = "1.1.1"
futures = "0.3.31"
tokio = { workspace = true }
-regex = "1.11.1"
+regex = "1.12.2"
base64 = "0.22.1"
diff --git a/import/asset_token/Cargo.toml b/import/asset_token/Cargo.toml
index af20507..a85fcd2 100644
--- a/import/asset_token/Cargo.toml
+++ b/import/asset_token/Cargo.toml
@@ -6,15 +6,15 @@ edition = "2021"
[dependencies]
jellycommon = { path = "../../common" }
jellycache = { path = "../../cache" }
-serde = { version = "1.0.217", features = ["derive"] }
+serde = { version = "1.0.228", features = ["derive"] }
serde_yaml = "0.9.34"
log = { workspace = true }
-sha2 = "0.10.8"
+sha2 = "0.10.9"
base64 = "0.22.1"
tokio = { workspace = true }
-anyhow = "1.0.95"
+anyhow = "1.0.100"
bincode = { version = "2.0.1", features = ["serde"] }
-rand = "0.9.0"
-serde_json = "1.0.138"
+rand = "0.9.2"
+serde_json = "1.0.145"
aes-gcm-siv = "0.11.1"
humansize = "2.1.3"
diff --git a/import/asset_token/src/lib.rs b/import/asset_token/src/lib.rs
index 6f4ad7a..0a120f0 100644
--- a/import/asset_token/src/lib.rs
+++ b/import/asset_token/src/lib.rs
@@ -3,10 +3,7 @@
which is licensed under the GNU Affero General Public License (version 3); see /COPYING.
Copyright (C) 2025 metamuffin <metamuffin.org>
*/
-use aes_gcm_siv::{
- aead::{generic_array::GenericArray, Aead},
- Aes256GcmSiv, KeyInit,
-};
+use aes_gcm_siv::{aead::Aead, Aes256GcmSiv, KeyInit};
use anyhow::{anyhow, bail, Context};
use base64::Engine;
use bincode::{Decode, Encode};
@@ -15,6 +12,7 @@ pub use jellycommon as common;
use jellycommon::{Asset, LocalTrack};
use log::warn;
use serde::{Deserialize, Serialize};
+use sha2::digest::generic_array::GenericArray;
use std::sync::Mutex;
use std::{path::PathBuf, sync::LazyLock};
diff --git a/import/fallback_generator/Cargo.toml b/import/fallback_generator/Cargo.toml
index 13823ba..6851107 100644
--- a/import/fallback_generator/Cargo.toml
+++ b/import/fallback_generator/Cargo.toml
@@ -4,7 +4,7 @@ version = "0.1.0"
edition = "2024"
[dependencies]
-ab_glyph = "0.2.29"
+ab_glyph = "0.2.32"
imageproc = "0.25.0"
-image = { version = "0.25.6", default-features = false, features = ["qoi"] }
-anyhow = "1.0.98"
+image = { version = "0.25.8", default-features = false, features = ["qoi"] }
+anyhow = "1.0.100"
diff --git a/import/fallback_generator/src/lib.rs b/import/fallback_generator/src/lib.rs
index eef40fe..0fcfaa1 100644
--- a/import/fallback_generator/src/lib.rs
+++ b/import/fallback_generator/src/lib.rs
@@ -28,14 +28,14 @@ pub fn generate_fallback(name: &str, output: &mut dyn Write) -> Result<()> {
.unwrap();
let mut bgtext = text.to_string();
- bgtext.remove_matches(&[',', ' ']);
+ bgtext.remove_matches([',', ' ']);
let bgtext = bgtext.repeat(3);
let scale = PxScale { x: 1000., y: 1000. };
let (w, h) = text_size(scale, &font, &bgtext);
for i in -1..4 {
draw_text_mut(
&mut image,
- random_accent(&text, 0.6),
+ random_accent(text, 0.6),
width as i32 / 2 - w as i32 / 2 + i * h as i32,
i * h as i32 * 2 / 3,
scale,
diff --git a/import/src/acoustid.rs b/import/src/acoustid.rs
index cbdfc7a..a328146 100644
--- a/import/src/acoustid.rs
+++ b/import/src/acoustid.rs
@@ -83,7 +83,7 @@ impl AcoustID {
pub async fn get_atid_mbid(&self, fp: &Fingerprint) -> Result<Option<(String, String)>> {
let res = self.lookup(fp.to_owned()).await?;
for r in &res.results {
- if let Some(k) = r.recordings.get(0) {
+ if let Some(k) = r.recordings.first() {
return Ok(Some((r.id.clone(), k.id.clone())));
}
}
@@ -103,7 +103,7 @@ impl AcoustID {
let resp = self
.client
- .post(format!("https://api.acoustid.org/v2/lookup"))
+ .post("https://api.acoustid.org/v2/lookup".to_string())
.header("Content-Type", "application/x-www-form-urlencoded")
.body(body)
.send()
diff --git a/import/src/lib.rs b/import/src/lib.rs
index 4a6d87b..1fd8bc7 100644
--- a/import/src/lib.rs
+++ b/import/src/lib.rs
@@ -82,7 +82,7 @@ static CONF: LazyLock<Config> = LazyLock::new(|| {
.expect("import config not preloaded. logic error")
});
-pub const USER_AGENT: &'static str = concat!(
+pub const USER_AGENT: &str = concat!(
"jellything/",
env!("CARGO_PKG_VERSION"),
" +https://codeberg.org/metamuffin/jellything"
@@ -401,8 +401,7 @@ fn import_media_file(
.transpose()?;
let mut tags = m
- .tags
- .get(0)
+ .tags.first()
.map(|tags| {
tags.tags
.iter()
@@ -773,7 +772,7 @@ fn apply_musicbrainz_recording(
node.title = Some(rec.title.clone());
node.external_ids
.insert("musicbrainz.recording".to_string(), rec.id.to_string());
- if let Some(a) = rec.artist_credit.get(0) {
+ if let Some(a) = rec.artist_credit.first() {
node.subtitle = Some(a.artist.name.clone());
node.external_ids
.insert("musicbrainz.artist".to_string(), a.artist.id.to_string());
diff --git a/import/src/musicbrainz.rs b/import/src/musicbrainz.rs
index e4f38da..934a9e8 100644
--- a/import/src/musicbrainz.rs
+++ b/import/src/musicbrainz.rs
@@ -191,6 +191,12 @@ pub struct MbUrl {
pub resource: String,
}
+impl Default for MusicBrainz {
+ fn default() -> Self {
+ Self::new()
+ }
+}
+
impl MusicBrainz {
const MAX_PAR_REQ: usize = 4;
pub fn new() -> Self {
diff --git a/import/src/vgmdb.rs b/import/src/vgmdb.rs
index 6278aaa..20a0038 100644
--- a/import/src/vgmdb.rs
+++ b/import/src/vgmdb.rs
@@ -32,6 +32,12 @@ static RE_IMAGE_URL_FROM_HTML: LazyLock<Regex> = LazyLock::new(|| {
Regex::new(r#"href='(?<url>https://media.vgm.io/artists/[-/\w\.]+)'"#).unwrap()
});
+impl Default for Vgmdb {
+ fn default() -> Self {
+ Self::new()
+ }
+}
+
impl Vgmdb {
pub fn new() -> Self {
let client = ClientBuilder::new()
@@ -79,11 +85,11 @@ impl Vgmdb {
return Ok(Some(url.to_string()));
}
}
- return Ok(None);
+ Ok(None)
}
pub async fn scrape_artist_page(&self, id: u64) -> Result<Arc<String>> {
- async_cache_memory("api-vgmdb-artist", id.clone(), || async move {
+ async_cache_memory("api-vgmdb-artist", id, || async move {
let _permit = self.rate_limit.clone().acquire_owned().await?;
let permit_drop_ts = Instant::now() + Duration::from_secs(1);
info!("scrape artist: {id}");
diff --git a/import/src/wikidata.rs b/import/src/wikidata.rs
index 1b7f06e..71eef9a 100644
--- a/import/src/wikidata.rs
+++ b/import/src/wikidata.rs
@@ -63,6 +63,12 @@ pub mod properties {
pub static IMAGE: &str = "P18";
}
+impl Default for Wikidata {
+ fn default() -> Self {
+ Self::new()
+ }
+}
+
impl Wikidata {
pub fn new() -> Self {
let client = ClientBuilder::new()
@@ -118,6 +124,6 @@ impl Wikidata {
.await
.context("wikidata entity")?;
- Ok(serde_json::from_str(&json).context("parse wikidata entity")?)
+ serde_json::from_str(&json).context("parse wikidata entity")
}
}
diff --git a/import/src/wikimedia_commons.rs b/import/src/wikimedia_commons.rs
index a5889fb..f8d8f53 100644
--- a/import/src/wikimedia_commons.rs
+++ b/import/src/wikimedia_commons.rs
@@ -17,6 +17,12 @@ use tokio::io::AsyncWriteExt;
pub struct WikimediaCommons {
client: Client,
}
+impl Default for WikimediaCommons {
+ fn default() -> Self {
+ Self::new()
+ }
+}
+
impl WikimediaCommons {
pub fn new() -> Self {
let client = ClientBuilder::new()
diff --git a/logic/Cargo.toml b/logic/Cargo.toml
index a60f90b..3c3854c 100644
--- a/logic/Cargo.toml
+++ b/logic/Cargo.toml
@@ -9,13 +9,13 @@ jellyimport = { path = "../import" }
jellycommon = { path = "../common" }
jellydb = { path = "../database" }
jellytranscoder = { path = "../transcoder" }
-log = "0.4.27"
-anyhow = "1.0.98"
+log = "0.4.28"
+anyhow = "1.0.100"
base64 = "0.22.1"
argon2 = "0.5.3"
aes-gcm-siv = "0.11.1"
-serde = { version = "1.0.217", features = ["derive", "rc"] }
-bincode = { version = "2.0.0-rc.3", features = ["serde", "derive"] }
-rand = "0.9.0"
+serde = { version = "1.0.228", features = ["derive", "rc"] }
+bincode = { version = "2.0.1", features = ["serde", "derive"] }
+rand = "0.9.2"
env_logger = "0.11.8"
tokio = { workspace = true }
diff --git a/logic/src/account.rs b/logic/src/account.rs
index a352437..5f95d15 100644
--- a/logic/src/account.rs
+++ b/logic/src/account.rs
@@ -48,12 +48,12 @@ pub fn update_user_player_preference(
}
pub fn register_user(invitation: &str, username: &str, password: &str) -> Result<()> {
DATABASE.register_user(
- &invitation,
- &username,
+ invitation,
+ username,
User {
display_name: username.to_owned(),
name: username.to_owned(),
- password: hash_password(&username, &password),
+ password: hash_password(username, password),
..Default::default()
},
)
diff --git a/logic/src/admin/user.rs b/logic/src/admin/user.rs
index 15356a8..68072de 100644
--- a/logic/src/admin/user.rs
+++ b/logic/src/admin/user.rs
@@ -26,7 +26,7 @@ pub fn get_user(session: &Session, username: &str) -> Result<User> {
}
pub fn delete_user(session: &Session, username: &str) -> Result<()> {
session.assert_admin()?;
- if !DATABASE.delete_user(&username)? {
+ if !DATABASE.delete_user(username)? {
Err(anyhow!("user did not exist"))?;
}
Ok(())
diff --git a/logic/src/assets.rs b/logic/src/assets.rs
index 7be3845..c6d6a11 100644
--- a/logic/src/assets.rs
+++ b/logic/src/assets.rs
@@ -16,14 +16,13 @@ pub fn get_node_backdrop(_session: &Session, id: NodeID) -> Result<Asset> {
.ok_or(anyhow!("node does not exist"))?;
let mut asset = node.backdrop.clone();
- if asset.is_none() {
- if let Some(parent) = node.parents.last().copied() {
+ if asset.is_none()
+ && let Some(parent) = node.parents.last().copied() {
let parent = DATABASE
.get_node(parent)?
.ok_or(anyhow!("node does not exist"))?;
asset = parent.backdrop.clone();
- }
- };
+ };
Ok(asset.unwrap_or_else(|| {
AssetInner::Assets(format!("fallback-{:?}.avif", node.kind).into()).ser()
}))
@@ -35,14 +34,13 @@ pub fn get_node_poster(_session: &Session, id: NodeID) -> Result<Asset> {
.ok_or(anyhow!("node does not exist"))?;
let mut asset = node.poster.clone();
- if asset.is_none() {
- if let Some(parent) = node.parents.last().copied() {
+ if asset.is_none()
+ && let Some(parent) = node.parents.last().copied() {
let parent = DATABASE
.get_node(parent)?
.ok_or(anyhow!("node does not exist"))?;
asset = parent.poster.clone();
- }
- };
+ };
Ok(asset.unwrap_or_else(|| {
AssetInner::Assets(format!("fallback-{:?}.avif", node.kind).into()).ser()
}))
@@ -103,7 +101,7 @@ pub async fn get_node_thumbnail(_session: &Session, id: NodeID, t: f64) -> Resul
let asset = match thumb_track_source {
TrackSource::Local(a) => {
let AssetInner::LocalTrack(LocalTrack { path, .. }) = AssetInner::deser(&a.0)? else {
- return Err(anyhow!("track set to wrong asset type").into());
+ return Err(anyhow!("track set to wrong asset type"));
};
// the track selected might be different from thumb_track
jellytranscoder::thumbnail::create_thumbnail(&path, t).await?
diff --git a/logic/src/home.rs b/logic/src/home.rs
index 1957a94..ff85ba1 100644
--- a/logic/src/home.rs
+++ b/logic/src/home.rs
@@ -20,7 +20,7 @@ pub fn home(session: &Session) -> Result<ApiHomeResponse> {
.get_node_children(NodeID::from_slug("library"))
.context("root node missing")?
.into_iter()
- .map(|n| DATABASE.get_node_with_userdata(n, &session))
+ .map(|n| DATABASE.get_node_with_userdata(n, session))
.collect::<anyhow::Result<Vec<_>>>()?;
toplevel.sort_by_key(|(n, _)| n.index.unwrap_or(usize::MAX));
diff --git a/logic/src/node.rs b/logic/src/node.rs
index 820116f..3e527c8 100644
--- a/logic/src/node.rs
+++ b/logic/src/node.rs
@@ -20,13 +20,13 @@ pub fn get_node(
parents: bool,
filter: NodeFilterSort,
) -> Result<ApiNodeResponse> {
- let (node, udata) = DATABASE.get_node_with_userdata(id, &session)?;
+ let (node, udata) = DATABASE.get_node_with_userdata(id, session)?;
let mut children = if children {
DATABASE
.get_node_children(id)?
.into_iter()
- .map(|c| DATABASE.get_node_with_userdata(c, &session))
+ .map(|c| DATABASE.get_node_with_userdata(c, session))
.collect::<anyhow::Result<Vec<_>>>()?
} else {
Vec::new()
@@ -35,13 +35,13 @@ pub fn get_node(
let mut parents = if parents {
node.parents
.iter()
- .map(|pid| DATABASE.get_node_with_userdata(*pid, &session))
+ .map(|pid| DATABASE.get_node_with_userdata(*pid, session))
.collect::<anyhow::Result<Vec<_>>>()?
} else {
Vec::new()
};
- let mut similar = get_similar_media(&session, &node)?;
+ let mut similar = get_similar_media(session, &node)?;
similar.retain(|(n, _)| n.visibility >= Visibility::Reduced);
children.retain(|(n, _)| n.visibility >= Visibility::Reduced);
diff --git a/logic/src/search.rs b/logic/src/search.rs
index 304676b..e2fdcce 100644
--- a/logic/src/search.rs
+++ b/logic/src/search.rs
@@ -13,7 +13,7 @@ pub fn search(session: &Session, query: &str, page: Option<usize>) -> Result<Api
let (count, ids) = DATABASE.search(query, 32, page.unwrap_or_default() * 32)?;
let mut results = ids
.into_iter()
- .map(|id| DATABASE.get_node_with_userdata(id, &session))
+ .map(|id| DATABASE.get_node_with_userdata(id, session))
.collect::<Result<Vec<_>, anyhow::Error>>()?;
results.retain(|(n, _)| n.visibility >= Visibility::Reduced);
let duration = timing.elapsed();
diff --git a/logic/src/session.rs b/logic/src/session.rs
index 6f168e3..52573cc 100644
--- a/logic/src/session.rs
+++ b/logic/src/session.rs
@@ -51,7 +51,7 @@ pub fn create(username: String, permissions: PermissionSet, expire: Duration) ->
let mut plaintext =
bincode::serde::encode_to_vec(&session_data, bincode::config::standard()).unwrap();
- while plaintext.len() % 16 == 0 {
+ while plaintext.len().is_multiple_of(16) {
plaintext.push(0);
}
@@ -92,7 +92,7 @@ pub fn token_to_session(token: &str) -> anyhow::Result<Session> {
}
pub fn bypass_auth_session() -> anyhow::Result<Session> {
let user = DATABASE
- .get_user(&CONF.admin_username.as_ref().unwrap())?
+ .get_user(CONF.admin_username.as_ref().unwrap())?
.ok_or(anyhow!("user does not exist"))?;
Ok(Session { user })
}
diff --git a/remuxer/Cargo.toml b/remuxer/Cargo.toml
index a8fd18f..4731411 100644
--- a/remuxer/Cargo.toml
+++ b/remuxer/Cargo.toml
@@ -6,12 +6,12 @@ edition = "2024"
[dependencies]
hex = "0.4.3"
-anyhow = "1.0.95"
+anyhow = "1.0.100"
env_logger = "0.11.8"
log = { workspace = true }
-serde = { version = "1.0.217", features = ["derive"] }
-bincode = { version = "2.0.0-rc.3", features = ["serde"] }
+serde = { version = "1.0.228", features = ["derive"] }
+bincode = { version = "2.0.1", features = ["serde"] }
winter-ebml = { git = "https://codeberg.org/metamuffin/ebml-rs", package = "ebml" }
winter-matroska = { git = "https://codeberg.org/metamuffin/ebml-rs", package = "matroska", features = [
diff --git a/remuxer/src/demuxers/flac.rs b/remuxer/src/demuxers/flac.rs
index 8e3fecc..c309589 100644
--- a/remuxer/src/demuxers/flac.rs
+++ b/remuxer/src/demuxers/flac.rs
@@ -97,7 +97,7 @@ impl FlacDemuxer {
self.first_frame_offset = self.reader.stream_position()?;
self.metadata = Some(blocks);
- return Ok(self.metadata.as_ref().unwrap());
+ Ok(self.metadata.as_ref().unwrap())
}
fn stream_info(&mut self) -> Result<StreamInfo> {
let m = self.read_metadata()?;
diff --git a/remuxer/src/demuxers/matroska.rs b/remuxer/src/demuxers/matroska.rs
index 923db81..bb7289a 100644
--- a/remuxer/src/demuxers/matroska.rs
+++ b/remuxer/src/demuxers/matroska.rs
@@ -79,7 +79,7 @@ impl MatroskaDemuxer {
}
/// Parse SeekHead at segment start if exists
- pub fn seek_head<'a>(&'a mut self) -> Result<Option<&'a SeekHead>> {
+ pub fn seek_head(&mut self) -> Result<Option<&SeekHead>> {
if self.seek_head.is_some() {
return Ok(self.seek_head.as_ref());
}
@@ -106,7 +106,7 @@ impl MatroskaDemuxer {
let Some(segment_position) = seek_head
.seeks
.iter()
- .find(|s| read_vint_slice(&mut s.id.as_slice()).map_or(false, |x| x == search_tag))
+ .find(|s| read_vint_slice(&mut s.id.as_slice()) == Some(search_tag))
.map(|s| s.position)
else {
return Ok(None);
@@ -159,9 +159,9 @@ impl MatroskaDemuxer {
}
impl Demuxer for MatroskaDemuxer {
fn info(&mut self) -> Result<Info> {
- Ok(self
+ self
.read_segment_tag("Info", Segment::TAG_INFO)?
- .ok_or(anyhow!("info missing"))?)
+ .ok_or(anyhow!("info missing"))
}
fn tracks(&mut self) -> Result<Option<Tracks>> {
self.read_segment_tag("Tracks", Segment::TAG_TRACKS)
diff --git a/remuxer/src/muxers/matroska.rs b/remuxer/src/muxers/matroska.rs
index 228f420..e1216df 100644
--- a/remuxer/src/muxers/matroska.rs
+++ b/remuxer/src/muxers/matroska.rs
@@ -13,8 +13,8 @@ use winter_matroska::{MatroskaFile, Segment};
fn write_fragment_shared(out: &mut dyn Write, mut segment: Segment, webm: bool) -> Result<()> {
segment.info.muxing_app =
concat!(env!("CARGO_PKG_NAME"), "-", env!("CARGO_PKG_VERSION")).to_string();
- if webm {
- if let Some(tracks) = &mut segment.tracks {
+ if webm
+ && let Some(tracks) = &mut segment.tracks {
for track in &mut tracks.entries {
if let Some(video) = &mut track.video {
video.colour = None;
@@ -25,7 +25,6 @@ fn write_fragment_shared(out: &mut dyn Write, mut segment: Segment, webm: bool)
}
}
}
- }
let file = MatroskaFile {
ebml_header: EbmlHeader {
diff --git a/server/Cargo.toml b/server/Cargo.toml
index 0bc1960..a3de6a2 100644
--- a/server/Cargo.toml
+++ b/server/Cargo.toml
@@ -15,23 +15,23 @@ jellylogic = { path = "../logic" }
anyhow = { workspace = true }
async-recursion = "1.1.1"
base64 = "0.22.1"
-bincode = { version = "2.0.0-rc.3", features = ["serde", "derive"] }
+bincode = { version = "2.0.1", features = ["serde", "derive"] }
chashmap = "2.2.2"
-chrono = { version = "0.4.39", features = ["serde"] }
-env_logger = "0.11.6"
+chrono = { version = "0.4.42", features = ["serde"] }
+env_logger = "0.11.8"
futures = "0.3.31"
log = { workspace = true }
-rand = "0.9.0"
+rand = "0.9.2"
rocket = { workspace = true, features = ["secrets", "json"] }
rocket_ws = { workspace = true }
-serde = { version = "1.0.217", features = ["derive", "rc"] }
-serde_json = "1.0.138"
+serde = { version = "1.0.228", features = ["derive", "rc"] }
+serde_json = "1.0.145"
serde_yml = "0.0.12"
tokio = { workspace = true }
-tokio-util = { version = "0.7.13", features = ["io", "io-util"] }
+tokio-util = { version = "0.7.17", features = ["io", "io-util"] }
[build-dependencies]
-glob = "0.3.2"
+glob = "0.3.3"
[features]
bypass-auth = []
diff --git a/server/src/helper/filter_sort.rs b/server/src/helper/filter_sort.rs
index 10d397a..fa96662 100644
--- a/server/src/helper/filter_sort.rs
+++ b/server/src/helper/filter_sort.rs
@@ -15,10 +15,10 @@ use rocket::{
UriDisplayQuery,
};
-impl Into<NodeFilterSort> for ANodeFilterSort {
- fn into(self) -> NodeFilterSort {
+impl From<ANodeFilterSort> for NodeFilterSort {
+ fn from(val: ANodeFilterSort) -> Self {
NodeFilterSort {
- sort_by: self.sort_by.map(|e| match e {
+ sort_by: val.sort_by.map(|e| match e {
ASortProperty::ReleaseDate => SortProperty::ReleaseDate,
ASortProperty::Title => SortProperty::Title,
ASortProperty::Index => SortProperty::Index,
@@ -33,7 +33,7 @@ impl Into<NodeFilterSort> for ANodeFilterSort {
ASortProperty::RatingUser => SortProperty::RatingUser,
ASortProperty::RatingLikesDivViews => SortProperty::RatingLikesDivViews,
}),
- filter_kind: self.filter_kind.map(|l| {
+ filter_kind: val.filter_kind.map(|l| {
l.into_iter()
.map(|e| match e {
AFilterProperty::FederationLocal => FilterProperty::FederationLocal,
@@ -54,7 +54,7 @@ impl Into<NodeFilterSort> for ANodeFilterSort {
})
.collect()
}),
- sort_order: self.sort_order.map(|e| match e {
+ sort_order: val.sort_order.map(|e| match e {
ASortOrder::Ascending => SortOrder::Ascending,
ASortOrder::Descending => SortOrder::Descending,
}),
diff --git a/server/src/ui/admin/log.rs b/server/src/ui/admin/log.rs
index 61d2ba7..24671bb 100644
--- a/server/src/ui/admin/log.rs
+++ b/server/src/ui/admin/log.rs
@@ -20,7 +20,7 @@ use rocket_ws::{Message, Stream, WebSocket};
use serde_json::json;
#[get("/admin/log?<warnonly>", rank = 2)]
-pub fn r_admin_log<'a>(ri: RequestInfo, warnonly: bool) -> MyResult<RawHtml<String>> {
+pub fn r_admin_log(ri: RequestInfo, warnonly: bool) -> MyResult<RawHtml<String>> {
ri.session.assert_admin()?;
let messages = get_log_buffer(warnonly)
.into_iter()
diff --git a/server/src/ui/admin/user.rs b/server/src/ui/admin/user.rs
index fa84f52..dd68383 100644
--- a/server/src/ui/admin/user.rs
+++ b/server/src/ui/admin/user.rs
@@ -37,7 +37,7 @@ pub fn r_admin_users(ri: RequestInfo) -> MyResult<RawHtml<String>> {
}
#[get("/admin/user/<name>")]
-pub fn r_admin_user<'a>(ri: RequestInfo, name: &'a str) -> MyResult<RawHtml<String>> {
+pub fn r_admin_user(ri: RequestInfo, name: &str) -> MyResult<RawHtml<String>> {
ri.session.assert_admin()?;
let user = get_user(&ri.session, name)?;
@@ -89,7 +89,7 @@ pub fn r_admin_user_permission(
Redirect::to(u_admin_user(name)),
tr(
ri.lang,
- &"admin.users.permission_update_success".to_string(),
+ "admin.users.permission_update_success",
),
))
}
@@ -100,6 +100,6 @@ pub fn r_admin_remove_user(ri: RequestInfo, name: &str) -> MyResult<Flash<Redire
delete_user(&ri.session, name)?;
Ok(Flash::success(
Redirect::to(u_admin_users()),
- tr(ri.lang, &"admin.users.remove_success".to_string()),
+ tr(ri.lang, "admin.users.remove_success"),
))
}
diff --git a/server/src/ui/error.rs b/server/src/ui/error.rs
index f1c9d3a..9e9f7e5 100644
--- a/server/src/ui/error.rs
+++ b/server/src/ui/error.rs
@@ -25,7 +25,7 @@ static ERROR_IMAGE: LazyLock<Vec<u8>> = LazyLock::new(|| {
});
#[catch(default)]
-pub fn r_catch<'a>(status: Status, _request: &Request) -> RawHtml<String> {
+pub fn r_catch(status: Status, _request: &Request) -> RawHtml<String> {
catch_with_message(format!("{status}"))
}
fn catch_with_message(message: String) -> RawHtml<String> {
diff --git a/server/src/ui/node.rs b/server/src/ui/node.rs
index 5004b7b..a6c0cc2 100644
--- a/server/src/ui/node.rs
+++ b/server/src/ui/node.rs
@@ -14,7 +14,7 @@ use jellyui::{node_page::NodePage, render_page};
use rocket::{get, response::content::RawHtml, serde::json::Json, Either};
#[get("/n/<id>?<parents>&<children>&<filter..>")]
-pub async fn r_node<'a>(
+pub async fn r_node(
ri: RequestInfo,
id: A<NodeID>,
filter: Option<ANodeFilterSort>,
diff --git a/server/src/ui/search.rs b/server/src/ui/search.rs
index 1812130..567f000 100644
--- a/server/src/ui/search.rs
+++ b/server/src/ui/search.rs
@@ -12,7 +12,7 @@ use jellyui::{render_page, search::SearchPage};
use rocket::{get, response::content::RawHtml, serde::json::Json, Either};
#[get("/search?<query>&<page>")]
-pub async fn r_search<'a>(
+pub async fn r_search(
ri: RequestInfo,
query: Option<&str>,
page: Option<usize>,
diff --git a/stream/Cargo.toml b/stream/Cargo.toml
index 8e71e1c..015966c 100644
--- a/stream/Cargo.toml
+++ b/stream/Cargo.toml
@@ -12,5 +12,5 @@ jellystream-types = { path = "types" }
log = { workspace = true }
anyhow = { workspace = true }
-serde_json = "1.0.138"
-serde = { version = "1.0.217", features = ["derive"] }
+serde_json = "1.0.145"
+serde = { version = "1.0.228", features = ["derive"] }
diff --git a/stream/src/fragment.rs b/stream/src/fragment.rs
index 0039bc5..97ca2db 100644
--- a/stream/src/fragment.rs
+++ b/stream/src/fragment.rs
@@ -95,13 +95,12 @@ pub fn fragment_stream(
cluster.simple_blocks.retain(|b| b.track == track_num);
cluster.block_groups.retain(|b| b.block.track == track_num);
let next_kf = next_cluster
- .map(|x| {
+ .and_then(|x| {
x.simple_blocks
.iter()
.find(|b| b.track == track_num)
.cloned()
- })
- .flatten();
+ });
let jr_container = match container {
StreamContainer::WebM => ContainerFormat::Webm,
diff --git a/stream/src/lib.rs b/stream/src/lib.rs
index 60c283c..724a593 100644
--- a/stream/src/lib.rs
+++ b/stream/src/lib.rs
@@ -73,7 +73,7 @@ pub fn stream_head(spec: &StreamSpec) -> StreamHead {
Original { .. } => "video/x-matroska",
HlsMultiVariant { .. } => "application/vnd.apple.mpegurl",
HlsVariant { .. } => "application/vnd.apple.mpegurl",
- Info { .. } => "application/jellything-stream-info+json",
+ Info => "application/jellything-stream-info+json",
FragmentIndex { .. } => "application/jellything-frag-index+json",
Fragment { container, .. } => container_ct(*container),
Remux { container, .. } => container_ct(*container),
@@ -120,7 +120,7 @@ fn original_stream(
.get(track)
.ok_or(anyhow!("unknown track"))?;
let mut file = File::open(&iinfo.paths[file_index]).context("opening source")?;
- file.seek(SeekFrom::Start(range.start as u64))
+ file.seek(SeekFrom::Start(range.start))
.context("seek source")?;
Ok(Box::new(file.take(range.end - range.start)))
diff --git a/stream/src/stream_info.rs b/stream/src/stream_info.rs
index 7ebc399..59e9d83 100644
--- a/stream/src/stream_info.rs
+++ b/stream/src/stream_info.rs
@@ -28,8 +28,8 @@ pub(crate) fn stream_info(info: Arc<SMediaInfo>) -> Result<(InternalStreamInfo,
let mut metadata_arr = Vec::new();
let mut paths = Vec::new();
for (i, path) in info.files.iter().enumerate() {
- let metadata = read_metadata(&path)?;
- let cue_stat = generate_cues(&path)?;
+ let metadata = read_metadata(path)?;
+ let cue_stat = generate_cues(path)?;
if let Some(t) = &metadata.tracks {
let duration = media_duration(&metadata.info);
for t in &t.entries {
diff --git a/stream/types/Cargo.toml b/stream/types/Cargo.toml
index f441730..12bcb1d 100644
--- a/stream/types/Cargo.toml
+++ b/stream/types/Cargo.toml
@@ -4,4 +4,4 @@ version = "0.1.0"
edition = "2024"
[dependencies]
-serde = { version = "1.0.219", features = ["derive"] }
+serde = { version = "1.0.228", features = ["derive"] }
diff --git a/tool/Cargo.toml b/tool/Cargo.toml
index 888381f..7e4823e 100644
--- a/tool/Cargo.toml
+++ b/tool/Cargo.toml
@@ -8,19 +8,19 @@ jellycommon = { path = "../common" }
jellyimport = { path = "../import" }
log = { workspace = true }
-env_logger = "0.11.6"
-anyhow = "1.0.95"
+env_logger = "0.11.8"
+anyhow = "1.0.100"
reqwest = { workspace = true }
-indicatif = "0.17.11"
+indicatif = "0.18.2"
tokio = { workspace = true }
-clap = { version = "4.5.27", features = ["derive"] }
-clap_complete = "4.5.43"
+clap = { version = "4.5.51", features = ["derive"] }
+clap_complete = "4.5.60"
-serde = { version = "1.0.217", features = ["derive"] }
-serde_json = "1.0.138"
+serde = { version = "1.0.228", features = ["derive"] }
+serde_json = "1.0.145"
serde_yaml = "0.9.34"
-bincode = { version = "2.0.0-rc.3", features = ["serde"] }
+bincode = { version = "2.0.1", features = ["serde"] }
base64 = "0.22.1"
-rand = "0.9.0"
+rand = "0.9.2"
-dialoguer = { version = "0.11.0", features = ["fuzzy-select"] }
+dialoguer = { version = "0.12.0", features = ["fuzzy-select"] }
diff --git a/tool/src/add.rs b/tool/src/add.rs
index 04328b2..d5e7180 100644
--- a/tool/src/add.rs
+++ b/tool/src/add.rs
@@ -45,7 +45,7 @@ pub async fn add(action: Action) -> anyhow::Result<()> {
}
let correct = FuzzySelect::with_theme(&theme)
- .items(&results)
+ .items(&*results)
.default(0)
.with_prompt("Metadata Source")
.interact_opt()
diff --git a/tool/src/cli.rs b/tool/src/cli.rs
index a01c9dd..2731506 100644
--- a/tool/src/cli.rs
+++ b/tool/src/cli.rs
@@ -3,7 +3,7 @@
which is licensed under the GNU Affero General Public License (version 3); see /COPYING.
Copyright (C) 2025 metamuffin <metamuffin.org>
*/
-use clap::{arg, Parser, ValueEnum};
+use clap::{Parser, ValueEnum};
use std::path::PathBuf;
pub type Args = Action;
diff --git a/transcoder/Cargo.toml b/transcoder/Cargo.toml
index e0d81a6..0161d49 100644
--- a/transcoder/Cargo.toml
+++ b/transcoder/Cargo.toml
@@ -9,21 +9,21 @@ jellycache = { path = "../cache" }
jellystream-types = { path = "../stream/types" }
log = { workspace = true }
# TODO: change this back to crates.io when pr is merged
-image = "0.25.5"
+image = "0.25.8"
# image = { git = "https://github.com/metamuffin/image-rs", features = [
# "avif-decoder",
# ] }
libavif-image = { version = "0.14.0", default-features = false, features = [
"codec-dav1d",
] }
-anyhow = "1.0.95"
-rgb = "0.8.50"
-rav1e = { version = "0.7.1", default-features = false, features = [
+anyhow = "1.0.100"
+rgb = "0.8.52"
+rav1e = { version = "0.8.1", default-features = false, features = [
"threading",
] }
-rayon = "1.10.0"
-imgref = "1.11.0"
-ravif = "0.11.11"
+rayon = "1.11.0"
+imgref = "1.12.0"
+ravif = "0.12.0"
tokio = { workspace = true }
-serde = { version = "1.0.217", features = ["derive"] }
+serde = { version = "1.0.228", features = ["derive"] }
winter-matroska = { git = "https://codeberg.org/metamuffin/ebml-rs", package = "matroska" }
diff --git a/transcoder/src/fragment.rs b/transcoder/src/fragment.rs
index 985c1a4..152e163 100644
--- a/transcoder/src/fragment.rs
+++ b/transcoder/src/fragment.rs
@@ -31,7 +31,7 @@ pub fn transcode(
kind,
&input.tracks.as_ref().unwrap().entries[0],
output_format,
- &*CONF,
+ &CONF,
)
.unwrap();
diff --git a/ui/Cargo.toml b/ui/Cargo.toml
index 0a2fb5a..982efd9 100644
--- a/ui/Cargo.toml
+++ b/ui/Cargo.toml
@@ -7,6 +7,6 @@ edition = "2024"
markup = "0.15.0"
jellycommon = { path = "../common" }
humansize = "2.1.3"
-serde = { version = "1.0.217", features = ["derive", "rc"] }
-serde_json = "1.0.140"
-vte = "0.14.1"
+serde = { version = "1.0.228", features = ["derive", "rc"] }
+serde_json = "1.0.145"
+vte = "0.15.0"
diff --git a/ui/src/account/mod.rs b/ui/src/account/mod.rs
index 91202b0..2fbb6c7 100644
--- a/ui/src/account/mod.rs
+++ b/ui/src/account/mod.rs
@@ -56,23 +56,23 @@ impl Page for AccountLogout<'_> {
markup::define! {
AccountRegister<'a>(lang: &'a Language) {
form.account[method="POST", action=""] {
- h1 { @trs(&lang, "account.register") }
+ h1 { @trs(lang, "account.register") }
- label[for="inp-invitation"] { @trs(&lang, "account.register.invitation") }
+ label[for="inp-invitation"] { @trs(lang, "account.register.invitation") }
input[type="text", id="inp-invitation", name="invitation"]; br;
- label[for="inp-username"] { @trs(&lang, "account.username") }
+ label[for="inp-username"] { @trs(lang, "account.username") }
input[type="text", id="inp-username", name="username"]; br;
- label[for="inp-password"] { @trs(&lang, "account.password") }
+ label[for="inp-password"] { @trs(lang, "account.password") }
input[type="password", id="inp-password", name="password"]; br;
input[type="submit", value=&*tr(**lang, "account.register.submit")];
- p { @trs(&lang, "account.register.login") " " a[href=u_account_login()] { @trs(&lang, "account.register.login_here") } }
+ p { @trs(lang, "account.register.login") " " a[href=u_account_login()] { @trs(lang, "account.register.login_here") } }
}
}
AccountRegisterSuccess<'a>(lang: &'a Language, logged_in: bool) {
- h1 { @trs(&lang, if *logged_in {
+ h1 { @trs(lang, if *logged_in {
"account.register.success.switch"
} else {
"account.register.success"
@@ -82,24 +82,24 @@ markup::define! {
form.account[method="POST", action=""] {
h1 { @self.title() }
- label[for="inp-username"] { @trs(&lang, "account.username") }
+ label[for="inp-username"] { @trs(lang, "account.username") }
input[type="text", id="inp-username", name="username"]; br;
- label[for="inp-password"] { @trs(&lang, "account.password") }
+ label[for="inp-password"] { @trs(lang, "account.password") }
input[type="password", id="inp-password", name="password"]; br;
input[type="submit", value=&*tr(**lang, if *logged_in { "account.login.submit.switch" } else { "account.login.submit" })];
@if *logged_in {
- p { @trs(&lang, "account.login.register.switch") " " a[href=u_account_register()] { @trs(&lang, "account.login.register_here") } }
+ p { @trs(lang, "account.login.register.switch") " " a[href=u_account_register()] { @trs(lang, "account.login.register_here") } }
} else {
- p { @trs(&lang, "account.login.cookie_note") }
- p { @trs(&lang, "account.login.register") " " a[href=u_account_register()] { @trs(&lang, "account.login.register_here") } }
+ p { @trs(lang, "account.login.cookie_note") }
+ p { @trs(lang, "account.login.register") " " a[href=u_account_register()] { @trs(lang, "account.login.register_here") } }
}
}
}
AccountLogout<'a>(lang: &'a Language) {
form.account[method="POST", action=""] {
- h1 { @trs(&lang, "account.logout") }
+ h1 { @trs(lang, "account.logout") }
input[type="submit", value=&*tr(**lang, "account.logout.submit")];
}
}
diff --git a/ui/src/account/settings.rs b/ui/src/account/settings.rs
index 8a56363..551e362 100644
--- a/ui/src/account/settings.rs
+++ b/ui/src/account/settings.rs
@@ -16,7 +16,7 @@ use markup::RenderAttributeValue;
impl Page for SettingsPage<'_> {
fn title(&self) -> String {
- format!("Settings")
+ "Settings".to_string()
}
fn to_render(&self) -> markup::DynRender<'_> {
markup::new!(@self)
@@ -27,10 +27,10 @@ markup::define! {
SettingsPage<'a>(session: &'a SessionInfo, lang: &'a Language, flash: &'a FlashM) {
h1 { "Settings" }
@FlashDisplay {flash}
- h2 { @trs(&lang, "account") }
+ h2 { @trs(lang, "account") }
a.switch_account[href=u_account_login()] { "Switch Account" }
form[method="POST", action=u_account_settings()] {
- label[for="username"] { @trs(&lang, "account.username") }
+ label[for="username"] { @trs(lang, "account.username") }
input[type="text", id="username", disabled, value=&session.user.name];
input[type="submit", disabled, value=&*tr(**lang, "settings.immutable")];
}
@@ -44,10 +44,10 @@ markup::define! {
input[type="password", id="password", name="password"];
input[type="submit", value=&*tr(**lang, "settings.update")];
}
- h2 { @trs(&lang, "settings.appearance") }
+ h2 { @trs(lang, "settings.appearance") }
form[method="POST", action=u_account_settings()] {
fieldset {
- legend { @trs(&lang, "settings.appearance.theme") }
+ legend { @trs(lang, "settings.appearance.theme") }
@for theme in Theme::ALL {
label { input[type="radio", name="theme", value=A(*theme), checked=session.user.theme==*theme]; @trs(lang, &format!("theme.{theme}")) } br;
}
@@ -56,7 +56,7 @@ markup::define! {
}
form[method="POST", action=u_account_settings()] {
fieldset {
- legend { @trs(&lang, "settings.player_preference") }
+ legend { @trs(lang, "settings.player_preference") }
@for kind in PlayerKind::ALL {
label { input[type="radio", name="player_preference", value=A(*kind), checked=session.user.player_preference==*kind]; @trs(lang, &format!("player_kind.{kind}")) } br;
}
diff --git a/ui/src/filter_sort.rs b/ui/src/filter_sort.rs
index 0ecd8ae..0e9ff7b 100644
--- a/ui/src/filter_sort.rs
+++ b/ui/src/filter_sort.rs
@@ -8,7 +8,7 @@ use crate::locale::{Language, trs};
use jellycommon::api::{FilterProperty, NodeFilterSort, SortOrder, SortProperty};
use markup::RenderAttributeValue;
-const SORT_CATS: &'static [(&'static str, &'static [(SortProperty, &'static str)])] = {
+const SORT_CATS: &[(&str, &[(SortProperty, &str)])] = {
use SortProperty::*;
&[
(
@@ -35,7 +35,7 @@ const SORT_CATS: &'static [(&'static str, &'static [(SortProperty, &'static str)
),
]
};
-const FILTER_CATS: &'static [(&'static str, &'static [(FilterProperty, &'static str)])] = {
+const FILTER_CATS: &[(&str, &[(FilterProperty, &str)])] = {
use FilterProperty::*;
&[
(
diff --git a/ui/src/home.rs b/ui/src/home.rs
index 6fbd56f..a67298a 100644
--- a/ui/src/home.rs
+++ b/ui/src/home.rs
@@ -13,15 +13,15 @@ use markup::DynRender;
markup::define! {
HomePage<'a>(lang: &'a Language, r: ApiHomeResponse) {
- h2 { @tr(**lang, &"home.bin.root").replace("{title}", &CONF.brand) }
+ h2 { @tr(**lang, "home.bin.root").replace("{title}", &CONF.brand) }
ul.children.hlist {@for (node, udata) in &r.toplevel {
- li { @NodeCard { node, udata, lang: &lang } }
+ li { @NodeCard { node, udata, lang } }
}}
@for (name, nodes) in &r.categories {
@if !nodes.is_empty() {
- h2 { @trs(&lang, &name) }
+ h2 { @trs(lang, name) }
ul.children.hlist {@for (node, udata) in nodes {
- li { @NodeCard { node, udata, lang: &lang } }
+ li { @NodeCard { node, udata, lang } }
}}
}
}
diff --git a/ui/src/items.rs b/ui/src/items.rs
index f4503b7..3b80ecc 100644
--- a/ui/src/items.rs
+++ b/ui/src/items.rs
@@ -19,17 +19,17 @@ markup::define! {
ItemsPage<'a>(lang: &'a Language, r: ApiItemsResponse, filter: &'a NodeFilterSort, page: usize) {
.page.dir {
h1 { "All Items" }
- @NodeFilterSortForm { f: &filter, lang: &lang }
+ @NodeFilterSortForm { f: filter, lang }
ul.children { @for (node, udata) in &r.items {
- li {@NodeCard { node, udata, lang: &lang }}
+ li {@NodeCard { node, udata, lang }}
}}
p.pagecontrols {
span.current { @tr(**lang, "page.curr").replace("{cur}", &(page + 1).to_string()).replace("{max}", &r.pages.to_string()) " " }
@if *page > 0 {
- a.prev[href=u_items_filter(page - 1, filter)] { @trs(&lang, "page.prev") } " "
+ a.prev[href=u_items_filter(page - 1, filter)] { @trs(lang, "page.prev") } " "
}
@if page + 1 < r.pages {
- a.next[href=u_items_filter(page + 1, filter)] { @trs(&lang, "page.next") }
+ a.next[href=u_items_filter(page + 1, filter)] { @trs(lang, "page.next") }
}
}
}
diff --git a/ui/src/search.rs b/ui/src/search.rs
index 106913a..9bdf4d3 100644
--- a/ui/src/search.rs
+++ b/ui/src/search.rs
@@ -26,16 +26,16 @@ impl Page for SearchPage<'_> {
markup::define! {
SearchPage<'a>(lang: &'a Language, r: Option<ApiSearchResponse>, query: &'a Option<String>) {
- h1 { @trs(&lang, "search.title") }
+ h1 { @trs(lang, "search.title") }
form[action="", method="GET"] {
input[type="text", name="query", placeholder=&*tr(**lang, "search.placeholder"), value=&query];
input[type="submit", value="Search"];
}
@if let Some(r) = &r {
- h2 { @trs(&lang, "search.results.title") }
+ h2 { @trs(lang, "search.results.title") }
p.stats { @tr(**lang, "search.results.stats").replace("{count}", &r.count.to_string()).replace("{dur}", &format!("{:?}", r.duration)) }
ul.children {@for (node, udata) in r.results.iter() {
- li { @NodeCard { node, udata, lang: &lang } }
+ li { @NodeCard { node, udata, lang } }
}}
// TODO pagination
}
diff --git a/ui/src/stats.rs b/ui/src/stats.rs
index 6be30bd..0ee2aeb 100644
--- a/ui/src/stats.rs
+++ b/ui/src/stats.rs
@@ -27,7 +27,7 @@ impl Page for StatsPage<'_> {
markup::define! {
StatsPage<'a>(lang: &'a Language, r: ApiStatsResponse) {
.page.stats {
- h1 { @trs(&lang, "stats.title") }
+ h1 { @trs(lang, "stats.title") }
p { @raw(tr(**lang, "stats.count")
.replace("{count}", &format!("<b>{}</b>", r.total.count))
)}
@@ -40,17 +40,17 @@ markup::define! {
.replace("{size}", &format!("<b>{}</b>", format_size(r.total.average_size() as u64)))
)}
- h2 { @trs(&lang, "stats.by_kind.title") }
+ h2 { @trs(lang, "stats.by_kind.title") }
table.striped {
tr {
- th { @trs(&lang, "stats.by_kind.kind") }
- th { @trs(&lang, "stats.by_kind.count") }
- th { @trs(&lang, "stats.by_kind.total_size") }
- th { @trs(&lang, "stats.by_kind.total_runtime") }
- th { @trs(&lang, "stats.by_kind.average_size") }
- th { @trs(&lang, "stats.by_kind.average_runtime") }
- th { @trs(&lang, "stats.by_kind.max_size") }
- th { @trs(&lang, "stats.by_kind.max_runtime") }
+ th { @trs(lang, "stats.by_kind.kind") }
+ th { @trs(lang, "stats.by_kind.count") }
+ th { @trs(lang, "stats.by_kind.total_size") }
+ th { @trs(lang, "stats.by_kind.total_runtime") }
+ th { @trs(lang, "stats.by_kind.average_size") }
+ th { @trs(lang, "stats.by_kind.average_runtime") }
+ th { @trs(lang, "stats.by_kind.max_size") }
+ th { @trs(lang, "stats.by_kind.max_runtime") }
}
@for (k,b) in &r.kinds { tr {
td { @format_kind(*k, **lang) }