diff options
| author | metamuffin <metamuffin@disroot.org> | 2025-11-09 14:12:18 +0100 |
|---|---|---|
| committer | metamuffin <metamuffin@disroot.org> | 2025-11-09 14:12:18 +0100 |
| commit | 2efc5f9444402c5ef9db25887f2e95d184af8e05 (patch) | |
| tree | 07f317780bdbe87d633e5340fe87bc604484730d | |
| parent | 6032bfd0fa7cfd10d1bc17e44f91a789aa86efad (diff) | |
| download | jellything-2efc5f9444402c5ef9db25887f2e95d184af8e05.tar jellything-2efc5f9444402c5ef9db25887f2e95d184af8e05.tar.bz2 jellything-2efc5f9444402c5ef9db25887f2e95d184af8e05.tar.zst | |
upgrade deps + clippy
57 files changed, 467 insertions, 306 deletions
@@ -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" @@ -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) } |