diff --git a/.gitignore b/.gitignore index bf4ca84..41e108c 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,8 @@ .sqlx .env data.db +/flamegraph.svg +/.zed/ +/perf.data +/perf.data.old +.aider* diff --git a/Cargo.lock b/Cargo.lock index 4e60530..c671c99 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,9 +4,9 @@ version = 4 [[package]] name = "ab_glyph" -version = "0.2.31" +version = "0.2.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e074464580a518d16a7126262fffaaa47af89d4099d4cb403f8ed938ba12ee7d" +checksum = "01c0457472c38ea5bd1c3b5ada5e368271cb550be7a4ca4a0b4634e9913f6cc2" dependencies = [ "ab_glyph_rasterizer", "owned_ttf_parser", @@ -18,11 +18,91 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "366ffbaa4442f4684d91e2cd7c5ea7c4ed8add41959a31447066e279e432b618" +[[package]] +name = "accesskit" +version = "0.16.0" +source = "git+https://github.com/wash2/accesskit?tag=iced-xdg-surface-0.13-rc#c46afc041b1968a5af0186fa6aba3ea9cf24c8c3" + +[[package]] +name = "accesskit_atspi_common" +version = "0.9.0" +source = "git+https://github.com/wash2/accesskit?tag=iced-xdg-surface-0.13-rc#c46afc041b1968a5af0186fa6aba3ea9cf24c8c3" +dependencies = [ + "accesskit", + "accesskit_consumer", + "atspi-common", + "serde", + "thiserror 1.0.69", + "zvariant 3.15.2", +] + +[[package]] +name = "accesskit_consumer" +version = "0.24.0" +source = "git+https://github.com/wash2/accesskit?tag=iced-xdg-surface-0.13-rc#c46afc041b1968a5af0186fa6aba3ea9cf24c8c3" +dependencies = [ + "accesskit", + "immutable-chunkmap", +] + +[[package]] +name = "accesskit_macos" +version = "0.17.0" +source = "git+https://github.com/wash2/accesskit?tag=iced-xdg-surface-0.13-rc#c46afc041b1968a5af0186fa6aba3ea9cf24c8c3" +dependencies = [ + "accesskit", + "accesskit_consumer", + "objc2 0.5.2", + "objc2-app-kit 0.2.2", + "objc2-foundation 0.2.2", + "once_cell", +] + +[[package]] +name = "accesskit_unix" +version = "0.12.0" +source = "git+https://github.com/wash2/accesskit?tag=iced-xdg-surface-0.13-rc#c46afc041b1968a5af0186fa6aba3ea9cf24c8c3" +dependencies = [ + "accesskit", + "accesskit_atspi_common", + "atspi", + "futures-lite 1.13.0", + "serde", + "tokio", + "tokio-stream", + "zbus 3.15.2", +] + +[[package]] +name = "accesskit_windows" +version = "0.22.0" +source = "git+https://github.com/wash2/accesskit?tag=iced-xdg-surface-0.13-rc#c46afc041b1968a5af0186fa6aba3ea9cf24c8c3" +dependencies = [ + "accesskit", + "accesskit_consumer", + "paste", + "static_assertions", + "windows 0.54.0", +] + +[[package]] +name = "accesskit_winit" +version = "0.22.0" +source = "git+https://github.com/wash2/accesskit?tag=iced-xdg-surface-0.13-rc#c46afc041b1968a5af0186fa6aba3ea9cf24c8c3" +dependencies = [ + "accesskit", + "accesskit_macos", + "accesskit_unix", + "accesskit_windows", + "raw-window-handle", + "winit", +] + [[package]] name = "addr2line" -version = "0.24.2" +version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +checksum = "1b5d307320b3181d6d7954e663bd7c774a838b8220fe0593c86d9fb09f498b4b" dependencies = [ "gimli", ] @@ -76,6 +156,12 @@ version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" +[[package]] +name = "almost" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3aa2999eb46af81abb65c2d30d446778d7e613b60bbf4e174a027e80f90a3c14" + [[package]] name = "alsa" version = "0.9.1" @@ -83,7 +169,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed7572b7ba83a31e20d1b48970ee402d2e3e0537dcfe0a3ff4d6eb7508617d43" dependencies = [ "alsa-sys", - "bitflags 2.9.2", + "bitflags 2.9.4", "cfg-if", "libc", ] @@ -105,14 +191,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef6978589202a00cd7e118380c448a08b6ed394c3a8df3a430d0898e3a42d046" dependencies = [ "android-properties", - "bitflags 2.9.2", + "bitflags 2.9.4", "cc", "cesu8", "jni", "jni-sys", "libc", "log", - "ndk 0.9.0", + "ndk", "ndk-context", "ndk-sys 0.6.0+11769913", "num_enum", @@ -125,12 +211,6 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04" -[[package]] -name = "android-tzdata" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" - [[package]] name = "android_system_properties" version = "0.1.5" @@ -142,9 +222,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.20" +version = "0.6.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ae563653d1938f79b1ab1b5e668c87c76a9930414574a6583a7b7e11a8e6192" +checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" dependencies = [ "anstyle", "anstyle-parse", @@ -157,9 +237,9 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.11" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "862ed96ca487e809f1c8e5a8447f6ee2cf102f846893800b20cebdf541fc6bbd" +checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" [[package]] name = "anstyle-parse" @@ -192,9 +272,24 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.99" +version = "1.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0674a1ddeecb70197781e945de4b3b8ffb61fa939a5597bcf48503737663100" +checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" + +[[package]] +name = "apply" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f47b57fc4521e3cae26a4d45b5227f8fadee4c345be0fefd8d5d1711afb8aeb9" + +[[package]] +name = "approx" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" +dependencies = [ + "num-traits", +] [[package]] name = "arbitrary" @@ -202,6 +297,12 @@ version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1" +[[package]] +name = "arc-swap" +version = "1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" + [[package]] name = "arg_enum_proc_macro" version = "0.3.4" @@ -242,39 +343,43 @@ dependencies = [ [[package]] name = "ashpd" -version = "0.6.8" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ac22eda5891cc086690cb6fa10121c0390de0e3b04eb269f2d766b00d3f2d81" +checksum = "6cbdf310d77fd3aaee6ea2093db7011dc2d35d2eb3481e5607f1f8d942ed99df" dependencies = [ - "async-fs 2.1.3", - "async-net", "enumflags2", "futures-channel", "futures-util", - "once_cell", - "rand", + "rand 0.9.2", + "raw-window-handle", "serde", "serde_repr", + "tokio", "url", - "zbus 3.15.2", + "wayland-backend", + "wayland-client", + "wayland-protocols", + "zbus 5.11.0", ] [[package]] name = "ashpd" -version = "0.10.3" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3d60bee1a1d38c2077030f4788e1b4e31058d2e79a8cfc8f2b440bd44db290" +checksum = "da0986d5b4f0802160191ad75f8d33ada000558757db3defb70299ca95d9fcbd" dependencies = [ - "async-fs 2.1.3", - "async-net", "enumflags2", "futures-channel", "futures-util", - "rand", + "rand 0.9.2", "serde", "serde_repr", + "tokio", "url", - "zbus 5.9.0", + "wayland-backend", + "wayland-client", + "wayland-protocols", + "zbus 5.11.0", ] [[package]] @@ -299,17 +404,6 @@ dependencies = [ "pin-project-lite", ] -[[package]] -name = "async-channel" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" -dependencies = [ - "concurrent-queue", - "event-listener 2.5.3", - "futures-core", -] - [[package]] name = "async-channel" version = "2.5.0" @@ -324,9 +418,9 @@ dependencies = [ [[package]] name = "async-executor" -version = "1.13.2" +version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb812ffb58524bdd10860d7d974e2f01cc0950c2438a74ee5ec2e2280c6c4ffa" +checksum = "497c00e0fd83a72a79a39fcbd8e3e2f055d6f6c7e025f3b3d91f4f8e76527fb8" dependencies = [ "async-task", "concurrent-queue", @@ -336,44 +430,6 @@ dependencies = [ "slab", ] -[[package]] -name = "async-fs" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "279cf904654eeebfa37ac9bb1598880884924aab82e290aa65c9e77a0e142e06" -dependencies = [ - "async-lock 2.8.0", - "autocfg", - "blocking", - "futures-lite 1.13.0", -] - -[[package]] -name = "async-fs" -version = "2.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09f7e37c0ed80b2a977691c47dae8625cfb21e205827106c64f7c588766b2e50" -dependencies = [ - "async-lock 3.4.1", - "blocking", - "futures-lite 2.6.1", -] - -[[package]] -name = "async-global-executor" -version = "2.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05b1b633a2115cd122d73b955eadd9916c18c8f510ec9cd1686404c60ad1c29c" -dependencies = [ - "async-channel 2.5.0", - "async-executor", - "async-io 2.5.0", - "async-lock 3.4.1", - "blocking", - "futures-lite 2.6.1", - "once_cell", -] - [[package]] name = "async-io" version = "1.13.0" @@ -396,20 +452,20 @@ dependencies = [ [[package]] name = "async-io" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19634d6336019ef220f09fd31168ce5c184b295cbf80345437cc36094ef223ca" +checksum = "456b8a8feb6f42d237746d4b3e9a178494627745c3c56c6ea55d92ba50d026fc" dependencies = [ - "async-lock 3.4.1", + "autocfg", "cfg-if", "concurrent-queue", "futures-io", "futures-lite 2.6.1", "parking", - "polling 3.10.0", - "rustix 1.0.8", + "polling 3.11.0", + "rustix 1.1.2", "slab", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -432,17 +488,6 @@ dependencies = [ "pin-project-lite", ] -[[package]] -name = "async-net" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b948000fad4873c1c9339d60f2623323a0cfd3816e5181033c6a5cb68b2accf7" -dependencies = [ - "async-io 2.5.0", - "blocking", - "futures-lite 2.6.1", -] - [[package]] name = "async-process" version = "1.8.1" @@ -462,12 +507,12 @@ dependencies = [ [[package]] name = "async-process" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65daa13722ad51e6ab1a1b9c01299142bc75135b337923cfa10e79bbbd669f00" +checksum = "fc50921ec0055cdd8a16de48773bfeec5c972598674347252c0399676be7da75" dependencies = [ - "async-channel 2.5.0", - "async-io 2.5.0", + "async-channel", + "async-io 2.6.0", "async-lock 3.4.1", "async-signal", "async-task", @@ -475,7 +520,7 @@ dependencies = [ "cfg-if", "event-listener 5.4.1", "futures-lite 2.6.1", - "rustix 1.0.8", + "rustix 1.1.2", ] [[package]] @@ -491,46 +536,20 @@ dependencies = [ [[package]] name = "async-signal" -version = "0.2.12" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f567af260ef69e1d52c2b560ce0ea230763e6fbb9214a85d768760a920e3e3c1" +checksum = "43c070bbf59cd3570b6b2dd54cd772527c7c3620fce8be898406dd3ed6adc64c" dependencies = [ - "async-io 2.5.0", + "async-io 2.6.0", "async-lock 3.4.1", "atomic-waker", "cfg-if", "futures-core", "futures-io", - "rustix 1.0.8", + "rustix 1.1.2", "signal-hook-registry", "slab", - "windows-sys 0.60.2", -] - -[[package]] -name = "async-std" -version = "1.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c8e079a4ab67ae52b7403632e4618815d6db36d2a010cfe41b02c1b1578f93b" -dependencies = [ - "async-channel 1.9.0", - "async-global-executor", - "async-io 2.5.0", - "async-lock 3.4.1", - "crossbeam-utils", - "futures-channel", - "futures-core", - "futures-io", - "futures-lite 2.6.1", - "gloo-timers", - "kv-log-macro", - "log", - "memchr", - "once_cell", - "pin-project-lite", - "pin-utils", - "slab", - "wasm-bindgen-futures", + "windows-sys 0.61.2", ] [[package]] @@ -571,6 +590,76 @@ version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41e67cd8309bbd06cd603a9e693a784ac2e5d1e955f11286e355089fcab3047c" +[[package]] +name = "atomicwrites" +version = "0.4.2" +source = "git+https://github.com/jackpot51/rust-atomicwrites#043ab4859d53ffd3d55334685303d8df39c9f768" +dependencies = [ + "rustix 0.38.44", + "tempfile", + "windows-sys 0.48.0", +] + +[[package]] +name = "atspi" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6059f350ab6f593ea00727b334265c4dfc7fd442ee32d264794bd9bdc68e87ca" +dependencies = [ + "atspi-common", + "atspi-connection", + "atspi-proxies", +] + +[[package]] +name = "atspi-common" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92af95f966d2431f962bc632c2e68eda7777330158bf640c4af4249349b2cdf5" +dependencies = [ + "enumflags2", + "serde", + "static_assertions", + "zbus 3.15.2", + "zbus_names 2.6.1", + "zvariant 3.15.2", +] + +[[package]] +name = "atspi-connection" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0c65e7d70f86d4c0e3b2d585d9bf3f979f0b19d635a336725a88d279f76b939" +dependencies = [ + "atspi-common", + "atspi-proxies", + "futures-lite 1.13.0", + "zbus 3.15.2", +] + +[[package]] +name = "atspi-proxies" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6495661273703e7a229356dcbe8c8f38223d697aacfaf0e13590a9ac9977bb52" +dependencies = [ + "atspi-common", + "serde", + "zbus 3.15.2", +] + +[[package]] +name = "auto_enums" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c170965892137a3a9aeb000b4524aa3cc022a310e709d848b6e1cdce4ab4781" +dependencies = [ + "derive_utils", + "proc-macro2", + "quote", + "syn 2.0.106", +] + [[package]] name = "autocfg" version = "1.5.0" @@ -602,9 +691,9 @@ dependencies = [ [[package]] name = "backtrace" -version = "0.3.75" +version = "0.3.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" +checksum = "bb531853791a215d7c62a30daf0dde835f381ab5de4589cfe7c649d2cbe92bd6" dependencies = [ "addr2line", "cfg-if", @@ -612,7 +701,7 @@ dependencies = [ "miniz_oxide", "object", "rustc-demangle", - "windows-targets 0.52.6", + "windows-link", ] [[package]] @@ -643,41 +732,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" [[package]] -name = "bincode" -version = "1.3.3" +name = "basic-toml" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +checksum = "ba62675e8242a4c4e806d12f11d136e626e6c8361d6b829310732241652a178a" dependencies = [ "serde", ] -[[package]] -name = "bincode" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36eaf5d7b090263e8150820482d5d93cd964a81e4019913c972f4edcc6edb740" -dependencies = [ - "bincode_derive", - "serde", - "unty", -] - -[[package]] -name = "bincode_derive" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf95709a440f45e986983918d0e8a1f30a9b1df04918fc828670606804ac3c09" -dependencies = [ - "virtue", -] - [[package]] name = "bindgen" -version = "0.72.0" +version = "0.71.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f72209734318d0b619a5e0f5129918b848c416e122a3c4ce054e03cb87b726f" +checksum = "5f58bf3d7db68cfbac37cfc485a8d711e87e064c3d0fe0435b92f7a407f9d6b3" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.4", "cexpr", "clang-sys", "itertools 0.13.0", @@ -691,24 +760,24 @@ dependencies = [ [[package]] name = "bit-set" -version = "0.8.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" +checksum = "f0481a0e032742109b1133a095184ee93d88f3dc9e0d28a5d033dc77a073f44f" dependencies = [ "bit-vec", ] [[package]] name = "bit-vec" -version = "0.8.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" +checksum = "d2c54ff287cfc0a34f38a6b832ea1bd8e448a330b3e40a50859e6488bee07f22" [[package]] name = "bit_field" -version = "0.10.2" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61" +checksum = "1e4b40c7323adcfc0a41c4b88143ed58346ff65a288fc144329c5c45e05d70c6" [[package]] name = "bitflags" @@ -718,9 +787,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.9.2" +version = "2.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a65b545ab31d687cff52899d4890855fec459eb6afe0da6417b8a18da87aa29" +checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" dependencies = [ "serde", ] @@ -752,7 +821,16 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2c132eebf10f5cad5289222520a4a058514204aed6d791f1cf4fe8088b82d15f" dependencies = [ - "objc2", + "objc2 0.5.2", +] + +[[package]] +name = "block2" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5" +dependencies = [ + "objc2 0.6.3", ] [[package]] @@ -761,13 +839,24 @@ version = "1.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e83f8d02be6967315521be875afa792a316e28d57b5a2d401897e2a7921b7f21" dependencies = [ - "async-channel 2.5.0", + "async-channel", "async-task", "futures-io", "futures-lite 2.6.1", "piper", ] +[[package]] +name = "bstr" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "234113d19d0d7d613b40e86fb654acf958910802bcceab913a4f9e7cda03b1a4" +dependencies = [ + "memchr", + "regex-automata", + "serde", +] + [[package]] name = "built" version = "0.7.7" @@ -781,19 +870,25 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" [[package]] -name = "bytemuck" -version = "1.23.2" +name = "by_address" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3995eaeebcdf32f91f980d360f78732ddc061097ab4e39991ae7a6ace9194677" +checksum = "64fa3c856b712db6612c019f14756e64e4bcea13337a6b33b696333a9eaa2d06" + +[[package]] +name = "bytemuck" +version = "1.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fbdf580320f38b612e485521afda1ee26d10cc9884efaaa750d383e13e3c5f4" dependencies = [ "bytemuck_derive", ] [[package]] name = "bytemuck_derive" -version = "1.10.1" +version = "1.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f154e572231cb6ba2bd1176980827e3d5dc04cc183a75dea38109fbdd672d29" +checksum = "f9abbd1bc6865053c427f7198e6af43bfdedc55ab791faed4fbd361d789575ff" dependencies = [ "proc-macro2", "quote", @@ -824,43 +919,58 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.4", "log", - "polling 3.10.0", + "polling 3.11.0", "rustix 0.38.44", "slab", "thiserror 1.0.69", ] +[[package]] +name = "calloop" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb9f6e1368bd4621d2c86baa7e37de77a938adf5221e5dd3d6133340101b309e" +dependencies = [ + "bitflags 2.9.4", + "polling 3.11.0", + "rustix 1.1.2", + "slab", + "tracing", +] + [[package]] name = "calloop-wayland-source" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95a66a987056935f7efce4ab5668920b5d0dac4a7c99991a67395f13702ddd20" dependencies = [ - "calloop", + "calloop 0.13.0", "rustix 0.38.44", "wayland-backend", "wayland-client", ] [[package]] -name = "cargo-hot-protocol" -version = "0.1.0" -source = "git+https://github.com/hecrj/cargo-hot.git?rev=b8dc518b8640928178a501257e353b73bc06cf47#b8dc518b8640928178a501257e353b73bc06cf47" +name = "calloop-wayland-source" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "138efcf0940a02ebf0cc8d1eff41a1682a46b431630f4c52450d6265876021fa" dependencies = [ - "anyhow", - "bincode 2.0.1", - "log", - "subsecond", + "calloop 0.14.3", + "rustix 1.1.2", + "wayland-backend", + "wayland-client", ] [[package]] name = "cc" -version = "1.2.33" +version = "1.2.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ee0f8803222ba5a7e2777dd72ca451868909b1ac410621b676adf07280e9b5f" +checksum = "ac9fe6cdbb24b6ade63616c0a0688e45bb56732262c158df3c0c4bea4ca47cb7" dependencies = [ + "find-msvc-tools", "jobserver", "libc", "shlex", @@ -893,9 +1003,9 @@ dependencies = [ [[package]] name = "cfg-expr" -version = "0.20.2" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8d458d63f0f0f482c8da9b7c8b76c21bd885a02056cc94c6404d861ca2b8206" +checksum = "1a2c5f3bf25ec225351aa1c8e230d04d880d3bd89dea133537dafad4ae291e5c" dependencies = [ "smallvec", "target-lexicon 0.13.2", @@ -921,13 +1031,15 @@ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] name = "chrono" -version = "0.4.41" +version = "0.4.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" +checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" dependencies = [ - "android-tzdata", "iana-time-zone", + "js-sys", "num-traits", + "serde", + "wasm-bindgen", "windows-link", ] @@ -944,9 +1056,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.45" +version = "4.5.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fc0e74a703892159f5ae7d3aac52c8e6c392f5ae5f359c70b5881d60aaac318" +checksum = "f4512b90fa68d3a9932cea5184017c5d200f5921df706d45e853537dea51508f" dependencies = [ "clap_builder", "clap_derive", @@ -954,9 +1066,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.44" +version = "4.5.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3e7f4214277f3c7aa526a59dd3fbe306a370daee1f8b7b8c987069cd8e888a8" +checksum = "0025e98baa12e766c67ba13ff4695a887a1eba19569aad00a472546795bd6730" dependencies = [ "anstream", "anstyle", @@ -967,9 +1079,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.45" +version = "4.5.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14cb31bb0a7d536caef2639baa7fad459e15c3144efefa6dbd1c84562c4739f6" +checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671" dependencies = [ "heck 0.5.0", "proc-macro2", @@ -979,15 +1091,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.7.5" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675" - -[[package]] -name = "claxon" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bfbf56724aa9eca8afa4fcfadeb479e722935bb2a0900c2d37e0cc477af0688" +checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d" [[package]] name = "clipboard-win" @@ -1000,43 +1106,71 @@ dependencies = [ [[package]] name = "clipboard_macos" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b7f4aaa047ba3c3630b080bb9860894732ff23e2aee290a418909aa6d5df38f" +version = "0.1.0" +source = "git+https://github.com/pop-os/window_clipboard.git?tag=pop-0.13-2#6b9faab87bea9cebec6ae036906fd67fed254f5f" dependencies = [ - "objc2", - "objc2-app-kit", - "objc2-foundation", + "objc", + "objc-foundation", + "objc_id", ] [[package]] name = "clipboard_wayland" version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "003f886bc4e2987729d10c1db3424e7f80809f3fc22dbc16c685738887cb37b8" +source = "git+https://github.com/pop-os/window_clipboard.git?tag=pop-0.13-2#6b9faab87bea9cebec6ae036906fd67fed254f5f" dependencies = [ + "dnd", + "mime 0.1.0", "smithay-clipboard", ] [[package]] name = "clipboard_x11" version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4274ea815e013e0f9f04a2633423e14194e408a0576c943ce3d14ca56c50031c" +source = "git+https://github.com/pop-os/window_clipboard.git?tag=pop-0.13-2#6b9faab87bea9cebec6ae036906fd67fed254f5f" dependencies = [ "thiserror 1.0.69", "x11rb", ] [[package]] -name = "codespan-reporting" -version = "0.12.0" +name = "cocoa" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe6d2e5af09e8c8ad56c969f2157a3d4238cebc7c55f0a517728c38f7b200f81" +checksum = "f6140449f97a6e97f9511815c5632d84c8aacf8ac271ad77c559218161a1373c" +dependencies = [ + "bitflags 1.3.2", + "block", + "cocoa-foundation", + "core-foundation", + "core-graphics", + "foreign-types", + "libc", + "objc", +] + +[[package]] +name = "cocoa-foundation" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c6234cbb2e4c785b456c0644748b1ac416dd045799740356f8363dfe00c93f7" +dependencies = [ + "bitflags 1.3.2", + "block", + "core-foundation", + "core-graphics-types", + "libc", + "objc", +] + +[[package]] +name = "codespan-reporting" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" dependencies = [ - "serde", "termcolor", - "unicode-width 0.2.1", + "unicode-width 0.1.14", ] [[package]] @@ -1057,6 +1191,37 @@ version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9226dbc05df4fb986f48d730b001532580883c4c06c5d1c213f4b34c1c157178" +[[package]] +name = "com" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e17887fd17353b65b1b2ef1c526c83e26cd72e74f598a8dc1bee13a48f3d9f6" +dependencies = [ + "com_macros", +] + +[[package]] +name = "com_macros" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d375883580a668c7481ea6631fc1a8863e33cc335bf56bfad8d7e6d4b04b13a5" +dependencies = [ + "com_macros_support", + "proc-macro2", + "syn 1.0.109", +] + +[[package]] +name = "com_macros_support" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad899a1087a9296d5644792d7cb72b8e34c1bec8e7d4fbc002230169a6e8710c" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "combine" version = "4.6.7" @@ -1092,16 +1257,6 @@ dependencies = [ "libc", ] -[[package]] -name = "core-foundation" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" -dependencies = [ - "core-foundation-sys", - "libc", -] - [[package]] name = "core-foundation-sys" version = "0.8.7" @@ -1115,21 +1270,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081" dependencies = [ "bitflags 1.3.2", - "core-foundation 0.9.4", - "core-graphics-types 0.1.3", - "foreign-types", - "libc", -] - -[[package]] -name = "core-graphics" -version = "0.24.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1" -dependencies = [ - "bitflags 2.9.2", - "core-foundation 0.10.1", - "core-graphics-types 0.2.0", + "core-foundation", + "core-graphics-types", "foreign-types", "libc", ] @@ -1141,81 +1283,195 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" dependencies = [ "bitflags 1.3.2", - "core-foundation 0.9.4", + "core-foundation", "libc", ] [[package]] -name = "core-graphics-types" -version = "0.2.0" +name = "core-text" +version = "20.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" +checksum = "c9d2790b5c08465d49f8dc05c8bcae9fea467855947db39b0f8145c091aaced5" dependencies = [ - "bitflags 2.9.2", - "core-foundation 0.10.1", + "core-foundation", + "core-graphics", + "foreign-types", "libc", ] +[[package]] +name = "core_maths" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77745e017f5edba1a9c1d854f6f3a52dac8a12dd5af5d2f54aecf61e43d80d30" +dependencies = [ + "libm", +] + [[package]] name = "coreaudio-rs" -version = "0.11.3" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "321077172d79c662f64f5071a03120748d5bb652f5231570141be24cfcd2bace" +checksum = "1aae284fbaf7d27aa0e292f7677dfbe26503b0d555026f702940805a630eac17" dependencies = [ "bitflags 1.3.2", - "core-foundation-sys", - "coreaudio-sys", + "libc", + "objc2-audio-toolbox", + "objc2-core-audio", + "objc2-core-audio-types", + "objc2-core-foundation", ] [[package]] -name = "coreaudio-sys" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ceec7a6067e62d6f931a2baf6f3a751f4a892595bcec1461a3c94ef9949864b6" +name = "cosmic-client-toolkit" +version = "0.1.0" +source = "git+https://github.com/pop-os/cosmic-protocols?rev=d0e95be#d0e95be25e423cfe523b11111a3666ed7aaf0dc4" dependencies = [ - "bindgen", + "bitflags 2.9.4", + "cosmic-protocols", + "libc", + "smithay-client-toolkit 0.20.0", + "wayland-client", + "wayland-protocols", +] + +[[package]] +name = "cosmic-config" +version = "0.1.0" +source = "git+https://github.com/pop-os/libcosmic#483fb2cdd103e44d3d6cfc7522455f683789b87e" +dependencies = [ + "atomicwrites", + "cosmic-config-derive", + "cosmic-settings-daemon", + "dirs 6.0.0", + "futures-util", + "iced_futures", + "known-folders", + "notify", + "ron 0.11.0", + "serde", + "tokio", + "tracing", + "xdg 3.0.0", + "zbus 5.11.0", +] + +[[package]] +name = "cosmic-config-derive" +version = "0.1.0" +source = "git+https://github.com/pop-os/libcosmic#483fb2cdd103e44d3d6cfc7522455f683789b87e" +dependencies = [ + "quote", + "syn 2.0.106", +] + +[[package]] +name = "cosmic-freedesktop-icons" +version = "0.3.0" +source = "git+https://github.com/pop-os/freedesktop-icons#8a05c322c482ff3c69cf34bacfee98907ac45307" +dependencies = [ + "dirs 5.0.1", + "ini_core", + "memmap2 0.9.8", + "thiserror 2.0.17", + "tracing", + "xdg 2.5.2", +] + +[[package]] +name = "cosmic-protocols" +version = "0.1.0" +source = "git+https://github.com/pop-os/cosmic-protocols?rev=d0e95be#d0e95be25e423cfe523b11111a3666ed7aaf0dc4" +dependencies = [ + "bitflags 2.9.4", + "wayland-backend", + "wayland-client", + "wayland-protocols", + "wayland-protocols-wlr", + "wayland-scanner", + "wayland-server", +] + +[[package]] +name = "cosmic-settings-config" +version = "0.1.0" +source = "git+https://github.com/pop-os/cosmic-settings-daemon#68331387e4336c37ce2300bea8638257feab449a" +dependencies = [ + "cosmic-config", + "ron 0.11.0", + "serde", + "serde_with", + "tracing", + "xkbcommon 0.9.0", +] + +[[package]] +name = "cosmic-settings-daemon" +version = "0.1.0" +source = "git+https://github.com/pop-os/dbus-settings-bindings#37cbe4e8c165428178be23a14bd37f19a19d3757" +dependencies = [ + "zbus 5.11.0", ] [[package]] name = "cosmic-text" version = "0.14.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da46a9d5a8905cc538a4a5bceb6a4510de7a51049c5588c0114efce102bcbbe8" +source = "git+https://github.com/pop-os/cosmic-text.git#646e04389e1c2e03a85e61946ace06d8fada1fa1" dependencies = [ - "bitflags 2.9.2", - "fontdb 0.16.2", + "bitflags 2.9.4", + "fontdb 0.23.0", + "harfrust", + "linebender_resource_handle", "log", "rangemap", "rustc-hash 1.1.0", - "rustybuzz", "self_cell", + "skrifa", "smol_str", "swash", "sys-locale", - "ttf-parser 0.21.1", "unicode-bidi", "unicode-linebreak", "unicode-script", "unicode-segmentation", ] +[[package]] +name = "cosmic-theme" +version = "0.1.0" +source = "git+https://github.com/pop-os/libcosmic#483fb2cdd103e44d3d6cfc7522455f683789b87e" +dependencies = [ + "almost", + "cosmic-config", + "csscolorparser", + "dirs 6.0.0", + "palette", + "ron 0.11.0", + "serde", + "serde_json", + "thiserror 2.0.17", +] + [[package]] name = "cpal" -version = "0.15.3" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "873dab07c8f743075e57f524c583985fbaf745602acbe916a01539364369a779" +checksum = "cbd307f43cc2a697e2d1f8bc7a1d824b5269e052209e28883e5bc04d095aaa3f" dependencies = [ "alsa", - "core-foundation-sys", "coreaudio-rs", "dasp_sample", "jni", "js-sys", "libc", "mach2", - "ndk 0.8.0", + "ndk", "ndk-context", - "oboe", + "num-derive", + "num-traits", + "objc2-audio-toolbox", + "objc2-core-audio", + "objc2-core-audio-types", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", @@ -1307,18 +1563,6 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" -[[package]] -name = "cryoglyph" -version = "0.1.0" -source = "git+https://github.com/iced-rs/cryoglyph.git?rev=453cedec0d2ec563bd7fa87e84a2319bcebb1ba3#453cedec0d2ec563bd7fa87e84a2319bcebb1ba3" -dependencies = [ - "cosmic-text", - "etagere", - "lru", - "rustc-hash 2.1.1", - "wgpu", -] - [[package]] name = "crypto-common" version = "0.1.6" @@ -1329,6 +1573,22 @@ dependencies = [ "typenum", ] +[[package]] +name = "css-color" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42aaeae719fd78ce501d77c6cdf01f7e96f26bcd5617a4903a1c2b97e388543a" + +[[package]] +name = "csscolorparser" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fda6aace1fbef3aa217b27f4c8d7d071ef2a70a5ca51050b1f17d40299d3f16" +dependencies = [ + "phf", + "serde", +] + [[package]] name = "ctor-lite" version = "0.1.0" @@ -1342,17 +1602,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f27ae1dd37df86211c42e150270f82743308803d90a6f6e6651cd730d5e1732f" [[package]] -name = "dark-light" -version = "2.0.0" +name = "d3d12" +version = "22.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18e1a09f280e29a8b00bc7e81eca5ac87dca0575639c9422a5fa25a07bb884b8" +checksum = "bdbd1f579714e3c809ebd822c81ef148b1ceaeb3d535352afc73fd0c4c6a0017" dependencies = [ - "ashpd 0.10.3", - "async-std", - "objc2", - "objc2-foundation", - "web-sys", - "winreg", + "bitflags 2.9.4", + "libloading", + "winapi", ] [[package]] @@ -1361,8 +1618,18 @@ version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" dependencies = [ - "darling_core", - "darling_macro", + "darling_core 0.20.11", + "darling_macro 0.20.11", +] + +[[package]] +name = "darling" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" +dependencies = [ + "darling_core 0.21.3", + "darling_macro 0.21.3", ] [[package]] @@ -1379,13 +1646,38 @@ dependencies = [ "syn 2.0.106", ] +[[package]] +name = "darling_core" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.106", +] + [[package]] name = "darling_macro" version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ - "darling_core", + "darling_core 0.20.11", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "darling_macro" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" +dependencies = [ + "darling_core 0.21.3", "quote", "syn 2.0.106", ] @@ -1398,9 +1690,9 @@ checksum = "0c87e182de0887fd5361989c677c4e8f5000cd9491d6d563161a8f3a5519fc7f" [[package]] name = "data-url" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c297a1c74b71ae29df00c3e22dd9534821d60eb9af5a0192823fa2acea70c2a" +checksum = "be1e0bca6c3637f992fc1cc7cbc52a78c1ef6db076dbf1059c4323d6a2048376" [[package]] name = "der" @@ -1415,11 +1707,12 @@ dependencies = [ [[package]] name = "deranged" -version = "0.4.0" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" +checksum = "a41953f86f8a05768a6cda24def994fd2f424b04ec5c719cf89989779f199071" dependencies = [ "powerfmt", + "serde_core", ] [[package]] @@ -1439,7 +1732,18 @@ version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ae5c625eda104c228c06ecaf988d1c60e542176bd7a490e60eeda3493244c0c9" dependencies = [ - "darling", + "darling 0.20.11", + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "derive_utils" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccfae181bab5ab6c5478b2ccb69e4c68a02f8c3ec72f6616bfec9dbc599d2ee0" +dependencies = [ "proc-macro2", "quote", "syn 2.0.106", @@ -1469,7 +1773,16 @@ version = "5.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" dependencies = [ - "dirs-sys", + "dirs-sys 0.4.1", +] + +[[package]] +name = "dirs" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" +dependencies = [ + "dirs-sys 0.5.0", ] [[package]] @@ -1480,16 +1793,40 @@ checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" dependencies = [ "libc", "option-ext", - "redox_users", + "redox_users 0.4.6", "windows-sys 0.48.0", ] +[[package]] +name = "dirs-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" +dependencies = [ + "libc", + "option-ext", + "redox_users 0.5.2", + "windows-sys 0.61.2", +] + [[package]] name = "dispatch" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" +[[package]] +name = "dispatch2" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" +dependencies = [ + "bitflags 2.9.4", + "block2 0.6.2", + "libc", + "objc2 0.6.3", +] + [[package]] name = "displaydoc" version = "0.2.5" @@ -1510,6 +1847,18 @@ dependencies = [ "libloading", ] +[[package]] +name = "dnd" +version = "0.1.0" +source = "git+https://github.com/pop-os/window_clipboard.git?tag=pop-0.13-2#6b9faab87bea9cebec6ae036906fd67fed254f5f" +dependencies = [ + "bitflags 2.9.4", + "mime 0.1.0", + "raw-window-handle", + "smithay-client-toolkit 0.19.2", + "smithay-clipboard", +] + [[package]] name = "document-features" version = "0.2.11" @@ -1534,15 +1883,15 @@ checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" [[package]] name = "dpi" version = "0.1.1" -source = "git+https://github.com/iced-rs/winit.git?rev=11414b6aa45699f038114e61b4ddf5102b2d3b4b#11414b6aa45699f038114e61b4ddf5102b2d3b4b" +source = "git+https://github.com/pop-os/winit.git?tag=iced-xdg-surface-0.13-rc#8dfaba290f9a00d3e13be71f1e6f438889cf5546" [[package]] name = "drm" -version = "0.12.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98888c4bbd601524c11a7ed63f814b8825f420514f78e96f752c437ae9cbb5d1" +checksum = "a0f8a69e60d75ae7dab4ef26a59ca99f2a89d4c142089b537775ae0c198bdcde" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.4", "bytemuck", "drm-ffi", "drm-fourcc", @@ -1551,9 +1900,9 @@ dependencies = [ [[package]] name = "drm-ffi" -version = "0.8.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97c98727e48b7ccb4f4aea8cfe881e5b07f702d17b7875991881b41af7278d53" +checksum = "41334f8405792483e32ad05fbb9c5680ff4e84491883d2947a4757dc54cb2ac6" dependencies = [ "drm-sys", "rustix 0.38.44", @@ -1567,14 +1916,32 @@ checksum = "0aafbcdb8afc29c1a7ee5fbe53b5d62f4565b35a042a662ca9fecd0b54dae6f4" [[package]] name = "drm-sys" -version = "0.7.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd39dde40b6e196c2e8763f23d119ddb1a8714534bf7d77fa97a65b0feda3986" +checksum = "2d09ff881f92f118b11105ba5e34ff8f4adf27b30dae8f12e28c193af1c83176" dependencies = [ "libc", "linux-raw-sys 0.6.5", ] +[[package]] +name = "dwrote" +version = "0.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1b35532432acc8b19ceed096e35dfa088d3ea037fe4f3c085f1f97f33b4d02" +dependencies = [ + "lazy_static", + "libc", + "winapi", + "wio", +] + +[[package]] +name = "dyn-clone" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" + [[package]] name = "either" version = "1.15.0" @@ -1654,12 +2021,12 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" -version = "0.3.13" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -1757,6 +2124,12 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af9673d8203fcb076b19dfd17e38b3d4ae9f44959416ea532ce72415a6020365" +[[package]] +name = "fast-srgb8" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd2e7510819d6fbf51a5545c8f922716ecfb14df168a3242f7d33e0239efe6a1" + [[package]] name = "fastrand" version = "1.9.0" @@ -1772,6 +2145,26 @@ version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" +[[package]] +name = "fax" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f05de7d48f37cd6730705cbca900770cab77a89f413d23e100ad7fad7795a0ab" +dependencies = [ + "fax_derive", +] + +[[package]] +name = "fax_derive" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0aca10fb742cb43f9e7bb8467c91aa9bcb8e3ffbc6a6f7389bb93ffc920577d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + [[package]] name = "fd-lock" version = "4.0.4" @@ -1779,7 +2172,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ce92ff622d6dadf7349484f42c93271a0d49b7cc4d466a936405bacbe10aa78" dependencies = [ "cfg-if", - "rustix 1.0.8", + "rustix 1.1.2", "windows-sys 0.59.0", ] @@ -1793,10 +2186,37 @@ dependencies = [ ] [[package]] -name = "flate2" -version = "1.1.2" +name = "filetime" +version = "0.2.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a3d7db9596fecd151c5f638c0ee5d5bd487b6e0ea232e5dc96d5250f6f94b1d" +checksum = "bc0505cd1b6fa6580283f6bdf70a73fcf4aba1184038c90902b92b3dd0df63ed" +dependencies = [ + "cfg-if", + "libc", + "libredox", + "windows-sys 0.60.2", +] + +[[package]] +name = "find-crate" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59a98bbaacea1c0eb6a0876280051b892eb73594fd90cf3b20e9c817029c57d2" +dependencies = [ + "toml 0.5.11", +] + +[[package]] +name = "find-msvc-tools" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52051878f80a721bb68ebfbc930e07b65ba72f2da88968ea5c06fd6ca3d3a127" + +[[package]] +name = "flate2" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc5a4e564e38c699f2880d3fda590bedc2e69f3f84cd48b457bd892ce61d0aa9" dependencies = [ "crc32fast", "miniz_oxide", @@ -1808,12 +2228,63 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4" +[[package]] +name = "float-ord" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ce81f49ae8a0482e4c55ea62ebbd7e5a686af544c00b9d090bba3ff9be97b3d" + [[package]] name = "float_next_after" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8bf7cc16383c4b8d58b9905a8509f02926ce3058053c056376248d958c9df1e8" +[[package]] +name = "fluent" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8137a6d5a2c50d6b0ebfcb9aaa91a28154e0a70605f112d30cb0cd4a78670477" +dependencies = [ + "fluent-bundle", + "unic-langid", +] + +[[package]] +name = "fluent-bundle" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01203cb8918f5711e73891b347816d932046f95f54207710bda99beaeb423bf4" +dependencies = [ + "fluent-langneg", + "fluent-syntax", + "intl-memoizer", + "intl_pluralrules", + "rustc-hash 2.1.1", + "self_cell", + "smallvec", + "unic-langid", +] + +[[package]] +name = "fluent-langneg" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c4ad0989667548f06ccd0e306ed56b61bd4d35458d54df5ec7587c0e8ed5e94" +dependencies = [ + "unic-langid", +] + +[[package]] +name = "fluent-syntax" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54f0d287c53ffd184d04d8677f590f4ac5379785529e5e08b1c8083acdd5c198" +dependencies = [ + "memchr", + "thiserror 2.0.17", +] + [[package]] name = "flume" version = "0.11.1" @@ -1838,10 +2309,35 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" [[package]] -name = "font-types" -version = "0.9.0" +name = "font-kit" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02a596f5713680923a2080d86de50fe472fb290693cf0f701187a1c8b36996b7" +checksum = "2c7e611d49285d4c4b2e1727b72cf05353558885cc5252f93707b845dfcaf3d3" +dependencies = [ + "bitflags 2.9.4", + "byteorder", + "core-foundation", + "core-graphics", + "core-text", + "dirs 6.0.0", + "dwrote", + "float-ord", + "freetype-sys", + "lazy_static", + "libc", + "log", + "pathfinder_geometry", + "pathfinder_simd", + "walkdir", + "winapi", + "yeslogic-fontconfig-sys", +] + +[[package]] +name = "font-types" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "511e2c18a516c666d27867d2f9821f76e7d591f762e9fc41dd6cc5c90fe54b0b" dependencies = [ "bytemuck", ] @@ -1855,20 +2351,6 @@ dependencies = [ "roxmltree", ] -[[package]] -name = "fontdb" -version = "0.16.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0299020c3ef3f60f526a4f64ab4a3d4ce116b1acbf24cdd22da0068e5d81dc3" -dependencies = [ - "fontconfig-parser", - "log", - "memmap2", - "slotmap", - "tinyvec", - "ttf-parser 0.20.0", -] - [[package]] name = "fontdb" version = "0.18.0" @@ -1877,12 +2359,26 @@ checksum = "e32eac81c1135c1df01d4e6d4233c47ba11f6a6d07f33e0bba09d18797077770" dependencies = [ "fontconfig-parser", "log", - "memmap2", + "memmap2 0.9.8", "slotmap", "tinyvec", "ttf-parser 0.21.1", ] +[[package]] +name = "fontdb" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "457e789b3d1202543297a350643cf459f836cade38934e7a4cf6a39e7cde2905" +dependencies = [ + "fontconfig-parser", + "log", + "memmap2 0.9.8", + "slotmap", + "tinyvec", + "ttf-parser 0.25.1", +] + [[package]] name = "foreign-types" version = "0.5.0" @@ -1912,25 +2408,46 @@ checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" [[package]] name = "form_urlencoded" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" dependencies = [ "percent-encoding", ] [[package]] -name = "freedesktop-icons" -version = "0.4.0" +name = "freedesktop-desktop-entry" +version = "0.7.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95f87364ea709292a3b3f74014ce3ee78412c89807eea75a358c8e029b000994" +checksum = "528df05c8ed0bfd569c7018914ba1995be2a133ba9ead17628ddb0ff94b86331" dependencies = [ - "dirs", - "ini_core", - "once_cell", - "thiserror 1.0.69", - "tracing", - "xdg", + "bstr", + "gettext-rs", + "log", + "memchr", + "thiserror 2.0.17", + "unicase", + "xdg 3.0.0", +] + +[[package]] +name = "freetype-sys" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e7edc5b9669349acfda99533e9e0bcf26a51862ab43b08ee7745c55d28eb134" +dependencies = [ + "cc", + "libc", + "pkg-config", +] + +[[package]] +name = "fsevent-sys" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76ee7a02da4d231650c7cea31349b889be2f45ddb3ef3032d2ec8185f6313fd2" +dependencies = [ + "libc", ] [[package]] @@ -1984,7 +2501,7 @@ checksum = "1d930c203dd0b6ff06e0201a4a2fe9149b43c684fd4420555b26d21b1a02956f" dependencies = [ "futures-core", "lock_api", - "parking_lot", + "parking_lot 0.12.5", ] [[package]] @@ -2064,9 +2581,9 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.14.7" +version = "0.14.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" dependencies = [ "typenum", "version_check", @@ -2074,12 +2591,12 @@ dependencies = [ [[package]] name = "gethostname" -version = "0.4.3" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0176e0459c2e4a1fe232f984bca6890e681076abb9934f6cea7c326f3fc47818" +checksum = "fc257fdb4038301ce4b9cd1b3b51704509692bb3ff716a410cbd07925d9dae55" dependencies = [ - "libc", - "windows-targets 0.48.5", + "rustix 1.1.2", + "windows-targets 0.52.6", ] [[package]] @@ -2102,7 +2619,27 @@ dependencies = [ "cfg-if", "libc", "r-efi", - "wasi 0.14.2+wasi-0.2.4", + "wasi 0.14.7+wasi-0.2.4", +] + +[[package]] +name = "gettext-rs" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d5857dc1b7f0fee86961de833f434e29494d72af102ce5355738c0664222bdf" +dependencies = [ + "gettext-sys", + "locale_config", +] + +[[package]] +name = "gettext-sys" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ea859ab0dd7e70ff823032b3e077d03d39c965d68c6c10775add60e999d8ee9" +dependencies = [ + "cc", + "temp-dir", ] [[package]] @@ -2117,9 +2654,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.31.1" +version = "0.32.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" +checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7" [[package]] name = "gio-sys" @@ -2157,7 +2694,7 @@ version = "0.20.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ffc4b6e352d4716d84d7dde562dd9aee2a7d48beb872dd9ece7f2d1515b2d683" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.4", "futures-channel", "futures-core", "futures-executor", @@ -2179,7 +2716,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8084af62f09475a3f529b1629c10c429d7600ee1398ae12dd3bf175d74e7145" dependencies = [ "heck 0.5.0", - "proc-macro-crate 3.3.0", + "proc-macro-crate 3.4.0", "proc-macro2", "quote", "syn 2.0.106", @@ -2201,23 +2738,11 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" -[[package]] -name = "gloo-timers" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbb143cf96099802033e0d4f4963b19fd2e0b728bcf076cd9cf7f6634f092994" -dependencies = [ - "futures-channel", - "futures-core", - "js-sys", - "wasm-bindgen", -] - [[package]] name = "glow" -version = "0.16.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5e5ea60d70410161c8bf5da3fdfeaa1c72ed2c15f8bbb9d19fe3a4fad085f08" +checksum = "bd348e04c43b32574f2de31c8bb397d96c9fcfa1371bd4ca6d8bdc464ab121b1" dependencies = [ "js-sys", "slotmap", @@ -2251,7 +2776,7 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fbcd2dba93594b227a1f57ee09b8b9da8892c34d55aa332e034a228d0fe6a171" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.4", "gpu-alloc-types", ] @@ -2261,19 +2786,20 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "98ff03b468aa837d70984d55f5d3f846f6ec31fe34bbb97c4f85219caeee1ca4" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.4", ] [[package]] name = "gpu-allocator" -version = "0.27.0" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c151a2a5ef800297b4e79efa4f4bec035c5f51d5ae587287c9b952bdf734cacd" +checksum = "fdd4240fc91d3433d5e5b0fc5b67672d771850dc19bbee03c1381e19322803d7" dependencies = [ "log", "presser", "thiserror 1.0.69", - "windows 0.58.0", + "winapi", + "windows 0.52.0", ] [[package]] @@ -2282,9 +2808,9 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b89c83349105e3732062a895becfc71a8f921bb71ecbbdd8ff99263e3b53a0ca" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.4", "gpu-descriptor-types", - "hashbrown", + "hashbrown 0.15.5", ] [[package]] @@ -2293,9 +2819,15 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.4", ] +[[package]] +name = "grid" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12101ecc8225ea6d675bc70263074eab6169079621c2186fe0c66590b2df9681" + [[package]] name = "gstreamer" version = "0.23.7" @@ -2318,7 +2850,7 @@ dependencies = [ "paste", "pin-project-lite", "smallvec", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] @@ -2349,6 +2881,36 @@ dependencies = [ "system-deps 7.0.5", ] +[[package]] +name = "gstreamer-audio" +version = "0.23.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e7ec7e0374298897e669db7c79544bc44df12011985e7dd5f38644edaf2caf4" +dependencies = [ + "cfg-if", + "glib", + "gstreamer", + "gstreamer-audio-sys", + "gstreamer-base", + "libc", + "once_cell", + "smallvec", +] + +[[package]] +name = "gstreamer-audio-sys" +version = "0.23.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b5f3e09e7c04ec91d78c2a6ca78d50b574b9ed49fdf5e72f3693adca4306a87" +dependencies = [ + "glib-sys", + "gobject-sys", + "gstreamer-base-sys", + "gstreamer-sys", + "libc", + "system-deps 7.0.5", +] + [[package]] name = "gstreamer-base" version = "0.23.6" @@ -2376,6 +2938,36 @@ dependencies = [ "system-deps 7.0.5", ] +[[package]] +name = "gstreamer-pbutils" +version = "0.23.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acf4bf5857fa22f910634e86a5bce33b5581a9e90caa4e32fd4a20bdd4c83ed0" +dependencies = [ + "glib", + "gstreamer", + "gstreamer-audio", + "gstreamer-pbutils-sys", + "gstreamer-video", + "libc", + "thiserror 2.0.17", +] + +[[package]] +name = "gstreamer-pbutils-sys" +version = "0.23.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "304101f5fccbbe41e0169536777ddb7680c2c837e18575c22b30fc20cedfb76f" +dependencies = [ + "glib-sys", + "gobject-sys", + "gstreamer-audio-sys", + "gstreamer-sys", + "gstreamer-video-sys", + "libc", + "system-deps 7.0.5", +] + [[package]] name = "gstreamer-sys" version = "0.23.6" @@ -2388,6 +2980,37 @@ dependencies = [ "system-deps 7.0.5", ] +[[package]] +name = "gstreamer-video" +version = "0.23.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1318b599d77ca4f7702ecbdeac1672d6304cb16b7e5752fabb3ee8260449a666" +dependencies = [ + "cfg-if", + "futures-channel", + "glib", + "gstreamer", + "gstreamer-base", + "gstreamer-video-sys", + "libc", + "once_cell", + "thiserror 2.0.17", +] + +[[package]] +name = "gstreamer-video-sys" +version = "0.23.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a70f0947f12d253b9de9bc3fd92f981e4d025336c18389c7f08cdf388a99f5c" +dependencies = [ + "glib-sys", + "gobject-sys", + "gstreamer-base-sys", + "gstreamer-sys", + "libc", + "system-deps 7.0.5", +] + [[package]] name = "guillotiere" version = "0.6.2" @@ -2400,15 +3023,34 @@ dependencies = [ [[package]] name = "half" -version = "2.6.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "459196ed295495a68f7d7fe1d84f6c4b7ff0e21fe3017b2f283c6fac3ad803c9" +checksum = "e54c115d4f30f52c67202f079c5f9d8b49db4691f460fdb0b4c2e838261b2ba5" dependencies = [ "cfg-if", "crunchy", - "num-traits", + "zerocopy", ] +[[package]] +name = "harfrust" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3fd23d35c2d8bcf34a1f0e9ea8c0ad263f0c8a9a47108eee23aac76e71645a" +dependencies = [ + "bitflags 2.9.4", + "bytemuck", + "core_maths", + "read-fonts", + "smallvec", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + [[package]] name = "hashbrown" version = "0.15.5" @@ -2420,13 +3062,34 @@ dependencies = [ "foldhash", ] +[[package]] +name = "hashbrown" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" + [[package]] name = "hashlink" version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1" dependencies = [ - "hashbrown", + "hashbrown 0.15.5", +] + +[[package]] +name = "hassle-rs" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af2a7e73e1f34c48da31fb668a907f250794837e08faa144fd24f0b8b741e890" +dependencies = [ + "bitflags 2.9.4", + "com", + "libc", + "libloading", + "thiserror 1.0.69", + "widestring", + "winapi", ] [[package]] @@ -2493,16 +3156,86 @@ dependencies = [ ] [[package]] -name = "hound" -version = "3.5.1" +name = "html-escape" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62adaabb884c94955b19907d60019f4e145d091c75345379e70d1ee696f7854f" +checksum = "6d1ad449764d627e22bfd7cd5e8868264fc9236e07c752972b4080cd351cb476" +dependencies = [ + "utf8-width", +] + +[[package]] +name = "i18n-config" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e06b90c8a0d252e203c94344b21e35a30f3a3a85dc7db5af8f8df9f3e0c63ef" +dependencies = [ + "basic-toml", + "log", + "serde", + "serde_derive", + "thiserror 1.0.69", + "unic-langid", +] + +[[package]] +name = "i18n-embed" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a217bbb075dcaefb292efa78897fc0678245ca67f265d12c351e42268fcb0305" +dependencies = [ + "arc-swap", + "fluent", + "fluent-langneg", + "fluent-syntax", + "i18n-embed-impl", + "intl-memoizer", + "log", + "parking_lot 0.12.5", + "rust-embed", + "sys-locale", + "thiserror 1.0.69", + "unic-langid", + "walkdir", +] + +[[package]] +name = "i18n-embed-fl" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e598ed73b67db92f61e04672e599eef2991a262a40e1666735b8a86d2e7e9f30" +dependencies = [ + "find-crate", + "fluent", + "fluent-syntax", + "i18n-config", + "i18n-embed", + "proc-macro-error2", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.106", + "unic-langid", +] + +[[package]] +name = "i18n-embed-impl" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f2cc0e0523d1fe6fc2c6f66e5038624ea8091b3e7748b5e8e0c84b1698db6c2" +dependencies = [ + "find-crate", + "i18n-config", + "proc-macro2", + "quote", + "syn 2.0.106", +] [[package]] name = "iana-time-zone" -version = "0.1.63" +version = "0.1.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" +checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -2510,7 +3243,7 @@ dependencies = [ "js-sys", "log", "wasm-bindgen", - "windows-core 0.61.2", + "windows-core 0.62.2", ] [[package]] @@ -2525,81 +3258,59 @@ dependencies = [ [[package]] name = "iced" version = "0.14.0-dev" -source = "git+https://github.com/iced-rs/iced?branch=master#f9a6a3051d0a5e1c9f47ebe4071daf5621f8d9c1" +source = "git+https://github.com/pop-os/libcosmic#483fb2cdd103e44d3d6cfc7522455f683789b87e" dependencies = [ + "dnd", + "iced_accessibility", "iced_core", - "iced_debug", - "iced_devtools", "iced_futures", "iced_renderer", - "iced_runtime", "iced_widget", "iced_winit", "image", + "mime 0.1.0", "thiserror 1.0.69", + "window_clipboard", ] [[package]] -name = "iced_beacon" -version = "0.14.0-dev" -source = "git+https://github.com/iced-rs/iced?branch=master#f9a6a3051d0a5e1c9f47ebe4071daf5621f8d9c1" +name = "iced_accessibility" +version = "0.1.0" +source = "git+https://github.com/pop-os/libcosmic#483fb2cdd103e44d3d6cfc7522455f683789b87e" dependencies = [ - "bincode 1.3.3", - "futures", - "iced_core", - "log", - "semver", - "serde", - "thiserror 1.0.69", - "tokio", + "accesskit", + "accesskit_winit", ] [[package]] name = "iced_core" version = "0.14.0-dev" -source = "git+https://github.com/iced-rs/iced?branch=master#f9a6a3051d0a5e1c9f47ebe4071daf5621f8d9c1" +source = "git+https://github.com/pop-os/libcosmic#483fb2cdd103e44d3d6cfc7522455f683789b87e" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.4", "bytes", - "dark-light", + "cosmic-client-toolkit", + "dnd", "glam", - "lilt", + "iced_accessibility", "log", + "mime 0.1.0", "num-traits", + "once_cell", + "palette", + "raw-window-handle", "rustc-hash 2.1.1", "serde", "smol_str", "thiserror 1.0.69", "web-time", -] - -[[package]] -name = "iced_debug" -version = "0.14.0-dev" -source = "git+https://github.com/iced-rs/iced?branch=master#f9a6a3051d0a5e1c9f47ebe4071daf5621f8d9c1" -dependencies = [ - "cargo-hot-protocol", - "iced_beacon", - "iced_core", - "iced_futures", - "log", -] - -[[package]] -name = "iced_devtools" -version = "0.14.0-dev" -source = "git+https://github.com/iced-rs/iced?branch=master#f9a6a3051d0a5e1c9f47ebe4071daf5621f8d9c1" -dependencies = [ - "iced_debug", - "iced_program", - "iced_widget", - "log", + "window_clipboard", ] [[package]] name = "iced_futures" version = "0.14.0-dev" -source = "git+https://github.com/iced-rs/iced?branch=master#f9a6a3051d0a5e1c9f47ebe4071daf5621f8d9c1" +source = "git+https://github.com/pop-os/libcosmic#483fb2cdd103e44d3d6cfc7522455f683789b87e" dependencies = [ "futures", "iced_core", @@ -2607,15 +3318,27 @@ dependencies = [ "rustc-hash 2.1.1", "tokio", "wasm-bindgen-futures", - "wasmtimer", + "wasm-timer", +] + +[[package]] +name = "iced_glyphon" +version = "0.6.0" +source = "git+https://github.com/pop-os/glyphon.git?tag=iced-0.14-dev#6ef9d12a20cfd0f7bdf38136a26ded9f7459ec8b" +dependencies = [ + "cosmic-text", + "etagere", + "lru", + "rustc-hash 2.1.1", + "wgpu", ] [[package]] name = "iced_graphics" version = "0.14.0-dev" -source = "git+https://github.com/iced-rs/iced?branch=master#f9a6a3051d0a5e1c9f47ebe4071daf5621f8d9c1" +source = "git+https://github.com/pop-os/libcosmic#483fb2cdd103e44d3d6cfc7522455f683789b87e" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.4", "bytemuck", "cosmic-text", "half", @@ -2625,25 +3348,17 @@ dependencies = [ "kamadak-exif", "log", "lyon_path", - "raw-window-handle 0.6.2", + "once_cell", + "raw-window-handle", "rustc-hash 2.1.1", "thiserror 1.0.69", "unicode-segmentation", ] -[[package]] -name = "iced_program" -version = "0.14.0-dev" -source = "git+https://github.com/iced-rs/iced?branch=master#f9a6a3051d0a5e1c9f47ebe4071daf5621f8d9c1" -dependencies = [ - "iced_graphics", - "iced_runtime", -] - [[package]] name = "iced_renderer" version = "0.14.0-dev" -source = "git+https://github.com/iced-rs/iced?branch=master#f9a6a3051d0a5e1c9f47ebe4071daf5621f8d9c1" +source = "git+https://github.com/pop-os/libcosmic#483fb2cdd103e44d3d6cfc7522455f683789b87e" dependencies = [ "iced_graphics", "iced_tiny_skia", @@ -2655,28 +3370,30 @@ dependencies = [ [[package]] name = "iced_runtime" version = "0.14.0-dev" -source = "git+https://github.com/iced-rs/iced?branch=master#f9a6a3051d0a5e1c9f47ebe4071daf5621f8d9c1" +source = "git+https://github.com/pop-os/libcosmic#483fb2cdd103e44d3d6cfc7522455f683789b87e" dependencies = [ "bytes", + "cosmic-client-toolkit", + "dnd", + "iced_accessibility", "iced_core", - "iced_debug", "iced_futures", - "raw-window-handle 0.6.2", + "raw-window-handle", "thiserror 1.0.69", + "window_clipboard", ] [[package]] name = "iced_tiny_skia" version = "0.14.0-dev" -source = "git+https://github.com/iced-rs/iced?branch=master#f9a6a3051d0a5e1c9f47ebe4071daf5621f8d9c1" +source = "git+https://github.com/pop-os/libcosmic#483fb2cdd103e44d3d6cfc7522455f683789b87e" dependencies = [ "bytemuck", "cosmic-text", - "iced_debug", "iced_graphics", "kurbo 0.10.4", "log", - "resvg", + "resvg 0.42.0", "rustc-hash 2.1.1", "softbuffer", "tiny-skia", @@ -2685,14 +3402,15 @@ dependencies = [ [[package]] name = "iced_video_player" version = "0.6.0" -source = "git+https://git.tfcconnection.org/chris/iced_video_player?branch=master#3e99427f5e430a81ac57dd448463eb59e3740276" +source = "git+https://github.com/jackpot51/iced_video_player.git?branch=cosmic#ff37a34f99814597db0e265e172dd5a85a03394a" dependencies = [ "glib", "gstreamer", "gstreamer-app", "gstreamer-base", - "iced", - "iced_wgpu", + "gstreamer-pbutils", + "html-escape", + "libcosmic", "log", "thiserror 1.0.69", "url", @@ -2701,54 +3419,82 @@ dependencies = [ [[package]] name = "iced_wgpu" version = "0.14.0-dev" -source = "git+https://github.com/iced-rs/iced?branch=master#f9a6a3051d0a5e1c9f47ebe4071daf5621f8d9c1" +source = "git+https://github.com/pop-os/libcosmic#483fb2cdd103e44d3d6cfc7522455f683789b87e" dependencies = [ - "bitflags 2.9.2", + "as-raw-xcb-connection", + "bitflags 2.9.4", "bytemuck", - "cryoglyph", + "cosmic-client-toolkit", "futures", "glam", "guillotiere", - "iced_debug", + "iced_glyphon", "iced_graphics", "log", "lyon", - "resvg", + "once_cell", + "raw-window-handle", + "resvg 0.42.0", "rustc-hash 2.1.1", + "rustix 0.38.44", "thiserror 1.0.69", + "tiny-xlib", + "wayland-backend", + "wayland-client", + "wayland-protocols", + "wayland-sys", "wgpu", + "x11rb", ] [[package]] name = "iced_widget" version = "0.14.0-dev" -source = "git+https://github.com/iced-rs/iced?branch=master#f9a6a3051d0a5e1c9f47ebe4071daf5621f8d9c1" +source = "git+https://github.com/pop-os/libcosmic#483fb2cdd103e44d3d6cfc7522455f683789b87e" dependencies = [ + "cosmic-client-toolkit", + "dnd", + "iced_accessibility", "iced_renderer", "iced_runtime", "log", "num-traits", + "once_cell", "ouroboros", "rustc-hash 2.1.1", "thiserror 1.0.69", "unicode-segmentation", + "window_clipboard", ] [[package]] name = "iced_winit" version = "0.14.0-dev" -source = "git+https://github.com/iced-rs/iced?branch=master#f9a6a3051d0a5e1c9f47ebe4071daf5621f8d9c1" +source = "git+https://github.com/pop-os/libcosmic#483fb2cdd103e44d3d6cfc7522455f683789b87e" dependencies = [ - "iced_debug", - "iced_program", + "cosmic-client-toolkit", + "dnd", + "iced_accessibility", + "iced_futures", + "iced_graphics", + "iced_runtime", "log", + "raw-window-handle", "rustc-hash 2.1.1", + "rustix 0.38.44", "thiserror 1.0.69", "tracing", "wasm-bindgen-futures", + "wayland-backend", + "wayland-client", + "wayland-protocols", "web-sys", + "winapi", "window_clipboard", "winit", + "xkbcommon 0.7.0", + "xkbcommon-dl", + "xkeysym", ] [[package]] @@ -2845,9 +3591,9 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "idna" -version = "1.0.3" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" dependencies = [ "idna_adapter", "smallvec", @@ -2866,9 +3612,9 @@ dependencies = [ [[package]] name = "image" -version = "0.25.6" +version = "0.25.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db35664ce6b9810857a38a906215e75a9c879f0696556a39f59c62829710251a" +checksum = "529feb3e6769d234375c4cf1ee2ce713682b8e76538cb13f9fc23e1400a591e7" dependencies = [ "bytemuck", "byteorder-lite", @@ -2876,8 +3622,9 @@ dependencies = [ "exr", "gif", "image-webp", + "moxcms", "num-traits", - "png", + "png 0.18.0", "qoi", "ravif", "rayon", @@ -2889,9 +3636,9 @@ dependencies = [ [[package]] name = "image-webp" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6970fe7a5300b4b42e62c52efa0187540a5bef546c60edaf554ef595d2e6f0b" +checksum = "525e9ff3e1a4be2fbea1fdf0e98686a6d98b4d8f937e1bf7402245af1909e8c3" dependencies = [ "byteorder-lite", "quick-error", @@ -2904,19 +3651,47 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "029d73f573d8e8d63e6d5020011d3255b28c3ba85d6cf870a07184ed23de9284" [[package]] -name = "imgref" -version = "1.11.0" +name = "imagesize" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0263a3d970d5c054ed9312c0057b4f3bde9c0b33836d3637361d4a9e6e7a408" +checksum = "edcd27d72f2f071c64249075f42e205ff93c9a4c5f6c6da53e79ed9f9832c285" + +[[package]] +name = "imgref" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7c5cedc30da3a610cac6b4ba17597bdf7152cf974e8aab3afb3d54455e371c8" + +[[package]] +name = "immutable-chunkmap" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3e98b1520e49e252237edc238a39869da9f3241f2ec19dc788c1d24694d1e4" +dependencies = [ + "arrayvec", +] [[package]] name = "indexmap" -version = "2.10.0" +version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + +[[package]] +name = "indexmap" +version = "2.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5" dependencies = [ "equivalent", - "hashbrown", + "hashbrown 0.16.0", + "serde", + "serde_core", ] [[package]] @@ -2928,6 +3703,26 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "inotify" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f37dccff2791ab604f9babef0ba14fbe0be30bd368dc541e2b08d07c8aa908f3" +dependencies = [ + "bitflags 2.9.4", + "inotify-sys", + "libc", +] + +[[package]] +name = "inotify-sys" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb" +dependencies = [ + "libc", +] + [[package]] name = "instant" version = "0.1.13" @@ -2948,6 +3743,25 @@ dependencies = [ "syn 2.0.106", ] +[[package]] +name = "intl-memoizer" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "310da2e345f5eb861e7a07ee182262e94975051db9e4223e909ba90f392f163f" +dependencies = [ + "type-map", + "unic-langid", +] + +[[package]] +name = "intl_pluralrules" +version = "7.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "078ea7b7c29a2b4df841a7f6ac8775ff6074020c6776d48491ce2268e068f972" +dependencies = [ + "unic-langid", +] + [[package]] name = "io-lifetimes" version = "1.0.11" @@ -2961,11 +3775,11 @@ dependencies = [ [[package]] name = "io-uring" -version = "0.7.9" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d93587f37623a1a17d94ef2bc9ada592f5465fe7732084ab7beefabe5c77c0c4" +checksum = "046fa2d4d00aea763528b4950358d0ead425372445dc8ff86312b3c69ff7727b" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.4", "cfg-if", "libc", ] @@ -3039,9 +3853,9 @@ checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" [[package]] name = "jobserver" -version = "0.1.33" +version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a" +checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" dependencies = [ "getrandom 0.3.3", "libc", @@ -3055,9 +3869,9 @@ checksum = "00810f1d8b74be64b13dbf3db89ac67740615d6c891f0e7b6179326533011a07" [[package]] name = "js-sys" -version = "0.3.77" +version = "0.3.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" +checksum = "ec48937a97411dcb524a265206ccd4c90bb711fca92b2792c407f268825b9305" dependencies = [ "once_cell", "wasm-bindgen", @@ -3089,6 +3903,35 @@ version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" +[[package]] +name = "known-folders" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d463f34ca3c400fde3a054da0e0b8c6ffa21e4590922f3e18281bb5eeef4cbdc" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "kqueue" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eac30106d7dce88daf4a3fcb4879ea939476d5074a9b7ddd0fb97fa4bed5596a" +dependencies = [ + "kqueue-sys", + "libc", +] + +[[package]] +name = "kqueue-sys" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed9625ffda8729b85e45cf04090035ac368927b8cebc34898e7c120f52e4838b" +dependencies = [ + "bitflags 1.3.2", + "libc", +] + [[package]] name = "kurbo" version = "0.10.4" @@ -3110,15 +3953,6 @@ dependencies = [ "smallvec", ] -[[package]] -name = "kv-log-macro" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f" -dependencies = [ - "log", -] - [[package]] name = "lazy_static" version = "1.5.0" @@ -3130,47 +3964,66 @@ dependencies = [ [[package]] name = "lebe" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" - -[[package]] -name = "lewton" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "777b48df9aaab155475a83a7df3070395ea1ac6902f5cd062b8f2b028075c030" -dependencies = [ - "byteorder", - "ogg", - "tinyvec", -] - -[[package]] -name = "lexpr" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a84de6a9df442363b08f5dbf0cd5b92edc70097b89c4ce4bfea4679fe48bc67" -dependencies = [ - "itoa", - "lexpr-macros", - "ryu", -] - -[[package]] -name = "lexpr-macros" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36b5cb8bb985c81a8ac1a0f8b5c4865214f574ddd64397ef7a99c236e21f35bb" -dependencies = [ - "proc-macro2", - "quote", -] +checksum = "7a79a3332a6609480d7d0c9eab957bca6b455b91bb84e66d19f5ff66294b85b8" [[package]] name = "libc" -version = "0.2.175" +version = "0.2.177" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543" +checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" + +[[package]] +name = "libcosmic" +version = "0.1.0" +source = "git+https://github.com/pop-os/libcosmic#483fb2cdd103e44d3d6cfc7522455f683789b87e" +dependencies = [ + "apply", + "ashpd 0.12.0", + "auto_enums", + "chrono", + "cosmic-client-toolkit", + "cosmic-config", + "cosmic-freedesktop-icons", + "cosmic-settings-config", + "cosmic-settings-daemon", + "cosmic-theme", + "css-color", + "derive_setters", + "freedesktop-desktop-entry", + "futures", + "i18n-embed", + "i18n-embed-fl", + "iced", + "iced_accessibility", + "iced_core", + "iced_futures", + "iced_renderer", + "iced_runtime", + "iced_tiny_skia", + "iced_wgpu", + "iced_widget", + "iced_winit", + "image", + "libc", + "mime 0.3.17", + "palette", + "raw-window-handle", + "rfd", + "rust-embed", + "rustix 1.1.2", + "serde", + "shlex", + "slotmap", + "taffy", + "thiserror 2.0.17", + "tokio", + "tracing", + "unicode-segmentation", + "url", + "zbus 5.11.0", +] [[package]] name = "libfuzzer-sys" @@ -3184,12 +4037,12 @@ dependencies = [ [[package]] name = "libloading" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667" +checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" dependencies = [ "cfg-if", - "windows-targets 0.53.3", + "windows-link", ] [[package]] @@ -3200,13 +4053,13 @@ checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" [[package]] name = "libredox" -version = "0.1.9" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "391290121bad3d37fbddad76d8f5d1c1c314cfc646d143d7e07a3086ddff0ce3" +checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.4", "libc", - "redox_syscall 0.5.17", + "redox_syscall 0.5.18", ] [[package]] @@ -3221,13 +4074,10 @@ dependencies = [ ] [[package]] -name = "lilt" -version = "0.8.1" +name = "linebender_resource_handle" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f67562e5eff6b20553fa9be1c503356768420994e28f67e3eafe6f41910e57ad" -dependencies = [ - "web-time", -] +checksum = "d4a5ff6bcca6c4867b1c4fd4ef63e4db7436ef363e0ad7531d1558856bae64f4" [[package]] name = "linux-raw-sys" @@ -3249,9 +4099,9 @@ checksum = "2a385b1be4e5c3e362ad2ffa73c392e53f031eaa5b7d648e64cd87f27f6063d7" [[package]] name = "linux-raw-sys" -version = "0.9.4" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" +checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" [[package]] name = "litemap" @@ -3266,23 +4116,32 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f5e54036fe321fd421e10d732f155734c4e4afd610dd556d9a82833ab3ee0bed" [[package]] -name = "lock_api" -version = "0.4.13" +name = "locale_config" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" +checksum = "08d2c35b16f4483f6c26f0e4e9550717a2f6575bcd6f12a53ff0c490a94a6934" +dependencies = [ + "lazy_static", + "objc", + "objc-foundation", + "regex", + "winapi", +] + +[[package]] +name = "lock_api" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" dependencies = [ - "autocfg", "scopeguard", ] [[package]] name = "log" -version = "0.4.27" +version = "0.4.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" -dependencies = [ - "value-bag", -] +checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" [[package]] name = "loop9" @@ -3295,9 +4154,9 @@ dependencies = [ [[package]] name = "lru" -version = "0.16.0" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86ea4e65087ff52f3862caff188d489f1fab49a0cb09e01b2e3f1a617b10aaed" +checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" [[package]] name = "lumina" @@ -3306,37 +4165,40 @@ dependencies = [ "clap", "colors-transform", "crisp", - "derive_setters", - "dirs", - "freedesktop-icons", + "dirs 6.0.0", + "fastrand 2.3.0", "gstreamer", "gstreamer-app", - "iced", "iced_video_player", - "lexpr", + "image", + "libcosmic", "miette", + "mupdf", "pretty_assertions", + "rapidfuzz", + "rapidhash", "rayon", - "rfd", + "resvg 0.45.1", "rodio", - "ron", + "ron 0.8.1", "serde", - "serde-lexpr", "sqlx", "strum", "strum_macros", + "tar", "tokio", "tracing", "tracing-log", "tracing-subscriber", "url", + "zstd", ] [[package]] name = "lyon" -version = "1.0.1" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e7f9cda98b5430809e63ca5197b06c7d191bf7e26dfc467d5a3f0290e2a74f" +checksum = "dbcb7d54d54c8937364c9d41902d066656817dce1e03a44e5533afebd1ef4352" dependencies = [ "lyon_algorithms", "lyon_tessellation", @@ -3344,9 +4206,9 @@ dependencies = [ [[package]] name = "lyon_algorithms" -version = "1.0.5" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f13c9be19d257c7d37e70608ed858e8eab4b2afcea2e3c9a622e892acbf43c08" +checksum = "f4c0829e28c4f336396f250d850c3987e16ce6db057ffe047ce0dd54aab6b647" dependencies = [ "lyon_path", "num-traits", @@ -3354,9 +4216,9 @@ dependencies = [ [[package]] name = "lyon_geom" -version = "1.0.6" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8af69edc087272df438b3ee436c4bb6d7c04aa8af665cfd398feae627dbd8570" +checksum = "4e16770d760c7848b0c1c2d209101e408207a65168109509f8483837a36cf2e7" dependencies = [ "arrayvec", "euclid", @@ -3365,9 +4227,9 @@ dependencies = [ [[package]] name = "lyon_path" -version = "1.0.7" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0047f508cd7a85ad6bad9518f68cce7b1bf6b943fb71f6da0ee3bc1e8cb75f25" +checksum = "1aeca86bcfd632a15984ba029b539ffb811e0a70bf55e814ef8b0f54f506fdeb" dependencies = [ "lyon_geom", "num-traits", @@ -3375,9 +4237,9 @@ dependencies = [ [[package]] name = "lyon_tessellation" -version = "1.0.15" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "579d42360a4b09846eff2feef28f538696c7d6c7439bfa65874ff3cbe0951b2c" +checksum = "f3f586142e1280335b1bc89539f7c97dd80f08fc43e9ab1b74ef0a42b04aa353" dependencies = [ "float_next_after", "lyon_path", @@ -3404,11 +4266,11 @@ dependencies = [ [[package]] name = "matchers" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" dependencies = [ - "regex-automata 0.1.10", + "regex-automata", ] [[package]] @@ -3433,24 +4295,24 @@ dependencies = [ [[package]] name = "memchr" -version = "2.7.5" +version = "2.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" +checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" [[package]] -name = "memfd" -version = "0.6.4" +name = "memmap2" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2cffa4ad52c6f791f4f8b15f0c05f9824b2ced1160e88cc393d64fff9a8ac64" +checksum = "43a5a03cefb0d953ec0be133036f14e109412fa594edc2f77227249db66cc3ed" dependencies = [ - "rustix 0.38.44", + "libc", ] [[package]] name = "memmap2" -version = "0.9.7" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "483758ad303d734cec05e5c12b41d7e93e6a6390c5e9dae6bdeb7c1259012d28" +checksum = "843a98750cd611cc2965a8213b53b43e715f13c37a9e096c6408e69990961db7" dependencies = [ "libc", ] @@ -3475,13 +4337,13 @@ dependencies = [ [[package]] name = "metal" -version = "0.32.0" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00c15a6f673ff72ddcc22394663290f870fb224c1bfce55734a75c414150e605" +checksum = "7ecfd3296f8c56b7c1f6fbac3c71cefa9d78ce009850c45000015f206dc7fa21" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.4", "block", - "core-graphics-types 0.2.0", + "core-graphics-types", "foreign-types", "log", "objc", @@ -3518,6 +4380,20 @@ dependencies = [ "syn 2.0.106", ] +[[package]] +name = "mime" +version = "0.1.0" +source = "git+https://github.com/pop-os/window_clipboard.git?tag=pop-0.13-2#6b9faab87bea9cebec6ae036906fd67fed254f5f" +dependencies = [ + "smithay-clipboard", +] + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + [[package]] name = "minimal-lexical" version = "0.2.1" @@ -3541,16 +4417,52 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" dependencies = [ "libc", + "log", "wasi 0.11.1+wasi-snapshot-preview1", "windows-sys 0.59.0", ] +[[package]] +name = "moxcms" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c588e11a3082784af229e23e8e4ecf5bcc6fbe4f69101e0421ce8d79da7f0b40" +dependencies = [ + "num-traits", + "pxfm", +] + [[package]] name = "muldiv" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "956787520e75e9bd233246045d19f42fb73242759cc57fba9611d940ae96d4b0" +[[package]] +name = "mupdf" +version = "0.5.0" +source = "git+https://github.com/messense/mupdf-rs?rev=2425c1405b326165b06834dcc1ca859015f92787#2425c1405b326165b06834dcc1ca859015f92787" +dependencies = [ + "bitflags 2.9.4", + "font-kit", + "mupdf-sys", + "num_enum", + "once_cell", + "zerocopy", +] + +[[package]] +name = "mupdf-sys" +version = "0.5.0" +source = "git+https://github.com/messense/mupdf-rs?rev=2425c1405b326165b06834dcc1ca859015f92787#2425c1405b326165b06834dcc1ca859015f92787" +dependencies = [ + "bindgen", + "cc", + "pkg-config", + "regex", + "zerocopy", +] + [[package]] name = "mutate_once" version = "0.1.2" @@ -3559,42 +4471,23 @@ checksum = "13d2233c9842d08cfe13f9eac96e207ca6a2ea10b80259ebe8ad0268be27d2af" [[package]] name = "naga" -version = "26.0.0" +version = "22.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "916cbc7cb27db60be930a4e2da243cf4bc39569195f22fd8ee419cd31d5b662c" +checksum = "8bd5a652b6faf21496f2cfd88fc49989c8db0825d1f6746b1a71a6ede24a63ad" dependencies = [ "arrayvec", "bit-set", - "bitflags 2.9.2", - "cfg-if", - "cfg_aliases 0.2.1", + "bitflags 2.9.4", + "cfg_aliases 0.1.1", "codespan-reporting", - "half", - "hashbrown", "hexf-parse", - "indexmap", - "libm", + "indexmap 2.11.4", "log", - "num-traits", - "once_cell", "rustc-hash 1.1.0", "spirv", - "thiserror 2.0.16", - "unicode-ident", -] - -[[package]] -name = "ndk" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2076a31b7010b17a38c01907c45b945e8f11495ee4dd588309718901b1f7a5b7" -dependencies = [ - "bitflags 2.9.2", - "jni-sys", - "log", - "ndk-sys 0.5.0+25.2.9519653", - "num_enum", + "termcolor", "thiserror 1.0.69", + "unicode-xid", ] [[package]] @@ -3603,12 +4496,12 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.4", "jni-sys", "log", "ndk-sys 0.6.0+11769913", "num_enum", - "raw-window-handle 0.6.2", + "raw-window-handle", "thiserror 1.0.69", ] @@ -3669,7 +4562,7 @@ version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab2156c4fce2f8df6c499cc1c763e4394b7482525bf2a9701c9d79d215f519e4" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.4", "cfg-if", "cfg_aliases 0.1.1", "libc", @@ -3681,7 +4574,7 @@ version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.4", "cfg-if", "cfg_aliases 0.2.1", "libc", @@ -3705,13 +4598,36 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0676bb32a98c1a483ce53e500a81ad9c3d5b3f7c920c28c24e9cb0980d0b5bc8" [[package]] -name = "nu-ansi-term" -version = "0.46.0" +name = "notify" +version = "8.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +checksum = "4d3d07927151ff8575b7087f245456e549fea62edf0ec4e565a5ee50c8402bc3" dependencies = [ - "overload", - "winapi", + "bitflags 2.9.4", + "fsevent-sys", + "inotify", + "kqueue", + "libc", + "log", + "mio", + "notify-types", + "walkdir", + "windows-sys 0.60.2", +] + +[[package]] +name = "notify-types" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e0826a989adedc2a244799e823aece04662b66609d96af8dff7ac6df9a8925d" + +[[package]] +name = "nu-ansi-term" +version = "0.50.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" +dependencies = [ + "windows-sys 0.61.2", ] [[package]] @@ -3736,7 +4652,7 @@ dependencies = [ "num-integer", "num-iter", "num-traits", - "rand", + "rand 0.8.5", "smallvec", "zeroize", ] @@ -3825,7 +4741,7 @@ version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77e878c846a8abae00dd069496dbe8751b16ac1c3d6bd2a7283a938e8228f90d" dependencies = [ - "proc-macro-crate 3.3.0", + "proc-macro-crate 3.4.0", "proc-macro2", "quote", "syn 2.0.106", @@ -3876,33 +4792,69 @@ dependencies = [ "objc2-encode", ] +[[package]] +name = "objc2" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7c2599ce0ec54857b29ce62166b0ed9b4f6f1a70ccc9a71165b6154caca8c05" +dependencies = [ + "objc2-encode", +] + [[package]] name = "objc2-app-kit" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" dependencies = [ - "bitflags 2.9.2", - "block2", + "bitflags 2.9.4", + "block2 0.5.1", "libc", - "objc2", + "objc2 0.5.2", "objc2-core-data", "objc2-core-image", - "objc2-foundation", + "objc2-foundation 0.2.2", "objc2-quartz-core", ] +[[package]] +name = "objc2-app-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" +dependencies = [ + "bitflags 2.9.4", + "block2 0.6.2", + "objc2 0.6.3", + "objc2-foundation 0.3.2", +] + +[[package]] +name = "objc2-audio-toolbox" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6948501a91121d6399b79abaa33a8aa4ea7857fe019f341b8c23ad6e81b79b08" +dependencies = [ + "bitflags 2.9.4", + "libc", + "objc2 0.6.3", + "objc2-core-audio", + "objc2-core-audio-types", + "objc2-core-foundation", + "objc2-foundation 0.3.2", +] + [[package]] name = "objc2-cloud-kit" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009" dependencies = [ - "bitflags 2.9.2", - "block2", - "objc2", + "bitflags 2.9.4", + "block2 0.5.1", + "objc2 0.5.2", "objc2-core-location", - "objc2-foundation", + "objc2-foundation 0.2.2", ] [[package]] @@ -3911,9 +4863,31 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a5ff520e9c33812fd374d8deecef01d4a840e7b41862d849513de77e44aa4889" dependencies = [ - "block2", - "objc2", - "objc2-foundation", + "block2 0.5.1", + "objc2 0.5.2", + "objc2-foundation 0.2.2", +] + +[[package]] +name = "objc2-core-audio" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1eebcea8b0dbff5f7c8504f3107c68fc061a3eb44932051c8cf8a68d969c3b2" +dependencies = [ + "dispatch2", + "objc2 0.6.3", + "objc2-core-audio-types", + "objc2-core-foundation", +] + +[[package]] +name = "objc2-core-audio-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a89f2ec274a0cf4a32642b2991e8b351a404d290da87bb6a9a9d8632490bd1c" +dependencies = [ + "bitflags 2.9.4", + "objc2 0.6.3", ] [[package]] @@ -3922,10 +4896,21 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" dependencies = [ - "bitflags 2.9.2", - "block2", - "objc2", - "objc2-foundation", + "bitflags 2.9.4", + "block2 0.5.1", + "objc2 0.5.2", + "objc2-foundation 0.2.2", +] + +[[package]] +name = "objc2-core-foundation" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" +dependencies = [ + "bitflags 2.9.4", + "dispatch2", + "objc2 0.6.3", ] [[package]] @@ -3934,9 +4919,9 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80" dependencies = [ - "block2", - "objc2", - "objc2-foundation", + "block2 0.5.1", + "objc2 0.5.2", + "objc2-foundation 0.2.2", "objc2-metal", ] @@ -3946,10 +4931,10 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "000cfee34e683244f284252ee206a27953279d370e309649dc3ee317b37e5781" dependencies = [ - "block2", - "objc2", + "block2 0.5.1", + "objc2 0.5.2", "objc2-contacts", - "objc2-foundation", + "objc2-foundation 0.2.2", ] [[package]] @@ -3964,11 +4949,22 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" dependencies = [ - "bitflags 2.9.2", - "block2", + "bitflags 2.9.4", + "block2 0.5.1", "dispatch", "libc", - "objc2", + "objc2 0.5.2", +] + +[[package]] +name = "objc2-foundation" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" +dependencies = [ + "bitflags 2.9.4", + "objc2 0.6.3", + "objc2-core-foundation", ] [[package]] @@ -3977,10 +4973,10 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1a1ae721c5e35be65f01a03b6d2ac13a54cb4fa70d8a5da293d7b0020261398" dependencies = [ - "block2", - "objc2", - "objc2-app-kit", - "objc2-foundation", + "block2 0.5.1", + "objc2 0.5.2", + "objc2-app-kit 0.2.2", + "objc2-foundation 0.2.2", ] [[package]] @@ -3989,10 +4985,10 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" dependencies = [ - "bitflags 2.9.2", - "block2", - "objc2", - "objc2-foundation", + "bitflags 2.9.4", + "block2 0.5.1", + "objc2 0.5.2", + "objc2-foundation 0.2.2", ] [[package]] @@ -4001,10 +4997,10 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" dependencies = [ - "bitflags 2.9.2", - "block2", - "objc2", - "objc2-foundation", + "bitflags 2.9.4", + "block2 0.5.1", + "objc2 0.5.2", + "objc2-foundation 0.2.2", "objc2-metal", ] @@ -4014,8 +5010,8 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0a684efe3dec1b305badae1a28f6555f6ddd3bb2c2267896782858d5a78404dc" dependencies = [ - "objc2", - "objc2-foundation", + "objc2 0.5.2", + "objc2-foundation 0.2.2", ] [[package]] @@ -4024,14 +5020,14 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" dependencies = [ - "bitflags 2.9.2", - "block2", - "objc2", + "bitflags 2.9.4", + "block2 0.5.1", + "objc2 0.5.2", "objc2-cloud-kit", "objc2-core-data", "objc2-core-image", "objc2-core-location", - "objc2-foundation", + "objc2-foundation 0.2.2", "objc2-link-presentation", "objc2-quartz-core", "objc2-symbols", @@ -4045,9 +5041,9 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44fa5f9748dbfe1ca6c0b79ad20725a11eca7c2218bceb4b005cb1be26273bfe" dependencies = [ - "block2", - "objc2", - "objc2-foundation", + "block2 0.5.1", + "objc2 0.5.2", + "objc2-foundation 0.2.2", ] [[package]] @@ -4056,11 +5052,11 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" dependencies = [ - "bitflags 2.9.2", - "block2", - "objc2", + "bitflags 2.9.4", + "block2 0.5.1", + "objc2 0.5.2", "objc2-core-location", - "objc2-foundation", + "objc2-foundation 0.2.2", ] [[package]] @@ -4074,45 +5070,13 @@ dependencies = [ [[package]] name = "object" -version = "0.36.7" +version = "0.37.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" +checksum = "ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe" dependencies = [ "memchr", ] -[[package]] -name = "oboe" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8b61bebd49e5d43f5f8cc7ee2891c16e0f41ec7954d36bcb6c14c5e0de867fb" -dependencies = [ - "jni", - "ndk 0.8.0", - "ndk-context", - "num-derive", - "num-traits", - "oboe-sys", -] - -[[package]] -name = "oboe-sys" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8bb09a4a2b1d668170cfe0a7d5bc103f8999fb316c98099b6a9939c9f2e79d" -dependencies = [ - "cc", -] - -[[package]] -name = "ogg" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6951b4e8bf21c8193da321bcce9c9dd2e13c858fe078bf9054a288b419ae5d6e" -dependencies = [ - "byteorder", -] - [[package]] name = "once_cell" version = "1.21.3" @@ -4149,15 +5113,6 @@ dependencies = [ "libredox", ] -[[package]] -name = "ordered-float" -version = "5.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2c1f9f56e534ac6a9b8a4600bdf0f530fb393b5f393e7b4d03489c3cf0c3f01" -dependencies = [ - "num-traits", -] - [[package]] name = "ordered-stream" version = "0.2.0" @@ -4192,12 +5147,6 @@ dependencies = [ "syn 2.0.106", ] -[[package]] -name = "overload" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" - [[package]] name = "owned_ttf_parser" version = "0.25.1" @@ -4209,9 +5158,34 @@ dependencies = [ [[package]] name = "owo-colors" -version = "4.2.2" +version = "4.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48dd4f4a2c8405440fd0462561f0e5806bd0f77e86f51c761481bdd4018b545e" +checksum = "9c6901729fa79e91a0913333229e9ca5dc725089d1c363b2f4b4760709dc4a52" + +[[package]] +name = "palette" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cbf71184cc5ecc2e4e1baccdb21026c20e5fc3dcf63028a086131b3ab00b6e6" +dependencies = [ + "approx", + "fast-srgb8", + "palette_derive", + "phf", + "serde", +] + +[[package]] +name = "palette_derive" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5030daf005bface118c096f510ffb781fc28f9ab6a32ab224d8631be6851d30" +dependencies = [ + "by_address", + "proc-macro2", + "quote", + "syn 2.0.106", +] [[package]] name = "parking" @@ -4221,25 +5195,50 @@ checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" [[package]] name = "parking_lot" -version = "0.12.4" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" +checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" +dependencies = [ + "instant", + "lock_api", + "parking_lot_core 0.8.6", +] + +[[package]] +name = "parking_lot" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" dependencies = [ "lock_api", - "parking_lot_core", + "parking_lot_core 0.9.12", ] [[package]] name = "parking_lot_core" -version = "0.9.11" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" +checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" +dependencies = [ + "cfg-if", + "instant", + "libc", + "redox_syscall 0.2.16", + "smallvec", + "winapi", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.17", + "redox_syscall 0.5.18", "smallvec", - "windows-targets 0.52.6", + "windows-link", ] [[package]] @@ -4248,6 +5247,25 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" +[[package]] +name = "pathfinder_geometry" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b7e7b4ea703700ce73ebf128e1450eb69c3a8329199ffbfb9b2a0418e5ad3" +dependencies = [ + "log", + "pathfinder_simd", +] + +[[package]] +name = "pathfinder_simd" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf9027960355bf3afff9841918474a81a5f972ac6d226d518060bba758b5ad57" +dependencies = [ + "rustc_version", +] + [[package]] name = "pem-rfc7468" version = "0.7.0" @@ -4259,9 +5277,51 @@ dependencies = [ [[package]] name = "percent-encoding" -version = "2.3.1" +version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" + +[[package]] +name = "phf" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" +dependencies = [ + "phf_macros", + "phf_shared", +] + +[[package]] +name = "phf_generator" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" +dependencies = [ + "phf_shared", + "rand 0.8.5", +] + +[[package]] +name = "phf_macros" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" +dependencies = [ + "phf_generator", + "phf_shared", + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "phf_shared" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" +dependencies = [ + "siphasher", +] [[package]] name = "pico-args" @@ -4352,6 +5412,19 @@ dependencies = [ "miniz_oxide", ] +[[package]] +name = "png" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97baced388464909d42d89643fe4361939af9b7ce7a31ee32a168f832a70f2a0" +dependencies = [ + "bitflags 2.9.4", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide", +] + [[package]] name = "polling" version = "2.8.0" @@ -4370,44 +5443,29 @@ dependencies = [ [[package]] name = "polling" -version = "3.10.0" +version = "3.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5bd19146350fe804f7cb2669c851c03d69da628803dab0d98018142aaa5d829" +checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218" dependencies = [ "cfg-if", "concurrent-queue", "hermit-abi 0.5.2", "pin-project-lite", - "rustix 1.0.8", - "windows-sys 0.60.2", + "rustix 1.1.2", + "windows-sys 0.61.2", ] [[package]] name = "pollster" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22686f4785f02a4fcc856d3b3bb19bf6c8160d103f7a99cc258bddd0251dc7f2" - -[[package]] -name = "portable-atomic" -version = "1.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" - -[[package]] -name = "portable-atomic-util" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" -dependencies = [ - "portable-atomic", -] +checksum = "2f3a9f18d041e6d0e102a0a46750538147e5e8992d3b4873aaafee2520b00ce3" [[package]] name = "potential_utf" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" +checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a" dependencies = [ "zerovec", ] @@ -4455,11 +5513,33 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "3.3.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" +checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" dependencies = [ - "toml_edit 0.22.27", + "toml_edit 0.23.7", +] + +[[package]] +name = "proc-macro-error-attr2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" +dependencies = [ + "proc-macro2", + "quote", +] + +[[package]] +name = "proc-macro-error2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" +dependencies = [ + "proc-macro-error-attr2", + "proc-macro2", + "quote", + "syn 2.0.106", ] [[package]] @@ -4503,6 +5583,15 @@ dependencies = [ "syn 2.0.106", ] +[[package]] +name = "pxfm" +version = "0.1.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3cbdf373972bf78df4d3b518d07003938e2c7d1fb5891e55f9cb6df57009d84" +dependencies = [ + "num-traits", +] + [[package]] name = "qoi" version = "0.4.1" @@ -4529,9 +5618,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.40" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" dependencies = [ "proc-macro2", ] @@ -4559,8 +5648,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", - "rand_chacha", - "rand_core", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" +dependencies = [ + "rand_chacha 0.9.0", + "rand_core 0.9.3", ] [[package]] @@ -4570,7 +5669,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", - "rand_core", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core 0.9.3", ] [[package]] @@ -4582,6 +5691,15 @@ dependencies = [ "getrandom 0.2.16", ] +[[package]] +name = "rand_core" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +dependencies = [ + "getrandom 0.3.3", +] + [[package]] name = "range-alloc" version = "0.1.4" @@ -4594,6 +5712,21 @@ version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f93e7e49bb0bf967717f7bd674458b3d6b0c5f48ec7e3038166026a69fc22223" +[[package]] +name = "rapidfuzz" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "270e04e5ea61d40841942bb15e451c29ee1618637bcf97fc7ede5dd4a9b1601b" + +[[package]] +name = "rapidhash" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "164772177ee16e3b074e6019c63cd92cb3cecf38e8c40d097675958b86dd8084" +dependencies = [ + "rustversion", +] + [[package]] name = "rav1e" version = "0.7.1" @@ -4620,8 +5753,8 @@ dependencies = [ "once_cell", "paste", "profiling", - "rand", - "rand_chacha", + "rand 0.8.5", + "rand_chacha 0.3.1", "simd_helpers", "system-deps 6.2.2", "thiserror 1.0.69", @@ -4644,12 +5777,6 @@ dependencies = [ "rgb", ] -[[package]] -name = "raw-window-handle" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" - [[package]] name = "raw-window-handle" version = "0.6.2" @@ -4678,30 +5805,31 @@ dependencies = [ [[package]] name = "read-fonts" -version = "0.29.3" +version = "0.35.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04ca636dac446b5664bd16c069c00a9621806895b8bb02c2dc68542b23b8f25d" +checksum = "6717cf23b488adf64b9d711329542ba34de147df262370221940dfabc2c91358" dependencies = [ "bytemuck", + "core_maths", "font-types", ] [[package]] name = "redox_syscall" -version = "0.4.1" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" dependencies = [ "bitflags 1.3.2", ] [[package]] name = "redox_syscall" -version = "0.5.17" +version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.4", ] [[package]] @@ -4715,49 +5843,65 @@ dependencies = [ "thiserror 1.0.69", ] +[[package]] +name = "redox_users" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" +dependencies = [ + "getrandom 0.2.16", + "libredox", + "thiserror 2.0.17", +] + +[[package]] +name = "ref-cast" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" +dependencies = [ + "ref-cast-impl", +] + +[[package]] +name = "ref-cast-impl" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + [[package]] name = "regex" -version = "1.11.1" +version = "1.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.9", - "regex-syntax 0.8.5", + "regex-automata", + "regex-syntax", ] [[package]] name = "regex-automata" -version = "0.1.10" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" -dependencies = [ - "regex-syntax 0.6.29", -] - -[[package]] -name = "regex-automata" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.5", + "regex-syntax", ] [[package]] name = "regex-syntax" -version = "0.6.29" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" - -[[package]] -name = "regex-syntax" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" +checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" [[package]] name = "renderdoc-sys" @@ -4778,32 +5922,48 @@ dependencies = [ "rgb", "svgtypes", "tiny-skia", - "usvg", + "usvg 0.42.0", +] + +[[package]] +name = "resvg" +version = "0.45.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8928798c0a55e03c9ca6c4c6846f76377427d2c1e1f7e6de3c06ae57942df43" +dependencies = [ + "gif", + "image-webp", + "log", + "pico-args", + "rgb", + "svgtypes", + "tiny-skia", + "usvg 0.45.1", + "zune-jpeg", ] [[package]] name = "rfd" -version = "0.12.1" +version = "0.15.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c9e7b57df6e8472152674607f6cc68aa14a748a3157a857a94f516e11aeacc2" +checksum = "ef2bee61e6cffa4635c72d7d81a84294e28f0930db0ddcb0f66d10244674ebed" dependencies = [ - "ashpd 0.6.8", - "async-io 1.13.0", - "block", - "dispatch", - "futures-util", + "ashpd 0.11.0", + "block2 0.6.2", + "dispatch2", "js-sys", "log", - "objc", - "objc-foundation", - "objc_id", + "objc2 0.6.3", + "objc2-app-kit 0.3.2", + "objc2-core-foundation", + "objc2-foundation 0.3.2", "pollster", - "raw-window-handle 0.5.2", + "raw-window-handle", "urlencoding", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "windows-sys 0.48.0", + "windows-sys 0.59.0", ] [[package]] @@ -4817,14 +5977,13 @@ dependencies = [ [[package]] name = "rodio" -version = "0.20.1" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7ceb6607dd738c99bc8cb28eff249b7cd5c8ec88b9db96c0608c1480d140fb1" +checksum = "e40ecf59e742e03336be6a3d53755e789fd05a059fa22dfa0ed624722319e183" dependencies = [ - "claxon", "cpal", - "hound", - "lewton", + "dasp_sample", + "num-rational", "symphonia", "tracing", ] @@ -4836,11 +5995,24 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b91f7eff05f748767f183df4320a63d6936e9c6107d97c9e6bdd9784f4289c94" dependencies = [ "base64 0.21.7", - "bitflags 2.9.2", + "bitflags 2.9.4", "serde", "serde_derive", ] +[[package]] +name = "ron" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db09040cc89e461f1a265139777a2bde7f8d8c67c4936f700c63ce3e2904d468" +dependencies = [ + "base64 0.22.1", + "bitflags 2.9.4", + "serde", + "serde_derive", + "unicode-ident", +] + [[package]] name = "roxmltree" version = "0.20.0" @@ -4860,13 +6032,47 @@ dependencies = [ "num-traits", "pkcs1", "pkcs8", - "rand_core", + "rand_core 0.6.4", "signature", "spki", "subtle", "zeroize", ] +[[package]] +name = "rust-embed" +version = "8.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "025908b8682a26ba8d12f6f2d66b987584a4a87bc024abc5bbc12553a8cd178a" +dependencies = [ + "rust-embed-impl", + "rust-embed-utils", + "walkdir", +] + +[[package]] +name = "rust-embed-impl" +version = "8.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6065f1a4392b71819ec1ea1df1120673418bf386f50de1d6f54204d836d4349c" +dependencies = [ + "proc-macro2", + "quote", + "rust-embed-utils", + "syn 2.0.106", + "walkdir", +] + +[[package]] +name = "rust-embed-utils" +version = "8.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6cc0c81648b20b70c491ff8cce00c1c3b223bb8ed2b5d41f0e54c6c4c0a3594" +dependencies = [ + "sha2", + "walkdir", +] + [[package]] name = "rustc-demangle" version = "0.1.26" @@ -4885,6 +6091,15 @@ version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver", +] + [[package]] name = "rustix" version = "0.37.28" @@ -4905,7 +6120,7 @@ version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.4", "errno", "libc", "linux-raw-sys 0.4.15", @@ -4914,15 +6129,15 @@ dependencies = [ [[package]] name = "rustix" -version = "1.0.8" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8" +checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.4", "errno", "libc", - "linux-raw-sys 0.9.4", - "windows-sys 0.60.2", + "linux-raw-sys 0.11.0", + "windows-sys 0.61.2", ] [[package]] @@ -4937,13 +6152,30 @@ version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfb9cf8877777222e4a3bc7eb247e398b56baba500c38c1c46842431adc8b55c" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.4", "bytemuck", - "libm", "smallvec", "ttf-parser 0.21.1", - "unicode-bidi-mirroring", - "unicode-ccc", + "unicode-bidi-mirroring 0.2.0", + "unicode-ccc 0.2.0", + "unicode-properties", + "unicode-script", +] + +[[package]] +name = "rustybuzz" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd3c7c96f8a08ee34eff8857b11b49b07d71d1c3f4e88f8a88d4c9e9f90b1702" +dependencies = [ + "bitflags 2.9.4", + "bytemuck", + "core_maths", + "log", + "smallvec", + "ttf-parser 0.25.1", + "unicode-bidi-mirroring 0.4.0", + "unicode-ccc 0.4.0", "unicode-properties", "unicode-script", ] @@ -4954,7 +6186,7 @@ version = "14.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7803e8936da37efd9b6d4478277f4b2b9bb5cdb37a113e8d63222e58da647e63" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.4", "cfg-if", "clipboard-win", "fd-lock", @@ -4985,6 +6217,30 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "schemars" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + +[[package]] +name = "schemars" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82d20c4491bc164fa2f6c5d44565947a52ad80b9505d8e36f8d54c27c739fcd0" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + [[package]] name = "scoped-tls" version = "1.0.1" @@ -5005,8 +6261,8 @@ checksum = "b6277f0217056f77f1d8f49f2950ac6c278c0d607c45f5ee99328d792ede24ec" dependencies = [ "ab_glyph", "log", - "memmap2", - "smithay-client-toolkit", + "memmap2 0.9.8", + "smithay-client-toolkit 0.19.2", "tiny-skia", ] @@ -5018,37 +6274,34 @@ checksum = "0f7d95a54511e0c7be3f51e8867aa8cf35148d7b9445d44de2f943e2b206e749" [[package]] name = "semver" -version = "1.0.26" +version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" -dependencies = [ - "serde", -] +checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" [[package]] name = "serde" -version = "1.0.219" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" dependencies = [ "serde_derive", ] -[[package]] -name = "serde-lexpr" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb4cda13396159f59e7946118cdac0beadeecfb7cf76b197f4147e546f4ead6f" -dependencies = [ - "lexpr", - "serde", -] - [[package]] name = "serde_derive" -version = "1.0.219" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", @@ -5057,14 +6310,16 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.143" +version = "1.0.145" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d401abef1d108fbd9cbaebc3e46611f4b1021f714a0597a71f41ee463f5f4a5a" +checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" dependencies = [ + "indexmap 2.11.4", "itoa", "memchr", "ryu", "serde", + "serde_core", ] [[package]] @@ -5099,6 +6354,37 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_with" +version = "3.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6093cd8c01b25262b84927e0f7151692158fab02d961e04c979d3903eba7ecc5" +dependencies = [ + "base64 0.22.1", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.11.4", + "schemars 0.9.0", + "schemars 1.0.4", + "serde_core", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7e6c180db0816026a61afa1cff5344fb7ebded7e4d3062772179f2501481c27" +dependencies = [ + "darling 0.21.3", + "proc-macro2", + "quote", + "syn 2.0.106", +] + [[package]] name = "sha1" version = "0.10.6" @@ -5152,7 +6438,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" dependencies = [ "digest", - "rand_core", + "rand_core 0.6.4", ] [[package]] @@ -5187,9 +6473,9 @@ checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" [[package]] name = "skrifa" -version = "0.31.3" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbeb4ca4399663735553a09dd17ce7e49a0a0203f03b706b39628c4d913a8607" +checksum = "8c31071dedf532758ecf3fed987cdb4bd9509f900e026ab684b4ecb81ea49841" dependencies = [ "bytemuck", "read-fonts", @@ -5225,13 +6511,13 @@ version = "0.19.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016" dependencies = [ - "bitflags 2.9.2", - "calloop", - "calloop-wayland-source", + "bitflags 2.9.4", + "calloop 0.13.0", + "calloop-wayland-source 0.3.0", "cursor-icon", "libc", "log", - "memmap2", + "memmap2 0.9.8", "rustix 0.38.44", "thiserror 1.0.69", "wayland-backend", @@ -5245,13 +6531,43 @@ dependencies = [ ] [[package]] -name = "smithay-clipboard" -version = "0.7.2" +name = "smithay-client-toolkit" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc8216eec463674a0e90f29e0ae41a4db573ec5b56b1c6c1c71615d249b6d846" +checksum = "0512da38f5e2b31201a93524adb8d3136276fa4fe4aafab4e1f727a82b534cc0" +dependencies = [ + "bitflags 2.9.4", + "bytemuck", + "calloop 0.14.3", + "calloop-wayland-source 0.4.1", + "cursor-icon", + "libc", + "log", + "memmap2 0.9.8", + "pkg-config", + "rustix 1.1.2", + "thiserror 2.0.17", + "wayland-backend", + "wayland-client", + "wayland-csd-frame", + "wayland-cursor", + "wayland-protocols", + "wayland-protocols-experimental", + "wayland-protocols-misc", + "wayland-protocols-wlr", + "wayland-scanner", + "xkbcommon 0.8.0", + "xkeysym", +] + +[[package]] +name = "smithay-clipboard" +version = "0.8.0" +source = "git+https://github.com/pop-os/smithay-clipboard?tag=pop-dnd-5#5a3007def49eb678d1144850c9ee04b80707c56a" dependencies = [ "libc", - "smithay-client-toolkit", + "raw-window-handle", + "smithay-client-toolkit 0.19.2", "wayland-backend", ] @@ -5276,35 +6592,33 @@ dependencies = [ [[package]] name = "socket2" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807" +checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] name = "softbuffer" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18051cdd562e792cad055119e0cdb2cfc137e44e3987532e0f9659a77931bb08" +version = "0.4.1" +source = "git+https://github.com/pop-os/softbuffer?tag=cosmic-4.0#a3f77e251e7422803f693df6e3fc313c010c4dcb" dependencies = [ "as-raw-xcb-connection", "bytemuck", "cfg_aliases 0.2.1", - "core-graphics 0.24.0", + "cocoa", + "core-graphics", "drm", "fastrand 2.3.0", "foreign-types", "js-sys", "log", - "memmap2", - "objc2", - "objc2-foundation", - "objc2-quartz-core", - "raw-window-handle 0.6.2", - "redox_syscall 0.5.17", + "memmap2 0.9.8", + "objc", + "raw-window-handle", + "redox_syscall 0.5.18", "rustix 0.38.44", "tiny-xlib", "wasm-bindgen", @@ -5312,7 +6626,7 @@ dependencies = [ "wayland-client", "wayland-sys", "web-sys", - "windows-sys 0.59.0", + "windows-sys 0.52.0", "x11rb", ] @@ -5331,7 +6645,7 @@ version = "0.3.0+sdk-1.3.268.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.4", ] [[package]] @@ -5373,9 +6687,9 @@ dependencies = [ "futures-intrusive", "futures-io", "futures-util", - "hashbrown", + "hashbrown 0.15.5", "hashlink", - "indexmap", + "indexmap 2.11.4", "log", "memchr", "once_cell", @@ -5384,7 +6698,7 @@ dependencies = [ "serde_json", "sha2", "smallvec", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tokio-stream", "tracing", @@ -5437,7 +6751,7 @@ checksum = "aa003f0038df784eb8fecbbac13affe3da23b45194bd57dba231c8f48199c526" dependencies = [ "atoi", "base64 0.22.1", - "bitflags 2.9.2", + "bitflags 2.9.4", "byteorder", "bytes", "crc", @@ -5458,7 +6772,7 @@ dependencies = [ "memchr", "once_cell", "percent-encoding", - "rand", + "rand 0.8.5", "rsa", "serde", "sha1", @@ -5466,7 +6780,7 @@ dependencies = [ "smallvec", "sqlx-core", "stringprep", - "thiserror 2.0.16", + "thiserror 2.0.17", "tracing", "whoami", ] @@ -5479,7 +6793,7 @@ checksum = "db58fcd5a53cf07c184b154801ff91347e4c30d17a3562a635ff028ad5deda46" dependencies = [ "atoi", "base64 0.22.1", - "bitflags 2.9.2", + "bitflags 2.9.4", "byteorder", "crc", "dotenvy", @@ -5496,14 +6810,14 @@ dependencies = [ "md-5", "memchr", "once_cell", - "rand", + "rand 0.8.5", "serde", "serde_json", "sha2", "smallvec", "sqlx-core", "stringprep", - "thiserror 2.0.16", + "thiserror 2.0.17", "tracing", "whoami", ] @@ -5527,16 +6841,16 @@ dependencies = [ "serde", "serde_urlencoded", "sqlx-core", - "thiserror 2.0.16", + "thiserror 2.0.17", "tracing", "url", ] [[package]] name = "stable_deref_trait" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" [[package]] name = "static_assertions" @@ -5589,34 +6903,6 @@ dependencies = [ "syn 2.0.106", ] -[[package]] -name = "subsecond" -version = "0.7.0-rc.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b14ed4d86ab065ffbfdb994fd3e44daf5244b02cb643bd52949d74b703f36605" -dependencies = [ - "js-sys", - "libc", - "libloading", - "memfd", - "memmap2", - "serde", - "subsecond-types", - "thiserror 2.0.16", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "subsecond-types" -version = "0.7.0-rc.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "275920a8a5634e47e12253971db85946798795bbe4d9dfc1debf23533d823983" -dependencies = [ - "serde", -] - [[package]] name = "subtle" version = "2.6.1" @@ -5662,9 +6948,9 @@ dependencies = [ [[package]] name = "swash" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f745de914febc7c9ab4388dfaf94bbc87e69f57bb41133a9b0c84d4be49856f3" +checksum = "47846491253e976bdd07d0f9cc24b7daf24720d11309302ccbbc6e6b6e53550a" dependencies = [ "skrifa", "yazi", @@ -5673,28 +6959,32 @@ dependencies = [ [[package]] name = "symphonia" -version = "0.5.4" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "815c942ae7ee74737bb00f965fa5b5a2ac2ce7b6c01c0cc169bbeaf7abd5f5a9" +checksum = "5773a4c030a19d9bfaa090f49746ff35c75dfddfa700df7a5939d5e076a57039" dependencies = [ "lazy_static", "symphonia-bundle-flac", "symphonia-bundle-mp3", "symphonia-codec-aac", "symphonia-codec-adpcm", + "symphonia-codec-alac", "symphonia-codec-pcm", "symphonia-codec-vorbis", "symphonia-core", + "symphonia-format-caf", "symphonia-format-isomp4", + "symphonia-format-mkv", + "symphonia-format-ogg", "symphonia-format-riff", "symphonia-metadata", ] [[package]] name = "symphonia-bundle-flac" -version = "0.5.4" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72e34f34298a7308d4397a6c7fbf5b84c5d491231ce3dd379707ba673ab3bd97" +checksum = "c91565e180aea25d9b80a910c546802526ffd0072d0b8974e3ebe59b686c9976" dependencies = [ "log", "symphonia-core", @@ -5704,9 +6994,9 @@ dependencies = [ [[package]] name = "symphonia-bundle-mp3" -version = "0.5.4" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c01c2aae70f0f1fb096b6f0ff112a930b1fb3626178fba3ae68b09dce71706d4" +checksum = "4872dd6bb56bf5eac799e3e957aa1981086c3e613b27e0ac23b176054f7c57ed" dependencies = [ "lazy_static", "log", @@ -5716,9 +7006,9 @@ dependencies = [ [[package]] name = "symphonia-codec-aac" -version = "0.5.4" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdbf25b545ad0d3ee3e891ea643ad115aff4ca92f6aec472086b957a58522f70" +checksum = "4c263845aa86881416849c1729a54c7f55164f8b96111dba59de46849e73a790" dependencies = [ "lazy_static", "log", @@ -5727,9 +7017,19 @@ dependencies = [ [[package]] name = "symphonia-codec-adpcm" -version = "0.5.4" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c94e1feac3327cd616e973d5be69ad36b3945f16b06f19c6773fc3ac0b426a0f" +checksum = "2dddc50e2bbea4cfe027441eece77c46b9f319748605ab8f3443350129ddd07f" +dependencies = [ + "log", + "symphonia-core", +] + +[[package]] +name = "symphonia-codec-alac" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8413fa754942ac16a73634c9dfd1500ed5c61430956b33728567f667fdd393ab" dependencies = [ "log", "symphonia-core", @@ -5737,9 +7037,9 @@ dependencies = [ [[package]] name = "symphonia-codec-pcm" -version = "0.5.4" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f395a67057c2ebc5e84d7bb1be71cce1a7ba99f64e0f0f0e303a03f79116f89b" +checksum = "4e89d716c01541ad3ebe7c91ce4c8d38a7cf266a3f7b2f090b108fb0cb031d95" dependencies = [ "log", "symphonia-core", @@ -5747,9 +7047,9 @@ dependencies = [ [[package]] name = "symphonia-codec-vorbis" -version = "0.5.4" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a98765fb46a0a6732b007f7e2870c2129b6f78d87db7987e6533c8f164a9f30" +checksum = "f025837c309cd69ffef572750b4a2257b59552c5399a5e49707cc5b1b85d1c73" dependencies = [ "log", "symphonia-core", @@ -5758,9 +7058,9 @@ dependencies = [ [[package]] name = "symphonia-core" -version = "0.5.4" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "798306779e3dc7d5231bd5691f5a813496dc79d3f56bf82e25789f2094e022c3" +checksum = "ea00cc4f79b7f6bb7ff87eddc065a1066f3a43fe1875979056672c9ef948c2af" dependencies = [ "arrayvec", "bitflags 1.3.2", @@ -5770,10 +7070,21 @@ dependencies = [ ] [[package]] -name = "symphonia-format-isomp4" -version = "0.5.4" +name = "symphonia-format-caf" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abfdf178d697e50ce1e5d9b982ba1b94c47218e03ec35022d9f0e071a16dc844" +checksum = "b8faf379316b6b6e6bbc274d00e7a592e0d63ff1a7e182ce8ba25e24edd3d096" +dependencies = [ + "log", + "symphonia-core", + "symphonia-metadata", +] + +[[package]] +name = "symphonia-format-isomp4" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "243739585d11f81daf8dac8d9f3d18cc7898f6c09a259675fc364b382c30e0a5" dependencies = [ "encoding_rs", "log", @@ -5783,10 +7094,35 @@ dependencies = [ ] [[package]] -name = "symphonia-format-riff" -version = "0.5.4" +name = "symphonia-format-mkv" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f7be232f962f937f4b7115cbe62c330929345434c834359425e043bfd15f50" +checksum = "122d786d2c43a49beb6f397551b4a050d8229eaa54c7ddf9ee4b98899b8742d0" +dependencies = [ + "lazy_static", + "log", + "symphonia-core", + "symphonia-metadata", + "symphonia-utils-xiph", +] + +[[package]] +name = "symphonia-format-ogg" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b4955c67c1ed3aa8ae8428d04ca8397fbef6a19b2b051e73b5da8b1435639cb" +dependencies = [ + "log", + "symphonia-core", + "symphonia-metadata", + "symphonia-utils-xiph", +] + +[[package]] +name = "symphonia-format-riff" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2d7c3df0e7d94efb68401d81906eae73c02b40d5ec1a141962c592d0f11a96f" dependencies = [ "extended", "log", @@ -5796,9 +7132,9 @@ dependencies = [ [[package]] name = "symphonia-metadata" -version = "0.5.4" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc622b9841a10089c5b18e99eb904f4341615d5aa55bbf4eedde1be721a4023c" +checksum = "36306ff42b9ffe6e5afc99d49e121e0bd62fe79b9db7b9681d48e29fa19e6b16" dependencies = [ "encoding_rs", "lazy_static", @@ -5808,9 +7144,9 @@ dependencies = [ [[package]] name = "symphonia-utils-xiph" -version = "0.5.4" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "484472580fa49991afda5f6550ece662237b00c6f562c7d9638d1b086ed010fe" +checksum = "ee27c85ab799a338446b68eec77abf42e1a6f1bb490656e121c6e27bfbab9f16" dependencies = [ "symphonia-core", "symphonia-metadata", @@ -5867,7 +7203,7 @@ dependencies = [ "cfg-expr 0.15.8", "heck 0.5.0", "pkg-config", - "toml", + "toml 0.8.23", "version-compare", ] @@ -5877,13 +7213,36 @@ version = "7.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4be53aa0cba896d2dc615bd42bbc130acdcffa239e0a2d965ea5b3b2a86ffdb" dependencies = [ - "cfg-expr 0.20.2", + "cfg-expr 0.20.3", "heck 0.5.0", "pkg-config", - "toml", + "toml 0.8.23", "version-compare", ] +[[package]] +name = "taffy" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b25026fb8cc9ab51ab9fdabe5d11706796966f6d1c78e19871ef63be2b8f0644" +dependencies = [ + "arrayvec", + "grid", + "serde", + "slotmap", +] + +[[package]] +name = "tar" +version = "0.4.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d863878d212c87a19c1a610eb53bb01fe12951c0501cf5a0d65f724914a667a" +dependencies = [ + "filetime", + "libc", + "xattr", +] + [[package]] name = "target-lexicon" version = "0.12.16" @@ -5897,16 +7256,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e502f78cdbb8ba4718f566c418c52bc729126ffd16baee5baa718cf25dd5a69a" [[package]] -name = "tempfile" -version = "3.21.0" +name = "temp-dir" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15b61f8f20e3a6f7e0649d825294eaf317edce30f82cf6026e7e4cb9222a7d1e" +checksum = "83176759e9416cf81ee66cb6508dbfe9c96f20b8b56265a39917551c23c70964" + +[[package]] +name = "tempfile" +version = "3.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" dependencies = [ "fastrand 2.3.0", "getrandom 0.3.3", "once_cell", - "rustix 1.0.8", - "windows-sys 0.60.2", + "rustix 1.1.2", + "windows-sys 0.61.2", ] [[package]] @@ -5924,7 +7289,7 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60b8cb979cb11c32ce1603f8137b22262a9d131aaa5c37b5678025f22b8becd0" dependencies = [ - "rustix 1.0.8", + "rustix 1.1.2", "windows-sys 0.60.2", ] @@ -5935,7 +7300,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c13547615a44dc9c452a8a534638acdf07120d4b6847c8178705da06306a3057" dependencies = [ "unicode-linebreak", - "unicode-width 0.2.1", + "unicode-width 0.2.2", ] [[package]] @@ -5949,11 +7314,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.16" +version = "2.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3467d614147380f2e4e374161426ff399c91084acd2363eaf549172b3d5e60c0" +checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" dependencies = [ - "thiserror-impl 2.0.16", + "thiserror-impl 2.0.17", ] [[package]] @@ -5969,9 +7334,9 @@ dependencies = [ [[package]] name = "thiserror-impl" -version = "2.0.16" +version = "2.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c5e1be1c48b9172ee610da68fd9cd2770e7a4056cb3fc98710ee6906f0c7960" +checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" dependencies = [ "proc-macro2", "quote", @@ -5989,20 +7354,23 @@ dependencies = [ [[package]] name = "tiff" -version = "0.9.1" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba1310fcea54c6a9a4fd1aad794ecc02c31682f6bfbecdf460bf19533eed1e3e" +checksum = "af9605de7fee8d9551863fd692cce7637f548dbd9db9180fcc07ccc6d26c336f" dependencies = [ + "fax", "flate2", - "jpeg-decoder", + "half", + "quick-error", "weezl", + "zune-jpeg", ] [[package]] name = "time" -version = "0.3.41" +version = "0.3.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" +checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" dependencies = [ "deranged", "itoa", @@ -6017,15 +7385,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.4" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" +checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" [[package]] name = "time-macros" -version = "0.2.22" +version = "0.2.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" +checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" dependencies = [ "num-conv", "time-core", @@ -6042,7 +7410,7 @@ dependencies = [ "bytemuck", "cfg-if", "log", - "png", + "png 0.17.16", "tiny-skia-path", ] @@ -6107,9 +7475,11 @@ dependencies = [ "libc", "mio", "pin-project-lite", + "signal-hook-registry", "slab", - "socket2 0.6.0", + "socket2 0.6.1", "tokio-macros", + "tracing", "windows-sys 0.59.0", ] @@ -6135,6 +7505,15 @@ dependencies = [ "tokio", ] +[[package]] +name = "toml" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" +dependencies = [ + "serde", +] + [[package]] name = "toml" version = "0.8.23" @@ -6143,7 +7522,7 @@ checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" dependencies = [ "serde", "serde_spanned", - "toml_datetime", + "toml_datetime 0.6.11", "toml_edit 0.22.27", ] @@ -6156,14 +7535,23 @@ dependencies = [ "serde", ] +[[package]] +name = "toml_datetime" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533" +dependencies = [ + "serde_core", +] + [[package]] name = "toml_edit" version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap", - "toml_datetime", + "indexmap 2.11.4", + "toml_datetime 0.6.11", "winnow 0.5.40", ] @@ -6173,11 +7561,32 @@ version = "0.22.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ - "indexmap", + "indexmap 2.11.4", "serde", "serde_spanned", - "toml_datetime", - "winnow 0.7.12", + "toml_datetime 0.6.11", + "winnow 0.7.13", +] + +[[package]] +name = "toml_edit" +version = "0.23.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6485ef6d0d9b5d0ec17244ff7eb05310113c3f316f2d14200d4de56b3cb98f8d" +dependencies = [ + "indexmap 2.11.4", + "toml_datetime 0.7.3", + "toml_parser", + "winnow 0.7.13", +] + +[[package]] +name = "toml_parser" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e" +dependencies = [ + "winnow 0.7.13", ] [[package]] @@ -6226,15 +7635,15 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.19" +version = "0.3.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" +checksum = "2054a14f5307d601f88daf0553e1cbf472acc4f2c51afab632431cdcd72124d5" dependencies = [ "chrono", "matchers", "nu-ansi-term", "once_cell", - "regex", + "regex-automata", "sharded-slab", "smallvec", "thread_local", @@ -6244,12 +7653,6 @@ dependencies = [ "tracing-log", ] -[[package]] -name = "ttf-parser" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17f77d76d837a7830fe1d4f12b7b4ba4192c1888001c7164257e4bc6d21d96b4" - [[package]] name = "ttf-parser" version = "0.21.1" @@ -6261,12 +7664,24 @@ name = "ttf-parser" version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2df906b07856748fa3f6e0ad0cbaa047052d4a7dd609e231c4f72cee8c36f31" +dependencies = [ + "core_maths", +] + +[[package]] +name = "type-map" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb30dbbd9036155e74adad6812e9898d03ec374946234fbcebd5dfc7b9187b90" +dependencies = [ + "rustc-hash 2.1.1", +] [[package]] name = "typenum" -version = "1.18.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" +checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" [[package]] name = "uds_windows" @@ -6279,6 +7694,31 @@ dependencies = [ "winapi", ] +[[package]] +name = "unic-langid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a28ba52c9b05311f4f6e62d5d9d46f094bd6e84cb8df7b3ef952748d752a7d05" +dependencies = [ + "unic-langid-impl", +] + +[[package]] +name = "unic-langid-impl" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dce1bf08044d4b7a94028c93786f8566047edc11110595914de93362559bc658" +dependencies = [ + "serde", + "tinystr", +] + +[[package]] +name = "unicase" +version = "2.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" + [[package]] name = "unicode-bidi" version = "0.3.18" @@ -6291,6 +7731,12 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "23cb788ffebc92c5948d0e997106233eeb1d8b9512f93f41651f52b6c5f5af86" +[[package]] +name = "unicode-bidi-mirroring" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dfa6e8c60bb66d49db113e0125ee8711b7647b5579dc7f5f19c42357ed039fe" + [[package]] name = "unicode-ccc" version = "0.2.0" @@ -6298,10 +7744,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1df77b101bcc4ea3d78dafc5ad7e4f58ceffe0b2b16bf446aeb50b6cb4157656" [[package]] -name = "unicode-ident" -version = "1.0.18" +name = "unicode-ccc" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" +checksum = "ce61d488bcdc9bc8b5d1772c404828b17fc481c0a582b5581e95fb233aef503e" + +[[package]] +name = "unicode-ident" +version = "1.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d" [[package]] name = "unicode-linebreak" @@ -6350,21 +7802,21 @@ checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" [[package]] name = "unicode-width" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a1a07cc7db3810833284e8d372ccdc6da29741639ecc70c9ec107df0fa6154c" +checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" [[package]] -name = "unty" -version = "0.0.4" +name = "unicode-xid" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d49784317cd0d1ee7ec5c716dd598ec5b4483ea832a2dced265471cc0f690ae" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" [[package]] name = "url" -version = "2.5.4" +version = "2.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" +checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" dependencies = [ "form_urlencoded", "idna", @@ -6388,12 +7840,12 @@ dependencies = [ "data-url", "flate2", "fontdb 0.18.0", - "imagesize", + "imagesize 0.12.0", "kurbo 0.11.3", "log", "pico-args", "roxmltree", - "rustybuzz", + "rustybuzz 0.14.1", "simplecss", "siphasher", "strict-num", @@ -6405,6 +7857,39 @@ dependencies = [ "xmlwriter", ] +[[package]] +name = "usvg" +version = "0.45.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80be9b06fbae3b8b303400ab20778c80bbaf338f563afe567cf3c9eea17b47ef" +dependencies = [ + "base64 0.22.1", + "data-url", + "flate2", + "fontdb 0.23.0", + "imagesize 0.13.0", + "kurbo 0.11.3", + "log", + "pico-args", + "roxmltree", + "rustybuzz 0.20.1", + "simplecss", + "siphasher", + "strict-num", + "svgtypes", + "tiny-skia-path", + "unicode-bidi", + "unicode-script", + "unicode-vo", + "xmlwriter", +] + +[[package]] +name = "utf8-width" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86bd8d4e895da8537e5315b8254664e6b769c4ff3db18321b297a1e7004392e3" + [[package]] name = "utf8_iter" version = "1.0.4" @@ -6434,12 +7919,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" -[[package]] -name = "value-bag" -version = "1.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "943ce29a8a743eb10d6082545d861b24f9d1b160b7d741e0f2cdf726bec909c5" - [[package]] name = "vcpkg" version = "0.2.15" @@ -6458,12 +7937,6 @@ version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" -[[package]] -name = "virtue" -version = "0.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "051eb1abcf10076295e815102942cc58f9d5e3b4560e46e53c21e8ff6f3af7b1" - [[package]] name = "waker-fn" version = "1.2.0" @@ -6488,11 +7961,20 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasi" -version = "0.14.2+wasi-0.2.4" +version = "0.14.7+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +checksum = "883478de20367e224c0090af9cf5f9fa85bed63a95c1abf3afc5c083ebc06e8c" dependencies = [ - "wit-bindgen-rt", + "wasip2", +] + +[[package]] +name = "wasip2" +version = "1.0.1+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" +dependencies = [ + "wit-bindgen", ] [[package]] @@ -6503,21 +7985,22 @@ checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" [[package]] name = "wasm-bindgen" -version = "0.2.100" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" +checksum = "c1da10c01ae9f1ae40cbfac0bac3b1e724b320abfcf52229f80b547c0d250e2d" dependencies = [ "cfg-if", "once_cell", "rustversion", "wasm-bindgen-macro", + "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.100" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" +checksum = "671c9a5a66f49d8a47345ab942e2cb93c7d1d0339065d4f8139c486121b43b19" dependencies = [ "bumpalo", "log", @@ -6529,9 +8012,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.50" +version = "0.4.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" +checksum = "7e038d41e478cc73bae0ff9b36c60cff1c98b8f38f8d7e8061e79ee63608ac5c" dependencies = [ "cfg-if", "js-sys", @@ -6542,9 +8025,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.100" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" +checksum = "7ca60477e4c59f5f2986c50191cd972e3a50d8a95603bc9434501cf156a9a119" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -6552,9 +8035,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.100" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" +checksum = "9f07d2f20d4da7b26400c9f4a0511e6e0345b040694e8a75bd41d578fa4421d7" dependencies = [ "proc-macro2", "quote", @@ -6565,25 +8048,26 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.100" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +checksum = "bad67dc8b2a1a6e5448428adec4c3e84c43e561d8c9ee8a9e5aabeb193ec41d1" dependencies = [ "unicode-ident", ] [[package]] -name = "wasmtimer" -version = "0.4.2" +name = "wasm-timer" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8d49b5d6c64e8558d9b1b065014426f35c18de636895d24893dbbd329743446" +checksum = "be0ecb0db480561e9a7642b5d3e4187c128914e58aa84330b9493e3eb68c5e7f" dependencies = [ "futures", "js-sys", - "parking_lot", + "parking_lot 0.11.2", "pin-utils", - "slab", "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", ] [[package]] @@ -6594,7 +8078,7 @@ checksum = "673a33c33048a5ade91a6b139580fa174e19fb0d23f396dca9fa15f2e1e49b35" dependencies = [ "cc", "downcast-rs", - "rustix 1.0.8", + "rustix 1.1.2", "scoped-tls", "smallvec", "wayland-sys", @@ -6606,8 +8090,8 @@ version = "0.31.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c66a47e840dc20793f2264eb4b3e4ecb4b75d91c0dd4af04b456128e0bdd449d" dependencies = [ - "bitflags 2.9.2", - "rustix 1.0.8", + "bitflags 2.9.4", + "rustix 1.1.2", "wayland-backend", "wayland-scanner", ] @@ -6618,7 +8102,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.4", "cursor-icon", "wayland-backend", ] @@ -6629,7 +8113,7 @@ version = "0.31.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "447ccc440a881271b19e9989f75726d60faa09b95b0200a9b7eb5cc47c3eeb29" dependencies = [ - "rustix 1.0.8", + "rustix 1.1.2", "wayland-client", "xcursor", ] @@ -6640,10 +8124,37 @@ version = "0.32.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "efa790ed75fbfd71283bd2521a1cfdc022aabcc28bdcff00851f9e4ae88d9901" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.4", "wayland-backend", "wayland-client", "wayland-scanner", + "wayland-server", +] + +[[package]] +name = "wayland-protocols-experimental" +version = "20250721.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40a1f863128dcaaec790d7b4b396cc9b9a7a079e878e18c47e6c2d2c5a8dcbb1" +dependencies = [ + "bitflags 2.9.4", + "wayland-backend", + "wayland-client", + "wayland-protocols", + "wayland-scanner", +] + +[[package]] +name = "wayland-protocols-misc" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dfe33d551eb8bffd03ff067a8b44bb963919157841a99957151299a6307d19c" +dependencies = [ + "bitflags 2.9.4", + "wayland-backend", + "wayland-client", + "wayland-protocols", + "wayland-scanner", ] [[package]] @@ -6652,7 +8163,7 @@ version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a07a14257c077ab3279987c4f8bb987851bf57081b93710381daea94f2c2c032" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.4", "wayland-backend", "wayland-client", "wayland-protocols", @@ -6665,11 +8176,12 @@ version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "efd94963ed43cf9938a090ca4f7da58eb55325ec8200c3848963e98dc25b78ec" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.4", "wayland-backend", "wayland-client", "wayland-protocols", "wayland-scanner", + "wayland-server", ] [[package]] @@ -6683,6 +8195,19 @@ dependencies = [ "quote", ] +[[package]] +name = "wayland-server" +version = "0.31.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcbd4f3aba6c9fba70445ad2a484c0ef0356c1a9459b1e8e435bedc1971a6222" +dependencies = [ + "bitflags 2.9.4", + "downcast-rs", + "rustix 1.1.2", + "wayland-backend", + "wayland-scanner", +] + [[package]] name = "wayland-sys" version = "0.31.7" @@ -6697,9 +8222,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.77" +version = "0.3.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" +checksum = "9367c417a924a74cae129e6a2ae3b47fabb1f8995595ab474029da749a8be120" dependencies = [ "js-sys", "wasm-bindgen", @@ -6723,23 +8248,19 @@ checksum = "a751b3277700db47d3e574514de2eced5e54dc8a5436a3bf7a0b248b2cee16f3" [[package]] name = "wgpu" -version = "26.0.1" +version = "22.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70b6ff82bbf6e9206828e1a3178e851f8c20f1c9028e74dd3a8090741ccd5798" +checksum = "e1d1c4ba43f80542cf63a0a6ed3134629ae73e8ab51e4b765a67f3aa062eb433" dependencies = [ "arrayvec", - "bitflags 2.9.2", - "cfg-if", - "cfg_aliases 0.2.1", + "cfg_aliases 0.1.1", "document-features", - "hashbrown", "js-sys", "log", "naga", - "parking_lot", - "portable-atomic", + "parking_lot 0.12.5", "profiling", - "raw-window-handle 0.6.2", + "raw-window-handle", "smallvec", "static_assertions", "wasm-bindgen", @@ -6752,84 +8273,50 @@ dependencies = [ [[package]] name = "wgpu-core" -version = "26.0.1" +version = "22.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5f62f1053bd28c2268f42916f31588f81f64796e2ff91b81293515017ca8bd9" +checksum = "0348c840d1051b8e86c3bcd31206080c5e71e5933dabd79be1ce732b0b2f089a" dependencies = [ "arrayvec", - "bit-set", "bit-vec", - "bitflags 2.9.2", - "cfg_aliases 0.2.1", + "bitflags 2.9.4", + "cfg_aliases 0.1.1", "document-features", - "hashbrown", - "indexmap", + "indexmap 2.11.4", "log", "naga", "once_cell", - "parking_lot", - "portable-atomic", + "parking_lot 0.12.5", "profiling", - "raw-window-handle 0.6.2", + "raw-window-handle", "rustc-hash 1.1.0", "smallvec", - "thiserror 2.0.16", - "wgpu-core-deps-apple", - "wgpu-core-deps-emscripten", - "wgpu-core-deps-windows-linux-android", + "thiserror 1.0.69", "wgpu-hal", "wgpu-types", ] -[[package]] -name = "wgpu-core-deps-apple" -version = "26.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18ae5fbde6a4cbebae38358aa73fcd6e0f15c6144b67ef5dc91ded0db125dbdf" -dependencies = [ - "wgpu-hal", -] - -[[package]] -name = "wgpu-core-deps-emscripten" -version = "26.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7670e390f416006f746b4600fdd9136455e3627f5bd763abf9a65daa216dd2d" -dependencies = [ - "wgpu-hal", -] - -[[package]] -name = "wgpu-core-deps-windows-linux-android" -version = "26.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "720a5cb9d12b3d337c15ff0e24d3e97ed11490ff3f7506e7f3d98c68fa5d6f14" -dependencies = [ - "wgpu-hal", -] - [[package]] name = "wgpu-hal" -version = "26.0.4" +version = "22.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7df2c64ac282a91ad7662c90bc4a77d4a2135bc0b2a2da5a4d4e267afc034b9e" +checksum = "f6bbf4b4de8b2a83c0401d9e5ae0080a2792055f25859a02bf9be97952bbed4f" dependencies = [ "android_system_properties", "arrayvec", "ash", "bit-set", - "bitflags 2.9.2", + "bitflags 2.9.4", "block", - "bytemuck", - "cfg-if", - "cfg_aliases 0.2.1", - "core-graphics-types 0.2.0", + "cfg_aliases 0.1.1", + "core-graphics-types", + "d3d12", "glow", "glutin_wgl_sys", "gpu-alloc", "gpu-allocator", "gpu-descriptor", - "hashbrown", + "hassle-rs", "js-sys", "khronos-egl", "libc", @@ -6837,36 +8324,31 @@ dependencies = [ "log", "metal", "naga", - "ndk-sys 0.6.0+11769913", + "ndk-sys 0.5.0+25.2.9519653", "objc", - "ordered-float", - "parking_lot", - "portable-atomic", - "portable-atomic-util", + "once_cell", + "parking_lot 0.12.5", "profiling", "range-alloc", - "raw-window-handle 0.6.2", + "raw-window-handle", "renderdoc-sys", + "rustc-hash 1.1.0", "smallvec", - "thiserror 2.0.16", + "thiserror 1.0.69", "wasm-bindgen", "web-sys", "wgpu-types", - "windows 0.58.0", - "windows-core 0.58.0", + "winapi", ] [[package]] name = "wgpu-types" -version = "26.0.0" +version = "22.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eca7a8d8af57c18f57d393601a1fb159ace8b2328f1b6b5f80893f7d672c9ae2" +checksum = "bc9d91f0e2c4b51434dfa6db77846f2793149d8e73f800fa2e41f52b8eac3c5d" dependencies = [ - "bitflags 2.9.2", - "bytemuck", + "bitflags 2.9.4", "js-sys", - "log", - "thiserror 2.0.16", "web-sys", ] @@ -6880,6 +8362,12 @@ dependencies = [ "wasite", ] +[[package]] +name = "widestring" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72069c3113ab32ab29e5584db3c6ec55d416895e60715417b5b883a357c3e471" + [[package]] name = "winapi" version = "0.3.9" @@ -6898,11 +8386,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.10" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0978bf7171b3d90bac376700cb56d606feb40f251a475a5d6634613564460b22" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -6914,17 +8402,28 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "window_clipboard" version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6d692d46038c433f9daee7ad8757e002a4248c20b0a3fbc991d99521d3bcb6d" +source = "git+https://github.com/pop-os/window_clipboard.git?tag=pop-0.13-2#6b9faab87bea9cebec6ae036906fd67fed254f5f" dependencies = [ "clipboard-win", "clipboard_macos", "clipboard_wayland", "clipboard_x11", - "raw-window-handle 0.6.2", + "dnd", + "mime 0.1.0", + "raw-window-handle", "thiserror 1.0.69", ] +[[package]] +name = "windows" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be" +dependencies = [ + "windows-core 0.52.0", + "windows-targets 0.52.6", +] + [[package]] name = "windows" version = "0.54.0" @@ -6932,16 +8431,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9252e5725dbed82865af151df558e754e4a3c2c30818359eb17465f1346a1b49" dependencies = [ "windows-core 0.54.0", + "windows-implement 0.53.0", + "windows-interface 0.53.0", "windows-targets 0.52.6", ] [[package]] -name = "windows" -version = "0.58.0" +name = "windows-core" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ - "windows-core 0.58.0", "windows-targets 0.52.6", ] @@ -6957,35 +8457,22 @@ dependencies = [ [[package]] name = "windows-core" -version = "0.58.0" +version = "0.62.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" dependencies = [ - "windows-implement 0.58.0", - "windows-interface 0.58.0", - "windows-result 0.2.0", - "windows-strings 0.1.0", - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-core" -version = "0.61.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" -dependencies = [ - "windows-implement 0.60.0", - "windows-interface 0.59.1", + "windows-implement 0.60.2", + "windows-interface 0.59.3", "windows-link", - "windows-result 0.3.4", - "windows-strings 0.4.2", + "windows-result 0.4.1", + "windows-strings", ] [[package]] name = "windows-implement" -version = "0.58.0" +version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" +checksum = "942ac266be9249c84ca862f0a164a39533dc2f6f33dc98ec89c8da99b82ea0bd" dependencies = [ "proc-macro2", "quote", @@ -6994,9 +8481,9 @@ dependencies = [ [[package]] name = "windows-implement" -version = "0.60.0" +version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", @@ -7005,9 +8492,9 @@ dependencies = [ [[package]] name = "windows-interface" -version = "0.58.0" +version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" +checksum = "da33557140a288fae4e1d5f8873aaf9eb6613a9cf82c3e070223ff177f598b60" dependencies = [ "proc-macro2", "quote", @@ -7016,9 +8503,9 @@ dependencies = [ [[package]] name = "windows-interface" -version = "0.59.1" +version = "0.59.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", @@ -7027,9 +8514,9 @@ dependencies = [ [[package]] name = "windows-link" -version = "0.1.3" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" [[package]] name = "windows-result" @@ -7042,37 +8529,18 @@ dependencies = [ [[package]] name = "windows-result" -version = "0.2.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" -dependencies = [ - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-result" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" dependencies = [ "windows-link", ] [[package]] name = "windows-strings" -version = "0.1.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" -dependencies = [ - "windows-result 0.2.0", - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-strings" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" dependencies = [ "windows-link", ] @@ -7119,7 +8587,16 @@ version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" dependencies = [ - "windows-targets 0.53.3", + "windows-targets 0.53.5", +] + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link", ] [[package]] @@ -7170,19 +8647,19 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.53.3" +version = "0.53.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91" +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" dependencies = [ "windows-link", - "windows_aarch64_gnullvm 0.53.0", - "windows_aarch64_msvc 0.53.0", - "windows_i686_gnu 0.53.0", - "windows_i686_gnullvm 0.53.0", - "windows_i686_msvc 0.53.0", - "windows_x86_64_gnu 0.53.0", - "windows_x86_64_gnullvm 0.53.0", - "windows_x86_64_msvc 0.53.0", + "windows_aarch64_gnullvm 0.53.1", + "windows_aarch64_msvc 0.53.1", + "windows_i686_gnu 0.53.1", + "windows_i686_gnullvm 0.53.1", + "windows_i686_msvc 0.53.1", + "windows_x86_64_gnu 0.53.1", + "windows_x86_64_gnullvm 0.53.1", + "windows_x86_64_msvc 0.53.1", ] [[package]] @@ -7205,9 +8682,9 @@ checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_gnullvm" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" [[package]] name = "windows_aarch64_msvc" @@ -7229,9 +8706,9 @@ checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_aarch64_msvc" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" [[package]] name = "windows_i686_gnu" @@ -7253,9 +8730,9 @@ checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] name = "windows_i686_gnu" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" +checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" [[package]] name = "windows_i686_gnullvm" @@ -7265,9 +8742,9 @@ checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_gnullvm" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" [[package]] name = "windows_i686_msvc" @@ -7289,9 +8766,9 @@ checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_i686_msvc" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" [[package]] name = "windows_x86_64_gnu" @@ -7313,9 +8790,9 @@ checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnu" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" [[package]] name = "windows_x86_64_gnullvm" @@ -7337,9 +8814,9 @@ checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_gnullvm" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" [[package]] name = "windows_x86_64_msvc" @@ -7361,44 +8838,44 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "windows_x86_64_msvc" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" [[package]] name = "winit" -version = "0.30.8" -source = "git+https://github.com/iced-rs/winit.git?rev=11414b6aa45699f038114e61b4ddf5102b2d3b4b#11414b6aa45699f038114e61b4ddf5102b2d3b4b" +version = "0.30.5" +source = "git+https://github.com/pop-os/winit.git?tag=iced-xdg-surface-0.13-rc#8dfaba290f9a00d3e13be71f1e6f438889cf5546" dependencies = [ "ahash", "android-activity", "atomic-waker", - "bitflags 2.9.2", - "block2", + "bitflags 2.9.4", + "block2 0.5.1", "bytemuck", - "calloop", + "calloop 0.13.0", "cfg_aliases 0.2.1", "concurrent-queue", - "core-foundation 0.9.4", - "core-graphics 0.23.2", + "core-foundation", + "core-graphics", "cursor-icon", "dpi", "js-sys", "libc", - "memmap2", - "ndk 0.9.0", - "objc2", - "objc2-app-kit", - "objc2-foundation", + "memmap2 0.9.8", + "ndk", + "objc2 0.5.2", + "objc2-app-kit 0.2.2", + "objc2-foundation 0.2.2", "objc2-ui-kit", "orbclient", "percent-encoding", "pin-project", - "raw-window-handle 0.6.2", - "redox_syscall 0.4.1", + "raw-window-handle", + "redox_syscall 0.5.18", "rustix 0.38.44", "sctk-adwaita", - "smithay-client-toolkit", + "smithay-client-toolkit 0.19.2", "smol_str", "tracing", "unicode-segmentation", @@ -7427,31 +8904,27 @@ dependencies = [ [[package]] name = "winnow" -version = "0.7.12" +version = "0.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3edebf492c8125044983378ecb5766203ad3b4c2f7a922bd7dd207f6d443e95" +checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf" dependencies = [ "memchr", ] [[package]] -name = "winreg" -version = "0.52.0" +name = "wio" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5" +checksum = "5d129932f4644ac2396cb456385cbf9e63b5b30c6e8dc4820bdca4eb082037a5" dependencies = [ - "cfg-if", - "windows-sys 0.48.0", + "winapi", ] [[package]] -name = "wit-bindgen-rt" -version = "0.39.0" +name = "wit-bindgen" +version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" -dependencies = [ - "bitflags 2.9.2", -] +checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" [[package]] name = "writeable" @@ -7472,24 +8945,35 @@ dependencies = [ [[package]] name = "x11rb" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d91ffca73ee7f68ce055750bf9f6eca0780b8c85eff9bc046a3b0da41755e12" +checksum = "9993aa5be5a26815fe2c3eacfc1fde061fc1a1f094bf1ad2a18bf9c495dd7414" dependencies = [ "as-raw-xcb-connection", "gethostname", "libc", "libloading", "once_cell", - "rustix 0.38.44", + "rustix 1.1.2", "x11rb-protocol", + "xcursor", ] [[package]] name = "x11rb-protocol" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec107c4503ea0b4a98ef47356329af139c0a4f7750e621cf2973cd3385ebcb3d" +checksum = "ea6fc2961e4ef194dcbfe56bb845534d0dc8098940c7e5c012a258bfec6701bd" + +[[package]] +name = "xattr" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32e45ad4206f6d2479085147f02bc2ef834ac85886624a23575ae137c8aa8156" +dependencies = [ + "libc", + "rustix 1.1.2", +] [[package]] name = "xcursor" @@ -7503,6 +8987,12 @@ version = "2.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "213b7324336b53d2414b2db8537e56544d981803139155afa84f76eeebb7a546" +[[package]] +name = "xdg" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fb433233f2df9344722454bc7e96465c9d03bff9d77c248f9e7523fe79585b5" + [[package]] name = "xdg-home" version = "1.3.0" @@ -7513,13 +9003,46 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "xkbcommon" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13867d259930edc7091a6c41b4ce6eee464328c6ff9659b7e4c668ca20d4c91e" +dependencies = [ + "libc", + "memmap2 0.8.0", + "xkeysym", +] + +[[package]] +name = "xkbcommon" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d66ca9352cbd4eecbbc40871d8a11b4ac8107cfc528a6e14d7c19c69d0e1ac9" +dependencies = [ + "libc", + "memmap2 0.9.8", + "xkeysym", +] + +[[package]] +name = "xkbcommon" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7a974f48060a14e95705c01f24ad9c3345022f4d97441b8a36beb7ed5c4a02d" +dependencies = [ + "libc", + "memmap2 0.9.8", + "xkeysym", +] + [[package]] name = "xkbcommon-dl" version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5" dependencies = [ - "bitflags 2.9.2", + "bitflags 2.9.4", "dlib", "log", "once_cell", @@ -7531,6 +9054,9 @@ name = "xkeysym" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56" +dependencies = [ + "bytemuck", +] [[package]] name = "xml-rs" @@ -7556,6 +9082,17 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e01738255b5a16e78bbb83e7fbba0a1e7dd506905cfc53f4622d89015a03fbb5" +[[package]] +name = "yeslogic-fontconfig-sys" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "503a066b4c037c440169d995b869046827dbc71263f6e8f3be6d77d4f3229dbd" +dependencies = [ + "dlib", + "once_cell", + "pkg-config", +] + [[package]] name = "yoke" version = "0.8.0" @@ -7587,15 +9124,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "675d170b632a6ad49804c8cf2105d7c31eddd3312555cffd4b740e08e97c25e6" dependencies = [ "async-broadcast 0.5.1", - "async-executor", - "async-fs 1.6.0", - "async-io 1.13.0", - "async-lock 2.8.0", "async-process 1.8.1", "async-recursion", - "async-task", "async-trait", - "blocking", "byteorder", "derivative", "enumflags2", @@ -7607,11 +9138,12 @@ dependencies = [ "nix 0.26.4", "once_cell", "ordered-stream", - "rand", + "rand 0.8.5", "serde", "serde_repr", "sha1", "static_assertions", + "tokio", "tracing", "uds_windows", "winapi", @@ -7623,15 +9155,15 @@ dependencies = [ [[package]] name = "zbus" -version = "5.9.0" +version = "5.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bb4f9a464286d42851d18a605f7193b8febaf5b0919d71c6399b7b26e5b0aad" +checksum = "2d07e46d035fb8e375b2ce63ba4e4ff90a7f73cf2ffb0138b29e1158d2eaadf7" dependencies = [ "async-broadcast 0.7.2", "async-executor", - "async-io 2.5.0", + "async-io 2.6.0", "async-lock 3.4.1", - "async-process 2.4.0", + "async-process 2.5.0", "async-recursion", "async-task", "async-trait", @@ -7645,13 +9177,14 @@ dependencies = [ "ordered-stream", "serde", "serde_repr", + "tokio", "tracing", "uds_windows", - "windows-sys 0.59.0", - "winnow 0.7.12", - "zbus_macros 5.9.0", + "windows-sys 0.60.2", + "winnow 0.7.13", + "zbus_macros 5.11.0", "zbus_names 4.2.0", - "zvariant 5.6.0", + "zvariant 5.7.0", ] [[package]] @@ -7670,17 +9203,17 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "5.9.0" +version = "5.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef9859f68ee0c4ee2e8cde84737c78e3f4c54f946f2a38645d0d4c7a95327659" +checksum = "57e797a9c847ed3ccc5b6254e8bcce056494b375b511b3d6edcec0aeb4defaca" dependencies = [ - "proc-macro-crate 3.3.0", + "proc-macro-crate 3.4.0", "proc-macro2", "quote", "syn 2.0.106", "zbus_names 4.2.0", - "zvariant 5.6.0", - "zvariant_utils 3.2.0", + "zvariant 5.7.0", + "zvariant_utils 3.2.1", ] [[package]] @@ -7702,8 +9235,8 @@ checksum = "7be68e64bf6ce8db94f63e72f0c7eb9a60d733f7e0499e628dfab0f84d6bcb97" dependencies = [ "serde", "static_assertions", - "winnow 0.7.12", - "zvariant 5.6.0", + "winnow 0.7.13", + "zvariant 5.7.0", ] [[package]] @@ -7714,18 +9247,18 @@ checksum = "6df3dc4292935e51816d896edcd52aa30bc297907c26167fec31e2b0c6a32524" [[package]] name = "zerocopy" -version = "0.8.26" +version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f" +checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.26" +version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" +checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" dependencies = [ "proc-macro2", "quote", @@ -7755,9 +9288,9 @@ dependencies = [ [[package]] name = "zeroize" -version = "1.8.1" +version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" [[package]] name = "zerotrie" @@ -7792,6 +9325,34 @@ dependencies = [ "syn 2.0.106", ] +[[package]] +name = "zstd" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e91ee311a569c327171651566e07972200e76fcfe2242a4fa446149a3881c08a" +dependencies = [ + "zstd-safe", +] + +[[package]] +name = "zstd-safe" +version = "7.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f49c4d5f0abb602a93fb8736af2a4f4dd9512e36f7f570d66e65ff867ed3b9d" +dependencies = [ + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "2.0.16+zstd.1.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e19ebc2adc8f83e43039e79776e3fda8ca919132d68a1fed6a5faca2683748" +dependencies = [ + "cc", + "pkg-config", +] + [[package]] name = "zune-core" version = "0.4.12" @@ -7809,9 +9370,9 @@ dependencies = [ [[package]] name = "zune-jpeg" -version = "0.4.20" +version = "0.4.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc1f7e205ce79eb2da3cd71c5f55f3589785cb7c79f6a03d1c8d1491bda5d089" +checksum = "29ce2c8a9384ad323cf564b67da86e21d3cfdff87908bc1223ed5c99bc792713" dependencies = [ "zune-core", ] @@ -7827,23 +9388,22 @@ dependencies = [ "libc", "serde", "static_assertions", - "url", "zvariant_derive 3.15.2", ] [[package]] name = "zvariant" -version = "5.6.0" +version = "5.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d91b3680bb339216abd84714172b5138a4edac677e641ef17e1d8cb1b3ca6e6f" +checksum = "999dd3be73c52b1fccd109a4a81e4fcd20fab1d3599c8121b38d04e1419498db" dependencies = [ "endi", "enumflags2", "serde", "url", - "winnow 0.7.12", - "zvariant_derive 5.6.0", - "zvariant_utils 3.2.0", + "winnow 0.7.13", + "zvariant_derive 5.7.0", + "zvariant_utils 3.2.1", ] [[package]] @@ -7861,15 +9421,15 @@ dependencies = [ [[package]] name = "zvariant_derive" -version = "5.6.0" +version = "5.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a8c68501be459a8dbfffbe5d792acdd23b4959940fc87785fb013b32edbc208" +checksum = "6643fd0b26a46d226bd90d3f07c1b5321fe9bb7f04673cb37ac6d6883885b68e" dependencies = [ - "proc-macro-crate 3.3.0", + "proc-macro-crate 3.4.0", "proc-macro2", "quote", "syn 2.0.106", - "zvariant_utils 3.2.0", + "zvariant_utils 3.2.1", ] [[package]] @@ -7885,14 +9445,13 @@ dependencies = [ [[package]] name = "zvariant_utils" -version = "3.2.0" +version = "3.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e16edfee43e5d7b553b77872d99bc36afdda75c223ca7ad5e3fbecd82ca5fc34" +checksum = "c6949d142f89f6916deca2232cf26a8afacf2b9fdc35ce766105e104478be599" dependencies = [ "proc-macro2", "quote", "serde", - "static_assertions", "syn 2.0.106", - "winnow 0.7.12", + "winnow 0.7.13", ] diff --git a/Cargo.toml b/Cargo.toml index 943bbd3..88b7cef 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,12 +8,9 @@ description = "A cli presentation system" [dependencies] clap = { version = "4.5.20", features = ["debug", "derive"] } -# libcosmic = { git = "https://github.com/pop-os/libcosmic", default-features = false, features = ["debug", "winit", "desktop", "winit_wgpu", "winit_tokio", "tokio", "rfd", "dbus-config", "a11y", "wgpu", "multi-window"] } -lexpr = "0.2.7" miette = { version = "7.2.0", features = ["fancy"] } pretty_assertions = "1.4.1" serde = { version = "1.0.213", features = ["derive"] } -serde-lexpr = "0.1.3" tracing = "0.1.40" tracing-log = "0.2.0" tracing-subscriber = { version = "0.3.18", features = ["fmt", "std", "chrono", "time", "local-time", "env-filter"] } @@ -21,10 +18,10 @@ strum = "0.26.3" strum_macros = "0.26.4" ron = "0.8.1" sqlx = { version = "0.8.2", features = ["sqlite", "runtime-tokio"] } -dirs = "5.0.1" +dirs = "6.0.0" tokio = "1.41.1" crisp = { git = "https://git.tfcconnection.org/chris/crisp", version = "0.1.3" } -rodio = { version = "0.20.1", features = ["symphonia-all", "tracing"] } +rodio = { version = "0.21.1", features = ["symphonia-all", "tracing"] } gstreamer = "0.23" gstreamer-app = "0.23" # gstreamer-video = "0.23" @@ -33,23 +30,30 @@ gstreamer-app = "0.23" url = "2" colors-transform = "0.2.11" rayon = "1.11.0" -# resvg = "0.45.1" +resvg = "0.45.1" +image = "0.25.8" +rapidhash = "4.0.0" +rapidfuzz = "0.5.0" +# dragking = { git = "https://github.com/airstrike/dragking" } # femtovg = { version = "0.16.0", features = ["wgpu"] } # wgpu = "26.0.1" # mupdf = "0.5.0" -rfd = { version = "0.12.1", features = ["xdg-portal"], default-features = false } -derive_setters = "0.1.8" -freedesktop-icons = "0.4.0" +mupdf = { version = "0.5.0", git = "https://github.com/messense/mupdf-rs", rev="2425c1405b326165b06834dcc1ca859015f92787"} +tar = "0.4.44" +zstd = "0.13.3" +fastrand = "2.3.0" -[dependencies.iced] -git = "https://github.com/iced-rs/iced" -branch = "master" -features = ["wgpu", "image", "advanced", "svg", "canvas", "hot", "debug", "lazy", "tokio"] +# rfd = { version = "0.15.4", default-features = false, features = ["xdg-portal"] } + +[dependencies.libcosmic] +git = "https://github.com/pop-os/libcosmic" +default-features = false +features = ["debug", "winit", "desktop", "winit_wgpu", "winit_tokio", "tokio", "wayland", "rfd", "dbus-config", "a11y", "wgpu", "multi-window", "process"] [dependencies.iced_video_player] -git = "https://git.tfcconnection.org/chris/iced_video_player" -branch = "master" -# branch = "cosmic" +git = "https://github.com/jackpot51/iced_video_player.git" +branch = "cosmic" +features = ["wgpu"] # [profile.dev] # opt-level = 3 diff --git a/flake.lock b/flake.lock index d20281c..d60478a 100644 --- a/flake.lock +++ b/flake.lock @@ -6,11 +6,11 @@ "rust-analyzer-src": "rust-analyzer-src" }, "locked": { - "lastModified": 1755585599, - "narHash": "sha256-tl/0cnsqB/Yt7DbaGMel2RLa7QG5elA8lkaOXli6VdY=", + "lastModified": 1759214609, + "narHash": "sha256-+V3SeMjAMd9j9JTECk9oc0gWhtsk79rFEbYf/tHjywo=", "owner": "nix-community", "repo": "fenix", - "rev": "6ed03ef4c8ec36d193c18e06b9ecddde78fb7e42", + "rev": "f93a2d7225bc7a93d3379acff8fe722e21d97852", "type": "github" }, "original": { @@ -80,11 +80,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1755186698, - "narHash": "sha256-wNO3+Ks2jZJ4nTHMuks+cxAiVBGNuEBXsT29Bz6HASo=", + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", "owner": "nixos", "repo": "nixpkgs", - "rev": "fbcf476f790d8a217c3eab4e12033dc4a0f6d23c", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", "type": "github" }, "original": { @@ -112,11 +112,11 @@ }, "nixpkgs_3": { "locked": { - "lastModified": 1755615617, - "narHash": "sha256-HMwfAJBdrr8wXAkbGhtcby1zGFvs+StOp19xNsbqdOg=", + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", "owner": "nixos", "repo": "nixpkgs", - "rev": "20075955deac2583bb12f07151c2df830ef346b4", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", "type": "github" }, "original": { @@ -137,11 +137,11 @@ "rust-analyzer-src": { "flake": false, "locked": { - "lastModified": 1755504847, - "narHash": "sha256-VX0B9hwhJypCGqncVVLC+SmeMVd/GAYbJZ0MiiUn2Pk=", + "lastModified": 1759134797, + "narHash": "sha256-YPi+jL3tx/yC5J5l7/OB7Lnlr9BMTzYnZtm7tRJzUNg=", "owner": "rust-lang", "repo": "rust-analyzer", - "rev": "a905e3b21b144d77e1b304e49f3264f6f8d4db75", + "rev": "062ac7a5451e8e92a32e22a60d86882d6a034f3f", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 97f77af..ebcd5e0 100644 --- a/flake.nix +++ b/flake.nix @@ -8,95 +8,116 @@ fenix.url = "github:nix-community/fenix"; }; - outputs = inputs: with inputs; - flake-utils.lib.eachDefaultSystem - (system: - let - pkgs = import nixpkgs { - inherit system; - overlays = [fenix.overlays.default]; - # overlays = [cargo2nix.overlays.default]; - }; - naersk' = pkgs.callPackage naersk {}; - nbi = with pkgs; [ - # Rust tools - alejandra - (pkgs.fenix.stable.withComponents [ - "cargo" - "clippy" - "rust-src" - "rustc" - "rustfmt" - ]) - rust-analyzer - vulkan-loader - wayland - wayland-protocols - libxkbcommon - pkg-config - sccache - ]; + outputs = + inputs: + with inputs; + flake-utils.lib.eachDefaultSystem ( + system: + let + pkgs = import nixpkgs { + inherit system; + overlays = [ fenix.overlays.default ]; + # overlays = [cargo2nix.overlays.default]; + }; + naersk' = pkgs.callPackage naersk { }; + nbi = with pkgs; [ + # Rust tools + alejandra + (pkgs.fenix.stable.withComponents [ + "cargo" + "clippy" + "rust-src" + "rustc" + "rustfmt" + ]) + rust-analyzer + vulkan-loader + wayland + wayland-protocols + libxkbcommon + pkg-config + sccache + ]; - bi = with pkgs; [ - gcc - stdenv - gnumake - gdb - lldb - cmake - makeWrapper - vulkan-headers - vulkan-loader - vulkan-tools - libGL - cargo-flamegraph + bi = with pkgs; [ + gcc + stdenv + gnumake + gdb + lldb + cmake + clang + libclang + makeWrapper + vulkan-headers + vulkan-loader + vulkan-tools + libGL + cargo-flamegraph + bacon - fontconfig - glib - alsa-lib - gst_all_1.gst-libav - gst_all_1.gst-plugins-bad - gst_all_1.gst-plugins-good - gst_all_1.gst-plugins-ugly - gst_all_1.gst-plugins-base - gst_all_1.gst-plugins-rs - gst_all_1.gst-vaapi - gst_all_1.gstreamer - # podofo - # mpv - ffmpeg-full - # yt-dlp + fontconfig + glib + alsa-lib + gst_all_1.gst-libav + gst_all_1.gst-plugins-bad + gst_all_1.gst-plugins-good + gst_all_1.gst-plugins-ugly + gst_all_1.gst-plugins-base + gst_all_1.gst-plugins-rs + gst_all_1.gst-vaapi + gst_all_1.gstreamer + ffmpeg-full + mupdf + # yt-dlp - just - sqlx-cli - cargo-watch - ]; - in rec - { - devShell = pkgs.mkShell.override { - # stdenv = pkgs.stdenvAdapters.useMoldLinker pkgs.clangStdenv; - } { - nativeBuildInputs = nbi; - buildInputs = bi; - LD_LIBRARY_PATH = "$LD_LIBRARY_PATH:${ - with pkgs; - pkgs.lib.makeLibraryPath [ - pkgs.vulkan-loader - pkgs.wayland - pkgs.wayland-protocols - pkgs.libxkbcommon - ] - }"; - DATABASE_URL = "sqlite:///home/chris/.local/share/lumina/library-db.sqlite3"; - }; - defaultPackage = naersk'.buildPackage { + just + sqlx-cli + cargo-watch + ]; + in + rec { + devShell = + pkgs.mkShell.override + { + # stdenv = pkgs.stdenvAdapters.useMoldLinker pkgs.clangStdenv; + } + { + nativeBuildInputs = nbi; + buildInputs = bi; + LD_LIBRARY_PATH = "$LD_LIBRARY_PATH:${ + with pkgs; + pkgs.lib.makeLibraryPath [ + pkgs.alsa-lib + pkgs.gst_all_1.gst-libav + pkgs.gst_all_1.gstreamer + pkgs.gst_all_1.gst-plugins-bad + pkgs.gst_all_1.gst-plugins-good + pkgs.gst_all_1.gst-plugins-ugly + pkgs.gst_all_1.gst-plugins-base + pkgs.gst_all_1.gst-plugins-rs + pkgs.gst_all_1.gst-vaapi + pkgs.glib + pkgs.fontconfig + pkgs.vulkan-loader + pkgs.wayland + pkgs.wayland-protocols + pkgs.libxkbcommon + pkgs.mupdf + pkgs.libclang + ] + }"; + # LIBCLANG_PATH = "${pkgs.clang}"; + DATABASE_URL = "sqlite:///home/chris/.local/share/lumina/library-db.sqlite3"; + }; + defaultPackage = naersk'.buildPackage { + src = ./.; + }; + packages = { + default = naersk'.buildPackage { src = ./.; }; - packages = { - default = naersk'.buildPackage { - src = ./.; - }; - }; - } - ); + }; + } + ); } diff --git a/justfile b/justfile index 8eb74f5..1da1804 100644 --- a/justfile +++ b/justfile @@ -8,6 +8,8 @@ build: sbuild: RUST_LOG=debug sccache cargo build run: + RUST_LOG=debug cargo run -- {{ui}} +run-file: RUST_LOG=debug cargo run -- {{ui}} {{file}} srun: RUST_LOG=debug sccache cargo run -- {{ui}} {{file}} @@ -20,5 +22,6 @@ profile: alias b := build alias r := run +alias rf := run-file alias sr := srun alias c := clean diff --git a/migrations/20250925190420_Remove_the_page_count_column_in_presentations_table.sql b/migrations/20250925190420_Remove_the_page_count_column_in_presentations_table.sql new file mode 100644 index 0000000..b1a6d30 --- /dev/null +++ b/migrations/20250925190420_Remove_the_page_count_column_in_presentations_table.sql @@ -0,0 +1,3 @@ +-- Add migration script here +ALTER TABLE presentations +DROP COLUMN pageCount; diff --git a/migrations/20251020184333_add_starting_index_and_ending_index_to_presentations_table.sql b/migrations/20251020184333_add_starting_index_and_ending_index_to_presentations_table.sql new file mode 100644 index 0000000..abf000f --- /dev/null +++ b/migrations/20251020184333_add_starting_index_and_ending_index_to_presentations_table.sql @@ -0,0 +1,6 @@ +-- Add migration script here +ALTER TABLE presentations +ADD COLUMN starting_index INTEGER; + +ALTER TABLE presentations +ADD COLUMN ending_index INTEGER; diff --git a/readme.org b/readme.org index 7f7470c..e378379 100644 --- a/readme.org +++ b/readme.org @@ -4,14 +4,12 @@ Lumina is a presentation app that works from a cli or a UI. The goal is that through a simple text file, you can describe an entire presentation and then load and control it either from the command line, or a UI. The UI also provides user friendly ways of creating the presentation to allow for flexibility for users to make something that works for regular folk as well as developers and nerds. * Why build this? -Well for one, I want more experience developing things and I don't have a good tool for this kind of thing on Linux. - Primarily, I don't think there is a good tool for this kind of thing on Linux. On Windows and Mac there is ProPresenter or Proclaim. Both amazing presentation software built for churches or worship centers and can be used by others for other things too, but incredible tools. I want to have a similar tool on Linux. The available tools out there now are often old, broken, or very difficult to use. I want something incredibly easy, with very sane or at least very customizable keyboard controls that allow me to quickly build a presentation and make it VERY easy to run it too. ** Features (planned are in parentheses) - Presents songs lyrics with image and video backgrounds - Simple song creation with a powerful text parser -- Present Slides (PDF, PowerPoint, and Impress are in not implemented yet) +- Present Slides. PDF works. (PowerPoint, and Impress are in not implemented yet) - (Present Reveal.js slides) - (Custom slide builder) - (an intuitive UI) - Still needs A LOT of polish diff --git a/res/chad.png b/res/chad.png new file mode 100644 index 0000000..44f21f3 Binary files /dev/null and b/res/chad.png differ diff --git a/res/list-add-above.svg b/res/list-add-above.svg new file mode 100644 index 0000000..27f02ba --- /dev/null +++ b/res/list-add-above.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/res/list-add-below.svg b/res/list-add-below.svg new file mode 100644 index 0000000..99adb9e --- /dev/null +++ b/res/list-add-below.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/res/split-above.svg b/res/split-above.svg new file mode 100644 index 0000000..b105436 --- /dev/null +++ b/res/split-above.svg @@ -0,0 +1,54 @@ + + + + + + diff --git a/res/split-below.svg b/res/split-below.svg new file mode 100644 index 0000000..072feb7 --- /dev/null +++ b/res/split-below.svg @@ -0,0 +1,60 @@ + + + + + + diff --git a/res/text-outline.svg b/res/text-outline.svg new file mode 100644 index 0000000..4c12366 --- /dev/null +++ b/res/text-outline.svg @@ -0,0 +1 @@ +Text-effects-24-regular SVG Icon \ No newline at end of file diff --git a/rustfmt.toml b/rustfmt.toml index 0f2a39c..91b451d 100644 --- a/rustfmt.toml +++ b/rustfmt.toml @@ -1,3 +1,3 @@ max_width = 70 -# style_edition = "2018" +style_edition = "2024" # version = "Two" \ No newline at end of file diff --git a/src/core/file.rs b/src/core/file.rs index e3d5c8f..5b8f917 100644 --- a/src/core/file.rs +++ b/src/core/file.rs @@ -1,356 +1,408 @@ -use tar::{Archive, Builder}; +use crate::core::{ + kinds::ServiceItemKind, service_items::ServiceItem, + slide::Background, +}; +use miette::{IntoDiagnostic, Result}; +use std::{ + fs::{self, File}, + io::Write, + iter, + path::{Path, PathBuf}, +}; +use tar::Builder; use tracing::error; use zstd::Encoder; -use std::{fs::{self, File}, iter, path::{Path, PathBuf}}; -use color_eyre::eyre::{eyre, Context, Result}; -use serde_json::Value; -use sqlx::{query, query_as, FromRow, SqliteConnection}; -use crate::{images::{get_image_from_db, Image}, kinds::ServiceItemKind, model::get_db, presentations::{get_presentation_from_db, PresKind, Presentation}, service_items::ServiceItem, slides::Background, songs::{get_song_from_db, Song}, videos::{get_video_from_db, Video}}; -pub async fn save(list: Vec, path: impl AsRef) -> Result<()> { +pub async fn save( + list: Vec, + path: impl AsRef, +) -> Result<()> { let path = path.as_ref(); - let save_file = File::create(path)?; - let mut db = get_db().await; - let json = process_service_items(&list, &mut db).await?; - let archive = store_service_items(&list, &mut db, &save_file, &json).await?; - Ok(()) -} + let save_file = File::create(path).into_diagnostic()?; + let ron = process_service_items(&list).await?; -async fn store_service_items(items: &Vec, db: &mut SqliteConnection, save_file: &File, json: &Value) -> Result<()> { let encoder = Encoder::new(save_file, 3).unwrap(); let mut tar = Builder::new(encoder); let mut temp_dir = dirs::data_dir().unwrap(); temp_dir.push("lumina"); let mut s: String = - iter::repeat_with(fastrand::alphanumeric) - .take(5) - .collect(); + iter::repeat_with(fastrand::alphanumeric).take(5).collect(); s.insert_str(0, "temp_"); temp_dir.push(s); - fs::create_dir_all(&temp_dir)?; - let service_file = temp_dir.join("serviceitems.json"); - fs::File::create(&service_file)?; - match fs::File::options().read(true).write(true).open(service_file) { - Ok(f) => { - serde_json::to_writer_pretty(f, json)?; - }, - Err(e) => error!("There were problems making a file i guess: {e}"), + fs::create_dir_all(&temp_dir).into_diagnostic()?; + let service_file = temp_dir.join("serviceitems.ron"); + fs::File::create(&service_file).into_diagnostic()?; + match fs::File::options() + .read(true) + .write(true) + .open(service_file) + { + Ok(mut f) => { + f.write(ron.as_bytes()).into_diagnostic()?; + } + Err(e) => { + error!("There were problems making a file i guess: {e}") + } }; - for item in items { + // let list list.iter_mut().map(|item| { + // match item.kind { + // ServiceItemKind::Song(mut song) => { + // song.background + // } + // } + // }).collect(); + for item in list { let background; let audio: Option; - match item.kind { - ServiceItemKind::Song => { - let song = get_song_from_db(item.database_id, db).await?; - background = song.background; - audio = song.audio; - }, - ServiceItemKind::Image => { - let image = get_image_from_db(item.database_id, db).await?; - background = Some(Background::try_from(image.path)?); + match &item.kind { + ServiceItemKind::Song(song) => { + background = song.background.clone(); + audio = song.audio.clone(); + } + ServiceItemKind::Image(image) => { + background = Some( + Background::try_from(image.path.clone()) + .into_diagnostic()?, + ); audio = None; - }, - ServiceItemKind::Video => { - let video = get_video_from_db(item.database_id, db).await?; - background = Some(Background::try_from(video.path)?); + } + ServiceItemKind::Video(video) => { + background = Some( + Background::try_from(video.path.clone()) + .into_diagnostic()?, + ); audio = None; - }, - ServiceItemKind::Presentation(_) => { - let presentation = get_presentation_from_db(item.database_id, db).await?; - background = Some(Background::try_from(presentation.path)?); + } + ServiceItemKind::Presentation(presentation) => { + background = Some( + Background::try_from(presentation.path.clone()) + .into_diagnostic()?, + ); audio = None; - }, - ServiceItemKind::Content => { + } + ServiceItemKind::Content(_slide) => { todo!() - }, + } }; if let Some(file) = audio { - let audio_file = temp_dir.join(file.file_name().expect("Audio file couldn't be added to temp_dir")); + let audio_file = + temp_dir.join(file.file_name().expect( + "Audio file couldn't be added to temp_dir", + )); if let Ok(file) = file.strip_prefix("file://") { - fs::File::create(&audio_file).wrap_err("Couldn't create audio file")?; - fs::copy(file, audio_file).wrap_err("Audio file could not be copied, the source file doesn't exist not be found"); + fs::File::create(&audio_file).into_diagnostic()?; + fs::copy(file, audio_file).into_diagnostic()?; } else { - fs::File::create(&audio_file).wrap_err("Couldn't create audio file")?; - fs::copy(file, audio_file).wrap_err("Audio file could not be copied, the source file doesn't exist not be found"); + fs::File::create(&audio_file).into_diagnostic()?; + fs::copy(file, audio_file).into_diagnostic()?; } }; if let Some(file) = background { - let background_file = temp_dir.join(file.path.file_name().expect("Background file couldn't be added to temp_dir")); + let background_file = + temp_dir.join(file.path.file_name().expect( + "Background file couldn't be added to temp_dir", + )); if let Ok(file) = file.path.strip_prefix("file://") { - fs::File::create(&background_file).wrap_err("Couldn't create background file")?; - fs::copy(file, background_file).wrap_err("Background file could not be copied, the source file doesn't exist not be found"); + fs::File::create(&background_file) + .into_diagnostic()?; + fs::copy(file, background_file).into_diagnostic()?; } else { - fs::File::create(&background_file).wrap_err("Couldn't create background file")?; - fs::copy(file.path, background_file).wrap_err("Background file could not be copied, the source file doesn't exist not be found"); + fs::File::create(&background_file) + .into_diagnostic()?; + fs::copy(file.path, background_file) + .into_diagnostic()?; } } } - Ok(()) + tar.append_dir_all(path, temp_dir).into_diagnostic()?; + tar.finish().into_diagnostic() } async fn clear_temp_dir(temp_dir: &Path) -> Result<()> { todo!() } -async fn process_service_items(items: &Vec, db: &mut SqliteConnection) -> Result { - let mut values: Vec = vec![]; - for item in items { - match item.kind { - ServiceItemKind::Song => { - let value = process_song(item.database_id, db).await?; - values.push(value); - }, - ServiceItemKind::Image => { - let value = process_image(item.database_id, db).await?; - values.push(value); - }, - ServiceItemKind::Video => { - let value = process_video(item.database_id, db).await?; - values.push(value); - }, - ServiceItemKind::Presentation(_) => { - let value = process_presentation(item.database_id, db).await?; - values.push(value); - }, - ServiceItemKind::Content => { - todo!() - }, - } - } - let json = Value::from(values); - Ok(json) +async fn process_service_items( + items: &Vec, +) -> Result { + Ok(items + .into_iter() + .filter_map(|item| { + let ron = ron::ser::to_string(item); + ron.ok() + }) + .collect()) } -async fn process_song(database_id: i32, db: &mut SqliteConnection) -> Result { - let song = get_song_from_db(database_id, db).await?; - let song_json = serde_json::to_value(&song)?; - let kind_json = serde_json::to_value(ServiceItemKind::Song)?; - let json = serde_json::json!({"item": song_json, "kind": kind_json}); - Ok(json) -} +// async fn process_song( +// database_id: i32, +// db: &mut SqliteConnection, +// ) -> Result { +// let song = get_song_from_db(database_id, db).await?; +// let song_ron = ron::to_value(&song)?; +// let kind_ron = ron::to_value(ServiceItemKind::Song)?; +// let json = +// serde_json::json!({"item": song_json, "kind": kind_json}); +// Ok(json) +// } -async fn process_image(database_id: i32, db: &mut SqliteConnection) -> Result { - let image = get_image_from_db(database_id, db).await?; - let image_json = serde_json::to_value(&image)?; - let kind_json = serde_json::to_value(ServiceItemKind::Image)?; - let json = serde_json::json!({"item": image_json, "kind": kind_json}); - Ok(json) -} +// async fn process_image( +// database_id: i32, +// db: &mut SqliteConnection, +// ) -> Result { +// let image = get_image_from_db(database_id, db).await?; +// let image_json = serde_json::to_value(&image)?; +// let kind_json = serde_json::to_value(ServiceItemKind::Image)?; +// let json = +// serde_json::json!({"item": image_json, "kind": kind_json}); +// Ok(json) +// } -async fn process_video(database_id: i32, db: &mut SqliteConnection) -> Result { - let video = get_video_from_db(database_id, db).await?; - let video_json = serde_json::to_value(&video)?; - let kind_json = serde_json::to_value(ServiceItemKind::Video)?; - let json = serde_json::json!({"item": video_json, "kind": kind_json}); - Ok(json) -} +// async fn process_video( +// database_id: i32, +// db: &mut SqliteConnection, +// ) -> Result { +// let video = get_video_from_db(database_id, db).await?; +// let video_json = serde_json::to_value(&video)?; +// let kind_json = serde_json::to_value(ServiceItemKind::Video)?; +// let json = +// serde_json::json!({"item": video_json, "kind": kind_json}); +// Ok(json) +// } -async fn process_presentation(database_id: i32, db: &mut SqliteConnection) -> Result { - let presentation = get_presentation_from_db(database_id, db).await?; - let presentation_json = serde_json::to_value(&presentation)?; - let kind_json = match presentation.kind { - PresKind::Html => serde_json::to_value(ServiceItemKind::Presentation(PresKind::Html))?, - PresKind::Pdf => serde_json::to_value(ServiceItemKind::Presentation(PresKind::Pdf))?, - PresKind::Generic => serde_json::to_value(ServiceItemKind::Presentation(PresKind::Generic))?, - }; - let json = serde_json::json!({"item": presentation_json, "kind": kind_json}); - Ok(json) -} +// async fn process_presentation( +// database_id: i32, +// db: &mut SqliteConnection, +// ) -> Result { +// let presentation = +// get_presentation_from_db(database_id, db).await?; +// let presentation_json = serde_json::to_value(&presentation)?; +// let kind_json = match presentation.kind { +// PresKind::Html => serde_json::to_value( +// ServiceItemKind::Presentation(PresKind::Html), +// )?, +// PresKind::Pdf => serde_json::to_value( +// ServiceItemKind::Presentation(PresKind::Pdf), +// )?, +// PresKind::Generic => serde_json::to_value( +// ServiceItemKind::Presentation(PresKind::Generic), +// )?, +// }; +// let json = serde_json::json!({"item": presentation_json, "kind": kind_json}); +// Ok(json) +// } -#[cfg(test)] -mod test { - use std::path::PathBuf; +// #[cfg(test)] +// mod test { +// use std::path::PathBuf; - use fs::canonicalize; - use sqlx::Connection; - use pretty_assertions::assert_eq; - use tracing::debug; - use super::*; +// use super::*; +// use fs::canonicalize; +// use pretty_assertions::assert_eq; +// use sqlx::Connection; +// use tracing::debug; - async fn get_db() -> SqliteConnection { - let mut data = dirs::data_local_dir().unwrap(); - data.push("lumina"); - data.push("library-db.sqlite3"); - let mut db_url = String::from("sqlite://"); - db_url.push_str(data.to_str().unwrap()); - SqliteConnection::connect(&db_url) - .await - .expect("problems") - } +// async fn get_db() -> SqliteConnection { +// let mut data = dirs::data_local_dir().unwrap(); +// data.push("lumina"); +// data.push("library-db.sqlite3"); +// let mut db_url = String::from("sqlite://"); +// db_url.push_str(data.to_str().unwrap()); +// SqliteConnection::connect(&db_url).await.expect("problems") +// } - #[tokio::test(flavor = "current_thread")] - async fn test_process_song() { - let mut db = get_db().await; - let result = process_song(7, &mut db).await; - let json_song_file = PathBuf::from("./test/test_song.json"); - if let Ok(path) = canonicalize(json_song_file) { - debug!(file = ?&path); - if let Ok(s) = fs::read_to_string(path) { - debug!(s); - match result { - Ok(json) => assert_eq!(json.to_string(), s), - Err(e) => panic!("There was an error in processing the song: {e}"), - } - } else { - panic!("String wasn't read from file"); - } - } else { - panic!("Cannot find absolute path to test_song.json"); - } - } +// #[tokio::test(flavor = "current_thread")] +// async fn test_process_song() { +// let mut db = get_db().await; +// let result = process_song(7, &mut db).await; +// let json_song_file = PathBuf::from("./test/test_song.json"); +// if let Ok(path) = canonicalize(json_song_file) { +// debug!(file = ?&path); +// if let Ok(s) = fs::read_to_string(path) { +// debug!(s); +// match result { +// Ok(json) => assert_eq!(json.to_string(), s), +// Err(e) => panic!( +// "There was an error in processing the song: {e}" +// ), +// } +// } else { +// panic!("String wasn't read from file"); +// } +// } else { +// panic!("Cannot find absolute path to test_song.json"); +// } +// } - #[tokio::test(flavor = "current_thread")] - async fn test_process_image() { - let mut db = get_db().await; - let result = process_image(3, &mut db).await; - let json_image_file = PathBuf::from("./test/test_image.json"); - if let Ok(path) = canonicalize(json_image_file) { - debug!(file = ?&path); - if let Ok(s) = fs::read_to_string(path) { - debug!(s); - match result { - Ok(json) => assert_eq!(json.to_string(), s), - Err(e) => panic!("There was an error in processing the image: {e}"), - } - } else { - panic!("String wasn't read from file"); - } - } else { - panic!("Cannot find absolute path to test_image.json"); - } - } +// #[tokio::test(flavor = "current_thread")] +// async fn test_process_image() { +// let mut db = get_db().await; +// let result = process_image(3, &mut db).await; +// let json_image_file = PathBuf::from("./test/test_image.json"); +// if let Ok(path) = canonicalize(json_image_file) { +// debug!(file = ?&path); +// if let Ok(s) = fs::read_to_string(path) { +// debug!(s); +// match result { +// Ok(json) => assert_eq!(json.to_string(), s), +// Err(e) => panic!( +// "There was an error in processing the image: {e}" +// ), +// } +// } else { +// panic!("String wasn't read from file"); +// } +// } else { +// panic!("Cannot find absolute path to test_image.json"); +// } +// } - #[tokio::test(flavor = "current_thread")] - async fn test_process_video() { - let mut db = get_db().await; - let result = process_video(73, &mut db).await; - let json_video_file = PathBuf::from("./test/test_video.json"); - if let Ok(path) = canonicalize(json_video_file) { - debug!(file = ?&path); - if let Ok(s) = fs::read_to_string(path) { - debug!(s); - match result { - Ok(json) => assert_eq!(json.to_string(), s), - Err(e) => panic!("There was an error in processing the video: {e}"), - } - } else { - panic!("String wasn't read from file"); - } - } else { - panic!("Cannot find absolute path to test_video.json"); - } - } +// #[tokio::test(flavor = "current_thread")] +// async fn test_process_video() { +// let mut db = get_db().await; +// let result = process_video(73, &mut db).await; +// let json_video_file = PathBuf::from("./test/test_video.json"); +// if let Ok(path) = canonicalize(json_video_file) { +// debug!(file = ?&path); +// if let Ok(s) = fs::read_to_string(path) { +// debug!(s); +// match result { +// Ok(json) => assert_eq!(json.to_string(), s), +// Err(e) => panic!( +// "There was an error in processing the video: {e}" +// ), +// } +// } else { +// panic!("String wasn't read from file"); +// } +// } else { +// panic!("Cannot find absolute path to test_video.json"); +// } +// } - #[tokio::test(flavor = "current_thread")] - async fn test_process_presentation() { - let mut db = get_db().await; - let result = process_presentation(54, &mut db).await; - let json_presentation_file = PathBuf::from("./test/test_presentation.json"); - if let Ok(path) = canonicalize(json_presentation_file) { - debug!(file = ?&path); - if let Ok(s) = fs::read_to_string(path) { - debug!(s); - match result { - Ok(json) => assert_eq!(json.to_string(), s), - Err(e) => panic!("There was an error in processing the presentation: {e}"), - } - } else { - panic!("String wasn't read from file"); - } - } else { - panic!("Cannot find absolute path to test_presentation.json"); - } - } +// #[tokio::test(flavor = "current_thread")] +// async fn test_process_presentation() { +// let mut db = get_db().await; +// let result = process_presentation(54, &mut db).await; +// let json_presentation_file = +// PathBuf::from("./test/test_presentation.json"); +// if let Ok(path) = canonicalize(json_presentation_file) { +// debug!(file = ?&path); +// if let Ok(s) = fs::read_to_string(path) { +// debug!(s); +// match result { +// Ok(json) => assert_eq!(json.to_string(), s), +// Err(e) => panic!( +// "There was an error in processing the presentation: {e}" +// ), +// } +// } else { +// panic!("String wasn't read from file"); +// } +// } else { +// panic!( +// "Cannot find absolute path to test_presentation.json" +// ); +// } +// } - fn get_items() -> Vec { - let items = vec![ - ServiceItem { - database_id: 7, - kind: ServiceItemKind::Song, - id: 0, - }, - ServiceItem { - database_id: 54, - kind: ServiceItemKind::Presentation(PresKind::Html), - id: 0, - }, - ServiceItem { - database_id: 73, - kind: ServiceItemKind::Video, - id: 0, - }, - ]; - items - } +// fn get_items() -> Vec { +// let items = vec![ +// ServiceItem { +// database_id: 7, +// kind: ServiceItemKind::Song, +// id: 0, +// }, +// ServiceItem { +// database_id: 54, +// kind: ServiceItemKind::Presentation(PresKind::Html), +// id: 0, +// }, +// ServiceItem { +// database_id: 73, +// kind: ServiceItemKind::Video, +// id: 0, +// }, +// ]; +// items +// } - #[tokio::test] - async fn test_service_items() { - let mut db = get_db().await; - let items = get_items(); - let json_item_file = PathBuf::from("./test/test_service_items.json"); - let result = process_service_items(&items, &mut db).await; - if let Ok(path) = canonicalize(json_item_file) { - if let Ok(s) = fs::read_to_string(path) { - match result { - Ok(strings) => assert_eq!(strings.to_string(), s), - Err(e) => panic!("There was an error: {e}"), - } - } - } - } +// #[tokio::test] +// async fn test_service_items() { +// let mut db = get_db().await; +// let items = get_items(); +// let json_item_file = +// PathBuf::from("./test/test_service_items.json"); +// let result = process_service_items(&items, &mut db).await; +// if let Ok(path) = canonicalize(json_item_file) { +// if let Ok(s) = fs::read_to_string(path) { +// match result { +// Ok(strings) => assert_eq!(strings.to_string(), s), +// Err(e) => panic!("There was an error: {e}"), +// } +// } +// } +// } - // #[tokio::test] - // async fn test_save() { - // let path = PathBuf::from("~/dev/lumina/src/rust/core/test.pres"); - // let list = get_items(); - // match save(list, path).await { - // Ok(_) => assert!(true), - // Err(e) => panic!("There was an error: {e}"), - // } - // } +// // #[tokio::test] +// // async fn test_save() { +// // let path = PathBuf::from("~/dev/lumina/src/rust/core/test.pres"); +// // let list = get_items(); +// // match save(list, path).await { +// // Ok(_) => assert!(true), +// // Err(e) => panic!("There was an error: {e}"), +// // } +// // } - #[tokio::test] - async fn test_store() { - let path = PathBuf::from("/home/chris/dev/lumina/src/rust/core/test.pres"); - let save_file = match File::create(path) { - Ok(f) => f, - Err(e) => panic!("Couldn't create save_file: {e}"), - }; - let mut db = get_db().await; - let list = get_items(); - if let Ok(json) = process_service_items(&list, &mut db).await { - println!("{:?}", json); - match store_service_items(&list, &mut db, &save_file, &json).await { - Ok(_) => assert!(true), - Err(e) => panic!("There was an error: {e}"), - } - } else { - panic!("There was an error getting the json value"); - } - } +// #[tokio::test] +// async fn test_store() { +// let path = PathBuf::from( +// "/home/chris/dev/lumina/src/rust/core/test.pres", +// ); +// let save_file = match File::create(path) { +// Ok(f) => f, +// Err(e) => panic!("Couldn't create save_file: {e}"), +// }; +// let mut db = get_db().await; +// let list = get_items(); +// if let Ok(json) = process_service_items(&list, &mut db).await +// { +// println!("{:?}", json); +// match store_service_items( +// &list, &mut db, &save_file, &json, +// ) +// .await +// { +// Ok(_) => assert!(true), +// Err(e) => panic!("There was an error: {e}"), +// } +// } else { +// panic!("There was an error getting the json value"); +// } +// } - // #[tokio::test] - // async fn test_things() { - // let mut temp_dir = dirs::data_dir().unwrap(); - // temp_dir.push("lumina"); - // let mut s: String = - // iter::repeat_with(fastrand::alphanumeric) - // .take(5) - // .collect(); - // s.insert_str(0, "temp_"); - // temp_dir.push(s); - // let _ = fs::create_dir_all(&temp_dir); - // let mut db = get_db().await; - // let service_file = temp_dir.join("serviceitems.json"); - // let list = get_items(); - // if let Ok(json) = process_service_items(&list, &mut db).await { - // let _ = fs::File::create(&service_file); - // match fs::write(service_file, json.to_string()) { - // Ok(_) => assert!(true), - // Err(e) => panic!("There was an error: {e}"), - // } - // } else { - // panic!("There was an error getting the json value"); - // } - // } -} +// // #[tokio::test] +// // async fn test_things() { +// // let mut temp_dir = dirs::data_dir().unwrap(); +// // temp_dir.push("lumina"); +// // let mut s: String = +// // iter::repeat_with(fastrand::alphanumeric) +// // .take(5) +// // .collect(); +// // s.insert_str(0, "temp_"); +// // temp_dir.push(s); +// // let _ = fs::create_dir_all(&temp_dir); +// // let mut db = get_db().await; +// // let service_file = temp_dir.join("serviceitems.json"); +// // let list = get_items(); +// // if let Ok(json) = process_service_items(&list, &mut db).await { +// // let _ = fs::File::create(&service_file); +// // match fs::write(service_file, json.to_string()) { +// // Ok(_) => assert!(true), +// // Err(e) => panic!("There was an error: {e}"), +// // } +// // } else { +// // panic!("There was an error getting the json value"); +// // } +// // } +// } diff --git a/src/core/images.rs b/src/core/images.rs index beba760..7e37607 100644 --- a/src/core/images.rs +++ b/src/core/images.rs @@ -10,14 +10,14 @@ use crisp::types::{Keyword, Symbol, Value}; use miette::{IntoDiagnostic, Result}; use serde::{Deserialize, Serialize}; use sqlx::{ - pool::PoolConnection, query, query_as, Sqlite, SqliteConnection, - SqlitePool, + Sqlite, SqliteConnection, SqlitePool, pool::PoolConnection, + query, query_as, }; -use std::path::PathBuf; -use tracing::error; +use std::path::{Path, PathBuf}; +use tracing::{debug, error}; #[derive( - Clone, Debug, Default, PartialEq, Serialize, Deserialize, + Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize, )] pub struct Image { pub id: i32, @@ -25,6 +25,28 @@ pub struct Image { pub path: PathBuf, } +impl From for Image { + fn from(value: PathBuf) -> Self { + let title = value + .file_name() + .unwrap_or_default() + .to_str() + .unwrap_or_default() + .to_string(); + Self { + id: 0, + title, + path: value.canonicalize().unwrap_or(value), + } + } +} + +impl From<&Path> for Image { + fn from(value: &Path) -> Self { + Self::from(value.to_owned()) + } +} + impl From<&Image> for Value { fn from(value: &Image) -> Self { Self::List(vec![Self::Symbol(Symbol("image".into()))]) @@ -52,8 +74,9 @@ impl Content for Image { if self.path.exists() { self.path .file_name() - .map(|f| f.to_string_lossy().to_string()) - .unwrap_or("Missing image".into()) + .map_or("Missing image".into(), |f| { + f.to_string_lossy().to_string() + }) } else { "Missing image".into() } @@ -85,7 +108,7 @@ impl From<&Value> for Image { let path = p.to_str().unwrap_or_default().to_string(); let title = - path.rsplit_once("/").unwrap_or_default().1; + path.rsplit_once('/').unwrap_or_default().1; title.to_string() }); Self { @@ -154,17 +177,51 @@ impl Model { .await; match result { Ok(v) => { - for image in v.into_iter() { + for image in v { let _ = self.add_item(image); } } Err(e) => { - error!("There was an error in converting images: {e}") + error!( + "There was an error in converting images: {e}" + ); } - }; + } } } +pub async fn remove_from_db( + db: PoolConnection, + id: i32, +) -> Result<()> { + query!("DELETE FROM images WHERE id = $1", id) + .execute(&mut db.detach()) + .await + .into_diagnostic() + .map(|_| ()) +} + +pub async fn add_image_to_db( + image: Image, + db: PoolConnection, +) -> Result<()> { + let path = image + .path + .to_str() + .map(std::string::ToString::to_string) + .unwrap_or_default(); + let mut db = db.detach(); + query!( + r#"INSERT INTO images (title, file_path) VALUES ($1, $2)"#, + image.title, + path, + ) + .execute(&mut db) + .await + .into_diagnostic()?; + Ok(()) +} + pub async fn update_image_in_db( image: Image, db: PoolConnection, @@ -172,19 +229,29 @@ pub async fn update_image_in_db( let path = image .path .to_str() - .map(|s| s.to_string()) + .map(std::string::ToString::to_string) .unwrap_or_default(); - query!( + let mut db = db.detach(); + debug!(?image, "should be been updated"); + let result = query!( r#"UPDATE images SET title = $2, file_path = $3 WHERE id = $1"#, image.id, image.title, path, ) - .execute(&mut db.detach()) - .await - .into_diagnostic()?; + .execute(&mut db) + .await.into_diagnostic(); - Ok(()) + match result { + Ok(_) => { + debug!("should have been updated"); + Ok(()) + } + Err(e) => { + error! {?e}; + Err(e) + } + } } pub async fn get_image_from_db( diff --git a/src/core/kinds.rs b/src/core/kinds.rs index b366997..9aa3768 100644 --- a/src/core/kinds.rs +++ b/src/core/kinds.rs @@ -1,8 +1,11 @@ -use std::{error::Error, fmt::Display}; +use std::{error::Error, fmt::Display, path::PathBuf}; use serde::{Deserialize, Serialize}; -use crate::Slide; +use crate::{ + Slide, + core::{content::Content, service_items::ServiceItem}, +}; use super::{ images::Image, presentations::Presentation, songs::Song, @@ -18,14 +21,65 @@ pub enum ServiceItemKind { Content(Slide), } +impl TryFrom for ServiceItemKind { + type Error = miette::Error; + + fn try_from(path: PathBuf) -> Result { + let ext = path + .extension() + .map(|ext| ext.to_str()) + .flatten() + .ok_or(miette::miette!( + "There isn't an extension on this file" + ))?; + match ext { + "png" | "jpg" | "jpeg" => { + Ok(Self::Image(Image::from(path))) + } + "mp4" | "mkv" | "webm" => { + Ok(Self::Video(Video::from(path))) + } + _ => Err(miette::miette!("Unknown item")), + } + } +} + +impl ServiceItemKind { + pub fn title(&self) -> String { + match self { + ServiceItemKind::Song(song) => song.title.to_string(), + ServiceItemKind::Video(video) => video.title.to_string(), + ServiceItemKind::Image(image) => image.title.to_string(), + ServiceItemKind::Presentation(presentation) => { + presentation.title.to_string() + } + ServiceItemKind::Content(slide) => todo!(), + } + } + + pub fn to_service_item(&self) -> ServiceItem { + match self { + ServiceItemKind::Song(song) => song.to_service_item(), + ServiceItemKind::Video(video) => video.to_service_item(), + ServiceItemKind::Image(image) => image.to_service_item(), + ServiceItemKind::Presentation(presentation) => { + presentation.to_service_item() + } + ServiceItemKind::Content(slide) => { + todo!() + } + } + } +} + impl std::fmt::Display for ServiceItemKind { fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { let s = match self { - Self::Song(s) => "song".to_owned(), - Self::Image(i) => "image".to_owned(), - Self::Video(v) => "video".to_owned(), - Self::Presentation(p) => "html".to_owned(), - Self::Content(s) => "content".to_owned(), + Self::Song(_) => "song".to_owned(), + Self::Image(_) => "image".to_owned(), + Self::Video(_) => "video".to_owned(), + Self::Presentation(_) => "html".to_owned(), + Self::Content(_) => "content".to_owned(), }; write!(f, "{s}") } @@ -50,7 +104,7 @@ impl std::fmt::Display for ServiceItemKind { // } impl From for String { - fn from(val: ServiceItemKind) -> String { + fn from(val: ServiceItemKind) -> Self { match val { ServiceItemKind::Song(_) => "song".to_owned(), ServiceItemKind::Video(_) => "video".to_owned(), @@ -76,7 +130,9 @@ impl Display for ParseError { f: &mut std::fmt::Formatter<'_>, ) -> std::fmt::Result { let message = match self { - Self::UnknownType => "The type does not exist. It needs to be one of 'song', 'video', 'image', 'presentation', or 'content'", + Self::UnknownType => { + "The type does not exist. It needs to be one of 'song', 'video', 'image', 'presentation', or 'content'" + } }; write!(f, "Error: {message}") } diff --git a/src/core/lisp.rs b/src/core/lisp.rs deleted file mode 100644 index 2c1a666..0000000 --- a/src/core/lisp.rs +++ /dev/null @@ -1,157 +0,0 @@ -use lexpr::Value; -use strum_macros::EnumString; - -#[derive(Debug, Clone, Default, PartialEq, Eq, EnumString)] -pub(crate) enum Symbol { - #[strum(ascii_case_insensitive)] - Slide, - #[strum(ascii_case_insensitive)] - Image, - #[strum(ascii_case_insensitive)] - Text, - #[strum(ascii_case_insensitive)] - Video, - #[strum(ascii_case_insensitive)] - Song, - #[strum(disabled)] - ImageFit(ImageFit), - #[strum(disabled)] - VerseOrder(VerseOrder), - #[strum(disabled)] - #[default] - None, -} - -#[derive(Debug, Clone, PartialEq, Eq, EnumString)] -pub(crate) enum Keyword { - ImageFit(ImageFit), -} - -#[derive(Debug, Default, Clone, PartialEq, Eq, EnumString)] -pub(crate) enum ImageFit { - #[strum(ascii_case_insensitive)] - #[default] - Cover, - #[strum(ascii_case_insensitive)] - Fill, - #[strum(ascii_case_insensitive)] - Crop, -} - -#[derive(Clone, Debug, Default, PartialEq, Eq, EnumString)] -pub(crate) enum VerseOrder { - #[strum(ascii_case_insensitive)] - #[default] - V1, - #[strum(ascii_case_insensitive)] - V2, - #[strum(ascii_case_insensitive)] - V3, - #[strum(ascii_case_insensitive)] - V4, - #[strum(ascii_case_insensitive)] - V5, - #[strum(ascii_case_insensitive)] - V6, - #[strum(ascii_case_insensitive)] - C1, - #[strum(ascii_case_insensitive)] - C2, - #[strum(ascii_case_insensitive)] - C3, - #[strum(ascii_case_insensitive)] - C4, - #[strum(ascii_case_insensitive)] - B1, - #[strum(ascii_case_insensitive)] - B2, - #[strum(ascii_case_insensitive)] - B3, - #[strum(ascii_case_insensitive)] - B4, - #[strum(ascii_case_insensitive)] - O1, - #[strum(ascii_case_insensitive)] - O2, - #[strum(ascii_case_insensitive)] - O3, - #[strum(ascii_case_insensitive)] - O4, - #[strum(ascii_case_insensitive)] - E1, - #[strum(ascii_case_insensitive)] - E2, - #[strum(ascii_case_insensitive)] - I1, - #[strum(ascii_case_insensitive)] - I2, -} - -#[derive(Clone, Debug, PartialEq, Eq, EnumString)] -pub(crate) enum SongKeyword { - #[strum(ascii_case_insensitive)] - Title, - #[strum(ascii_case_insensitive)] - Author, - #[strum(ascii_case_insensitive)] - Ccli, - #[strum(ascii_case_insensitive)] - Audio, - #[strum(ascii_case_insensitive)] - Font, - #[strum(ascii_case_insensitive)] - FontSize, - #[strum(ascii_case_insensitive)] - Background, - #[strum(ascii_case_insensitive)] - VerseOrder(VerseOrder), -} - -#[derive(Clone, Debug, PartialEq, Eq, EnumString)] -pub(crate) enum ImageKeyword { - #[strum(ascii_case_insensitive)] - Source, - #[strum(ascii_case_insensitive)] - Fit, -} - -#[derive(Clone, Debug, Eq, PartialEq, EnumString)] -pub(crate) enum VideoKeyword { - #[strum(ascii_case_insensitive)] - Source, - #[strum(ascii_case_insensitive)] - Fit, -} - -pub(crate) fn get_lists(exp: &Value) -> Vec { - if exp.is_cons() { - exp.as_cons().unwrap().to_vec().0 - } else { - vec![] - } -} - -#[cfg(test)] -mod test { - - // #[test] - // fn test_list() { - // let lisp = - // read_to_string("./test_presentation.lisp").expect("oops"); - // // println!("{lisp}"); - // let mut parser = - // Parser::from_str_custom(&lisp, Options::elisp()); - // for atom in parser.value_iter() { - // match atom { - // Ok(atom) => { - // // println!("{atom}"); - // let lists = get_lists(&atom); - // assert_eq!(lists, vec![Value::Null]) - // } - // Err(e) => { - // panic!("{e}"); - // } - // } - // } - // } -} diff --git a/src/core/mod.rs b/src/core/mod.rs index e23192e..39c1f0b 100644 --- a/src/core/mod.rs +++ b/src/core/mod.rs @@ -1,10 +1,11 @@ pub mod content; +pub mod file; pub mod images; pub mod kinds; -pub mod lisp; pub mod model; pub mod presentations; pub mod service_items; +pub mod settings; pub mod slide; pub mod songs; pub mod thumbnail; diff --git a/src/core/model.rs b/src/core/model.rs index 8452cc1..2b0bd7c 100644 --- a/src/core/model.rs +++ b/src/core/model.rs @@ -1,7 +1,14 @@ -use std::mem::replace; +use std::{ + borrow::Cow, + mem::replace, + path::{Path, PathBuf}, +}; -use miette::{miette, Result}; +use cosmic::iced::clipboard::mime::{AllowedMimeTypes, AsMimeTypes}; +use miette::{IntoDiagnostic, Result, miette}; +use serde::{Deserialize, Serialize}; use sqlx::{Connection, SqliteConnection}; +use tracing::debug; #[derive(Debug, Clone)] pub struct Model { @@ -9,7 +16,9 @@ pub struct Model { pub kind: LibraryKind, } -#[derive(Debug, Clone, PartialEq, Copy)] +#[derive( + Debug, Clone, PartialEq, Eq, Copy, Hash, Serialize, Deserialize, +)] pub enum LibraryKind { Song, Video, @@ -17,6 +26,57 @@ pub enum LibraryKind { Presentation, } +#[derive( + Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize, +)] +pub struct KindWrapper(pub (LibraryKind, i32)); + +impl From for LibraryKind { + fn from(value: PathBuf) -> Self { + todo!() + } +} + +impl TryFrom<(Vec, String)> for KindWrapper { + type Error = miette::Error; + + fn try_from( + value: (Vec, String), + ) -> std::result::Result { + let (data, mime) = value; + match mime.as_str() { + "application/service-item" => { + ron::de::from_bytes(&data).into_diagnostic() + } + _ => Err(miette!("Wrong mime type: {mime}")), + } + } +} + +impl AllowedMimeTypes for KindWrapper { + fn allowed() -> Cow<'static, [String]> { + Cow::from(vec!["application/service-item".to_string()]) + } +} + +impl AsMimeTypes for KindWrapper { + fn available(&self) -> Cow<'static, [String]> { + debug!(?self); + Cow::from(vec!["application/service-item".to_string()]) + } + + fn as_bytes( + &self, + mime_type: &str, + ) -> Option> { + debug!(?self); + debug!(mime_type); + let ron = ron::ser::to_string(self).ok()?; + debug!(ron); + Some(Cow::from(ron.into_bytes())) + } +} + impl Model { pub fn add_item(&mut self, item: T) -> Result<()> { self.items.push(item); @@ -45,6 +105,7 @@ impl Model { Ok(()) } + #[must_use] pub fn get_item(&self, index: i32) -> Option<&T> { self.items.get(index as usize) } diff --git a/src/core/presentations.rs b/src/core/presentations.rs index 106f8c4..1c6b4d2 100644 --- a/src/core/presentations.rs +++ b/src/core/presentations.rs @@ -1,12 +1,14 @@ +use cosmic::widget::image::Handle; use crisp::types::{Keyword, Symbol, Value}; use miette::{IntoDiagnostic, Result}; +use mupdf::{Colorspace, Document, Matrix}; use serde::{Deserialize, Serialize}; use sqlx::{ - pool::PoolConnection, prelude::FromRow, query, sqlite::SqliteRow, - Row, Sqlite, SqliteConnection, SqlitePool, + Row, Sqlite, SqliteConnection, SqlitePool, pool::PoolConnection, + prelude::FromRow, query, sqlite::SqliteRow, }; -use std::path::PathBuf; -use tracing::error; +use std::path::{Path, PathBuf}; +use tracing::{debug, error}; use crate::{Background, Slide, SlideBuilder, TextAlignment}; @@ -22,14 +24,15 @@ use super::{ )] pub enum PresKind { Html, + Pdf { + starting_index: i32, + ending_index: i32, + }, #[default] - Pdf, Generic, } -#[derive( - Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize, -)] +#[derive(Debug, Clone, Default, Serialize, Deserialize)] pub struct Presentation { pub id: i32, pub title: String, @@ -37,8 +40,72 @@ pub struct Presentation { pub kind: PresKind, } +impl Eq for Presentation {} + +impl PartialEq for Presentation { + fn eq(&self, other: &Self) -> bool { + self.id == other.id + && self.title == other.title + && self.path == other.path + && self.kind == other.kind + } +} + +impl From for Presentation { + fn from(value: PathBuf) -> Self { + let title = value + .file_name() + .unwrap_or_default() + .to_str() + .unwrap_or_default() + .to_string(); + let kind = match value + .extension() + .unwrap_or_default() + .to_str() + .unwrap_or_default() + { + "pdf" => { + if let Ok(document) = Document::open(&value.as_path()) + { + if let Ok(count) = document.page_count() { + PresKind::Pdf { + starting_index: 0, + ending_index: count - 1, + } + } else { + PresKind::Pdf { + starting_index: 0, + ending_index: 0, + } + } + } else { + PresKind::Pdf { + starting_index: 0, + ending_index: 0, + } + } + } + "html" => PresKind::Html, + _ => PresKind::Generic, + }; + Self { + id: 0, + title, + path: value.canonicalize().unwrap_or(value), + kind, + } + } +} + +impl From<&Path> for Presentation { + fn from(value: &Path) -> Self { + Self::from(value.to_owned()) + } +} + impl From<&Presentation> for Value { - fn from(value: &Presentation) -> Self { + fn from(_value: &Presentation) -> Self { Self::List(vec![Self::Symbol(Symbol("presentation".into()))]) } } @@ -64,8 +131,9 @@ impl Content for Presentation { if self.path.exists() { self.path .file_name() - .map(|f| f.to_string_lossy().to_string()) - .unwrap_or("Missing presentation".into()) + .map_or("Missing presentation".into(), |f| { + f.to_string_lossy().to_string() + }) } else { "Missing presentation".into() } @@ -117,22 +185,76 @@ impl ServiceTrait for Presentation { } fn to_slides(&self) -> Result> { - let slide = SlideBuilder::new() - .background( - Background::try_from(self.path.clone()) - .into_diagnostic()?, - ) - .text("") - .audio("") - .font("") - .font_size(50) - .text_alignment(TextAlignment::MiddleCenter) - .video_loop(false) - .video_start_time(0.0) - .video_end_time(0.0) - .build()?; + debug!(?self); + let PresKind::Pdf { + starting_index, + ending_index, + } = self.kind + else { + return Err(miette::miette!( + "This is not a pdf presentation" + )); + }; + let background = Background::try_from(self.path.clone()) + .into_diagnostic()?; + debug!(?background); + let document = Document::open(background.path.as_path()) + .into_diagnostic()?; + debug!(?document); + let pages = document.pages().into_diagnostic()?; + debug!(?pages); + let pages: Vec = pages + .enumerate() + .filter_map(|(index, page)| { + if (index as i32) < starting_index { + return None; + } else if (index as i32) > ending_index { + return None; + }; - Ok(vec![slide]) + let Some(page) = page.ok() else { + return None; + }; + let matrix = Matrix::IDENTITY; + let colorspace = Colorspace::device_rgb(); + let Ok(pixmap) = page + .to_pixmap(&matrix, &colorspace, true, true) + .into_diagnostic() + else { + error!("Can't turn this page into pixmap"); + return None; + }; + debug!(?pixmap); + Some(Handle::from_rgba( + pixmap.width(), + pixmap.height(), + pixmap.samples().to_vec(), + )) + }) + .collect(); + + let mut slides: Vec = vec![]; + for (index, page) in pages.into_iter().enumerate() { + let slide = SlideBuilder::new() + .background( + Background::try_from(self.path.clone()) + .into_diagnostic()?, + ) + .text("") + .audio("") + .font("") + .font_size(50) + .text_alignment(TextAlignment::MiddleCenter) + .video_loop(false) + .video_start_time(0.0) + .video_end_time(0.0) + .pdf_index(index as u32) + .pdf_page(page) + .build()?; + slides.push(slide); + } + debug!(?slides); + Ok(slides) } fn box_clone(&self) -> Box { @@ -141,14 +263,16 @@ impl ServiceTrait for Presentation { } impl Presentation { + #[must_use] pub fn new() -> Self { Self { - title: "".to_string(), + title: String::new(), ..Default::default() } } - pub fn get_kind(&self) -> &PresKind { + #[must_use] + pub const fn get_kind(&self) -> &PresKind { &self.kind } } @@ -165,7 +289,10 @@ impl FromRow<'_, SqliteRow> for Presentation { kind: if row.try_get(3)? { PresKind::Html } else { - PresKind::Pdf + PresKind::Pdf { + starting_index: row.try_get(4)?, + ending_index: row.try_get(5)?, + } }, }) } @@ -185,21 +312,57 @@ impl Model { pub async fn load_from_db(&mut self, db: &mut SqliteConnection) { let result = query!( - r#"SELECT id as "id: i32", title, file_path as "path", html from presentations"# + r#"SELECT id as "id: i32", title, file_path as "path", html, starting_index, ending_index from presentations"# ) .fetch_all(db) .await; + match result { Ok(v) => { - for presentation in v.into_iter() { + for presentation in v { let _ = self.add_item(Presentation { id: presentation.id, title: presentation.title, - path: presentation.path.into(), + path: presentation.path.clone().into(), kind: if presentation.html { PresKind::Html } else { - PresKind::Pdf + if let ( + Some(starting_index), + Some(ending_index), + ) = ( + presentation.starting_index, + presentation.ending_index, + ) { + PresKind::Pdf { + starting_index: starting_index + as i32, + ending_index: ending_index as i32, + } + } else { + let path = + PathBuf::from(presentation.path); + if let Ok(document) = + Document::open(path.as_path()) + { + if let Ok(count) = + document.page_count() + { + let ending_index = count - 1; + PresKind::Pdf { + starting_index: 0, + ending_index, + } + } else { + PresKind::Pdf { + starting_index: 0, + ending_index: 0, + } + } + } else { + PresKind::Generic + } + } }, }); } @@ -211,6 +374,40 @@ impl Model { } } +pub async fn remove_from_db( + db: PoolConnection, + id: i32, +) -> Result<()> { + query!("DELETE FROM presentations WHERE id = $1", id) + .execute(&mut db.detach()) + .await + .into_diagnostic() + .map(|_| ()) +} + +pub async fn add_presentation_to_db( + presentation: Presentation, + db: PoolConnection, +) -> Result<()> { + let path = presentation + .path + .to_str() + .map(std::string::ToString::to_string) + .unwrap_or_default(); + let html = presentation.kind == PresKind::Html; + let mut db = db.detach(); + query!( + r#"INSERT INTO presentations (title, file_path, html) VALUES ($1, $2, $3)"#, + presentation.title, + path, + html, + ) + .execute(&mut db) + .await + .into_diagnostic()?; + Ok(()) +} + pub async fn update_presentation_in_db( presentation: Presentation, db: PoolConnection, @@ -218,21 +415,84 @@ pub async fn update_presentation_in_db( let path = presentation .path .to_str() - .map(|s| s.to_string()) + .map(std::string::ToString::to_string) .unwrap_or_default(); let html = presentation.kind == PresKind::Html; - query!( + let mut db = db.detach(); + let mut starting_index = 0; + let mut ending_index = 0; + if let PresKind::Pdf { + starting_index: s_index, + ending_index: e_index, + } = presentation.get_kind() + { + starting_index = *s_index; + ending_index = *e_index; + }; + let id = presentation.id; + if let Err(e) = + query!("SELECT id FROM presentations where id = $1", id) + .fetch_one(&mut db) + .await + { + if let Ok(ids) = query!("SELECT id FROM presentations") + .fetch_all(&mut db) + .await + { + let Some(mut max) = ids.iter().map(|r| r.id).max() else { + return Err(miette::miette!("cannot find max id")); + }; + debug!(?e, "Presentation not found"); + max += 1; + let result = query!( + r#"INSERT into presentations VALUES($1, $2, $3, $4, $5, $6)"#, + max, + presentation.title, + path, + html, + starting_index, + ending_index, + ) + .execute(&mut db) + .await + .into_diagnostic(); + + return match result { + Ok(_) => { + debug!("should have been updated"); + Ok(()) + } + Err(e) => { + error! {?e}; + Err(e) + } + }; + } else { + return Err(miette::miette!("cannot find ids")); + } + }; + + debug!(?presentation, "should be been updated"); + let result = query!( r#"UPDATE presentations SET title = $2, file_path = $3, html = $4 WHERE id = $1"#, presentation.id, presentation.title, path, html ) - .execute(&mut db.detach()) - .await - .into_diagnostic()?; + .execute(&mut db) + .await.into_diagnostic(); - Ok(()) + match result { + Ok(_) => { + debug!("should have been updated"); + Ok(()) + } + Err(e) => { + error! {?e}; + Err(e) + } + } } pub async fn get_presentation_from_db( @@ -262,7 +522,13 @@ mod test { #[test] pub fn test_pres() { let pres = Presentation::new(); - assert_eq!(pres.get_kind(), &PresKind::Pdf) + assert_eq!( + pres.get_kind(), + &PresKind::Pdf { + starting_index: 0, + ending_index: 0, + } + ) } #[tokio::test] diff --git a/src/core/service_items.rs b/src/core/service_items.rs index 15673d0..250d16d 100644 --- a/src/core/service_items.rs +++ b/src/core/service_items.rs @@ -1,29 +1,30 @@ use std::borrow::Cow; use std::cmp::Ordering; use std::ops::Deref; -use std::sync::Arc; +use std::path::PathBuf; +use cosmic::iced::clipboard::mime::{AllowedMimeTypes, AsMimeTypes}; use crisp::types::{Keyword, Symbol, Value}; -// use cosmic::iced::clipboard::mime::{AllowedMimeTypes, AsMimeTypes}; -use miette::Result; +use miette::{IntoDiagnostic, Result, miette}; +use serde::{Deserialize, Serialize}; use tracing::{debug, error}; use crate::Slide; use super::images::Image; use super::presentations::Presentation; -use super::songs::{lisp_to_song, Song}; +use super::songs::{Song, lisp_to_song}; use super::videos::Video; use super::kinds::ServiceItemKind; -#[derive(Debug, PartialEq, Clone)] +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] pub struct ServiceItem { pub id: i32, pub title: String, pub database_id: i32, pub kind: ServiceItemKind, - pub slides: Arc<[Slide]>, + pub slides: Vec, // pub item: Box, } @@ -47,49 +48,73 @@ impl TryFrom<(Vec, String)> for ServiceItem { fn try_from( value: (Vec, String), ) -> std::result::Result { - debug!(?value); - let val = Value::from( - String::from_utf8(value.0) - .expect("Value couldn't be made"), - ); - Ok(Self::from(&val)) + let (data, mime) = value; + debug!(?mime); + ron::de::from_bytes(&data).into_diagnostic() } } -// impl AllowedMimeTypes for ServiceItem { -// fn allowed() -> Cow<'static, [String]> { -// Cow::from(vec!["application/service-item".to_string()]) -// } -// } +impl AllowedMimeTypes for ServiceItem { + fn allowed() -> Cow<'static, [String]> { + Cow::from(vec![ + "application/service-item".to_string(), + "text/uri-list".to_string(), + "x-special/gnome-copied-files".to_string(), + ]) + } +} -// impl AsMimeTypes for ServiceItem { -// fn available(&self) -> Cow<'static, [String]> { -// debug!(?self); -// Cow::from(vec!["application/service-item".to_string()]) -// } +impl AsMimeTypes for ServiceItem { + fn available(&self) -> Cow<'static, [String]> { + debug!(?self); + Cow::from(vec!["application/service-item".to_string()]) + } -// fn as_bytes( -// &self, -// mime_type: &str, -// ) -> Option> { -// debug!(?self); -// debug!(mime_type); -// let val = Value::from(self); -// let val = String::from(val); -// Some(Cow::from(val.into_bytes())) -// } -// } + fn as_bytes( + &self, + mime_type: &str, + ) -> Option> { + debug!(?self); + debug!(mime_type); + let ron = ron::ser::to_string(self).ok()?; + debug!(ron); + Some(Cow::from(ron.into_bytes())) + } +} + +impl TryFrom for ServiceItem { + type Error = miette::Error; + + fn try_from(path: PathBuf) -> Result { + let ext = path + .extension() + .map(|ext| ext.to_str()) + .flatten() + .ok_or(miette::miette!( + "There isn't an extension on this file" + ))?; + match ext { + "png" | "jpg" | "jpeg" => { + Ok(Self::from(&Image::from(path))) + } + "mp4" | "mkv" | "webm" => { + Ok(Self::from(&Video::from(path))) + } + _ => Err(miette!("Unkown service item")), + } + } +} impl From<&ServiceItem> for Value { fn from(value: &ServiceItem) -> Self { match &value.kind { - ServiceItemKind::Song(song) => Value::from(song), - ServiceItemKind::Video(video) => Value::from(video), - ServiceItemKind::Image(image) => Value::from(image), + ServiceItemKind::Song(song) => Self::from(song), + ServiceItemKind::Video(video) => Self::from(video), + ServiceItemKind::Image(image) => Self::from(image), ServiceItemKind::Presentation(presentation) => { - Value::from(presentation) + Self::from(presentation) } - ServiceItemKind::Content(slide) => Value::from(slide), + ServiceItemKind::Content(slide) => Self::from(slide), } } } @@ -121,7 +146,7 @@ impl Default for ServiceItem { title: String::default(), database_id: 0, kind: ServiceItemKind::Content(Slide::default()), - slides: Arc::new([]), + slides: vec![], // item: Box::new(Image::default()), } } @@ -171,13 +196,13 @@ impl From<&Value> for ServiceItem { kind: ServiceItemKind::Content( slide.clone(), ), - slides: Arc::new([slide]), + slides: vec![slide], } } else if let Some(background) = list.get(background_pos) { - match background { - Value::List(item) => match &item[0] { + if let Value::List(item) = background { + match &item[0] { Value::Symbol(Symbol(s)) if s == "image" => { @@ -200,30 +225,29 @@ impl From<&Value> for ServiceItem { )) } _ => todo!(), - }, - _ => { - error!( - "There is no background here: {:?}", - background - ); - ServiceItem::default() } + } else { + error!( + "There is no background here: {:?}", + background + ); + Self::default() } } else { error!( "There is no background here: {:?}", background_pos ); - ServiceItem::default() + Self::default() } } Value::Symbol(Symbol(s)) if s == "song" => { let song = lisp_to_song(list.clone()); Self::from(&song) } - _ => ServiceItem::default(), + _ => Self::default(), }, - _ => ServiceItem::default(), + _ => Self::default(), } } } @@ -262,7 +286,7 @@ impl From<&Song> for ServiceItem { kind: ServiceItemKind::Song(song.clone()), database_id: song.id, title: song.title.clone(), - slides: slides.into(), + slides, ..Default::default() } } else { @@ -283,7 +307,7 @@ impl From<&Video> for ServiceItem { kind: ServiceItemKind::Video(video.clone()), database_id: video.id, title: video.title.clone(), - slides: slides.into(), + slides, ..Default::default() } } else { @@ -304,7 +328,7 @@ impl From<&Image> for ServiceItem { kind: ServiceItemKind::Image(image.clone()), database_id: image.id, title: image.title.clone(), - slides: slides.into(), + slides, ..Default::default() } } else { @@ -320,24 +344,26 @@ impl From<&Image> for ServiceItem { impl From<&Presentation> for ServiceItem { fn from(presentation: &Presentation) -> Self { - if let Ok(slides) = presentation.to_slides() { - Self { - kind: ServiceItemKind::Presentation( - presentation.clone(), - ), - database_id: presentation.id, - title: presentation.title.clone(), - slides: slides.into(), - ..Default::default() - } - } else { - Self { + match presentation.to_slides() { + Ok(slides) => Self { kind: ServiceItemKind::Presentation( presentation.clone(), ), database_id: presentation.id, title: presentation.title.clone(), + slides, ..Default::default() + }, + Err(e) => { + error!(?e); + Self { + kind: ServiceItemKind::Presentation( + presentation.clone(), + ), + database_id: presentation.id, + title: presentation.title.clone(), + ..Default::default() + } } } } diff --git a/src/core/settings.rs b/src/core/settings.rs new file mode 100644 index 0000000..0827946 --- /dev/null +++ b/src/core/settings.rs @@ -0,0 +1,77 @@ +// SPDX-License-Identifier: GPL-3.0-only + +use cosmic::{ + cosmic_config::{ + self, CosmicConfigEntry, + cosmic_config_derive::CosmicConfigEntry, + }, + theme, +}; +use serde::{Deserialize, Serialize}; +use std::{collections::VecDeque, path::PathBuf}; + +pub const SETTINGS_VERSION: u64 = 1; + +#[derive( + Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize, +)] +pub enum AppTheme { + Dark, + Light, + System, +} + +impl AppTheme { + pub fn theme(&self) -> theme::Theme { + match self { + Self::Dark => theme::Theme::dark(), + Self::Light => theme::Theme::light(), + Self::System => theme::system_preference(), + } + } +} + +#[derive( + Clone, + CosmicConfigEntry, + Debug, + Deserialize, + Eq, + PartialEq, + Serialize, +)] +#[serde(default)] +pub struct Settings { + pub app_theme: AppTheme, + pub obs_url: Option, +} + +impl Default for Settings { + fn default() -> Self { + Self { + app_theme: AppTheme::System, + obs_url: None, + } + } +} + +#[derive( + Clone, + CosmicConfigEntry, + Debug, + Deserialize, + Eq, + PartialEq, + Serialize, +)] +pub struct PersistentState { + pub recent_files: VecDeque, +} + +impl Default for PersistentState { + fn default() -> Self { + Self { + recent_files: VecDeque::new(), + } + } +} diff --git a/src/core/slide.rs b/src/core/slide.rs index 6400639..70e60c1 100644 --- a/src/core/slide.rs +++ b/src/core/slide.rs @@ -1,7 +1,8 @@ -// use iced::dialog::ashpd::url::Url; +use cosmic::widget::image::Handle; +// use cosmic::dialog::ashpd::url::Url; use crisp::types::{Keyword, Symbol, Value}; use iced_video_player::Video; -use miette::{miette, Result}; +use miette::{Result, miette}; use serde::{Deserialize, Serialize}; use std::{ fmt::Display, @@ -9,10 +10,49 @@ use std::{ }; use tracing::error; -use crate::ui::text_svg::{self, TextSvg}; +use crate::ui::text_svg::TextSvg; use super::songs::Song; +#[derive( + Clone, Debug, Default, PartialEq, Serialize, Deserialize, +)] +pub struct Slide { + id: i32, + background: Background, + text: String, + font: String, + font_size: i32, + text_alignment: TextAlignment, + audio: Option, + video_loop: bool, + video_start_time: f32, + video_end_time: f32, + pdf_index: u32, + #[serde(skip)] + pdf_page: Option, + #[serde(skip)] + pub text_svg: Option, +} + +#[derive( + Clone, Copy, Debug, Default, PartialEq, Eq, Serialize, Deserialize, +)] +pub enum BackgroundKind { + #[default] + Image, + Video, + Pdf, + Html, +} + +#[derive(Debug, Clone, Default)] +struct Image { + pub source: String, + pub fit: String, + pub children: Vec, +} + #[derive( Clone, Copy, @@ -67,9 +107,9 @@ impl TryFrom<&Background> for Video { fn try_from( value: &Background, ) -> std::result::Result { - Video::new( + Self::new( &url::Url::from_file_path(value.path.clone()) - .map_err(|_| ParseError::BackgroundNotVideo)?, + .map_err(|()| ParseError::BackgroundNotVideo)?, ) .map_err(|_| ParseError::BackgroundNotVideo) } @@ -81,9 +121,9 @@ impl TryFrom for Video { fn try_from( value: Background, ) -> std::result::Result { - Video::new( + Self::new( &url::Url::from_file_path(value.path) - .map_err(|_| ParseError::BackgroundNotVideo)?, + .map_err(|()| ParseError::BackgroundNotVideo)?, ) .map_err(|_| ParseError::BackgroundNotVideo) } @@ -92,7 +132,7 @@ impl TryFrom for Video { impl TryFrom for Background { type Error = ParseError; fn try_from(value: String) -> Result { - Background::try_from(value.as_str()) + Self::try_from(value.as_str()) } } @@ -107,7 +147,7 @@ impl TryFrom for Background { .to_str() .unwrap() .to_string(); - let path = path.replace("~", &home); + let path = path.replace('~', &home); PathBuf::from(path) } else { path @@ -121,21 +161,27 @@ impl TryFrom for Background { .to_str() .unwrap_or_default(); match extension { - "jpeg" | "jpg" | "png" | "webp" | "html" => { - Ok(Self { - path: value, - kind: BackgroundKind::Image, - }) - } + "jpeg" | "jpg" | "png" | "webp" => Ok(Self { + path: value, + kind: BackgroundKind::Image, + }), "mp4" | "mkv" | "webm" => Ok(Self { path: value, kind: BackgroundKind::Video, }), + "pdf" => Ok(Self { + path: value, + kind: BackgroundKind::Pdf, + }), + "html" => Ok(Self { + path: value, + kind: BackgroundKind::Html, + }), _ => Err(ParseError::NonBackgroundFile), } } Err(e) => { - error!("Couldn't canonicalize: {e} {:?}", path); + // error!("Couldn't canonicalize: {e} {:?}", path); Err(ParseError::CannotCanonicalize) } } @@ -146,10 +192,10 @@ impl TryFrom<&str> for Background { type Error = ParseError; fn try_from(value: &str) -> Result { let value = value.trim_start_matches("file://"); - if value.starts_with("~") { + if value.starts_with('~') { if let Some(home) = dirs::home_dir() { if let Some(home) = home.to_str() { - let value = value.replace("~", home); + let value = value.replace('~', home); Self::try_from(PathBuf::from(value)) } else { Self::try_from(PathBuf::from(value)) @@ -203,43 +249,16 @@ impl Display for ParseError { } } -#[derive( - Clone, Copy, Debug, Default, PartialEq, Eq, Serialize, Deserialize, -)] -pub enum BackgroundKind { - #[default] - Image, - Video, -} - impl From for BackgroundKind { fn from(value: String) -> Self { if value == "image" { - BackgroundKind::Image + Self::Image } else { - BackgroundKind::Video + Self::Video } } } -#[derive( - Clone, Debug, Default, PartialEq, Serialize, Deserialize, -)] -pub struct Slide { - id: i32, - background: Background, - text: String, - font: String, - font_size: i32, - text_alignment: TextAlignment, - audio: Option, - video_loop: bool, - video_start_time: f32, - video_end_time: f32, - #[serde(skip)] - pub text_svg: TextSvg, -} - impl From<&Slide> for Value { fn from(value: &Slide) -> Self { Self::List(vec![Self::Symbol(Symbol("slide".into()))]) @@ -252,12 +271,17 @@ impl Slide { self } + pub fn with_text_svg(mut self, text_svg: TextSvg) -> Self { + self.text_svg = Some(text_svg); + self + } + pub fn set_font(mut self, font: impl AsRef) -> Self { self.font = font.as_ref().into(); self } - pub fn set_font_size(mut self, font_size: i32) -> Self { + pub const fn set_font_size(mut self, font_size: i32) -> Self { self.font_size = font_size; self } @@ -267,7 +291,12 @@ impl Slide { self } - pub fn background(&self) -> &Background { + pub const fn set_pdf_index(mut self, pdf_index: u32) -> Self { + self.pdf_index = pdf_index; + self + } + + pub const fn background(&self) -> &Background { &self.background } @@ -275,7 +304,11 @@ impl Slide { self.text.clone() } - pub fn font_size(&self) -> i32 { + pub const fn text_alignment(&self) -> TextAlignment { + self.text_alignment + } + + pub const fn font_size(&self) -> i32 { self.font_size } @@ -283,7 +316,7 @@ impl Slide { self.font.clone() } - pub fn video_loop(&self) -> bool { + pub const fn video_loop(&self) -> bool { self.video_loop } @@ -291,9 +324,17 @@ impl Slide { self.audio.clone() } + pub fn pdf_page(&self) -> Option { + self.pdf_page.clone() + } + + pub const fn pdf_index(&self) -> u32 { + self.pdf_index + } + pub fn song_slides(song: &Song) -> Result> { let lyrics = song.get_lyrics()?; - let slides: Vec = lyrics + let slides: Vec = lyrics .iter() .map(|l| { let song = song.clone(); @@ -317,7 +358,7 @@ impl Slide { Ok(slides) } - pub(crate) fn set_index(&mut self, index: i32) { + pub(crate) const fn set_index(&mut self, index: i32) { self.id = index; } @@ -340,7 +381,7 @@ impl From<&Value> for Slide { fn from(value: &Value) -> Self { match value { Value::List(list) => lisp_to_slide(list), - _ => Slide::default(), + _ => Self::default(), } } } @@ -363,7 +404,7 @@ fn lisp_to_slide(lisp: &Vec) -> Slide { slide = slide.background(lisp_to_background(background)); } else { slide = slide.background(Background::default()); - }; + } let text_position = lisp.iter().position(|v| match v { Value::List(vec) => { @@ -506,6 +547,9 @@ pub struct SlideBuilder { video_loop: Option, video_start_time: Option, video_end_time: Option, + pdf_index: Option, + #[serde(skip)] + pdf_page: Option, #[serde(skip)] text_svg: Option, } @@ -589,6 +633,19 @@ impl SlideBuilder { self } + pub(crate) fn pdf_page(mut self, pdf_page: Handle) -> Self { + let _ = self.pdf_page.insert(pdf_page); + self + } + + pub(crate) fn pdf_index( + mut self, + pdf_index: impl Into, + ) -> Self { + let _ = self.pdf_index.insert(pdf_index.into()); + self + } + pub(crate) fn build(self) -> Result { let Some(background) = self.background else { return Err(miette!("No background")); @@ -614,60 +671,27 @@ impl SlideBuilder { let Some(video_end_time) = self.video_end_time else { return Err(miette!("No video_end_time")); }; - if let Some(text_svg) = self.text_svg { - Ok(Slide { - background, - text, - font, - font_size, - text_alignment, - audio: self.audio, - video_loop, - video_start_time, - video_end_time, - text_svg, - ..Default::default() - }) - } else { - let text_svg = TextSvg::new(text.clone()) - .alignment(text_alignment) - .fill("#fff") - .shadow(text_svg::shadow(2, 2, 5, "#000000")) - .stroke(text_svg::stroke(3, "#000")) - .font( - text_svg::Font::from(font.clone()) - .size(font_size.try_into().unwrap()), - ) - .build(); - Ok(Slide { - background, - text, - font, - font_size, - text_alignment, - audio: self.audio, - video_loop, - video_start_time, - video_end_time, - text_svg, - ..Default::default() - }) - } + Ok(Slide { + background, + text, + font, + font_size, + text_alignment, + audio: self.audio, + video_loop, + video_start_time, + video_end_time, + text_svg: self.text_svg, + pdf_index: self.pdf_index.unwrap_or_default(), + pdf_page: self.pdf_page, + ..Default::default() + }) } } -#[derive(Debug, Clone, Default)] -struct Image { - pub source: String, - pub fit: String, - pub children: Vec, -} - impl Image { fn new() -> Self { - Self { - ..Default::default() - } + Default::default() } } diff --git a/src/core/songs.rs b/src/core/songs.rs index 270bc00..891a889 100644 --- a/src/core/songs.rs +++ b/src/core/songs.rs @@ -1,15 +1,15 @@ use std::{collections::HashMap, option::Option, path::PathBuf}; use crisp::types::{Keyword, Symbol, Value}; -use miette::{miette, IntoDiagnostic, Result}; +use miette::{IntoDiagnostic, Result, miette}; use serde::{Deserialize, Serialize}; use sqlx::{ - pool::PoolConnection, query, sqlite::SqliteRow, FromRow, Row, - Sqlite, SqliteConnection, SqlitePool, + Acquire, FromRow, Row, Sqlite, SqliteConnection, SqlitePool, + pool::PoolConnection, query, sqlite::SqliteRow, }; use tracing::error; -use crate::{core::slide, Slide, SlideBuilder}; +use crate::{Slide, SlideBuilder, core::slide}; use super::{ content::Content, @@ -34,6 +34,7 @@ pub struct Song { pub text_alignment: Option, pub font: Option, pub font_size: Option, + pub stroke_size: Option, } impl From<&Song> for Value { @@ -127,7 +128,9 @@ impl FromRow<'_, SqliteRow> for Song { })), verse_order: Some({ let str: &str = row.try_get(0)?; - str.split(' ').map(|s| s.to_string()).collect() + str.split(' ') + .map(std::string::ToString::to_string) + .collect() }), background: { let string: String = row.try_get(7)?; @@ -158,6 +161,7 @@ impl FromRow<'_, SqliteRow> for Song { }), font: row.try_get(6)?, font_size: row.try_get(1)?, + stroke_size: None, }) } } @@ -249,9 +253,7 @@ pub fn lisp_to_song(list: Vec) -> Song { .position(|v| v == &Value::Keyword(Keyword::from("title"))) { let pos = key_pos + 1; - list.get(pos) - .map(String::from) - .unwrap_or(String::from("song")) + list.get(pos).map_or(String::from("song"), String::from) } else { String::from("song") }; @@ -318,30 +320,30 @@ pub fn lisp_to_song(list: Vec) -> Song { let lyric = String::from(&lyric[1]); let verse_title = match lyric_verse.as_str() { - "i1" => r#"\n\nIntro 1\n"#, - "i2" => r#"\n\nIntro 1\n"#, - "v1" => r#"\n\nVerse 1\n"#, - "v2" => r#"\n\nVerse 2\n"#, - "v3" => r#"\n\nVerse 3\n"#, - "v4" => r#"\n\nVerse 4\n"#, - "v5" => r#"\n\nVerse 5\n"#, - "c1" => r#"\n\nChorus 1\n"#, - "c2" => r#"\n\nChorus 2\n"#, - "c3" => r#"\n\nChorus 3\n"#, - "c4" => r#"\n\nChorus 4\n"#, - "b1" => r#"\n\nBridge 1\n"#, - "b2" => r#"\n\nBridge 2\n"#, - "e1" => r#"\n\nEnding 1\n"#, - "e2" => r#"\n\nEnding 2\n"#, - "o1" => r#"\n\nOther 1\n"#, - "o2" => r#"\n\nOther 2\n"#, + "i1" => r"\n\nIntro 1\n", + "i2" => r"\n\nIntro 1\n", + "v1" => r"\n\nVerse 1\n", + "v2" => r"\n\nVerse 2\n", + "v3" => r"\n\nVerse 3\n", + "v4" => r"\n\nVerse 4\n", + "v5" => r"\n\nVerse 5\n", + "c1" => r"\n\nChorus 1\n", + "c2" => r"\n\nChorus 2\n", + "c3" => r"\n\nChorus 3\n", + "c4" => r"\n\nChorus 4\n", + "b1" => r"\n\nBridge 1\n", + "b2" => r"\n\nBridge 2\n", + "e1" => r"\n\nEnding 1\n", + "e2" => r"\n\nEnding 2\n", + "o1" => r"\n\nOther 1\n", + "o2" => r"\n\nOther 2\n", _ => "", }; let lyric = format!("{verse_title}{lyric}"); let lyric = lyric.replace( - "\\n", r#" -"#, + "\\n", r" +", ); lyrics.push(lyric); } @@ -391,15 +393,15 @@ impl Model { let result = query(r#"SELECT verse_order as "verse_order!", font_size as "font_size!: i32", background_type as "background_type!", horizontal_text_alignment as "horizontal_text_alignment!", vertical_text_alignment as "vertical_text_alignment!", title as "title!", font as "font!", background as "background!", lyrics as "lyrics!", ccli as "ccli!", author as "author!", audio as "audio!", id as "id: i32" from songs"#).fetch_all(db).await; match result { Ok(s) => { - for song in s.into_iter() { + for song in s { match Song::from_row(&song) { Ok(song) => { let _ = self.add_item(song); } Err(e) => { - error!("Could not convert song: {e}") + error!("Could not convert song: {e}"); } - }; + } } } Err(e) => { @@ -409,6 +411,65 @@ impl Model { } } +pub async fn remove_from_db( + db: PoolConnection, + id: i32, +) -> Result<()> { + query!("DELETE FROM songs WHERE id = $1", id) + .execute(&mut db.detach()) + .await + .into_diagnostic() + .map(|_| ()) +} + +pub async fn add_song_to_db( + db: PoolConnection, +) -> Result { + let mut db = db.detach(); + let mut song = Song::default(); + + let verse_order = { + if let Some(vo) = song.verse_order.clone() { + vo.into_iter() + .map(|mut s| { + s.push(' '); + s + }) + .collect::() + } else { + String::new() + } + }; + + let audio = song + .audio + .clone() + .map(|a| a.to_str().unwrap_or_default().to_string()); + + let background = song + .background + .clone() + .map(|b| b.path.to_str().unwrap_or_default().to_string()); + + let res = query!( + r#"INSERT INTO songs (title, lyrics, author, ccli, verse_order, audio, font, font_size, background) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)"#, + song.title, + song.lyrics, + song.author, + song.ccli, + verse_order, + audio, + song.font, + song.font_size, + background + ) + .execute(&mut db) + .await + .into_diagnostic()?; + song.id = res.last_insert_rowid() as i32; + Ok(song) +} + pub async fn update_song_in_db( item: Song, db: PoolConnection, @@ -424,7 +485,7 @@ pub async fn update_song_in_db( }) .collect::() } else { - String::from("") + String::new() } }; @@ -487,13 +548,13 @@ impl Song { let verse_order = self.verse_order.clone(); let mut lyric_map = HashMap::new(); - let mut verse_title = String::from(""); - let mut lyric = String::from(""); + let mut verse_title = String::new(); + let mut lyric = String::new(); for (i, line) in raw_lyrics.split('\n').enumerate() { if VERSE_KEYWORDS.contains(&line) { if i != 0 { lyric_map.insert(verse_title, lyric); - lyric = String::from(""); + lyric = String::new(); verse_title = line.to_string(); } else { verse_title = line.to_string(); @@ -534,7 +595,7 @@ impl Song { lyric_list.push(lyric.to_string()); } else { // error!("NOT WORKING!"); - }; + } } // for lyric in lyric_list.iter() { // debug!(lyric = ?lyric) @@ -625,7 +686,27 @@ You saved my soul" let lyrics = song.get_lyrics(); match lyrics { Ok(lyrics) => { - assert_eq!(vec!["From the Day\nI Am They", "When You found me,\nI was so blind\nMy sin was before me,\nI was swallowed by pride", "But out of the darkness,\nYou brought me to Your light\nYou showed me new mercy\nAnd opened up my eyes", "From the day\nYou saved my soul\n'Til the very moment\nWhen I come home", "I'll sing, I'll dance,\nMy heart will overflow\nFrom the day\nYou saved my soul", "Where brilliant light\nIs all around\nAnd endless joy\nIs the only sound", "Oh, rest my heart\nForever now\nOh, in Your arms\nI'll always be found", "From the day\nYou saved my soul\n'Til the very moment\nWhen I come home", "I'll sing, I'll dance,\nMy heart will overflow\nFrom the day\nYou saved my soul", "My love is Yours\nMy heart is Yours\nMy life is Yours\nForever", "My love is Yours\nMy heart is Yours\nMy life is Yours\nForever", "From the day\nYou saved my soul\n'Til the very moment\nWhen I come home", "I'll sing, I'll dance,\nMy heart will overflow\nFrom the day\nYou saved my soul", "From the day\nYou saved my soul\n'Til the very moment\nWhen I come home", "I'll sing, I'll dance,\nMy heart will overflow\nFrom the day\nYou saved my soul", "Oh Oh Oh\nFrom the day\nYou saved my soul\n"], lyrics); + assert_eq!( + vec![ + "From the Day\nI Am They", + "When You found me,\nI was so blind\nMy sin was before me,\nI was swallowed by pride", + "But out of the darkness,\nYou brought me to Your light\nYou showed me new mercy\nAnd opened up my eyes", + "From the day\nYou saved my soul\n'Til the very moment\nWhen I come home", + "I'll sing, I'll dance,\nMy heart will overflow\nFrom the day\nYou saved my soul", + "Where brilliant light\nIs all around\nAnd endless joy\nIs the only sound", + "Oh, rest my heart\nForever now\nOh, in Your arms\nI'll always be found", + "From the day\nYou saved my soul\n'Til the very moment\nWhen I come home", + "I'll sing, I'll dance,\nMy heart will overflow\nFrom the day\nYou saved my soul", + "My love is Yours\nMy heart is Yours\nMy life is Yours\nForever", + "My love is Yours\nMy heart is Yours\nMy life is Yours\nForever", + "From the day\nYou saved my soul\n'Til the very moment\nWhen I come home", + "I'll sing, I'll dance,\nMy heart will overflow\nFrom the day\nYou saved my soul", + "From the day\nYou saved my soul\n'Til the very moment\nWhen I come home", + "I'll sing, I'll dance,\nMy heart will overflow\nFrom the day\nYou saved my soul", + "Oh Oh Oh\nFrom the day\nYou saved my soul\n" + ], + lyrics + ); } Err(e) => { assert!(false, "{:?}", e) @@ -711,7 +792,8 @@ You saved my soul" background: Some(Background::try_from("file:///home/chris/nc/tfc/openlp/CMG - Bright Mountains 01.jpg").unwrap()), text_alignment: Some(TextAlignment::MiddleCenter), font: Some("Quicksand Bold".to_string()), - font_size: Some(60) + font_size: Some(60), + stroke_size: None, } } diff --git a/src/core/thumbnail.rs b/src/core/thumbnail.rs index dc100c5..108ed52 100644 --- a/src/core/thumbnail.rs +++ b/src/core/thumbnail.rs @@ -11,7 +11,9 @@ pub fn bg_from_video( video: &Path, screenshot: &Path, ) -> Result<(), Box> { - if !screenshot.exists() { + if screenshot.exists() { + debug!("Screenshot already exists"); + } else { let output_duration = Command::new("ffprobe") .args(["-i", &video.to_string_lossy()]) .output() @@ -26,9 +28,9 @@ pub fn bg_from_video( let mut duration = log.split_off(duration_index + 10); duration.truncate(11); // debug!("rust-duration-is: {duration}"); - let mut hours = String::from(""); - let mut minutes = String::from(""); - let mut seconds = String::from(""); + let mut hours = String::new(); + let mut minutes = String::new(); + let mut seconds = String::new(); for (i, c) in duration.chars().enumerate() { if i <= 1 { hours.push(c); @@ -63,8 +65,6 @@ pub fn bg_from_video( .expect("failed to execute ffmpeg"); // io::stdout().write_all(&output.stdout).unwrap(); // io::stderr().write_all(&output.stderr).unwrap(); - } else { - debug!("Screenshot already exists"); } Ok(()) } @@ -95,7 +95,10 @@ mod test { let screenshot = bg_path_from_video(video); let screenshot_string = screenshot.to_str().expect("Should be thing"); - assert_eq!(screenshot_string, "/home/chris/.local/share/lumina/thumbnails/moms-funeral.png"); + assert_eq!( + screenshot_string, + "/home/chris/.local/share/lumina/thumbnails/moms-funeral.png" + ); // let runtime = tokio::runtime::Runtime::new().unwrap(); let result = bg_from_video(video, &screenshot); @@ -118,6 +121,9 @@ mod test { let screenshot = bg_path_from_video(video); let screenshot_string = screenshot.to_str().expect("Should be thing"); - assert_ne!(screenshot_string, "/home/chris/.local/share/lumina/thumbnails/All WebDev Sucks and you know it.webm"); + assert_ne!( + screenshot_string, + "/home/chris/.local/share/lumina/thumbnails/All WebDev Sucks and you know it.webm" + ); } } diff --git a/src/core/videos.rs b/src/core/videos.rs index 879c14a..e80f9b2 100644 --- a/src/core/videos.rs +++ b/src/core/videos.rs @@ -11,11 +11,11 @@ use crisp::types::{Keyword, Symbol, Value}; use miette::{IntoDiagnostic, Result}; use serde::{Deserialize, Serialize}; use sqlx::{ - pool::PoolConnection, query, query_as, Sqlite, SqliteConnection, - SqlitePool, + Sqlite, SqliteConnection, SqlitePool, pool::PoolConnection, + query, query_as, }; -use std::path::PathBuf; -use tracing::error; +use std::path::{Path, PathBuf}; +use tracing::{debug, error}; #[derive( Clone, Debug, Default, PartialEq, Serialize, Deserialize, @@ -30,11 +30,31 @@ pub struct Video { } impl From<&Video> for Value { - fn from(value: &Video) -> Self { + fn from(_value: &Video) -> Self { Self::List(vec![Self::Symbol(Symbol("video".into()))]) } } +impl From for Video { + fn from(value: PathBuf) -> Self { + let title: String = value.file_name().map_or_else( + || "Video".into(), + |filename| filename.to_str().unwrap_or("Video").into(), + ); + Self { + title, + path: value, + ..Default::default() + } + } +} + +impl From<&Path> for Video { + fn from(value: &Path) -> Self { + Self::from(value.to_owned()) + } +} + impl Content for Video { fn title(&self) -> String { self.title.clone() @@ -56,8 +76,9 @@ impl Content for Video { if self.path.exists() { self.path .file_name() - .map(|f| f.to_string_lossy().to_string()) - .unwrap_or("Missing video".into()) + .map_or("Missing video".into(), |f| { + f.to_string_lossy().to_string() + }) } else { "Missing video".into() } @@ -89,7 +110,7 @@ impl From<&Value> for Video { let path = p.to_str().unwrap_or_default().to_string(); let title = - path.rsplit_once("/").unwrap_or_default().1; + path.rsplit_once('/').unwrap_or_default().1; title.to_string() }); @@ -123,8 +144,7 @@ impl From<&Value> for Video { }) { let pos = loop_pos + 1; list.get(pos) - .map(|l| String::from(l) == *"true") - .unwrap_or_default() + .is_some_and(|l| String::from(l) == *"true") } else { false }; @@ -192,17 +212,54 @@ impl Model