diff --git a/Cargo.lock b/Cargo.lock index a6018f6..6047441 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -134,9 +134,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.15" +version = "0.6.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64e15c1ab1f89faffbf04a634d5e1962e9074f2741eef6d97f3c4e322426d526" +checksum = "23a1e53f0f5d86382dafe1cf314783b2044280f406e7e1506368220ad11b1338" dependencies = [ "anstyle", "anstyle-parse", @@ -149,43 +149,43 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.8" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bec1de6f59aedf83baf9ff929c98f2ad654b97c9510f4e70cf6f661d49fd5b1" +checksum = "8365de52b16c035ff4fcafe0092ba9390540e3e352870ac09933bebcaa2c8c56" [[package]] name = "anstyle-parse" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb47de1e80c2b463c735db5b217a0ddc39d612e7ac9e2e96a5aed1f57616c1cb" +checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.1.1" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d36fc52c7f6c869915e99412912f22093507da8d9e942ceaf66fe4b7c14422a" +checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.4" +version = "3.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bf74e1b6e971609db8ca7a9ce79fd5768ab6ae46441c572e46cf596f59e57f8" +checksum = "2109dbce0e72be3ec00bed26e6a7479ca384ad226efdd66db8fa2e3a38c83125" dependencies = [ "anstyle", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "anyhow" -version = "1.0.89" +version = "1.0.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86fdf8605db99b54d3cd748a44c6d04df638eb5dafb219b135d0149bd0db01f6" +checksum = "c042108f3ed77fd83760a5fd79b53be043192bb3b9dba91d8c574c0ada7850c8" [[package]] name = "appit" @@ -237,7 +237,7 @@ checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea" dependencies = [ "proc-macro2", "quote 1.0.37", - "syn 2.0.79", + "syn 2.0.85", ] [[package]] @@ -405,7 +405,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote 1.0.37", - "syn 2.0.79", + "syn 2.0.85", ] [[package]] @@ -445,7 +445,7 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote 1.0.37", - "syn 2.0.79", + "syn 2.0.85", ] [[package]] @@ -462,7 +462,7 @@ checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" dependencies = [ "proc-macro2", "quote 1.0.37", - "syn 2.0.79", + "syn 2.0.85", ] [[package]] @@ -482,7 +482,7 @@ dependencies = [ "manyhow", "proc-macro2", "quote 1.0.37", - "syn 2.0.79", + "syn 2.0.85", ] [[package]] @@ -498,7 +498,7 @@ dependencies = [ "proc-macro2", "quote 1.0.37", "quote-use", - "syn 2.0.79", + "syn 2.0.85", ] [[package]] @@ -523,9 +523,9 @@ dependencies = [ [[package]] name = "avif-serialize" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "876c75a42f6364451a033496a14c44bffe41f5f4a8236f697391f11024e596d2" +checksum = "e335041290c43101ca215eed6f43ec437eb5a42125573f600fc3fa42b9bddd62" dependencies = [ "arrayvec", ] @@ -624,7 +624,7 @@ dependencies = [ "regex", "rustc-hash", "shlex", - "syn 2.0.79", + "syn 2.0.85", "which", ] @@ -706,9 +706,9 @@ dependencies = [ [[package]] name = "built" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "236e6289eda5a812bc6b53c3b024039382a2895fbbeef2d748b2931546d392c4" +checksum = "c360505aed52b7ec96a3636c3f039d99103c37d1d9b4f7a8c743d3ea9ffcd03b" [[package]] name = "bumpalo" @@ -739,7 +739,7 @@ checksum = "bcfcc3cd946cb52f0bbfdbbcfa2f4e24f75ebb6c0e1002f7c25904fada18b9ec" dependencies = [ "proc-macro2", "quote 1.0.37", - "syn 2.0.79", + "syn 2.0.85", ] [[package]] @@ -756,9 +756,9 @@ checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" [[package]] name = "bytes" -version = "1.7.2" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "428d9aa8fbc0670b7b8d6030a7fadd0f86151cae55e4dbbece15f3780a3dfaf3" +checksum = "9ac0150caa2ae65ca5bd83f25c7de183dea78d4d366469f148435e2acfbad0da" [[package]] name = "cacache" @@ -815,9 +815,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.1.30" +version = "1.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b16803a61b81d9eabb7eae2588776c4c1e584b738ede45fdbb4c972cec1e9945" +checksum = "c2e7962b54006dcfcc61cb72735f4d89bb97061dd6a7ed882ec6b8ee53714c6f" dependencies = [ "jobserver", "libc", @@ -934,7 +934,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote 1.0.37", - "syn 2.0.79", + "syn 2.0.85", ] [[package]] @@ -985,9 +985,9 @@ checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" [[package]] name = "colorchoice" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3fd119d74b830634cea2a0f58bbd0d54540518a14397557951e79340abc28c0" +checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" [[package]] name = "com" @@ -1185,7 +1185,7 @@ checksum = "96a6ac251f4a2aca6b3f91340350eab87ae57c3f127ffeb585e92bd336717991" [[package]] name = "cushy" version = "0.4.0" -source = "git+https://github.com/khonsulabs/cushy.git?branch=main#ab474e2b7dbe9a178f7038243adc213e1a292d99" +source = "git+https://github.com/khonsulabs/cushy.git?branch=main#0fe7f789693a12bf61c5a3cba32b69d0e3a8bb9a" dependencies = [ "ahash", "alot", @@ -1215,14 +1215,14 @@ dependencies = [ [[package]] name = "cushy-macros" version = "0.4.0" -source = "git+https://github.com/khonsulabs/cushy.git?branch=main#ab474e2b7dbe9a178f7038243adc213e1a292d99" +source = "git+https://github.com/khonsulabs/cushy.git?branch=main#0fe7f789693a12bf61c5a3cba32b69d0e3a8bb9a" dependencies = [ "attribute-derive", "manyhow", "proc-macro2", "quote 1.0.37", "quote-use", - "syn 2.0.79", + "syn 2.0.85", ] [[package]] @@ -1290,7 +1290,7 @@ dependencies = [ "proc-macro2", "quote 1.0.37", "strsim 0.11.1", - "syn 2.0.79", + "syn 2.0.85", ] [[package]] @@ -1312,7 +1312,7 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core 0.20.10", "quote 1.0.37", - "syn 2.0.79", + "syn 2.0.85", ] [[package]] @@ -1360,7 +1360,7 @@ checksum = "62d671cc41a825ebabc75757b62d3d168c577f9149b2d49ece1dad1f72119d25" dependencies = [ "proc-macro2", "quote 1.0.37", - "syn 2.0.79", + "syn 2.0.85", ] [[package]] @@ -1381,7 +1381,7 @@ dependencies = [ "darling 0.20.10", "proc-macro2", "quote 1.0.37", - "syn 2.0.79", + "syn 2.0.85", ] [[package]] @@ -1391,7 +1391,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" dependencies = [ "derive_builder_core", - "syn 2.0.79", + "syn 2.0.85", ] [[package]] @@ -1500,9 +1500,9 @@ checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" [[package]] name = "encoding_rs" -version = "0.8.34" +version = "0.8.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" dependencies = [ "cfg-if", ] @@ -1533,7 +1533,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote 1.0.37", - "syn 2.0.79", + "syn 2.0.85", ] [[package]] @@ -1554,7 +1554,7 @@ checksum = "de0d48a183585823424a4ce1aa132d174a6a81bd540895822eb4c8373a8e49e8" dependencies = [ "proc-macro2", "quote 1.0.37", - "syn 2.0.79", + "syn 2.0.85", ] [[package]] @@ -1658,9 +1658,9 @@ dependencies = [ [[package]] name = "figures" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "097ad6ec659462a9d6efea9af358a9564e52d76981aa9d73343ab3c566d083c0" +checksum = "62cab407ec9ab5f649d809025b956687f756aad87fcea48d59fd56f47771c90d" dependencies = [ "bytemuck", "euclid", @@ -1693,9 +1693,9 @@ checksum = "8bf7cc16383c4b8d58b9905a8509f02926ce3058053c056376248d958c9df1e8" [[package]] name = "flume" -version = "0.11.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181" +checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095" dependencies = [ "spin", ] @@ -1765,7 +1765,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote 1.0.37", - "syn 2.0.79", + "syn 2.0.85", ] [[package]] @@ -1885,7 +1885,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote 1.0.37", - "syn 2.0.79", + "syn 2.0.85", ] [[package]] @@ -2479,7 +2479,7 @@ dependencies = [ "hyper 1.5.0", "hyper-util", "log", - "rustls 0.23.14", + "rustls 0.23.15", "rustls-native-certs 0.8.0", "rustls-pki-types", "tokio", @@ -2563,9 +2563,9 @@ dependencies = [ [[package]] name = "image" -version = "0.25.2" +version = "0.25.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99314c8a2152b8ddb211f924cdae532d8c5e4c8bb54728e12fff1b0cd5963a10" +checksum = "bc144d44a31d753b02ce64093d532f55ff8dc4ebf2ffb8a63c0dda691385acae" dependencies = [ "bytemuck", "byteorder-lite", @@ -2586,9 +2586,9 @@ dependencies = [ [[package]] name = "image-webp" -version = "0.1.3" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f79afb8cbee2ef20f59ccd477a218c12a93943d075b492015ecb1bb81f8ee904" +checksum = "e031e8e3d94711a9ccb5d6ea357439ef3dcbed361798bd4071dc4d9793fbe22f" dependencies = [ "byteorder-lite", "quick-error", @@ -2596,9 +2596,9 @@ dependencies = [ [[package]] name = "imgref" -version = "1.10.1" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44feda355f4159a7c757171a77de25daf6411e217b4cabd03bd6650690468126" +checksum = "d0263a3d970d5c054ed9312c0057b4f3bde9c0b33836d3637361d4a9e6e7a408" [[package]] name = "indexmap" @@ -2639,7 +2639,7 @@ checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60" dependencies = [ "proc-macro2", "quote 1.0.37", - "syn 2.0.79", + "syn 2.0.85", ] [[package]] @@ -2762,7 +2762,7 @@ checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" [[package]] name = "kludgine" version = "0.11.0" -source = "git+https://github.com/khonsulabs/kludgine#0df62c716c13a93ee249b79d9c831933d0d49d99" +source = "git+https://github.com/khonsulabs/kludgine#2f7755a1a9b7cae67711f7c41ee2cd2c6b12fd64" dependencies = [ "ahash", "alot", @@ -2808,9 +2808,9 @@ checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" [[package]] name = "libc" -version = "0.2.159" +version = "0.2.161" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "561d97a539a36e26a9a5fad1ea11a3039a67714694aaa379433e580854bc3dc5" +checksum = "8e9489c2807c139ffd9c1794f4af0ebe86a828db53ecdc7fea2111d0fed085d1" [[package]] name = "libdbus-sys" @@ -2850,19 +2850,19 @@ checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" [[package]] name = "libredox" -version = "0.0.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3af92c55d7d839293953fcd0fda5ecfe93297cfde6ffbdec13b41d99c0ba6607" +checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" dependencies = [ "bitflags 2.6.0", "libc", - "redox_syscall 0.4.1", + "redox_syscall 0.5.7", ] [[package]] name = "librespot-audio" version = "0.5.0-dev" -source = "git+https://github.com/photovoltex/librespot.git?branch=integrate-dealer#029419486fcdbf9f5e004cd7d4ebf0c9be8d6c5c" +source = "git+https://github.com/photovoltex/librespot.git?branch=integrate-dealer#1a07ff535da49d61542df84e3aaeb6e7160d1172" dependencies = [ "aes", "byteorder", @@ -2884,7 +2884,7 @@ dependencies = [ [[package]] name = "librespot-core" version = "0.5.0-dev" -source = "git+https://github.com/photovoltex/librespot.git?branch=integrate-dealer#029419486fcdbf9f5e004cd7d4ebf0c9be8d6c5c" +source = "git+https://github.com/photovoltex/librespot.git?branch=integrate-dealer#1a07ff535da49d61542df84e3aaeb6e7160d1172" dependencies = [ "aes", "base64 0.22.1", @@ -2940,7 +2940,7 @@ dependencies = [ [[package]] name = "librespot-metadata" version = "0.5.0-dev" -source = "git+https://github.com/photovoltex/librespot.git?branch=integrate-dealer#029419486fcdbf9f5e004cd7d4ebf0c9be8d6c5c" +source = "git+https://github.com/photovoltex/librespot.git?branch=integrate-dealer#1a07ff535da49d61542df84e3aaeb6e7160d1172" dependencies = [ "async-trait", "byteorder", @@ -2958,7 +2958,7 @@ dependencies = [ [[package]] name = "librespot-oauth" version = "0.5.0-dev" -source = "git+https://github.com/photovoltex/librespot.git?branch=integrate-dealer#029419486fcdbf9f5e004cd7d4ebf0c9be8d6c5c" +source = "git+https://github.com/photovoltex/librespot.git?branch=integrate-dealer#1a07ff535da49d61542df84e3aaeb6e7160d1172" dependencies = [ "log", "oauth2", @@ -2969,7 +2969,7 @@ dependencies = [ [[package]] name = "librespot-playback" version = "0.5.0-dev" -source = "git+https://github.com/photovoltex/librespot.git?branch=integrate-dealer#029419486fcdbf9f5e004cd7d4ebf0c9be8d6c5c" +source = "git+https://github.com/photovoltex/librespot.git?branch=integrate-dealer#1a07ff535da49d61542df84e3aaeb6e7160d1172" dependencies = [ "byteorder", "futures-util", @@ -2990,7 +2990,7 @@ dependencies = [ [[package]] name = "librespot-protocol" version = "0.5.0-dev" -source = "git+https://github.com/photovoltex/librespot.git?branch=integrate-dealer#029419486fcdbf9f5e004cd7d4ebf0c9be8d6c5c" +source = "git+https://github.com/photovoltex/librespot.git?branch=integrate-dealer#1a07ff535da49d61542df84e3aaeb6e7160d1172" dependencies = [ "protobuf", "protobuf-codegen", @@ -3035,9 +3035,9 @@ dependencies = [ [[package]] name = "lyon_geom" -version = "1.0.5" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edecfb8d234a2b0be031ab02ebcdd9f3b9ee418fb35e265f7a540a48d197bff9" +checksum = "8af69edc087272df438b3ee436c4bb6d7c04aa8af665cfd398feae627dbd8570" dependencies = [ "arrayvec", "euclid", @@ -3046,9 +3046,9 @@ dependencies = [ [[package]] name = "lyon_path" -version = "1.0.5" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c08a606c7a59638d6c6aa18ac91a06aa9fb5f765a7efb27e6a4da58700740d7" +checksum = "8e0b8aec2f58586f6eef237985b9a9b7cb3a3aff4417c575075cf95bf925252e" dependencies = [ "lyon_geom", "num-traits", @@ -3083,7 +3083,7 @@ dependencies = [ "manyhow-macros", "proc-macro2", "quote 1.0.37", - "syn 2.0.79", + "syn 2.0.85", ] [[package]] @@ -3114,7 +3114,7 @@ checksum = "5cf92c10c7e361d6b99666ec1c6f9805b0bea2c3bd8c78dc6fe98ac5bd78db11" dependencies = [ "proc-macro2", "quote 1.0.37", - "syn 2.0.79", + "syn 2.0.85", ] [[package]] @@ -3194,7 +3194,7 @@ checksum = "49e7bc1560b95a3c4a25d03de42fe76ca718ab92d1a22a55b9b4cf67b3ae635c" dependencies = [ "proc-macro2", "quote 1.0.37", - "syn 2.0.79", + "syn 2.0.85", ] [[package]] @@ -3450,7 +3450,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote 1.0.37", - "syn 2.0.79", + "syn 2.0.85", ] [[package]] @@ -3512,7 +3512,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote 1.0.37", - "syn 2.0.79", + "syn 2.0.85", ] [[package]] @@ -3773,9 +3773,9 @@ checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" [[package]] name = "openssl" -version = "0.10.66" +version = "0.10.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9529f4786b70a3e8c61e11179af17ab6188ad8d0ded78c5529441ed39d4bd9c1" +checksum = "6174bc48f102d208783c2c84bf931bb75927a617866870de8a4ea85597f871f5" dependencies = [ "bitflags 2.6.0", "cfg-if", @@ -3794,7 +3794,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote 1.0.37", - "syn 2.0.79", + "syn 2.0.85", ] [[package]] @@ -3805,9 +3805,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.103" +version = "0.9.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f9e8deee91df40a943c71b917e5874b951d32a802526c85721ce3b776c929d6" +checksum = "45abf306cbf99debc8195b66b7346498d7b10c210de50418b5ccd7ceba08c741" dependencies = [ "cc", "libc", @@ -3817,9 +3817,9 @@ dependencies = [ [[package]] name = "orbclient" -version = "0.3.47" +version = "0.3.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52f0d54bde9774d3a51dcf281a5def240c71996bc6ca05d2c847ec8b2b216166" +checksum = "ba0b26cec2e24f08ed8bb31519a9333140a6599b867dac464bb150bdb796fd43" dependencies = [ "libredox", ] @@ -3870,7 +3870,7 @@ dependencies = [ "by_address", "proc-macro2", "quote 1.0.37", - "syn 2.0.79", + "syn 2.0.85", ] [[package]] @@ -3976,7 +3976,7 @@ dependencies = [ "phf_shared", "proc-macro2", "quote 1.0.37", - "syn 2.0.79", + "syn 2.0.85", ] [[package]] @@ -3990,29 +3990,29 @@ dependencies = [ [[package]] name = "pin-project" -version = "1.1.6" +version = "1.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf123a161dde1e524adf36f90bc5d8d3462824a9c43553ad07a8183161189ec" +checksum = "be57f64e946e500c8ee36ef6331845d40a93055567ec57e8fae13efd33759b95" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.6" +version = "1.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4502d8515ca9f32f1fb543d987f63d95a14934883db45bdb48060b6b69257f8" +checksum = "3c0f5fad0874fc7abcd4d750e76917eaebbecaa2c20bde22e1dbeeba8beb758c" dependencies = [ "proc-macro2", "quote 1.0.37", - "syn 2.0.79", + "syn 2.0.85", ] [[package]] name = "pin-project-lite" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" +checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff" [[package]] name = "pin-utils" @@ -4139,12 +4139,12 @@ checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa" [[package]] name = "prettyplease" -version = "0.2.22" +version = "0.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479cf940fbbb3426c32c5d5176f62ad57549a0bb84773423ba8be9d089f5faba" +checksum = "64d1ec885c64d0457d564db4ec299b2dae3f9c02808b8ad9c3a089c591b18033" dependencies = [ "proc-macro2", - "syn 2.0.79", + "syn 2.0.85", ] [[package]] @@ -4180,9 +4180,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.87" +version = "1.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3e4daa0dcf6feba26f985457cdf104d4b4256fc5a09547140f3631bb076b19a" +checksum = "f139b0662de085916d1fb67d2b4169d1addddda1919e696f3252b740b629986e" dependencies = [ "unicode-ident", ] @@ -4203,14 +4203,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a65f2e60fbf1063868558d69c6beacf412dc755f9fc020f514b7955fc914fe30" dependencies = [ "quote 1.0.37", - "syn 2.0.79", + "syn 2.0.85", ] [[package]] name = "protobuf" -version = "3.6.0" +version = "3.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3018844a02746180074f621e847703737d27d89d7f0721a7a4da317f88b16385" +checksum = "a3a7c64d9bf75b1b8d981124c14c179074e8caa7dfe7b6a12e6222ddcd0c8f72" dependencies = [ "once_cell", "protobuf-support", @@ -4219,9 +4219,9 @@ dependencies = [ [[package]] name = "protobuf-codegen" -version = "3.6.0" +version = "3.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "411c15a212b4de05eb8bc989fd066a74c86bd3c04e27d6e86bd7703b806d7734" +checksum = "e26b833f144769a30e04b1db0146b2aaa53fd2fd83acf10a6b5f996606c18144" dependencies = [ "anyhow", "once_cell", @@ -4234,9 +4234,9 @@ dependencies = [ [[package]] name = "protobuf-json-mapping" -version = "3.6.0" +version = "3.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d77c15a1dfbe22d088e5d31acbd6cae25eb15bd707de9ef00c58b508f11c76a" +checksum = "9b445cf83c9303695e6c423d269759e139b6182d2f1171e18afda7078a764336" dependencies = [ "protobuf", "protobuf-support", @@ -4245,9 +4245,9 @@ dependencies = [ [[package]] name = "protobuf-parse" -version = "3.6.0" +version = "3.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06f45f16b522d92336e839b5e40680095a045e36a1e7f742ba682ddc85236772" +checksum = "322330e133eab455718444b4e033ebfac7c6528972c784fcde28d2cc783c6257" dependencies = [ "anyhow", "indexmap", @@ -4261,9 +4261,9 @@ dependencies = [ [[package]] name = "protobuf-support" -version = "3.6.0" +version = "3.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "faf96d872914fcda2b66d66ea3fff2be7c66865d31c7bb2790cff32c0e714880" +checksum = "b088fd20b938a875ea00843b6faf48579462630015c3788d397ad6a786663252" dependencies = [ "thiserror", ] @@ -4327,7 +4327,7 @@ dependencies = [ "proc-macro-utils", "proc-macro2", "quote 1.0.37", - "syn 2.0.79", + "syn 2.0.85", ] [[package]] @@ -4419,9 +4419,9 @@ dependencies = [ [[package]] name = "ravif" -version = "0.11.10" +version = "0.11.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f0bfd976333248de2078d350bfdf182ff96e168a24d23d2436cef320dd4bdd" +checksum = "2413fd96bd0ea5cdeeb37eaf446a22e6ed7b981d792828721e74ded1980a45c6" dependencies = [ "avif-serialize", "imgref", @@ -4459,9 +4459,9 @@ dependencies = [ [[package]] name = "read-fonts" -version = "0.22.3" +version = "0.22.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb94d9ac780fdcf9b6b252253f7d8f221379b84bd3573131139b383df69f85e1" +checksum = "4a04b892cb6f91951f144c33321843790c8574c825aafdb16d815fd7183b5229" dependencies = [ "bytemuck", "font-types", @@ -4498,9 +4498,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.11.0" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38200e5ee88914975b69f657f0801b6f6dccafd44fd9326302a4aaeecfacb1d8" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ "aho-corasick", "memchr", @@ -4673,9 +4673,6 @@ name = "rgb" version = "0.8.50" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57397d16646700483b67d2dd6511d79318f9d057fdbd21a4066aeac8b41d310a" -dependencies = [ - "bytemuck", -] [[package]] name = "ring" @@ -4829,9 +4826,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.14" +version = "0.23.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "415d9944693cb90382053259f89fbb077ea730ad7273047ec63b19bc9b160ba8" +checksum = "5fbb44d7acc4e873d613422379f69f237a1b141928c02f6bc6ccfddddc2d7993" dependencies = [ "aws-lc-rs", "log", @@ -5027,29 +5024,29 @@ checksum = "d369a96f978623eb3dc28807c4852d6cc617fed53da5d3c400feff1ef34a714a" [[package]] name = "serde" -version = "1.0.210" +version = "1.0.213" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8e3592472072e6e22e0a54d5904d9febf8508f65fb8552499a1abc7d1078c3a" +checksum = "3ea7893ff5e2466df8d720bb615088341b295f849602c6956047f8f80f0e9bc1" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.210" +version = "1.0.213" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f" +checksum = "7e85ad2009c50b58e87caa8cd6dac16bdf511bbfb7af6c33df902396aa480fa5" dependencies = [ "proc-macro2", "quote 1.0.37", - "syn 2.0.79", + "syn 2.0.85", ] [[package]] name = "serde_json" -version = "1.0.128" +version = "1.0.132" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ff5456707a1de34e7e37f2a6fd3d3f808c318259cbd01ab6377795054b483d8" +checksum = "d726bfaff4b320266d395898905d0eba0345aae23b54aee3a737e260fd46db03" dependencies = [ "itoa", "memchr", @@ -5075,7 +5072,7 @@ checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ "proc-macro2", "quote 1.0.37", - "syn 2.0.79", + "syn 2.0.85", ] [[package]] @@ -5377,7 +5374,7 @@ dependencies = [ "proc-macro2", "quote 1.0.37", "rustversion", - "syn 2.0.79", + "syn 2.0.85", ] [[package]] @@ -5511,9 +5508,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.79" +version = "2.0.85" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89132cd0bf050864e1d38dc3bbc07a0eb8e7530af26344d3d2bbbef83499f590" +checksum = "5023162dfcd14ef8f32034d8bcd4cc5ddc61ef7a247c024a33e24e1f24d21b56" dependencies = [ "proc-macro2", "quote 1.0.37", @@ -5651,22 +5648,22 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.64" +version = "1.0.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d50af8abc119fb8bb6dbabcfa89656f46f84aa0ac7688088608076ad2b459a84" +checksum = "5d11abd9594d9b38965ef50805c5e469ca9cc6f197f883f717e0269a3057b3d5" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.64" +version = "1.0.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08904e7672f5eb876eaaf87e0ce17857500934f4981c4a0ab2b4aa98baac7fc3" +checksum = "ae71770322cbd277e69d762a16c444af02aa0575ac0d174f0b9562d3b37f8602" dependencies = [ "proc-macro2", "quote 1.0.37", - "syn 2.0.79", + "syn 2.0.85", ] [[package]] @@ -5775,9 +5772,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.40.0" +version = "1.41.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2b070231665d27ad9ec9b8df639893f46727666c6767db40317fbe920a5d998" +checksum = "145f3413504347a2be84393cc8a7d2fb4d863b375909ea59f2158261aa258bbb" dependencies = [ "backtrace", "bytes", @@ -5798,7 +5795,7 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote 1.0.37", - "syn 2.0.79", + "syn 2.0.85", ] [[package]] @@ -5838,7 +5835,7 @@ version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" dependencies = [ - "rustls 0.23.14", + "rustls 0.23.15", "rustls-pki-types", "tokio", ] @@ -5874,7 +5871,7 @@ checksum = "edc5f74e248dc973e0dbb7b74c7e0d6fcc301c694ff50049504004ef4d0cdcd9" dependencies = [ "futures-util", "log", - "rustls 0.23.14", + "rustls 0.23.15", "rustls-native-certs 0.8.0", "rustls-pki-types", "tokio", @@ -5954,7 +5951,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote 1.0.37", - "syn 2.0.79", + "syn 2.0.85", ] [[package]] @@ -6033,7 +6030,7 @@ dependencies = [ "httparse", "log", "rand", - "rustls 0.23.14", + "rustls 0.23.15", "rustls-pki-types", "sha1", "thiserror", @@ -6170,9 +6167,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" +checksum = "f8c5f0a0af699448548ad1a2fbf920fb4bee257eae39953ba95cb84891a0446a" dependencies = [ "getrandom", "rand", @@ -6298,7 +6295,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote 1.0.37", - "syn 2.0.79", + "syn 2.0.85", "wasm-bindgen-shared", ] @@ -6332,7 +6329,7 @@ checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" dependencies = [ "proc-macro2", "quote 1.0.37", - "syn 2.0.79", + "syn 2.0.85", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -6359,9 +6356,9 @@ dependencies = [ [[package]] name = "wayland-client" -version = "0.31.6" +version = "0.31.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3f45d1222915ef1fd2057220c1d9d9624b7654443ea35c3877f7a52bd0a5a2d" +checksum = "b66249d3fc69f76fd74c82cc319300faa554e9d865dab1f7cd66cc20db10b280" dependencies = [ "bitflags 2.6.0", "rustix", @@ -6382,9 +6379,9 @@ dependencies = [ [[package]] name = "wayland-cursor" -version = "0.31.6" +version = "0.31.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a94697e66e76c85923b0d28a0c251e8f0666f58fc47d316c0f4da6da75d37cb" +checksum = "32b08bc3aafdb0035e7fe0fdf17ba0c09c268732707dca4ae098f60cb28c9e4c" dependencies = [ "rustix", "wayland-client", @@ -6393,9 +6390,9 @@ dependencies = [ [[package]] name = "wayland-protocols" -version = "0.32.4" +version = "0.32.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b5755d77ae9040bb872a25026555ce4cb0ae75fd923e90d25fba07d81057de0" +checksum = "7cd0ade57c4e6e9a8952741325c30bf82f4246885dca8bf561898b86d0c1f58e" dependencies = [ "bitflags 2.6.0", "wayland-backend", @@ -6405,9 +6402,9 @@ dependencies = [ [[package]] name = "wayland-protocols-plasma" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a0a41a6875e585172495f7a96dfa42ca7e0213868f4f15c313f7c33221a7eff" +checksum = "9b31cab548ee68c7eb155517f2212049dc151f7cd7910c2b66abfd31c3ee12bd" dependencies = [ "bitflags 2.6.0", "wayland-backend", @@ -6418,9 +6415,9 @@ dependencies = [ [[package]] name = "wayland-protocols-wlr" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dad87b5fd1b1d3ca2f792df8f686a2a11e3fe1077b71096f7a175ab699f89109" +checksum = "782e12f6cd923c3c316130d56205ebab53f55d6666b7faddfad36cecaeeb4022" dependencies = [ "bitflags 2.6.0", "wayland-backend", @@ -6721,7 +6718,7 @@ checksum = "9107ddc059d5b6fbfbffdfa7a7fe3e22a226def0b2608f72e9d552763d3e1ad7" dependencies = [ "proc-macro2", "quote 1.0.37", - "syn 2.0.79", + "syn 2.0.85", ] [[package]] @@ -6732,7 +6729,7 @@ checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" dependencies = [ "proc-macro2", "quote 1.0.37", - "syn 2.0.79", + "syn 2.0.85", ] [[package]] @@ -6743,7 +6740,7 @@ checksum = "29bee4b38ea3cde66011baa44dba677c432a78593e202392d1e9070cf2a7fca7" dependencies = [ "proc-macro2", "quote 1.0.37", - "syn 2.0.79", + "syn 2.0.85", ] [[package]] @@ -6754,7 +6751,7 @@ checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" dependencies = [ "proc-macro2", "quote 1.0.37", - "syn 2.0.79", + "syn 2.0.85", ] [[package]] @@ -7213,7 +7210,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote 1.0.37", - "syn 2.0.79", + "syn 2.0.85", "zvariant_utils", ] @@ -7252,7 +7249,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote 1.0.37", - "syn 2.0.79", + "syn 2.0.85", ] [[package]] @@ -7308,7 +7305,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote 1.0.37", - "syn 2.0.79", + "syn 2.0.85", "zvariant_utils", ] @@ -7320,5 +7317,5 @@ checksum = "c51bcff7cc3dbb5055396bcf774748c3dab426b4b8659046963523cee4808340" dependencies = [ "proc-macro2", "quote 1.0.37", - "syn 2.0.79", + "syn 2.0.85", ] diff --git a/src/main.rs b/src/main.rs index db18b22..ade266f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,10 +4,10 @@ use api::SpotifyContext; use auth::get_token; use clap::Parser; use cli::Args; -use cushy::{value::Dynamic, widget::MakeWidget, window::MakeWindow, Application, Open, PendingApp, Run, TokioRuntime}; +use cushy::{figures::units::Lp, value::Dynamic, widget::MakeWidget, window::MakeWindow, Application, Open, PendingApp, Run, TokioRuntime}; use librespot_core::{authentication::Credentials, Session, SessionConfig}; use librespot_playback::{audio_backend, config::{AudioFormat, PlayerConfig}, mixer::NoOpVolume, player::Player}; -use widgets::{library::playlist::playlists_widget, ActivePage}; +use widgets::{library::playlist::playlists_widget, virtual_list::{virtual_list, VirtualList}, ActivePage}; mod vibrancy; mod theme; @@ -17,6 +17,21 @@ mod widgets; mod rt; mod api; +struct TestVirtualList; + +impl VirtualList for TestVirtualList { + fn item_count(&self) -> impl cushy::value::IntoDynamic { + Dynamic::new(100) + } + fn item_height(&self) -> impl cushy::value::IntoDynamic { + Dynamic::new(cushy::styles::Dimension::Lp(Lp::inches_f(0.5))) + } + fn widget_at(&self, index: usize) -> impl MakeWidget { + // println!("Creating item {}", index); + format!("Item {}", index) + } +} + fn main() -> cushy::Result { let args = Args::parse(); let mut app = PendingApp::new(TokioRuntime::default()); @@ -70,6 +85,10 @@ fn main() -> cushy::Result { let selected_page = Dynamic::new(ActivePage::default()); playlists_widget(playlists.items, selected_page) + .and( + virtual_list(TestVirtualList) + ) + .into_columns() .make_window() .open(&mut app) .unwrap(); diff --git a/src/widgets/mod.rs b/src/widgets/mod.rs index 81daad8..b0dae3e 100644 --- a/src/widgets/mod.rs +++ b/src/widgets/mod.rs @@ -3,6 +3,8 @@ use rspotify::model::{SimplifiedAlbum, SimplifiedPlaylist}; pub mod image; pub mod library; +pub mod virtual_list; +pub mod probe; #[derive(PartialEq, Debug, Default)] pub enum ActivePage { diff --git a/src/widgets/probe.rs b/src/widgets/probe.rs new file mode 100644 index 0000000..b5acbda --- /dev/null +++ b/src/widgets/probe.rs @@ -0,0 +1,35 @@ +use cushy::{figures::Fraction, value::{Destination, Dynamic, DynamicReader, IntoReadOnly, ReadOnly}, widget::{MakeWidget, Widget, WidgetRef}}; + +#[derive(Debug)] +pub struct ScalingProbe { + child: WidgetRef, + scale: Dynamic +} + +impl ScalingProbe { + pub fn new(child: impl MakeWidget) -> Self { + Self { + child: WidgetRef::new(child), + scale: Dynamic::new(Fraction::new_whole(1)) + } + } + + pub fn scale(&self) -> DynamicReader { + self.scale.create_reader() + } +} + +impl Widget for ScalingProbe { + fn redraw(&mut self, context: &mut cushy::context::GraphicsContext<'_, '_, '_, '_>) { + self.scale.set(context.gfx.scale()); + context.for_other(&self.child).expect("A child").redraw(); + } + fn layout( + &mut self, + available_space: cushy::figures::Size, + context: &mut cushy::context::LayoutContext<'_, '_, '_, '_>, + ) -> cushy::figures::Size { + let child = self.child.mounted(context); + context.for_other(&child).layout(available_space) + } +} \ No newline at end of file diff --git a/src/widgets/virtual_list.rs b/src/widgets/virtual_list.rs new file mode 100644 index 0000000..a1efa2a --- /dev/null +++ b/src/widgets/virtual_list.rs @@ -0,0 +1,58 @@ +use cushy::{figures::{Round, ScreenScale, Size, Zero}, styles::{Dimension, DimensionRange, Edges}, value::{Destination, Dynamic, ForEach, IntoDynamic, MapEach, Source}, widget::{MakeWidget, WidgetList}, widgets::{Container, Scroll, Stack}}; +use crate::widgets::probe::ScalingProbe; + +pub trait VirtualList { + fn item_height(&self) -> impl IntoDynamic; + // fn width(&self) -> impl IntoDynamic; + fn item_count(&self) -> impl IntoDynamic; + fn widget_at(&self, index: usize) -> impl MakeWidget; +} + +pub fn virtual_list(list: T) -> impl MakeWidget +where + T: VirtualList + Send + 'static +{ + let contents = Dynamic::default(); + let stack = Stack::rows(contents.clone()); + let padding = Dynamic::default(); + let container = Container::new(stack).transparent().pad_by(padding.clone()); + let scroll = Scroll::vertical(container); + + // Current scroll position + let current_scroll = scroll.scroll.clone().map_each(|scroll| scroll.y); + // height of the scroll widget + let visible_size = scroll.control_size().map_each(|size| size.height); + // max scroll position. Height of contents is max_scroll + visible_size + // let max_scroll = scroll.max_scroll().map_each(|size| size.y); + + let item_height = list.item_height().into_dynamic(); + let item_count = list.item_count().into_dynamic(); + + let probe = ScalingProbe::new(scroll); + let scale = probe.scale(); + + // let width = list.width().into_dynamic(); + + // (&width, &item_height, &item_count, &scale).map_each(|(width, item_height, item_count, scale)| { + // Size::new(*width, *item_height.into_upx(*scale) * *item_count as f32) + // }); + + let handle = (¤t_scroll, &item_height, &item_count, &scale, &visible_size).for_each(move |(current_scroll, item_height, item_count, scale, visible_size)| { + let start = (*current_scroll / item_height.into_upx(*scale)).floor().get(); + let end = ((*current_scroll + *visible_size) / item_height.into_upx(*scale)).ceil().get().min(*item_count as _); + println!("Start: {}, End: {}", start, end); + + let list = (start as usize..end as usize).map(|index| list.widget_at(index)); + + let padding_start = *item_height * start as i32; + let items_end = (*item_count as u32).saturating_sub(end); + let padding_end = *item_height * items_end as i32; + + padding.set(Edges::ZERO.with_top(padding_start).with_bottom(padding_end)); + + contents.set(WidgetList::from_iter(list)); + }); + handle.persist(); + + probe +} \ No newline at end of file