diff --git a/.config/nextest.toml b/.config/nextest.toml deleted file mode 100644 index 6a1b75e..0000000 --- a/.config/nextest.toml +++ /dev/null @@ -1 +0,0 @@ -experimental = [ "benchmarks" ] \ No newline at end of file diff --git a/.envrc b/.envrc index ce64c4d..e6b394d 100644 --- a/.envrc +++ b/.envrc @@ -1,4 +1,4 @@ -DATABASE_URL="sqlite://./test.db" +DATABASE_URL="sqlite:///home/chris/.local/share/lumina/library-db.sqlite3" use flake . # eval $(guix shell -D --search-paths) diff --git a/.forgejo/workflows/demo.yaml b/.forgejo/workflows/demo.yaml new file mode 100644 index 0000000..7657407 --- /dev/null +++ b/.forgejo/workflows/demo.yaml @@ -0,0 +1,18 @@ +on: [push] +jobs: + test: + runs-on: ubuntu-latest + steps: + - name: checkout + uses: actions/checkout@v3 + + - run: | + apt update + apt install sudo + apt install just + + - uses: https://github.com/cachix/install-nix-action@v27 + with: + nix_path: nixpkgs=channel:nixos-unstable + + - run: nix develop --command just test diff --git a/.forgejo/workflows/lints.yaml b/.forgejo/workflows/lints.yaml deleted file mode 100644 index 3e08132..0000000 --- a/.forgejo/workflows/lints.yaml +++ /dev/null @@ -1,9 +0,0 @@ -on: [push] -jobs: - clippy: - runs-on: nixos-latest - steps: - - run: nix-env --install nodejs - - name: checkout - uses: actions/checkout@v4 - - run: nix --extra-experimental-features nix-command --extra-experimental-features flakes develop --command cargo clippy -- -D clippy::pedantic -D clippy::perf -D clippy::nursery -D clippy::unwrap_used diff --git a/.forgejo/workflows/test.yaml b/.forgejo/workflows/test.yaml deleted file mode 100644 index 5aa92e6..0000000 --- a/.forgejo/workflows/test.yaml +++ /dev/null @@ -1,9 +0,0 @@ -on: [push] -jobs: - test: - runs-on: nixos-latest - steps: - - run: nix-env --install nodejs - - name: checkout - uses: actions/checkout@v4 - - run: nix --extra-experimental-features nix-command --extra-experimental-features flakes develop --command just ci-test diff --git a/.gitignore b/.gitignore index 8181bf8..bf4ca84 100644 --- a/.gitignore +++ b/.gitignore @@ -3,14 +3,3 @@ .sqlx .env data.db -/flamegraph.svg -/.zed/ -/perf.data -/perf.data.old -.aider* - -test.db-shm -test.db-wal -test.lum -test.pres -profile.json.gz \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock index 514c9e6..4e60530 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,9 +4,9 @@ version = 4 [[package]] name = "ab_glyph" -version = "0.2.32" +version = "0.2.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01c0457472c38ea5bd1c3b5ada5e368271cb550be7a4ca4a0b4634e9913f6cc2" +checksum = "e074464580a518d16a7126262fffaaa47af89d4099d4cb403f8ed938ba12ee7d" dependencies = [ "ab_glyph_rasterizer", "owned_ttf_parser", @@ -18,91 +18,11 @@ 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.25.1" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b5d307320b3181d6d7954e663bd7c774a838b8220fe0593c86d9fb09f498b4b" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" dependencies = [ "gimli", ] @@ -120,7 +40,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" dependencies = [ "cfg-if", - "getrandom 0.3.4", + "getrandom 0.3.3", "once_cell", "version_check", "zerocopy", @@ -128,9 +48,9 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "1.1.4" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" dependencies = [ "memchr", ] @@ -141,15 +61,6 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "250f629c0161ad8107cf89319e990051fae62832fd343083bea452d93e2205fd" -[[package]] -name = "aligned" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee4508988c62edf04abd8d92897fca0c2995d907ce1dfeaf369dac3716a40685" -dependencies = [ - "as-slice", -] - [[package]] name = "aligned-vec" version = "0.6.4" @@ -165,12 +76,6 @@ 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" @@ -178,7 +83,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed7572b7ba83a31e20d1b48970ee402d2e3e0537dcfe0a3ff4d6eb7508617d43" dependencies = [ "alsa-sys", - "bitflags 2.10.0", + "bitflags 2.9.2", "cfg-if", "libc", ] @@ -200,14 +105,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef6978589202a00cd7e118380c448a08b6ed394c3a8df3a430d0898e3a42d046" dependencies = [ "android-properties", - "bitflags 2.10.0", + "bitflags 2.9.2", "cc", "cesu8", "jni", "jni-sys", "libc", "log", - "ndk", + "ndk 0.9.0", "ndk-context", "ndk-sys 0.6.0+11769913", "num_enum", @@ -220,6 +125,12 @@ 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" @@ -231,9 +142,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.21" +version = "0.6.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" +checksum = "3ae563653d1938f79b1ab1b5e668c87c76a9930414574a6583a7b7e11a8e6192" dependencies = [ "anstyle", "anstyle-parse", @@ -246,9 +157,9 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.13" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" +checksum = "862ed96ca487e809f1c8e5a8447f6ee2cf102f846893800b20cebdf541fc6bbd" [[package]] name = "anstyle-parse" @@ -261,44 +172,29 @@ dependencies = [ [[package]] name = "anstyle-query" -version = "1.1.5" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" +checksum = "9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.60.2", ] [[package]] name = "anstyle-wincon" -version = "3.0.11" +version = "3.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" +checksum = "3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a" dependencies = [ "anstyle", "once_cell_polyfill", - "windows-sys 0.61.2", + "windows-sys 0.60.2", ] [[package]] name = "anyhow" -version = "1.0.100" +version = "1.0.99" source = "registry+https://github.com/rust-lang/crates.io-index" -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", -] +checksum = "b0674a1ddeecb70197781e945de4b3b8ffb61fa939a5597bcf48503737663100" [[package]] name = "arbitrary" @@ -306,12 +202,6 @@ 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" @@ -320,7 +210,7 @@ checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.106", ] [[package]] @@ -341,15 +231,6 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b" -[[package]] -name = "as-slice" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "516b6b4f0e40d50dcda9365d53964ec74560ad4284da2e7fc97122cd83174516" -dependencies = [ - "stable_deref_trait", -] - [[package]] name = "ash" version = "0.38.0+1.3.281" @@ -361,43 +242,39 @@ dependencies = [ [[package]] name = "ashpd" -version = "0.11.0" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6cbdf310d77fd3aaee6ea2093db7011dc2d35d2eb3481e5607f1f8d942ed99df" +checksum = "4ac22eda5891cc086690cb6fa10121c0390de0e3b04eb269f2d766b00d3f2d81" dependencies = [ + "async-fs 2.1.3", + "async-net", "enumflags2", "futures-channel", "futures-util", - "rand 0.9.2", - "raw-window-handle", + "once_cell", + "rand", "serde", "serde_repr", - "tokio", "url", - "wayland-backend", - "wayland-client", - "wayland-protocols", - "zbus 5.12.0", + "zbus 3.15.2", ] [[package]] name = "ashpd" -version = "0.12.0" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da0986d5b4f0802160191ad75f8d33ada000558757db3defb70299ca95d9fcbd" +checksum = "de3d60bee1a1d38c2077030f4788e1b4e31058d2e79a8cfc8f2b440bd44db290" dependencies = [ + "async-fs 2.1.3", + "async-net", "enumflags2", "futures-channel", "futures-util", - "rand 0.9.2", + "rand", "serde", "serde_repr", - "tokio", "url", - "wayland-backend", - "wayland-client", - "wayland-protocols", - "zbus 5.12.0", + "zbus 5.9.0", ] [[package]] @@ -422,6 +299,17 @@ 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" @@ -436,9 +324,9 @@ dependencies = [ [[package]] name = "async-executor" -version = "1.13.3" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497c00e0fd83a72a79a39fcbd8e3e2f055d6f6c7e025f3b3d91f4f8e76527fb8" +checksum = "bb812ffb58524bdd10860d7d974e2f01cc0950c2438a74ee5ec2e2280c6c4ffa" dependencies = [ "async-task", "concurrent-queue", @@ -448,6 +336,44 @@ 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" @@ -470,20 +396,20 @@ dependencies = [ [[package]] name = "async-io" -version = "2.6.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "456b8a8feb6f42d237746d4b3e9a178494627745c3c56c6ea55d92ba50d026fc" +checksum = "19634d6336019ef220f09fd31168ce5c184b295cbf80345437cc36094ef223ca" dependencies = [ - "autocfg", + "async-lock 3.4.1", "cfg-if", "concurrent-queue", "futures-io", "futures-lite 2.6.1", "parking", - "polling 3.11.0", - "rustix 1.1.2", + "polling 3.10.0", + "rustix 1.0.8", "slab", - "windows-sys 0.61.2", + "windows-sys 0.60.2", ] [[package]] @@ -506,6 +432,17 @@ 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" @@ -525,12 +462,12 @@ dependencies = [ [[package]] name = "async-process" -version = "2.5.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc50921ec0055cdd8a16de48773bfeec5c972598674347252c0399676be7da75" +checksum = "65daa13722ad51e6ab1a1b9c01299142bc75135b337923cfa10e79bbbd669f00" dependencies = [ - "async-channel", - "async-io 2.6.0", + "async-channel 2.5.0", + "async-io 2.5.0", "async-lock 3.4.1", "async-signal", "async-task", @@ -538,7 +475,7 @@ dependencies = [ "cfg-if", "event-listener 5.4.1", "futures-lite 2.6.1", - "rustix 1.1.2", + "rustix 1.0.8", ] [[package]] @@ -549,25 +486,51 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.106", ] [[package]] name = "async-signal" -version = "0.2.13" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43c070bbf59cd3570b6b2dd54cd772527c7c3620fce8be898406dd3ed6adc64c" +checksum = "f567af260ef69e1d52c2b560ce0ea230763e6fbb9214a85d768760a920e3e3c1" dependencies = [ - "async-io 2.6.0", + "async-io 2.5.0", "async-lock 3.4.1", "atomic-waker", "cfg-if", "futures-core", "futures-io", - "rustix 1.1.2", + "rustix 1.0.8", "signal-hook-registry", "slab", - "windows-sys 0.61.2", + "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", ] [[package]] @@ -584,7 +547,7 @@ checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.106", ] [[package]] @@ -608,112 +571,22 @@ 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.111", -] - [[package]] name = "autocfg" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" -[[package]] -name = "av-scenechange" -version = "0.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f321d77c20e19b92c39e7471cf986812cbb46659d2af674adc4331ef3f18394" -dependencies = [ - "aligned", - "anyhow", - "arg_enum_proc_macro", - "arrayvec", - "log", - "num-rational", - "num-traits", - "pastey", - "rayon", - "thiserror 2.0.17", - "v_frame", - "y4m", -] - [[package]] name = "av1-grain" -version = "0.2.5" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cfddb07216410377231960af4fcab838eaa12e013417781b78bd95ee22077f8" +checksum = "4f3efb2ca85bc610acfa917b5aaa36f3fcbebed5b3182d7f877b02531c4b80c8" dependencies = [ "anyhow", "arrayvec", "log", - "nom 8.0.0", + "nom", "num-rational", "v_frame", ] @@ -727,33 +600,11 @@ dependencies = [ "arrayvec", ] -[[package]] -name = "aws-lc-rs" -version = "1.15.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b7b6141e96a8c160799cc2d5adecd5cbbe5054cb8c7c4af53da0f83bb7ad256" -dependencies = [ - "aws-lc-sys", - "zeroize", -] - -[[package]] -name = "aws-lc-sys" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c34dda4df7017c8db52132f0f8a2e0f8161649d15723ed63fc00c82d0f2081a" -dependencies = [ - "cc", - "cmake", - "dunce", - "fs_extra", -] - [[package]] name = "backtrace" -version = "0.3.76" +version = "0.3.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb531853791a215d7c62a30daf0dde835f381ab5de4589cfe7c649d2cbe92bd6" +checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" dependencies = [ "addr2line", "cfg-if", @@ -761,7 +612,7 @@ dependencies = [ "miniz_oxide", "object", "rustc-demangle", - "windows-link", + "windows-targets 0.52.6", ] [[package]] @@ -787,26 +638,46 @@ checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "base64ct" -version = "1.8.1" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e050f626429857a27ddccb31e0aca21356bfa709c04041aefddac081a8f068a" +checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" [[package]] -name = "basic-toml" -version = "0.1.10" +name = "bincode" +version = "1.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba62675e8242a4c4e806d12f11d136e626e6c8361d6b829310732241652a178a" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" dependencies = [ "serde", ] [[package]] -name = "bindgen" -version = "0.71.1" +name = "bincode" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f58bf3d7db68cfbac37cfc485a8d711e87e064c3d0fe0435b92f7a407f9d6b3" +checksum = "36eaf5d7b090263e8150820482d5d93cd964a81e4019913c972f4edcc6edb740" dependencies = [ - "bitflags 2.10.0", + "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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f72209734318d0b619a5e0f5129918b848c416e122a3c4ce054e03cb87b726f" +dependencies = [ + "bitflags 2.9.2", "cexpr", "clang-sys", "itertools 0.13.0", @@ -815,29 +686,29 @@ dependencies = [ "regex", "rustc-hash 2.1.1", "shlex", - "syn 2.0.111", + "syn 2.0.106", ] [[package]] name = "bit-set" -version = "0.6.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0481a0e032742109b1133a095184ee93d88f3dc9e0d28a5d033dc77a073f44f" +checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" dependencies = [ "bit-vec", ] [[package]] name = "bit-vec" -version = "0.7.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2c54ff287cfc0a34f38a6b832ea1bd8e448a330b3e40a50859e6488bee07f22" +checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" [[package]] name = "bit_field" -version = "0.10.3" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e4b40c7323adcfc0a41c4b88143ed58346ff65a288fc144329c5c45e05d70c6" +checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61" [[package]] name = "bitflags" @@ -847,21 +718,18 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.10.0" +version = "2.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" +checksum = "6a65b545ab31d687cff52899d4890855fec459eb6afe0da6417b8a18da87aa29" dependencies = [ - "serde_core", + "serde", ] [[package]] name = "bitstream-io" -version = "4.9.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60d4bd9d1db2c6bdf285e223a7fa369d5ce98ec767dec949c6ca62863ce61757" -dependencies = [ - "core2", -] +checksum = "6099cdc01846bc367c4e7dd630dc5966dccf36b652fae7a74e17b640411a91b2" [[package]] name = "block" @@ -884,16 +752,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2c132eebf10f5cad5289222520a4a058514204aed6d791f1cf4fe8088b82d15f" dependencies = [ - "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", + "objc2", ] [[package]] @@ -902,38 +761,18 @@ version = "1.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e83f8d02be6967315521be875afa792a316e28d57b5a2d401897e2a7921b7f21" dependencies = [ - "async-channel", + "async-channel 2.5.0", "async-task", "futures-io", "futures-lite 2.6.1", "piper", ] -[[package]] -name = "bstr" -version = "1.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63044e1ae8e69f3b5a92c736ca6269b8d12fa7efe39bf34ddb06d102cf0e2cab" -dependencies = [ - "memchr", - "regex-automata", - "serde", -] - -[[package]] -name = "btoi" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b5ab9db53bcda568284df0fd39f6eac24ad6f7ba7ff1168b9e76eba6576b976" -dependencies = [ - "num-traits", -] - [[package]] name = "built" -version = "0.8.0" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4ad8f11f288f48ca24471bbd51ac257aaeaaa07adae295591266b792902ae64" +checksum = "56ed6191a7e78c36abdb16ab65341eefd73d64d303fffccdbb00d51e4205967b" [[package]] name = "bumpalo" @@ -941,30 +780,24 @@ version = "3.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" -[[package]] -name = "by_address" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64fa3c856b712db6612c019f14756e64e4bcea13337a6b33b696333a9eaa2d06" - [[package]] name = "bytemuck" -version = "1.24.0" +version = "1.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fbdf580320f38b612e485521afda1ee26d10cc9884efaaa750d383e13e3c5f4" +checksum = "3995eaeebcdf32f91f980d360f78732ddc061097ab4e39991ae7a6ace9194677" dependencies = [ "bytemuck_derive", ] [[package]] name = "bytemuck_derive" -version = "1.10.2" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9abbd1bc6865053c427f7198e6af43bfdedc55ab791faed4fbd361d789575ff" +checksum = "4f154e572231cb6ba2bd1176980827e3d5dc04cc183a75dea38109fbdd672d29" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.106", ] [[package]] @@ -981,9 +814,9 @@ checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" [[package]] name = "bytes" -version = "1.11.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b35204fbdc0b3f4446b89fc1ac2cf84a8a68971995d0bf2e925ec7cd960f9cb3" +checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" [[package]] name = "calloop" @@ -991,58 +824,43 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.2", "log", - "polling 3.11.0", + "polling 3.10.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.10.0", - "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 0.13.0", + "calloop", "rustix 0.38.44", "wayland-backend", "wayland-client", ] [[package]] -name = "calloop-wayland-source" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "138efcf0940a02ebf0cc8d1eff41a1682a46b431630f4c52450d6265876021fa" +name = "cargo-hot-protocol" +version = "0.1.0" +source = "git+https://github.com/hecrj/cargo-hot.git?rev=b8dc518b8640928178a501257e353b73bc06cf47#b8dc518b8640928178a501257e353b73bc06cf47" dependencies = [ - "calloop 0.14.3", - "rustix 1.1.2", - "wayland-backend", - "wayland-client", + "anyhow", + "bincode 2.0.1", + "log", + "subsecond", ] [[package]] name = "cc" -version = "1.2.49" +version = "1.2.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90583009037521a116abf44494efecd645ba48b6622457080f080b85544e2215" +checksum = "3ee0f8803222ba5a7e2777dd72ca451868909b1ac410621b676adf07280e9b5f" dependencies = [ - "find-msvc-tools", "jobserver", "libc", "shlex", @@ -1060,24 +878,34 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" dependencies = [ - "nom 7.1.3", + "nom", ] [[package]] name = "cfg-expr" -version = "0.20.5" +version = "0.15.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21be0e1ce6cdb2ee7fff840f922fb04ead349e5cfb1e750b769132d44ce04720" +checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02" dependencies = [ "smallvec", - "target-lexicon", + "target-lexicon 0.12.16", +] + +[[package]] +name = "cfg-expr" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8d458d63f0f0f482c8da9b7c8b76c21bd885a02056cc94c6404d861ca2b8206" +dependencies = [ + "smallvec", + "target-lexicon 0.13.2", ] [[package]] name = "cfg-if" -version = "1.0.4" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" [[package]] name = "cfg_aliases" @@ -1093,15 +921,13 @@ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] name = "chrono" -version = "0.4.42" +version = "0.4.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" +checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" dependencies = [ + "android-tzdata", "iana-time-zone", - "js-sys", "num-traits", - "serde", - "wasm-bindgen", "windows-link", ] @@ -1118,9 +944,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.53" +version = "4.5.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9e340e012a1bf4935f5282ed1436d1489548e8f72308207ea5df0e23d2d03f8" +checksum = "1fc0e74a703892159f5ae7d3aac52c8e6c392f5ae5f359c70b5881d60aaac318" dependencies = [ "clap_builder", "clap_derive", @@ -1128,33 +954,40 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.53" +version = "4.5.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d76b5d13eaa18c901fd2f7fca939fefe3a0727a953561fefdf3b2922b8569d00" +checksum = "b3e7f4214277f3c7aa526a59dd3fbe306a370daee1f8b7b8c987069cd8e888a8" dependencies = [ "anstream", "anstyle", + "backtrace", "clap_lex", "strsim", ] [[package]] name = "clap_derive" -version = "4.5.49" +version = "4.5.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671" +checksum = "14cb31bb0a7d536caef2639baa7fad459e15c3144efefa6dbd1c84562c4739f6" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.106", ] [[package]] name = "clap_lex" -version = "0.7.6" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d" +checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675" + +[[package]] +name = "claxon" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bfbf56724aa9eca8afa4fcfadeb479e722935bb2a0900c2d37e0cc477af0688" [[package]] name = "clipboard-win" @@ -1167,80 +1000,43 @@ dependencies = [ [[package]] name = "clipboard_macos" -version = "0.1.0" -source = "git+https://github.com/pop-os/window_clipboard.git?tag=pop-0.13-2#6b9faab87bea9cebec6ae036906fd67fed254f5f" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b7f4aaa047ba3c3630b080bb9860894732ff23e2aee290a418909aa6d5df38f" dependencies = [ - "objc", - "objc-foundation", - "objc_id", + "objc2", + "objc2-app-kit", + "objc2-foundation", ] [[package]] name = "clipboard_wayland" version = "0.2.2" -source = "git+https://github.com/pop-os/window_clipboard.git?tag=pop-0.13-2#6b9faab87bea9cebec6ae036906fd67fed254f5f" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "003f886bc4e2987729d10c1db3424e7f80809f3fc22dbc16c685738887cb37b8" dependencies = [ - "dnd", - "mime 0.1.0", "smithay-clipboard", ] [[package]] name = "clipboard_x11" version = "0.4.2" -source = "git+https://github.com/pop-os/window_clipboard.git?tag=pop-0.13-2#6b9faab87bea9cebec6ae036906fd67fed254f5f" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4274ea815e013e0f9f04a2633423e14194e408a0576c943ce3d14ca56c50031c" dependencies = [ "thiserror 1.0.69", "x11rb", ] -[[package]] -name = "cmake" -version = "0.1.57" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75443c44cd6b379beb8c5b45d85d0773baf31cce901fe7bb252f4eff3008ef7d" -dependencies = [ - "cc", -] - -[[package]] -name = "cocoa" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6140449f97a6e97f9511815c5632d84c8aacf8ac271ad77c559218161a1373c" -dependencies = [ - "bitflags 1.3.2", - "block", - "cocoa-foundation", - "core-foundation 0.9.4", - "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 0.9.4", - "core-graphics-types", - "libc", - "objc", -] - [[package]] name = "codespan-reporting" -version = "0.11.1" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" +checksum = "fe6d2e5af09e8c8ad56c969f2157a3d4238cebc7c55f0a517728c38f7b200f81" dependencies = [ + "serde", "termcolor", - "unicode-width 0.1.14", + "unicode-width 0.2.1", ] [[package]] @@ -1256,35 +1052,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" [[package]] -name = "com" -version = "0.6.0" +name = "colors-transform" +version = "0.2.11" 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", -] +checksum = "9226dbc05df4fb986f48d730b001532580883c4c06c5d1c213f4b34c1c157178" [[package]] name = "combine" @@ -1345,7 +1116,20 @@ checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081" dependencies = [ "bitflags 1.3.2", "core-foundation 0.9.4", - "core-graphics-types", + "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", "foreign-types", "libc", ] @@ -1362,200 +1146,76 @@ dependencies = [ ] [[package]] -name = "core-text" -version = "20.1.0" +name = "core-graphics-types" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9d2790b5c08465d49f8dc05c8bcae9fea467855947db39b0f8145c091aaced5" +checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" dependencies = [ - "core-foundation 0.9.4", - "core-graphics", - "foreign-types", + "bitflags 2.9.2", + "core-foundation 0.10.1", "libc", ] -[[package]] -name = "core2" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505" -dependencies = [ - "memchr", -] - -[[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.13.0" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aae284fbaf7d27aa0e292f7677dfbe26503b0d555026f702940805a630eac17" +checksum = "321077172d79c662f64f5071a03120748d5bb652f5231570141be24cfcd2bace" dependencies = [ "bitflags 1.3.2", - "libc", - "objc2-audio-toolbox", - "objc2-core-audio", - "objc2-core-audio-types", - "objc2-core-foundation", + "core-foundation-sys", + "coreaudio-sys", ] [[package]] -name = "cosmic-client-toolkit" -version = "0.1.0" -source = "git+https://github.com/pop-os/cosmic-protocols?rev=d0e95be#d0e95be25e423cfe523b11111a3666ed7aaf0dc4" +name = "coreaudio-sys" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ceec7a6067e62d6f931a2baf6f3a751f4a892595bcec1461a3c94ef9949864b6" dependencies = [ - "bitflags 2.10.0", - "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#aabc8dcda530a6ac70617dd578cea55910af53c8" -dependencies = [ - "atomicwrites", - "cosmic-config-derive", - "cosmic-settings-daemon", - "dirs", - "futures-util", - "iced_futures", - "known-folders", - "notify", - "ron 0.11.0", - "serde", - "tokio", - "tracing", - "xdg", - "zbus 5.12.0", -] - -[[package]] -name = "cosmic-config-derive" -version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic#aabc8dcda530a6ac70617dd578cea55910af53c8" -dependencies = [ - "quote", - "syn 2.0.111", -] - -[[package]] -name = "cosmic-freedesktop-icons" -version = "0.4.0" -source = "git+https://github.com/pop-os/freedesktop-icons#7a61a704f6d1ec41f71cbe766e3cc484858523fa" -dependencies = [ - "bstr", - "btoi", - "memchr", - "memmap2 0.9.9", - "thiserror 2.0.17", - "tracing", - "xdg", -] - -[[package]] -name = "cosmic-protocols" -version = "0.1.0" -source = "git+https://github.com/pop-os/cosmic-protocols?rev=d0e95be#d0e95be25e423cfe523b11111a3666ed7aaf0dc4" -dependencies = [ - "bitflags 2.10.0", - "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#2753b60609a07abb9db6eab3c0f36a52d8347df4" -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#b2337437d70b3db7a56211a43aa1632306711b2d" -dependencies = [ - "zbus 5.12.0", + "bindgen", ] [[package]] name = "cosmic-text" -version = "0.15.0" -source = "git+https://github.com/pop-os/cosmic-text.git#7051682e70defcab6b683d6e9db07124a6de0df7" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da46a9d5a8905cc538a4a5bceb6a4510de7a51049c5588c0114efce102bcbbe8" dependencies = [ - "bitflags 2.10.0", - "fontdb 0.23.0", - "harfrust", - "linebender_resource_handle", + "bitflags 2.9.2", + "fontdb 0.16.2", "log", "rangemap", "rustc-hash 1.1.0", + "rustybuzz", "self_cell", - "skrifa 0.39.0", "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#aabc8dcda530a6ac70617dd578cea55910af53c8" -dependencies = [ - "almost", - "cosmic-config", - "csscolorparser", - "dirs", - "palette", - "ron 0.11.0", - "serde", - "serde_json", - "thiserror 2.0.17", -] - [[package]] name = "cpal" -version = "0.16.0" +version = "0.15.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbd307f43cc2a697e2d1f8bc7a1d824b5269e052209e28883e5bc04d095aaa3f" +checksum = "873dab07c8f743075e57f524c583985fbaf745602acbe916a01539364369a779" dependencies = [ "alsa", + "core-foundation-sys", "coreaudio-rs", "dasp_sample", "jni", "js-sys", "libc", "mach2", - "ndk", + "ndk 0.8.0", "ndk-context", - "num-derive", - "num-traits", - "objc2-audio-toolbox", - "objc2-core-audio", - "objc2-core-audio-types", + "oboe", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", @@ -1573,9 +1233,9 @@ dependencies = [ [[package]] name = "crc" -version = "3.4.0" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5eb8a2a1cd12ab0d987a5d5e825195d372001a4094a0376319d5a0ad71c1ba0d" +checksum = "9710d3b3739c2e349eb44fe848ad0b7c8cb1e42bd87ee49371df2f7acaf3e675" dependencies = [ "crc-catalog", ] @@ -1647,55 +1307,28 @@ 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.7" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ "generic-array", "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 0.11.3", - "serde", -] - -[[package]] -name = "cssparser" -version = "0.36.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dae61cf9c0abb83bd659dab65b7e4e38d8236824c85f0f804f173567bda257d2" -dependencies = [ - "cssparser-macros", - "dtoa-short", - "itoa", - "phf 0.13.1", - "smallvec", -] - -[[package]] -name = "cssparser-macros" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" -dependencies = [ - "quote", - "syn 2.0.111", -] - [[package]] name = "ctor-lite" version = "0.1.0" @@ -1709,14 +1342,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f27ae1dd37df86211c42e150270f82743308803d90a6f6e6651cd730d5e1732f" [[package]] -name = "d3d12" -version = "22.0.0" +name = "dark-light" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdbd1f579714e3c809ebd822c81ef148b1ceaeb3d535352afc73fd0c4c6a0017" +checksum = "18e1a09f280e29a8b00bc7e81eca5ac87dca0575639c9422a5fa25a07bb884b8" dependencies = [ - "bitflags 2.10.0", - "libloading", - "winapi", + "ashpd 0.10.3", + "async-std", + "objc2", + "objc2-foundation", + "web-sys", + "winreg", ] [[package]] @@ -1725,18 +1361,8 @@ version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" dependencies = [ - "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", + "darling_core", + "darling_macro", ] [[package]] @@ -1750,21 +1376,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.111", -] - -[[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.111", + "syn 2.0.106", ] [[package]] @@ -1773,20 +1385,9 @@ version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ - "darling_core 0.20.11", + "darling_core", "quote", - "syn 2.0.111", -] - -[[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.111", + "syn 2.0.106", ] [[package]] @@ -1795,17 +1396,11 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c87e182de0887fd5361989c677c4e8f5000cd9491d6d563161a8f3a5519fc7f" -[[package]] -name = "data-encoding" -version = "2.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" - [[package]] name = "data-url" -version = "0.3.2" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be1e0bca6c3637f992fc1cc7cbc52a78c1ef6db076dbf1059c4323d6a2048376" +checksum = "5c297a1c74b71ae29df00c3e22dd9534821d60eb9af5a0192823fa2acea70c2a" [[package]] name = "der" @@ -1820,12 +1415,11 @@ dependencies = [ [[package]] name = "deranged" -version = "0.5.5" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587" +checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" dependencies = [ "powerfmt", - "serde_core", ] [[package]] @@ -1839,49 +1433,16 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "derive_more" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134" -dependencies = [ - "derive_more-impl", -] - -[[package]] -name = "derive_more-impl" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb" -dependencies = [ - "proc-macro2", - "quote", - "rustc_version", - "syn 2.0.111", - "unicode-xid", -] - [[package]] name = "derive_setters" version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ae5c625eda104c228c06ecaf988d1c60e542176bd7a490e60eeda3493244c0c9" dependencies = [ - "darling 0.20.11", + "darling", "proc-macro2", "quote", - "syn 2.0.111", -] - -[[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.111", + "syn 2.0.106", ] [[package]] @@ -1904,23 +1465,23 @@ dependencies = [ [[package]] name = "dirs" -version = "6.0.0" +version = "5.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" +checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" dependencies = [ "dirs-sys", ] [[package]] name = "dirs-sys" -version = "0.5.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" +checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" dependencies = [ "libc", "option-ext", "redox_users", - "windows-sys 0.61.2", + "windows-sys 0.48.0", ] [[package]] @@ -1929,18 +1490,6 @@ 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.10.0", - "block2 0.6.2", - "libc", - "objc2 0.6.3", -] - [[package]] name = "displaydoc" version = "0.2.5" @@ -1949,7 +1498,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.106", ] [[package]] @@ -1961,23 +1510,11 @@ 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.10.0", - "mime 0.1.0", - "raw-window-handle", - "smithay-client-toolkit 0.19.2", - "smithay-clipboard", -] - [[package]] name = "document-features" -version = "0.2.12" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61" +checksum = "95249b50c6c185bee49034bcb378a49dc2b5dff0be90ff6616d31d64febab05d" dependencies = [ "litrs", ] @@ -1997,15 +1534,15 @@ checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" [[package]] name = "dpi" version = "0.1.1" -source = "git+https://github.com/pop-os/winit.git?tag=iced-xdg-surface-0.13-rc#12a5f17d1811cdebbcbd310a3d92965e9142fa12" +source = "git+https://github.com/iced-rs/winit.git?rev=11414b6aa45699f038114e61b4ddf5102b2d3b4b#11414b6aa45699f038114e61b4ddf5102b2d3b4b" [[package]] name = "drm" -version = "0.11.1" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0f8a69e60d75ae7dab4ef26a59ca99f2a89d4c142089b537775ae0c198bdcde" +checksum = "98888c4bbd601524c11a7ed63f814b8825f420514f78e96f752c437ae9cbb5d1" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.2", "bytemuck", "drm-ffi", "drm-fourcc", @@ -2014,9 +1551,9 @@ dependencies = [ [[package]] name = "drm-ffi" -version = "0.7.1" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41334f8405792483e32ad05fbb9c5680ff4e84491883d2947a4757dc54cb2ac6" +checksum = "97c98727e48b7ccb4f4aea8cfe881e5b07f702d17b7875991881b41af7278d53" dependencies = [ "drm-sys", "rustix 0.38.44", @@ -2030,59 +1567,14 @@ checksum = "0aafbcdb8afc29c1a7ee5fbe53b5d62f4565b35a042a662ca9fecd0b54dae6f4" [[package]] name = "drm-sys" -version = "0.6.1" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d09ff881f92f118b11105ba5e34ff8f4adf27b30dae8f12e28c193af1c83176" +checksum = "fd39dde40b6e196c2e8763f23d119ddb1a8714534bf7d77fa97a65b0feda3986" dependencies = [ "libc", "linux-raw-sys 0.6.5", ] -[[package]] -name = "dtoa" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c3cf4824e2d5f025c7b531afcb2325364084a16806f6d47fbc1f5fbd9960590" - -[[package]] -name = "dtoa-short" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd1511a7b6a56299bd043a9c167a6d2bfb37bf84a6dfceaba651168adfb43c87" -dependencies = [ - "dtoa", -] - -[[package]] -name = "dunce" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" - -[[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 = "ego-tree" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2972feb8dffe7bc8c5463b1dacda1b0dfbed3710e50f977d965429692d74cd8" - [[package]] name = "either" version = "1.15.0" @@ -2103,9 +1595,9 @@ dependencies = [ [[package]] name = "endi" -version = "1.1.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66b7e2430c6dff6a955451e2cfc438f09cea1965a9d6f87f7e3b90decc014099" +checksum = "a3d8a32ae18130a3c84dd492d4215c3d913c3b07c6b63c2eb3eb7ff1101ab7bf" [[package]] name = "endian-type" @@ -2131,7 +1623,7 @@ checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.106", ] [[package]] @@ -2151,7 +1643,7 @@ checksum = "44f23cf4b44bfce11a86ace86f8a73ffdec849c9fd00a386a53d278bd9e81fb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.106", ] [[package]] @@ -2162,12 +1654,12 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" -version = "0.3.14" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" +checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad" dependencies = [ "libc", - "windows-sys 0.61.2", + "windows-sys 0.60.2", ] [[package]] @@ -2246,9 +1738,9 @@ dependencies = [ [[package]] name = "exr" -version = "1.74.0" +version = "1.73.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4300e043a56aa2cb633c01af81ca8f699a321879a7854d3896a0ba89056363be" +checksum = "f83197f59927b46c04a183a619b7c29df34e63e63c7869320862268c0ef687e0" dependencies = [ "bit_field", "half", @@ -2265,12 +1757,6 @@ 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" @@ -2286,26 +1772,6 @@ 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.111", -] - [[package]] name = "fd-lock" version = "4.0.4" @@ -2313,7 +1779,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ce92ff622d6dadf7349484f42c93271a0d49b7cc4d466a936405bacbe10aa78" dependencies = [ "cfg-if", - "rustix 1.1.2", + "rustix 1.0.8", "windows-sys 0.59.0", ] @@ -2326,38 +1792,11 @@ dependencies = [ "simd-adler32", ] -[[package]] -name = "filetime" -version = "0.2.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -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.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a3076410a55c90011c298b04d0cfa770b00fa04e1e3c97d3f6c9de105a03844" - [[package]] name = "flate2" -version = "1.1.5" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfe33edd8e85a12a67454e37f8c75e730830d83e313556ab9ebf9ee7fbeb3bfb" +checksum = "4a3d7db9596fecd151c5f638c0ee5d5bd487b6e0ea232e5dc96d5250f6f94b1d" dependencies = [ "crc32fast", "miniz_oxide", @@ -2369,63 +1808,12 @@ 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.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7eebbe59450baee8282d71676f3bfed5689aeab00b27545e83e5f14b1195e8b0" -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" @@ -2449,36 +1837,11 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" -[[package]] -name = "font-kit" -version = "0.14.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c7e611d49285d4c4b2e1727b72cf05353558885cc5252f93707b845dfcaf3d3" -dependencies = [ - "bitflags 2.10.0", - "byteorder", - "core-foundation 0.9.4", - "core-graphics", - "core-text", - "dirs", - "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.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39a654f404bbcbd48ea58c617c2993ee91d1cb63727a37bf2323a4edeed1b8c5" +checksum = "02a596f5713680923a2080d86de50fe472fb290693cf0f701187a1c8b36996b7" dependencies = [ "bytemuck", ] @@ -2492,6 +1855,20 @@ 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" @@ -2500,26 +1877,12 @@ checksum = "e32eac81c1135c1df01d4e6d4233c47ba11f6a6d07f33e0bba09d18797077770" dependencies = [ "fontconfig-parser", "log", - "memmap2 0.9.9", + "memmap2", "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.9", - "slotmap", - "tinyvec", - "ttf-parser 0.25.1", -] - [[package]] name = "foreign-types" version = "0.5.0" @@ -2538,7 +1901,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.106", ] [[package]] @@ -2549,64 +1912,27 @@ checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" [[package]] name = "form_urlencoded" -version = "1.2.2" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" dependencies = [ "percent-encoding", ] [[package]] -name = "freedesktop-desktop-entry" -version = "0.7.19" +name = "freedesktop-icons" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "528df05c8ed0bfd569c7018914ba1995be2a133ba9ead17628ddb0ff94b86331" +checksum = "95f87364ea709292a3b3f74014ce3ee78412c89807eea75a358c8e029b000994" dependencies = [ - "bstr", - "gettext-rs", - "log", - "memchr", - "thiserror 2.0.17", - "unicase", + "dirs", + "ini_core", + "once_cell", + "thiserror 1.0.69", + "tracing", "xdg", ] -[[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 = "fs_extra" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" - -[[package]] -name = "fsevent-sys" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76ee7a02da4d231650c7cea31349b889be2f45ddb3ef3032d2ec8185f6313fd2" -dependencies = [ - "libc", -] - -[[package]] -name = "futf" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843" -dependencies = [ - "mac", - "new_debug_unreachable", -] - [[package]] name = "futures" version = "0.3.31" @@ -2658,7 +1984,7 @@ checksum = "1d930c203dd0b6ff06e0201a4a2fe9149b43c684fd4420555b26d21b1a02956f" dependencies = [ "futures-core", "lock_api", - "parking_lot 0.12.5", + "parking_lot", ] [[package]] @@ -2703,7 +2029,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.106", ] [[package]] @@ -2748,21 +2074,12 @@ dependencies = [ [[package]] name = "gethostname" -version = "1.1.0" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bd49230192a3797a9a4d6abe9b3eed6f7fa4c8a8a4947977c6f80025f92cbd8" +checksum = "0176e0459c2e4a1fe232f984bca6890e681076abb9934f6cea7c326f3fc47818" dependencies = [ - "rustix 1.1.2", - "windows-link", -] - -[[package]] -name = "getopts" -version = "0.2.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfe4fbac503b8d1f88e6676011885f34b7174f46e59956bba534ba83abded4df" -dependencies = [ - "unicode-width 0.2.2", + "libc", + "windows-targets 0.48.5", ] [[package]] @@ -2772,44 +2089,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" dependencies = [ "cfg-if", - "js-sys", "libc", - "wasi", - "wasm-bindgen", + "wasi 0.11.1+wasi-snapshot-preview1", ] [[package]] name = "getrandom" -version = "0.3.4" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" dependencies = [ "cfg-if", - "js-sys", "libc", "r-efi", - "wasip2", - "wasm-bindgen", -] - -[[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", + "wasi 0.14.2+wasi-0.2.4", ] [[package]] @@ -2822,21 +2115,11 @@ dependencies = [ "weezl", ] -[[package]] -name = "gif" -version = "0.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5df2ba84018d80c213569363bdcd0c64e6933c67fe4c1d60ecf822971a3c35e" -dependencies = [ - "color_quant", - "weezl", -] - [[package]] name = "gimli" -version = "0.32.3" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" [[package]] name = "gio-sys" @@ -2847,7 +2130,7 @@ dependencies = [ "glib-sys", "gobject-sys", "libc", - "system-deps", + "system-deps 7.0.5", "windows-sys 0.59.0", ] @@ -2874,7 +2157,7 @@ version = "0.20.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ffc4b6e352d4716d84d7dde562dd9aee2a7d48beb872dd9ece7f2d1515b2d683" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.2", "futures-channel", "futures-core", "futures-executor", @@ -2896,10 +2179,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8084af62f09475a3f529b1629c10c429d7600ee1398ae12dd3bf175d74e7145" dependencies = [ "heck 0.5.0", - "proc-macro-crate 3.4.0", + "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.106", ] [[package]] @@ -2909,7 +2192,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ab79e1ed126803a8fb827e3de0e2ff95191912b8db65cee467edb56fc4cc215" dependencies = [ "libc", - "system-deps", + "system-deps 7.0.5", ] [[package]] @@ -2919,10 +2202,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" [[package]] -name = "glow" -version = "0.13.1" +name = "gloo-timers" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd348e04c43b32574f2de31c8bb397d96c9fcfa1371bd4ca6d8bdc464ab121b1" +checksum = "bbb143cf96099802033e0d4f4963b19fd2e0b728bcf076cd9cf7f6634f092994" +dependencies = [ + "futures-channel", + "futures-core", + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "glow" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5e5ea60d70410161c8bf5da3fdfeaa1c72ed2c15f8bbb9d19fe3a4fad085f08" dependencies = [ "js-sys", "slotmap", @@ -2947,7 +2242,7 @@ checksum = "ec9aca94bb73989e3cfdbf8f2e0f1f6da04db4d291c431f444838925c4c63eda" dependencies = [ "glib-sys", "libc", - "system-deps", + "system-deps 7.0.5", ] [[package]] @@ -2956,7 +2251,7 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fbcd2dba93594b227a1f57ee09b8b9da8892c34d55aa332e034a228d0fe6a171" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.2", "gpu-alloc-types", ] @@ -2966,20 +2261,19 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "98ff03b468aa837d70984d55f5d3f846f6ec31fe34bbb97c4f85219caeee1ca4" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.2", ] [[package]] name = "gpu-allocator" -version = "0.26.0" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdd4240fc91d3433d5e5b0fc5b67672d771850dc19bbee03c1381e19322803d7" +checksum = "c151a2a5ef800297b4e79efa4f4bec035c5f51d5ae587287c9b952bdf734cacd" dependencies = [ "log", "presser", "thiserror 1.0.69", - "winapi", - "windows 0.52.0", + "windows 0.58.0", ] [[package]] @@ -2988,9 +2282,9 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b89c83349105e3732062a895becfc71a8f921bb71ecbbdd8ff99263e3b53a0ca" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.2", "gpu-descriptor-types", - "hashbrown 0.15.5", + "hashbrown", ] [[package]] @@ -2999,15 +2293,9 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.2", ] -[[package]] -name = "grid" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9e2d4c0a8296178d8802098410ca05d86b17a10bb5ab559b3fb404c1f948220" - [[package]] name = "gstreamer" version = "0.23.7" @@ -3030,7 +2318,7 @@ dependencies = [ "paste", "pin-project-lite", "smallvec", - "thiserror 2.0.17", + "thiserror 2.0.16", ] [[package]] @@ -3058,37 +2346,7 @@ dependencies = [ "gstreamer-base-sys", "gstreamer-sys", "libc", - "system-deps", -] - -[[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", + "system-deps 7.0.5", ] [[package]] @@ -3115,37 +2373,7 @@ dependencies = [ "gobject-sys", "gstreamer-sys", "libc", - "system-deps", -] - -[[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", + "system-deps 7.0.5", ] [[package]] @@ -3157,38 +2385,7 @@ dependencies = [ "glib-sys", "gobject-sys", "libc", - "system-deps", -] - -[[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", + "system-deps 7.0.5", ] [[package]] @@ -3201,55 +2398,17 @@ dependencies = [ "svg_fmt", ] -[[package]] -name = "h2" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f44da3a8150a6703ed5d34e164b875fd14c2cdab9af1252a9a1020bde2bdc54" -dependencies = [ - "atomic-waker", - "bytes", - "fnv", - "futures-core", - "futures-sink", - "http", - "indexmap 2.12.1", - "slab", - "tokio", - "tokio-util", - "tracing", -] - [[package]] name = "half" -version = "2.7.1" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b" +checksum = "459196ed295495a68f7d7fe1d84f6c4b7ff0e21fe3017b2f283c6fac3ad803c9" dependencies = [ "cfg-if", "crunchy", - "zerocopy", + "num-traits", ] -[[package]] -name = "harfrust" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0caaee032384c10dd597af4579c67dee16650d862a9ccbe1233ff1a379abc07" -dependencies = [ - "bitflags 2.10.0", - "bytemuck", - "core_maths", - "read-fonts 0.36.0", - "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" @@ -3261,34 +2420,13 @@ dependencies = [ "foldhash", ] -[[package]] -name = "hashbrown" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" - [[package]] name = "hashlink" version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1" dependencies = [ - "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.10.0", - "com", - "libc", - "libloading", - "thiserror 1.0.69", - "widestring", - "winapi", + "hashbrown", ] [[package]] @@ -3347,207 +2485,24 @@ dependencies = [ [[package]] name = "home" -version = "0.5.12" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc627f471c528ff0c4a49e1d5e60450c8f6461dd6d10ba9dcd3a61d3dff7728d" +checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] -name = "html-escape" -version = "0.2.13" +name = "hound" +version = "3.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d1ad449764d627e22bfd7cd5e8868264fc9236e07c752972b4080cd351cb476" -dependencies = [ - "utf8-width", -] - -[[package]] -name = "html5ever" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6452c4751a24e1b99c3260d505eaeee76a050573e61f30ac2c924ddc7236f01e" -dependencies = [ - "log", - "markup5ever", -] - -[[package]] -name = "http" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" -dependencies = [ - "bytes", - "itoa", -] - -[[package]] -name = "http-body" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" -dependencies = [ - "bytes", - "http", -] - -[[package]] -name = "http-body-util" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" -dependencies = [ - "bytes", - "futures-core", - "http", - "http-body", - "pin-project-lite", -] - -[[package]] -name = "httparse" -version = "1.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" - -[[package]] -name = "hyper" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ab2d4f250c3d7b1c9fcdff1cece94ea4e2dfbec68614f7b87cb205f24ca9d11" -dependencies = [ - "atomic-waker", - "bytes", - "futures-channel", - "futures-core", - "h2", - "http", - "http-body", - "httparse", - "itoa", - "pin-project-lite", - "pin-utils", - "smallvec", - "tokio", - "want", -] - -[[package]] -name = "hyper-rustls" -version = "0.27.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" -dependencies = [ - "http", - "hyper", - "hyper-util", - "rustls", - "rustls-pki-types", - "tokio", - "tokio-rustls", - "tower-service", -] - -[[package]] -name = "hyper-util" -version = "0.1.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "727805d60e7938b76b826a6ef209eb70eaa1812794f9424d4a4e2d740662df5f" -dependencies = [ - "base64 0.22.1", - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "http", - "http-body", - "hyper", - "ipnet", - "libc", - "percent-encoding", - "pin-project-lite", - "socket2 0.6.1", - "system-configuration", - "tokio", - "tower-service", - "tracing", - "windows-registry", -] - -[[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.111", - "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.111", -] +checksum = "62adaabb884c94955b19907d60019f4e145d091c75345379e70d1ee696f7854f" [[package]] name = "iana-time-zone" -version = "0.1.64" +version = "0.1.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" +checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -3555,7 +2510,7 @@ dependencies = [ "js-sys", "log", "wasm-bindgen", - "windows-core 0.62.2", + "windows-core 0.61.2", ] [[package]] @@ -3570,59 +2525,81 @@ dependencies = [ [[package]] name = "iced" version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic#aabc8dcda530a6ac70617dd578cea55910af53c8" +source = "git+https://github.com/iced-rs/iced?branch=master#f9a6a3051d0a5e1c9f47ebe4071daf5621f8d9c1" 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_accessibility" -version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic#aabc8dcda530a6ac70617dd578cea55910af53c8" +name = "iced_beacon" +version = "0.14.0-dev" +source = "git+https://github.com/iced-rs/iced?branch=master#f9a6a3051d0a5e1c9f47ebe4071daf5621f8d9c1" dependencies = [ - "accesskit", - "accesskit_winit", + "bincode 1.3.3", + "futures", + "iced_core", + "log", + "semver", + "serde", + "thiserror 1.0.69", + "tokio", ] [[package]] name = "iced_core" version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic#aabc8dcda530a6ac70617dd578cea55910af53c8" +source = "git+https://github.com/iced-rs/iced?branch=master#f9a6a3051d0a5e1c9f47ebe4071daf5621f8d9c1" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.2", "bytes", - "cosmic-client-toolkit", - "dnd", + "dark-light", "glam", - "iced_accessibility", + "lilt", "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", - "window_clipboard", +] + +[[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", ] [[package]] name = "iced_futures" version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic#aabc8dcda530a6ac70617dd578cea55910af53c8" +source = "git+https://github.com/iced-rs/iced?branch=master#f9a6a3051d0a5e1c9f47ebe4071daf5621f8d9c1" dependencies = [ "futures", "iced_core", @@ -3630,27 +2607,15 @@ dependencies = [ "rustc-hash 2.1.1", "tokio", "wasm-bindgen-futures", - "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", + "wasmtimer", ] [[package]] name = "iced_graphics" version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic#aabc8dcda530a6ac70617dd578cea55910af53c8" +source = "git+https://github.com/iced-rs/iced?branch=master#f9a6a3051d0a5e1c9f47ebe4071daf5621f8d9c1" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.2", "bytemuck", "cosmic-text", "half", @@ -3660,17 +2625,25 @@ dependencies = [ "kamadak-exif", "log", "lyon_path", - "once_cell", - "raw-window-handle", + "raw-window-handle 0.6.2", "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/pop-os/libcosmic#aabc8dcda530a6ac70617dd578cea55910af53c8" +source = "git+https://github.com/iced-rs/iced?branch=master#f9a6a3051d0a5e1c9f47ebe4071daf5621f8d9c1" dependencies = [ "iced_graphics", "iced_tiny_skia", @@ -3682,30 +2655,28 @@ dependencies = [ [[package]] name = "iced_runtime" version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic#aabc8dcda530a6ac70617dd578cea55910af53c8" +source = "git+https://github.com/iced-rs/iced?branch=master#f9a6a3051d0a5e1c9f47ebe4071daf5621f8d9c1" dependencies = [ "bytes", - "cosmic-client-toolkit", - "dnd", - "iced_accessibility", "iced_core", + "iced_debug", "iced_futures", - "raw-window-handle", + "raw-window-handle 0.6.2", "thiserror 1.0.69", - "window_clipboard", ] [[package]] name = "iced_tiny_skia" version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic#aabc8dcda530a6ac70617dd578cea55910af53c8" +source = "git+https://github.com/iced-rs/iced?branch=master#f9a6a3051d0a5e1c9f47ebe4071daf5621f8d9c1" dependencies = [ "bytemuck", "cosmic-text", + "iced_debug", "iced_graphics", "kurbo 0.10.4", "log", - "resvg 0.42.0", + "resvg", "rustc-hash 2.1.1", "softbuffer", "tiny-skia", @@ -3714,15 +2685,14 @@ dependencies = [ [[package]] name = "iced_video_player" version = "0.6.0" -source = "git+https://github.com/jackpot51/iced_video_player.git?branch=cosmic#ff37a34f99814597db0e265e172dd5a85a03394a" +source = "git+https://git.tfcconnection.org/chris/iced_video_player?branch=master#3e99427f5e430a81ac57dd448463eb59e3740276" dependencies = [ "glib", "gstreamer", "gstreamer-app", "gstreamer-base", - "gstreamer-pbutils", - "html-escape", - "libcosmic", + "iced", + "iced_wgpu", "log", "thiserror 1.0.69", "url", @@ -3731,89 +2701,61 @@ dependencies = [ [[package]] name = "iced_wgpu" version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic#aabc8dcda530a6ac70617dd578cea55910af53c8" +source = "git+https://github.com/iced-rs/iced?branch=master#f9a6a3051d0a5e1c9f47ebe4071daf5621f8d9c1" dependencies = [ - "as-raw-xcb-connection", - "bitflags 2.10.0", + "bitflags 2.9.2", "bytemuck", - "cosmic-client-toolkit", + "cryoglyph", "futures", "glam", "guillotiere", - "iced_glyphon", + "iced_debug", "iced_graphics", "log", "lyon", - "once_cell", - "raw-window-handle", - "resvg 0.42.0", + "resvg", "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/pop-os/libcosmic#aabc8dcda530a6ac70617dd578cea55910af53c8" +source = "git+https://github.com/iced-rs/iced?branch=master#f9a6a3051d0a5e1c9f47ebe4071daf5621f8d9c1" 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/pop-os/libcosmic#aabc8dcda530a6ac70617dd578cea55910af53c8" +source = "git+https://github.com/iced-rs/iced?branch=master#f9a6a3051d0a5e1c9f47ebe4071daf5621f8d9c1" dependencies = [ - "cosmic-client-toolkit", - "dnd", - "iced_accessibility", - "iced_futures", - "iced_graphics", - "iced_runtime", + "iced_debug", + "iced_program", "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]] name = "icu_collections" -version = "2.1.1" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" +checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" dependencies = [ "displaydoc", "potential_utf", @@ -3824,9 +2766,9 @@ dependencies = [ [[package]] name = "icu_locale_core" -version = "2.1.1" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" +checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" dependencies = [ "displaydoc", "litemap", @@ -3837,10 +2779,11 @@ dependencies = [ [[package]] name = "icu_normalizer" -version = "2.1.1" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" +checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" dependencies = [ + "displaydoc", "icu_collections", "icu_normalizer_data", "icu_properties", @@ -3851,38 +2794,42 @@ dependencies = [ [[package]] name = "icu_normalizer_data" -version = "2.1.1" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" +checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" [[package]] name = "icu_properties" -version = "2.1.2" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec" +checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" dependencies = [ + "displaydoc", "icu_collections", "icu_locale_core", "icu_properties_data", "icu_provider", + "potential_utf", "zerotrie", "zerovec", ] [[package]] name = "icu_properties_data" -version = "2.1.2" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "616c294cf8d725c6afcd8f55abc17c56464ef6211f9ed59cccffe534129c77af" +checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" [[package]] name = "icu_provider" -version = "2.1.1" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" +checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" dependencies = [ "displaydoc", "icu_locale_core", + "stable_deref_trait", + "tinystr", "writeable", "yoke", "zerofrom", @@ -3898,9 +2845,9 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "idna" -version = "1.1.0" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" dependencies = [ "idna_adapter", "smallvec", @@ -3919,33 +2866,32 @@ dependencies = [ [[package]] name = "image" -version = "0.25.9" +version = "0.25.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6506c6c10786659413faa717ceebcb8f70731c0a60cbae39795fdf114519c1a" +checksum = "db35664ce6b9810857a38a906215e75a9c879f0696556a39f59c62829710251a" dependencies = [ "bytemuck", "byteorder-lite", "color_quant", "exr", - "gif 0.14.1", + "gif", "image-webp", - "moxcms", "num-traits", - "png 0.18.0", + "png", "qoi", "ravif", "rayon", "rgb", "tiff", - "zune-core 0.5.0", - "zune-jpeg 0.5.7", + "zune-core", + "zune-jpeg", ] [[package]] name = "image-webp" -version = "0.2.4" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "525e9ff3e1a4be2fbea1fdf0e98686a6d98b4d8f937e1bf7402245af1909e8c3" +checksum = "f6970fe7a5300b4b42e62c52efa0187540a5bef546c60edaf554ef595d2e6f0b" dependencies = [ "byteorder-lite", "quick-error", @@ -3957,68 +2903,29 @@ version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "029d73f573d8e8d63e6d5020011d3255b28c3ba85d6cf870a07184ed23de9284" -[[package]] -name = "imagesize" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edcd27d72f2f071c64249075f42e205ff93c9a4c5f6c6da53e79ed9f9832c285" - [[package]] name = "imgref" -version = "1.12.0" +version = "1.11.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", -] +checksum = "d0263a3d970d5c054ed9312c0057b4f3bde9c0b33836d3637361d4a9e6e7a408" [[package]] name = "indexmap" -version = "1.9.3" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" -dependencies = [ - "autocfg", - "hashbrown 0.12.3", - "serde", -] - -[[package]] -name = "indexmap" -version = "2.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ad4bb2b565bca0645f4d68c5c9af97fba094e9791da685bf83cb5f3ce74acf2" +checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661" dependencies = [ "equivalent", - "hashbrown 0.16.1", - "serde", - "serde_core", + "hashbrown", ] [[package]] -name = "inotify" -version = "0.11.0" +name = "ini_core" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f37dccff2791ab604f9babef0ba14fbe0be30bd368dc541e2b08d07c8aa908f3" +checksum = "7a467a31a9f439b5262fa99c17084537bff57f24703d5a09a2b5c9657ec73a61" dependencies = [ - "bitflags 2.10.0", - "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", + "cfg-if", ] [[package]] @@ -4038,26 +2945,7 @@ checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", -] - -[[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", + "syn 2.0.106", ] [[package]] @@ -4072,19 +2960,14 @@ dependencies = [ ] [[package]] -name = "ipnet" -version = "2.11.0" +name = "io-uring" +version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" - -[[package]] -name = "iri-string" -version = "0.7.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c91338f0783edbd6195decb37bae672fd3b165faffb89bf7b9e6942f8b1a731a" +checksum = "d93587f37623a1a17d94ef2bc9ada592f5465fe7732084ab7beefabe5c77c0c4" dependencies = [ - "memchr", - "serde", + "bitflags 2.9.2", + "cfg-if", + "libc", ] [[package]] @@ -4095,9 +2978,18 @@ checksum = "7655c9839580ee829dfacba1d1278c2b7883e50a277ff7541299489d6bdfdc45" [[package]] name = "is_terminal_polyfill" -version = "1.70.2" +version = "1.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" + +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] [[package]] name = "itertools" @@ -4147,11 +3039,11 @@ checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" [[package]] name = "jobserver" -version = "0.1.34" +version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" +checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a" dependencies = [ - "getrandom 0.3.4", + "getrandom 0.3.3", "libc", ] @@ -4163,9 +3055,9 @@ checksum = "00810f1d8b74be64b13dbf3db89ac67740615d6c891f0e7b6179326533011a07" [[package]] name = "js-sys" -version = "0.3.83" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "464a3709c7f55f1f721e5389aa6ea4e3bc6aba669353300af094b29ffbdde1d8" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" dependencies = [ "once_cell", "wasm-bindgen", @@ -4197,35 +3089,6 @@ 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" @@ -4247,6 +3110,15 @@ 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" @@ -4258,68 +3130,47 @@ dependencies = [ [[package]] name = "lebe" -version = "0.5.3" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a79a3332a6609480d7d0c9eab957bca6b455b91bb84e66d19f5ff66294b85b8" +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", +] [[package]] name = "libc" -version = "0.2.178" +version = "0.2.175" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37c93d8daa9d8a012fd8ab92f088405fb202ea0b6ab73ee2482ae66af4f42091" - -[[package]] -name = "libcosmic" -version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic#aabc8dcda530a6ac70617dd578cea55910af53c8" -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", - "log", - "mime 0.3.17", - "palette", - "phf 0.13.1", - "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.12.0", -] +checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543" [[package]] name = "libfuzzer-sys" @@ -4333,12 +3184,12 @@ dependencies = [ [[package]] name = "libloading" -version = "0.8.9" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" +checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667" dependencies = [ "cfg-if", - "windows-link", + "windows-targets 0.53.3", ] [[package]] @@ -4349,13 +3200,13 @@ checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" [[package]] name = "libredox" -version = "0.1.10" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" +checksum = "391290121bad3d37fbddad76d8f5d1c1c314cfc646d143d7e07a3086ddff0ce3" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.2", "libc", - "redox_syscall 0.5.18", + "redox_syscall 0.5.17", ] [[package]] @@ -4370,10 +3221,13 @@ dependencies = [ ] [[package]] -name = "linebender_resource_handle" -version = "0.1.1" +name = "lilt" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4a5ff6bcca6c4867b1c4fd4ef63e4db7436ef363e0ad7531d1558856bae64f4" +checksum = "f67562e5eff6b20553fa9be1c503356768420994e28f67e3eafe6f41910e57ad" +dependencies = [ + "web-time", +] [[package]] name = "linux-raw-sys" @@ -4395,49 +3249,40 @@ checksum = "2a385b1be4e5c3e362ad2ffa73c392e53f031eaa5b7d648e64cd87f27f6063d7" [[package]] name = "linux-raw-sys" -version = "0.11.0" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" +checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" [[package]] name = "litemap" -version = "0.8.1" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" +checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" [[package]] name = "litrs" -version = "1.0.0" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092" - -[[package]] -name = "locale_config" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08d2c35b16f4483f6c26f0e4e9550717a2f6575bcd6f12a53ff0c490a94a6934" -dependencies = [ - "lazy_static", - "objc", - "objc-foundation", - "regex", - "winapi", -] +checksum = "f5e54036fe321fd421e10d732f155734c4e4afd610dd556d9a82833ab3ee0bed" [[package]] name = "lock_api" -version = "0.4.14" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" +checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" dependencies = [ + "autocfg", "scopeguard", ] [[package]] name = "log" -version = "0.4.29" +version = "0.4.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" +checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" +dependencies = [ + "value-bag", +] [[package]] name = "loop9" @@ -4450,62 +3295,48 @@ dependencies = [ [[package]] name = "lru" -version = "0.12.5" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" - -[[package]] -name = "lru-slab" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" +checksum = "86ea4e65087ff52f3862caff188d489f1fab49a0cb09e01b2e3f1a617b10aaed" [[package]] name = "lumina" version = "0.1.0" dependencies = [ "clap", + "colors-transform", "crisp", - "derive_more", + "derive_setters", "dirs", - "fastrand 2.3.0", + "freedesktop-icons", "gstreamer", "gstreamer-app", + "iced", "iced_video_player", - "image", - "itertools 0.14.0", - "libcosmic", + "lexpr", "miette", - "mupdf", - "obws", "pretty_assertions", - "rapidfuzz", - "rapidhash", "rayon", - "reqwest", - "resvg 0.45.1", + "rfd", "rodio", - "ron 0.8.1", - "scraper", + "ron", "serde", - "serde_json", + "serde-lexpr", "sqlx", "strum", "strum_macros", - "tar", "tokio", "tracing", "tracing-log", "tracing-subscriber", "url", - "zstd", ] [[package]] name = "lyon" -version = "1.0.16" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbcb7d54d54c8937364c9d41902d066656817dce1e03a44e5533afebd1ef4352" +checksum = "91e7f9cda98b5430809e63ca5197b06c7d191bf7e26dfc467d5a3f0290e2a74f" dependencies = [ "lyon_algorithms", "lyon_tessellation", @@ -4513,9 +3344,9 @@ dependencies = [ [[package]] name = "lyon_algorithms" -version = "1.0.16" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4c0829e28c4f336396f250d850c3987e16ce6db057ffe047ce0dd54aab6b647" +checksum = "f13c9be19d257c7d37e70608ed858e8eab4b2afcea2e3c9a622e892acbf43c08" dependencies = [ "lyon_path", "num-traits", @@ -4523,9 +3354,9 @@ dependencies = [ [[package]] name = "lyon_geom" -version = "1.0.18" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e260b6de923e6e47adfedf6243013a7a874684165a6a277594ee3906021b2343" +checksum = "8af69edc087272df438b3ee436c4bb6d7c04aa8af665cfd398feae627dbd8570" dependencies = [ "arrayvec", "euclid", @@ -4534,9 +3365,9 @@ dependencies = [ [[package]] name = "lyon_path" -version = "1.0.16" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aeca86bcfd632a15984ba029b539ffb811e0a70bf55e814ef8b0f54f506fdeb" +checksum = "0047f508cd7a85ad6bad9518f68cce7b1bf6b943fb71f6da0ee3bc1e8cb75f25" dependencies = [ "lyon_geom", "num-traits", @@ -4544,21 +3375,15 @@ dependencies = [ [[package]] name = "lyon_tessellation" -version = "1.0.16" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3f586142e1280335b1bc89539f7c97dd80f08fc43e9ab1b74ef0a42b04aa353" +checksum = "579d42360a4b09846eff2feef28f538696c7d6c7439bfa65874ff3cbe0951b2c" dependencies = [ "float_next_after", "lyon_path", "num-traits", ] -[[package]] -name = "mac" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" - [[package]] name = "mach2" version = "0.4.3" @@ -4577,24 +3402,13 @@ dependencies = [ "libc", ] -[[package]] -name = "markup5ever" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c3294c4d74d0742910f8c7b466f44dda9eb2d5742c1e430138df290a1e8451c" -dependencies = [ - "log", - "tendril", - "web_atoms", -] - [[package]] name = "matchers" -version = "0.2.0" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" dependencies = [ - "regex-automata", + "regex-automata 0.1.10", ] [[package]] @@ -4619,24 +3433,24 @@ dependencies = [ [[package]] name = "memchr" -version = "2.7.6" +version = "2.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" +checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" [[package]] -name = "memmap2" -version = "0.8.0" +name = "memfd" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a5a03cefb0d953ec0be133036f14e109412fa594edc2f77227249db66cc3ed" +checksum = "b2cffa4ad52c6f791f4f8b15f0c05f9824b2ced1160e88cc393d64fff9a8ac64" dependencies = [ - "libc", + "rustix 0.38.44", ] [[package]] name = "memmap2" -version = "0.9.9" +version = "0.9.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "744133e4a0e0a658e1374cf3bf8e415c4052a15a111acd372764c55b4177d490" +checksum = "483758ad303d734cec05e5c12b41d7e93e6a6390c5e9dae6bdeb7c1259012d28" dependencies = [ "libc", ] @@ -4661,13 +3475,13 @@ dependencies = [ [[package]] name = "metal" -version = "0.29.0" +version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ecfd3296f8c56b7c1f6fbac3c71cefa9d78ce009850c45000015f206dc7fa21" +checksum = "00c15a6f673ff72ddcc22394663290f870fb224c1bfce55734a75c414150e605" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.2", "block", - "core-graphics-types", + "core-graphics-types 0.2.0", "foreign-types", "log", "objc", @@ -4701,23 +3515,9 @@ checksum = "db5b29714e950dbb20d5e6f74f9dcec4edbcc1067bb7f8ed198c097b8c1a818b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "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" @@ -4736,24 +3536,13 @@ dependencies = [ [[package]] name = "mio" -version = "1.1.1" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc" +checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" dependencies = [ "libc", - "log", - "wasi", - "windows-sys 0.61.2", -] - -[[package]] -name = "moxcms" -version = "0.7.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac9557c559cd6fc9867e122e20d2cbefc9ca29d80d027a8e39310920ed2f0a97" -dependencies = [ - "num-traits", - "pxfm", + "wasi 0.11.1+wasi-snapshot-preview1", + "windows-sys 0.59.0", ] [[package]] @@ -4762,31 +3551,6 @@ 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.10.0", - "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" @@ -4795,23 +3559,42 @@ checksum = "13d2233c9842d08cfe13f9eac96e207ca6a2ea10b80259ebe8ad0268be27d2af" [[package]] name = "naga" -version = "22.1.0" +version = "26.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bd5a652b6faf21496f2cfd88fc49989c8db0825d1f6746b1a71a6ede24a63ad" +checksum = "916cbc7cb27db60be930a4e2da243cf4bc39569195f22fd8ee419cd31d5b662c" dependencies = [ "arrayvec", "bit-set", - "bitflags 2.10.0", - "cfg_aliases 0.1.1", + "bitflags 2.9.2", + "cfg-if", + "cfg_aliases 0.2.1", "codespan-reporting", + "half", + "hashbrown", "hexf-parse", - "indexmap 2.12.1", + "indexmap", + "libm", "log", + "num-traits", + "once_cell", "rustc-hash 1.1.0", "spirv", - "termcolor", + "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", "thiserror 1.0.69", - "unicode-xid", ] [[package]] @@ -4820,12 +3603,12 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.2", "jni-sys", "log", "ndk-sys 0.6.0+11769913", "num_enum", - "raw-window-handle", + "raw-window-handle 0.6.2", "thiserror 1.0.69", ] @@ -4886,7 +3669,7 @@ version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab2156c4fce2f8df6c499cc1c763e4394b7482525bf2a9701c9d79d215f519e4" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.2", "cfg-if", "cfg_aliases 0.1.1", "libc", @@ -4898,7 +3681,7 @@ version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.2", "cfg-if", "cfg_aliases 0.2.1", "libc", @@ -4915,52 +3698,20 @@ dependencies = [ "minimal-lexical", ] -[[package]] -name = "nom" -version = "8.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df9761775871bdef83bee530e60050f7e54b1105350d6884eb0fb4f46c2f9405" -dependencies = [ - "memchr", -] - [[package]] name = "noop_proc_macro" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0676bb32a98c1a483ce53e500a81ad9c3d5b3f7c920c28c24e9cb0980d0b5bc8" -[[package]] -name = "notify" -version = "8.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d3d07927151ff8575b7087f245456e549fea62edf0ec4e565a5ee50c8402bc3" -dependencies = [ - "bitflags 2.10.0", - "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" +version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" dependencies = [ - "windows-sys 0.61.2", + "overload", + "winapi", ] [[package]] @@ -4975,16 +3726,17 @@ dependencies = [ [[package]] name = "num-bigint-dig" -version = "0.8.6" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e661dda6640fad38e827a6d4a310ff4763082116fe217f279885c97f511bb0b7" +checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151" dependencies = [ + "byteorder", "lazy_static", "libm", "num-integer", "num-iter", "num-traits", - "rand 0.8.5", + "rand", "smallvec", "zeroize", ] @@ -5003,7 +3755,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.106", ] [[package]] @@ -5059,9 +3811,9 @@ dependencies = [ [[package]] name = "num_enum" -version = "0.7.5" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1207a7e20ad57b847bbddc6776b968420d38292bbfe2089accff5e19e82454c" +checksum = "a973b4e44ce6cad84ce69d797acf9a044532e4184c4f267913d1b546a0727b7a" dependencies = [ "num_enum_derive", "rustversion", @@ -5069,14 +3821,14 @@ dependencies = [ [[package]] name = "num_enum_derive" -version = "0.7.5" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff32365de1b6743cb203b710788263c44a03de03802daf96092f2da4fe6ba4d7" +checksum = "77e878c846a8abae00dd069496dbe8751b16ac1c3d6bd2a7283a938e8228f90d" dependencies = [ - "proc-macro-crate 3.4.0", + "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.106", ] [[package]] @@ -5124,69 +3876,33 @@ 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.10.0", - "block2 0.5.1", + "bitflags 2.9.2", + "block2", "libc", - "objc2 0.5.2", + "objc2", "objc2-core-data", "objc2-core-image", - "objc2-foundation 0.2.2", + "objc2-foundation", "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.10.0", - "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.10.0", - "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.10.0", - "block2 0.5.1", - "objc2 0.5.2", + "bitflags 2.9.2", + "block2", + "objc2", "objc2-core-location", - "objc2-foundation 0.2.2", + "objc2-foundation", ] [[package]] @@ -5195,31 +3911,9 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a5ff520e9c33812fd374d8deecef01d4a840e7b41862d849513de77e44aa4889" dependencies = [ - "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.10.0", - "objc2 0.6.3", + "block2", + "objc2", + "objc2-foundation", ] [[package]] @@ -5228,21 +3922,10 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" dependencies = [ - "bitflags 2.10.0", - "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.10.0", - "dispatch2", - "objc2 0.6.3", + "bitflags 2.9.2", + "block2", + "objc2", + "objc2-foundation", ] [[package]] @@ -5251,9 +3934,9 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80" dependencies = [ - "block2 0.5.1", - "objc2 0.5.2", - "objc2-foundation 0.2.2", + "block2", + "objc2", + "objc2-foundation", "objc2-metal", ] @@ -5263,10 +3946,10 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "000cfee34e683244f284252ee206a27953279d370e309649dc3ee317b37e5781" dependencies = [ - "block2 0.5.1", - "objc2 0.5.2", + "block2", + "objc2", "objc2-contacts", - "objc2-foundation 0.2.2", + "objc2-foundation", ] [[package]] @@ -5281,22 +3964,11 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" dependencies = [ - "bitflags 2.10.0", - "block2 0.5.1", + "bitflags 2.9.2", + "block2", "dispatch", "libc", - "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.10.0", - "objc2 0.6.3", - "objc2-core-foundation", + "objc2", ] [[package]] @@ -5305,10 +3977,10 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1a1ae721c5e35be65f01a03b6d2ac13a54cb4fa70d8a5da293d7b0020261398" dependencies = [ - "block2 0.5.1", - "objc2 0.5.2", - "objc2-app-kit 0.2.2", - "objc2-foundation 0.2.2", + "block2", + "objc2", + "objc2-app-kit", + "objc2-foundation", ] [[package]] @@ -5317,10 +3989,10 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" dependencies = [ - "bitflags 2.10.0", - "block2 0.5.1", - "objc2 0.5.2", - "objc2-foundation 0.2.2", + "bitflags 2.9.2", + "block2", + "objc2", + "objc2-foundation", ] [[package]] @@ -5329,10 +4001,10 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" dependencies = [ - "bitflags 2.10.0", - "block2 0.5.1", - "objc2 0.5.2", - "objc2-foundation 0.2.2", + "bitflags 2.9.2", + "block2", + "objc2", + "objc2-foundation", "objc2-metal", ] @@ -5342,8 +4014,8 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0a684efe3dec1b305badae1a28f6555f6ddd3bb2c2267896782858d5a78404dc" dependencies = [ - "objc2 0.5.2", - "objc2-foundation 0.2.2", + "objc2", + "objc2-foundation", ] [[package]] @@ -5352,14 +4024,14 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" dependencies = [ - "bitflags 2.10.0", - "block2 0.5.1", - "objc2 0.5.2", + "bitflags 2.9.2", + "block2", + "objc2", "objc2-cloud-kit", "objc2-core-data", "objc2-core-image", "objc2-core-location", - "objc2-foundation 0.2.2", + "objc2-foundation", "objc2-link-presentation", "objc2-quartz-core", "objc2-symbols", @@ -5373,9 +4045,9 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44fa5f9748dbfe1ca6c0b79ad20725a11eca7c2218bceb4b005cb1be26273bfe" dependencies = [ - "block2 0.5.1", - "objc2 0.5.2", - "objc2-foundation 0.2.2", + "block2", + "objc2", + "objc2-foundation", ] [[package]] @@ -5384,11 +4056,11 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" dependencies = [ - "bitflags 2.10.0", - "block2 0.5.1", - "objc2 0.5.2", + "bitflags 2.9.2", + "block2", + "objc2", "objc2-core-location", - "objc2-foundation 0.2.2", + "objc2-foundation", ] [[package]] @@ -5402,35 +4074,43 @@ dependencies = [ [[package]] name = "object" -version = "0.37.3" +version = "0.36.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" dependencies = [ "memchr", ] [[package]] -name = "obws" -version = "0.14.0" +name = "oboe" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "245cd220b1d4edd6ba01b30ef79d22dafb8b7acb4b00335297357053ba2c6c6e" +checksum = "e8b61bebd49e5d43f5f8cc7ee2891c16e0f41ec7954d36bcb6c14c5e0de867fb" dependencies = [ - "base64 0.22.1", - "bitflags 2.10.0", - "futures-util", - "rgb", - "semver", - "serde", - "serde_json", - "serde_repr", - "serde_with", - "sha2", - "thiserror 2.0.17", - "time", - "tokio", - "tokio-tungstenite", - "tracing", - "uuid", + "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]] @@ -5441,15 +4121,9 @@ checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] name = "once_cell_polyfill" -version = "1.70.2" +version = "1.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" - -[[package]] -name = "openssl-probe" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" +checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" [[package]] name = "option-ext" @@ -5468,13 +4142,22 @@ dependencies = [ [[package]] name = "orbclient" -version = "0.3.49" +version = "0.3.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "247ad146e19b9437f8604c21f8652423595cf710ad108af40e77d3ae6e96b827" +checksum = "ba0b26cec2e24f08ed8bb31519a9333140a6599b867dac464bb150bdb796fd43" 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" @@ -5506,9 +4189,15 @@ dependencies = [ "proc-macro2", "proc-macro2-diagnostics", "quote", - "syn 2.0.111", + "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" @@ -5520,34 +4209,9 @@ dependencies = [ [[package]] name = "owo-colors" -version = "4.2.3" +version = "4.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -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 0.11.3", - "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.111", -] +checksum = "48dd4f4a2c8405440fd0462561f0e5806bd0f77e86f51c761481bdd4018b545e" [[package]] name = "parking" @@ -5557,50 +4221,25 @@ checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" [[package]] name = "parking_lot" -version = "0.11.2" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -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" +checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" dependencies = [ "lock_api", - "parking_lot_core 0.9.12", + "parking_lot_core", ] [[package]] name = "parking_lot_core" -version = "0.8.6" +version = "0.9.11" source = "registry+https://github.com/rust-lang/crates.io-index" -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" +checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.18", + "redox_syscall 0.5.17", "smallvec", - "windows-link", + "windows-targets 0.52.6", ] [[package]] @@ -5609,31 +4248,6 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" -[[package]] -name = "pastey" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35fb2e5f958ec131621fdd531e9fc186ed768cbe395337403ae56c17a74c68ec" - -[[package]] -name = "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" @@ -5645,104 +4259,9 @@ dependencies = [ [[package]] name = "percent-encoding" -version = "2.3.2" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" - -[[package]] -name = "phf" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" -dependencies = [ - "phf_macros 0.11.3", - "phf_shared 0.11.3", -] - -[[package]] -name = "phf" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf" -dependencies = [ - "phf_macros 0.13.1", - "phf_shared 0.13.1", - "serde", -] - -[[package]] -name = "phf_codegen" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49aa7f9d80421bca176ca8dbfebe668cc7a2684708594ec9f3c0db0805d5d6e1" -dependencies = [ - "phf_generator 0.13.1", - "phf_shared 0.13.1", -] - -[[package]] -name = "phf_generator" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" -dependencies = [ - "phf_shared 0.11.3", - "rand 0.8.5", -] - -[[package]] -name = "phf_generator" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "135ace3a761e564ec88c03a77317a7c6b80bb7f7135ef2544dbe054243b89737" -dependencies = [ - "fastrand 2.3.0", - "phf_shared 0.13.1", -] - -[[package]] -name = "phf_macros" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" -dependencies = [ - "phf_generator 0.11.3", - "phf_shared 0.11.3", - "proc-macro2", - "quote", - "syn 2.0.111", -] - -[[package]] -name = "phf_macros" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "812f032b54b1e759ccd5f8b6677695d5268c588701effba24601f6932f8269ef" -dependencies = [ - "phf_generator 0.13.1", - "phf_shared 0.13.1", - "proc-macro2", - "quote", - "syn 2.0.111", -] - -[[package]] -name = "phf_shared" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" -dependencies = [ - "siphasher", -] - -[[package]] -name = "phf_shared" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e57fef6bc5981e38c2ce2d63bfa546861309f875b8a75f092d1d54ae2d64f266" -dependencies = [ - "siphasher", -] +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pico-args" @@ -5767,7 +4286,7 @@ checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.106", ] [[package]] @@ -5833,19 +4352,6 @@ 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.10.0", - "crc32fast", - "fdeflate", - "flate2", - "miniz_oxide", -] - [[package]] name = "polling" version = "2.8.0" @@ -5864,29 +4370,44 @@ dependencies = [ [[package]] name = "polling" -version = "3.11.0" +version = "3.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218" +checksum = "b5bd19146350fe804f7cb2669c851c03d69da628803dab0d98018142aaa5d829" dependencies = [ "cfg-if", "concurrent-queue", "hermit-abi 0.5.2", "pin-project-lite", - "rustix 1.1.2", - "windows-sys 0.61.2", + "rustix 1.0.8", + "windows-sys 0.60.2", ] [[package]] name = "pollster" -version = "0.4.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f3a9f18d041e6d0e102a0a46750538147e5e8992d3b4873aaafee2520b00ce3" +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", +] [[package]] name = "potential_utf" -version = "0.1.4" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" +checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" dependencies = [ "zerovec", ] @@ -5906,12 +4427,6 @@ dependencies = [ "zerocopy", ] -[[package]] -name = "precomputed-hash" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" - [[package]] name = "presser" version = "0.3.1" @@ -5940,40 +4455,18 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "3.4.0" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" +checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" dependencies = [ - "toml_edit 0.23.9", -] - -[[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.111", + "toml_edit 0.22.27", ] [[package]] name = "proc-macro2" -version = "1.0.103" +version = "1.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" +checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" dependencies = [ "unicode-ident", ] @@ -5986,7 +4479,7 @@ checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.106", "version_check", "yansi", ] @@ -6007,16 +4500,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52717f9a02b6965224f95ca2a81e2e0c5c43baacd28ca057577988930b6c3d5b" dependencies = [ "quote", - "syn 2.0.111", -] - -[[package]] -name = "pxfm" -version = "0.1.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7186d3822593aa4393561d186d1393b3923e9d6163d3fbfd6e825e3e6cf3e6a8" -dependencies = [ - "num-traits", + "syn 2.0.106", ] [[package]] @@ -6043,67 +4527,11 @@ dependencies = [ "memchr", ] -[[package]] -name = "quinn" -version = "0.11.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" -dependencies = [ - "bytes", - "cfg_aliases 0.2.1", - "pin-project-lite", - "quinn-proto", - "quinn-udp", - "rustc-hash 2.1.1", - "rustls", - "socket2 0.6.1", - "thiserror 2.0.17", - "tokio", - "tracing", - "web-time", -] - -[[package]] -name = "quinn-proto" -version = "0.11.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31" -dependencies = [ - "aws-lc-rs", - "bytes", - "getrandom 0.3.4", - "lru-slab", - "rand 0.9.2", - "ring", - "rustc-hash 2.1.1", - "rustls", - "rustls-pki-types", - "slab", - "thiserror 2.0.17", - "tinyvec", - "tracing", - "web-time", -] - -[[package]] -name = "quinn-udp" -version = "0.5.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" -dependencies = [ - "cfg_aliases 0.2.1", - "libc", - "once_cell", - "socket2 0.6.1", - "tracing", - "windows-sys 0.60.2", -] - [[package]] name = "quote" -version = "1.0.42" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" dependencies = [ "proc-macro2", ] @@ -6131,18 +4559,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", - "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", + "rand_chacha", + "rand_core", ] [[package]] @@ -6152,17 +4570,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", - "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", + "rand_core", ] [[package]] @@ -6174,15 +4582,6 @@ 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.4", -] - [[package]] name = "range-alloc" version = "0.1.4" @@ -6191,42 +4590,25 @@ checksum = "c3d6831663a5098ea164f89cff59c6284e95f4e3c76ce9848d4529f5ccca9bde" [[package]] name = "rangemap" -version = "1.7.0" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acbbbbea733ec66275512d0b9694f34102e7d5406fdbe2ad8d21b28dce92887c" - -[[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.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8e65c75143ce5d47c55b510297eeb1182f3c739b6043c537670e9fc18612dae" -dependencies = [ - "rustversion", -] +checksum = "f93e7e49bb0bf967717f7bd674458b3d6b0c5f48ec7e3038166026a69fc22223" [[package]] name = "rav1e" -version = "0.8.1" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43b6dd56e85d9483277cde964fd1bdb0428de4fec5ebba7540995639a21cb32b" +checksum = "cd87ce80a7665b1cce111f8a16c1f3929f6547ce91ade6addf4ec86a8dda5ce9" dependencies = [ - "aligned-vec", "arbitrary", "arg_enum_proc_macro", "arrayvec", - "av-scenechange", "av1-grain", "bitstream-io", "built", "cfg-if", "interpolate_name", - "itertools 0.14.0", + "itertools 0.12.1", "libc", "libfuzzer-sys", "log", @@ -6235,21 +4617,23 @@ dependencies = [ "noop_proc_macro", "num-derive", "num-traits", + "once_cell", "paste", "profiling", - "rand 0.9.2", - "rand_chacha 0.9.0", + "rand", + "rand_chacha", "simd_helpers", - "thiserror 2.0.17", + "system-deps 6.2.2", + "thiserror 1.0.69", "v_frame", "wasm-bindgen", ] [[package]] name = "ravif" -version = "0.12.0" +version = "0.11.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef69c1990ceef18a116855938e74793a5f7496ee907562bd0857b6ac734ab285" +checksum = "5825c26fddd16ab9f515930d49028a630efec172e903483c94796cfe31893e6b" dependencies = [ "avif-serialize", "imgref", @@ -6260,6 +4644,12 @@ 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" @@ -6288,102 +4678,86 @@ dependencies = [ [[package]] name = "read-fonts" -version = "0.35.0" +version = "0.29.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6717cf23b488adf64b9d711329542ba34de147df262370221940dfabc2c91358" +checksum = "04ca636dac446b5664bd16c069c00a9621806895b8bb02c2dc68542b23b8f25d" dependencies = [ "bytemuck", "font-types", ] -[[package]] -name = "read-fonts" -version = "0.36.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5eaa2941a4c05443ee3a7b26ab076a553c343ad5995230cc2b1d3e993bdc6345" -dependencies = [ - "bytemuck", - "core_maths", - "font-types", -] - [[package]] name = "redox_syscall" -version = "0.2.16" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" dependencies = [ "bitflags 1.3.2", ] [[package]] name = "redox_syscall" -version = "0.5.18" +version = "0.5.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" +checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.2", ] [[package]] name = "redox_users" -version = "0.5.2" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" 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.111", + "thiserror 1.0.69", ] [[package]] name = "regex" -version = "1.12.2" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ "aho-corasick", "memchr", - "regex-automata", - "regex-syntax", + "regex-automata 0.4.9", + "regex-syntax 0.8.5", ] [[package]] name = "regex-automata" -version = "0.4.13" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" +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" dependencies = [ "aho-corasick", "memchr", - "regex-syntax", + "regex-syntax 0.8.5", ] [[package]] name = "regex-syntax" -version = "0.8.8" +version = "0.6.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + +[[package]] +name = "regex-syntax" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "renderdoc-sys" @@ -6391,99 +4765,45 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" -[[package]] -name = "reqwest" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04e9018c9d814e5f30cc16a0f03271aeab3571e609612d9fe78c1aa8d11c2f62" -dependencies = [ - "base64 0.22.1", - "bytes", - "encoding_rs", - "futures-core", - "h2", - "http", - "http-body", - "http-body-util", - "hyper", - "hyper-rustls", - "hyper-util", - "js-sys", - "log", - "mime 0.3.17", - "percent-encoding", - "pin-project-lite", - "quinn", - "rustls", - "rustls-pki-types", - "rustls-platform-verifier", - "sync_wrapper", - "tokio", - "tokio-rustls", - "tower", - "tower-http", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - [[package]] name = "resvg" version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "944d052815156ac8fa77eaac055220e95ba0b01fa8887108ca710c03805d9051" dependencies = [ - "gif 0.13.3", + "gif", "jpeg-decoder", "log", "pico-args", "rgb", "svgtypes", "tiny-skia", - "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 0.13.3", - "image-webp", - "log", - "pico-args", - "rgb", - "svgtypes", - "tiny-skia", - "usvg 0.45.1", - "zune-jpeg 0.4.21", + "usvg", ] [[package]] name = "rfd" -version = "0.15.4" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef2bee61e6cffa4635c72d7d81a84294e28f0930db0ddcb0f66d10244674ebed" +checksum = "3c9e7b57df6e8472152674607f6cc68aa14a748a3157a857a94f516e11aeacc2" dependencies = [ - "ashpd 0.11.0", - "block2 0.6.2", - "dispatch2", + "ashpd 0.6.8", + "async-io 1.13.0", + "block", + "dispatch", + "futures-util", "js-sys", "log", - "objc2 0.6.3", - "objc2-app-kit 0.3.2", - "objc2-core-foundation", - "objc2-foundation 0.3.2", + "objc", + "objc-foundation", + "objc_id", "pollster", - "raw-window-handle", + "raw-window-handle 0.5.2", "urlencoding", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "windows-sys 0.59.0", + "windows-sys 0.48.0", ] [[package]] @@ -6495,29 +4815,16 @@ dependencies = [ "bytemuck", ] -[[package]] -name = "ring" -version = "0.17.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" -dependencies = [ - "cc", - "cfg-if", - "getrandom 0.2.16", - "libc", - "untrusted", - "windows-sys 0.52.0", -] - [[package]] name = "rodio" -version = "0.21.1" +version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e40ecf59e742e03336be6a3d53755e789fd05a059fa22dfa0ed624722319e183" +checksum = "e7ceb6607dd738c99bc8cb28eff249b7cd5c8ec88b9db96c0608c1480d140fb1" dependencies = [ + "claxon", "cpal", - "dasp_sample", - "num-rational", + "hound", + "lewton", "symphonia", "tracing", ] @@ -6529,24 +4836,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b91f7eff05f748767f183df4320a63d6936e9c6107d97c9e6bdd9784f4289c94" dependencies = [ "base64 0.21.7", - "bitflags 2.10.0", + "bitflags 2.9.2", "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.10.0", - "serde", - "serde_derive", - "unicode-ident", -] - [[package]] name = "roxmltree" version = "0.20.0" @@ -6555,9 +4849,9 @@ checksum = "6c20b6793b5c2fa6553b250154b78d6d0db37e72700ae35fad9387a46f487c97" [[package]] name = "rsa" -version = "0.9.9" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40a0376c50d0358279d9d643e4bf7b7be212f1f4ff1da9070a7b54d22ef75c88" +checksum = "78928ac1ed176a5ca1d17e578a1825f3d81ca54cf41053a592584b020cfd691b" dependencies = [ "const-oid", "digest", @@ -6566,47 +4860,13 @@ dependencies = [ "num-traits", "pkcs1", "pkcs8", - "rand_core 0.6.4", + "rand_core", "signature", "spki", "subtle", "zeroize", ] -[[package]] -name = "rust-embed" -version = "8.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "947d7f3fad52b283d261c4c99a084937e2fe492248cb9a68a8435a861b8798ca" -dependencies = [ - "rust-embed-impl", - "rust-embed-utils", - "walkdir", -] - -[[package]] -name = "rust-embed-impl" -version = "8.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fa2c8c9e8711e10f9c4fd2d64317ef13feaab820a4c51541f1a8c8e2e851ab2" -dependencies = [ - "proc-macro2", - "quote", - "rust-embed-utils", - "syn 2.0.111", - "walkdir", -] - -[[package]] -name = "rust-embed-utils" -version = "8.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b161f275cb337fe0a44d924a5f4df0ed69c2c39519858f931ce61c779d3475" -dependencies = [ - "sha2", - "walkdir", -] - [[package]] name = "rustc-demangle" version = "0.1.26" @@ -6625,15 +4885,6 @@ 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" @@ -6654,7 +4905,7 @@ version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.2", "errno", "libc", "linux-raw-sys 0.4.15", @@ -6663,90 +4914,15 @@ dependencies = [ [[package]] name = "rustix" -version = "1.1.2" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" +checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.2", "errno", "libc", - "linux-raw-sys 0.11.0", - "windows-sys 0.61.2", -] - -[[package]] -name = "rustls" -version = "0.23.36" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c665f33d38cea657d9614f766881e4d510e0eda4239891eea56b4cadcf01801b" -dependencies = [ - "aws-lc-rs", - "once_cell", - "rustls-pki-types", - "rustls-webpki", - "subtle", - "zeroize", -] - -[[package]] -name = "rustls-native-certs" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63" -dependencies = [ - "openssl-probe", - "rustls-pki-types", - "schannel", - "security-framework", -] - -[[package]] -name = "rustls-pki-types" -version = "1.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be040f8b0a225e40375822a563fa9524378b9d63112f53e19ffff34df5d33fdd" -dependencies = [ - "web-time", - "zeroize", -] - -[[package]] -name = "rustls-platform-verifier" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d99feebc72bae7ab76ba994bb5e121b8d83d910ca40b36e0921f53becc41784" -dependencies = [ - "core-foundation 0.10.1", - "core-foundation-sys", - "jni", - "log", - "once_cell", - "rustls", - "rustls-native-certs", - "rustls-platform-verifier-android", - "rustls-webpki", - "security-framework", - "security-framework-sys", - "webpki-root-certs", - "windows-sys 0.61.2", -] - -[[package]] -name = "rustls-platform-verifier-android" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" - -[[package]] -name = "rustls-webpki" -version = "0.103.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7df23109aa6c1567d1c575b9952556388da57401e4ace1d15f79eedad0d8f53" -dependencies = [ - "aws-lc-rs", - "ring", - "rustls-pki-types", - "untrusted", + "linux-raw-sys 0.9.4", + "windows-sys 0.60.2", ] [[package]] @@ -6761,30 +4937,13 @@ version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfb9cf8877777222e4a3bc7eb247e398b56baba500c38c1c46842431adc8b55c" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.2", "bytemuck", + "libm", "smallvec", "ttf-parser 0.21.1", - "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.10.0", - "bytemuck", - "core_maths", - "log", - "smallvec", - "ttf-parser 0.25.1", - "unicode-bidi-mirroring 0.4.0", - "unicode-ccc 0.4.0", + "unicode-bidi-mirroring", + "unicode-ccc", "unicode-properties", "unicode-script", ] @@ -6795,7 +4954,7 @@ version = "14.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7803e8936da37efd9b6d4478277f4b2b9bb5cdb37a113e8d63222e58da647e63" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.2", "cfg-if", "clipboard-win", "fd-lock", @@ -6826,39 +4985,6 @@ dependencies = [ "winapi-util", ] -[[package]] -name = "schannel" -version = "0.1.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" -dependencies = [ - "windows-sys 0.61.2", -] - -[[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.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9558e172d4e8533736ba97870c4b2cd63f84b382a3d6eb063da41b91cce17289" -dependencies = [ - "dyn-clone", - "ref-cast", - "serde", - "serde_json", -] - [[package]] name = "scoped-tls" version = "1.0.1" @@ -6871,21 +4997,6 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" -[[package]] -name = "scraper" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93cecd86d6259499c844440546d02f55f3e17bd286e529e48d1f9f67e92315cb" -dependencies = [ - "cssparser", - "ego-tree", - "getopts", - "html5ever", - "precomputed-hash", - "selectors", - "tendril", -] - [[package]] name = "sctk-adwaita" version = "0.10.1" @@ -6894,111 +5005,66 @@ checksum = "b6277f0217056f77f1d8f49f2950ac6c278c0d607c45f5ee99328d792ede24ec" dependencies = [ "ab_glyph", "log", - "memmap2 0.9.9", - "smithay-client-toolkit 0.19.2", + "memmap2", + "smithay-client-toolkit", "tiny-skia", ] -[[package]] -name = "security-framework" -version = "3.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3297343eaf830f66ede390ea39da1d462b6b0c1b000f420d0a83f898bbbe6ef" -dependencies = [ - "bitflags 2.10.0", - "core-foundation 0.10.1", - "core-foundation-sys", - "libc", - "security-framework-sys", -] - -[[package]] -name = "security-framework-sys" -version = "2.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "selectors" -version = "0.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "feef350c36147532e1b79ea5c1f3791373e61cbd9a6a2615413b3807bb164fb7" -dependencies = [ - "bitflags 2.10.0", - "cssparser", - "derive_more", - "log", - "new_debug_unreachable", - "phf 0.13.1", - "phf_codegen", - "precomputed-hash", - "rustc-hash 2.1.1", - "servo_arc", - "smallvec", -] - [[package]] name = "self_cell" -version = "1.2.1" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16c2f82143577edb4921b71ede051dac62ca3c16084e918bf7b40c96ae10eb33" +checksum = "0f7d95a54511e0c7be3f51e8867aa8cf35148d7b9445d44de2f943e2b206e749" [[package]] name = "semver" -version = "1.0.27" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" +checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" dependencies = [ "serde", - "serde_core", ] [[package]] name = "serde" -version = "1.0.228" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" dependencies = [ - "serde_core", "serde_derive", ] [[package]] -name = "serde_core" -version = "1.0.228" +name = "serde-lexpr" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +checksum = "bb4cda13396159f59e7946118cdac0beadeecfb7cf76b197f4147e546f4ead6f" dependencies = [ - "serde_derive", + "lexpr", + "serde", ] [[package]] name = "serde_derive" -version = "1.0.228" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.106", ] [[package]] name = "serde_json" -version = "1.0.149" +version = "1.0.143" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" +checksum = "d401abef1d108fbd9cbaebc3e46611f4b1021f714a0597a71f41ee463f5f4a5a" dependencies = [ - "indexmap 2.12.1", "itoa", "memchr", + "ryu", "serde", - "serde_core", - "zmij", ] [[package]] @@ -7009,16 +5075,16 @@ checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.106", ] [[package]] name = "serde_spanned" -version = "1.0.3" +version = "0.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e24345aa0fe688594e73770a5f6d1b216508b4f93484c0026d521acd30134392" +checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" dependencies = [ - "serde_core", + "serde", ] [[package]] @@ -7033,46 +5099,6 @@ dependencies = [ "serde", ] -[[package]] -name = "serde_with" -version = "3.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fa237f2807440d238e0364a218270b98f767a00d3dada77b1c53ae88940e2e7" -dependencies = [ - "base64 0.22.1", - "chrono", - "hex", - "indexmap 1.9.3", - "indexmap 2.12.1", - "schemars 0.9.0", - "schemars 1.1.0", - "serde_core", - "serde_json", - "serde_with_macros", - "time", -] - -[[package]] -name = "serde_with_macros" -version = "3.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52a8e3ca0ca629121f70ab50f95249e5a6f925cc0f6ffe8256c45b728875706c" -dependencies = [ - "darling 0.21.3", - "proc-macro2", - "quote", - "syn 2.0.111", -] - -[[package]] -name = "servo_arc" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "170fb83ab34de17dc69aa7c67482b22218ddb85da56546f9bd6b929e32a05930" -dependencies = [ - "stable_deref_trait", -] - [[package]] name = "sha1" version = "0.10.6" @@ -7112,9 +5138,9 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "signal-hook-registry" -version = "1.4.7" +version = "1.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7664a098b8e616bdfcc2dc0e9ac44eb231eedf41db4e9fe95d8d32ec728dedad" +checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b" dependencies = [ "libc", ] @@ -7126,14 +5152,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" dependencies = [ "digest", - "rand_core 0.6.4", + "rand_core", ] [[package]] name = "simd-adler32" -version = "0.3.8" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" [[package]] name = "simd_helpers" @@ -7161,22 +5187,12 @@ checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" [[package]] name = "skrifa" -version = "0.37.0" +version = "0.31.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c31071dedf532758ecf3fed987cdb4bd9509f900e026ab684b4ecb81ea49841" +checksum = "dbeb4ca4399663735553a09dd17ce7e49a0a0203f03b706b39628c4d913a8607" dependencies = [ "bytemuck", - "read-fonts 0.35.0", -] - -[[package]] -name = "skrifa" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c9eb0b904a04d09bd68c65d946617b8ff733009999050f3b851c32fb3cfb60e" -dependencies = [ - "bytemuck", - "read-fonts 0.36.0", + "read-fonts", ] [[package]] @@ -7187,9 +5203,9 @@ checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" [[package]] name = "slotmap" -version = "1.1.1" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdd58c3c93c3d278ca835519292445cb4b0d4dc59ccfdf7ceadaab3f8aeb4038" +checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a" dependencies = [ "version_check", ] @@ -7209,13 +5225,13 @@ version = "0.19.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016" dependencies = [ - "bitflags 2.10.0", - "calloop 0.13.0", - "calloop-wayland-source 0.3.0", + "bitflags 2.9.2", + "calloop", + "calloop-wayland-source", "cursor-icon", "libc", "log", - "memmap2 0.9.9", + "memmap2", "rustix 0.38.44", "thiserror 1.0.69", "wayland-backend", @@ -7228,44 +5244,14 @@ dependencies = [ "xkeysym", ] -[[package]] -name = "smithay-client-toolkit" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0512da38f5e2b31201a93524adb8d3136276fa4fe4aafab4e1f727a82b534cc0" -dependencies = [ - "bitflags 2.10.0", - "bytemuck", - "calloop 0.14.3", - "calloop-wayland-source 0.4.1", - "cursor-icon", - "libc", - "log", - "memmap2 0.9.9", - "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" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc8216eec463674a0e90f29e0ae41a4db573ec5b56b1c6c1c71615d249b6d846" dependencies = [ "libc", - "raw-window-handle", - "smithay-client-toolkit 0.19.2", + "smithay-client-toolkit", "wayland-backend", ] @@ -7290,33 +5276,35 @@ dependencies = [ [[package]] name = "socket2" -version = "0.6.1" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881" +checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807" dependencies = [ "libc", - "windows-sys 0.60.2", + "windows-sys 0.59.0", ] [[package]] name = "softbuffer" -version = "0.4.1" -source = "git+https://github.com/pop-os/softbuffer?tag=cosmic-4.0#a3f77e251e7422803f693df6e3fc313c010c4dcb" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18051cdd562e792cad055119e0cdb2cfc137e44e3987532e0f9659a77931bb08" dependencies = [ "as-raw-xcb-connection", "bytemuck", "cfg_aliases 0.2.1", - "cocoa", - "core-graphics", + "core-graphics 0.24.0", "drm", "fastrand 2.3.0", "foreign-types", "js-sys", "log", - "memmap2 0.9.9", - "objc", - "raw-window-handle", - "redox_syscall 0.5.18", + "memmap2", + "objc2", + "objc2-foundation", + "objc2-quartz-core", + "raw-window-handle 0.6.2", + "redox_syscall 0.5.17", "rustix 0.38.44", "tiny-xlib", "wasm-bindgen", @@ -7324,7 +5312,7 @@ dependencies = [ "wayland-client", "wayland-sys", "web-sys", - "windows-sys 0.52.0", + "windows-sys 0.59.0", "x11rb", ] @@ -7343,7 +5331,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.10.0", + "bitflags 2.9.2", ] [[package]] @@ -7385,9 +5373,9 @@ dependencies = [ "futures-intrusive", "futures-io", "futures-util", - "hashbrown 0.15.5", + "hashbrown", "hashlink", - "indexmap 2.12.1", + "indexmap", "log", "memchr", "once_cell", @@ -7396,7 +5384,7 @@ dependencies = [ "serde_json", "sha2", "smallvec", - "thiserror 2.0.17", + "thiserror 2.0.16", "tokio", "tokio-stream", "tracing", @@ -7413,7 +5401,7 @@ dependencies = [ "quote", "sqlx-core", "sqlx-macros-core", - "syn 2.0.111", + "syn 2.0.106", ] [[package]] @@ -7436,7 +5424,7 @@ dependencies = [ "sqlx-mysql", "sqlx-postgres", "sqlx-sqlite", - "syn 2.0.111", + "syn 2.0.106", "tokio", "url", ] @@ -7449,7 +5437,7 @@ checksum = "aa003f0038df784eb8fecbbac13affe3da23b45194bd57dba231c8f48199c526" dependencies = [ "atoi", "base64 0.22.1", - "bitflags 2.10.0", + "bitflags 2.9.2", "byteorder", "bytes", "crc", @@ -7470,7 +5458,7 @@ dependencies = [ "memchr", "once_cell", "percent-encoding", - "rand 0.8.5", + "rand", "rsa", "serde", "sha1", @@ -7478,7 +5466,7 @@ dependencies = [ "smallvec", "sqlx-core", "stringprep", - "thiserror 2.0.17", + "thiserror 2.0.16", "tracing", "whoami", ] @@ -7491,7 +5479,7 @@ checksum = "db58fcd5a53cf07c184b154801ff91347e4c30d17a3562a635ff028ad5deda46" dependencies = [ "atoi", "base64 0.22.1", - "bitflags 2.10.0", + "bitflags 2.9.2", "byteorder", "crc", "dotenvy", @@ -7508,14 +5496,14 @@ dependencies = [ "md-5", "memchr", "once_cell", - "rand 0.8.5", + "rand", "serde", "serde_json", "sha2", "smallvec", "sqlx-core", "stringprep", - "thiserror 2.0.17", + "thiserror 2.0.16", "tracing", "whoami", ] @@ -7539,16 +5527,16 @@ dependencies = [ "serde", "serde_urlencoded", "sqlx-core", - "thiserror 2.0.17", + "thiserror 2.0.16", "tracing", "url", ] [[package]] name = "stable_deref_trait" -version = "1.2.1" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" [[package]] name = "static_assertions" @@ -7565,30 +5553,6 @@ dependencies = [ "float-cmp", ] -[[package]] -name = "string_cache" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a18596f8c785a729f2819c0f6a7eae6ebeebdfffbfe4214ae6b087f690e31901" -dependencies = [ - "new_debug_unreachable", - "parking_lot 0.12.5", - "phf_shared 0.13.1", - "precomputed-hash", -] - -[[package]] -name = "string_cache_codegen" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "585635e46db231059f76c5849798146164652513eb9e8ab2685939dd90f29b69" -dependencies = [ - "phf_generator 0.13.1", - "phf_shared 0.13.1", - "proc-macro2", - "quote", -] - [[package]] name = "stringprep" version = "0.1.5" @@ -7622,7 +5586,35 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.111", + "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]] @@ -7670,43 +5662,39 @@ dependencies = [ [[package]] name = "swash" -version = "0.2.6" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47846491253e976bdd07d0f9cc24b7daf24720d11309302ccbbc6e6b6e53550a" +checksum = "f745de914febc7c9ab4388dfaf94bbc87e69f57bb41133a9b0c84d4be49856f3" dependencies = [ - "skrifa 0.37.0", + "skrifa", "yazi", "zeno", ] [[package]] name = "symphonia" -version = "0.5.5" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5773a4c030a19d9bfaa090f49746ff35c75dfddfa700df7a5939d5e076a57039" +checksum = "815c942ae7ee74737bb00f965fa5b5a2ac2ce7b6c01c0cc169bbeaf7abd5f5a9" 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.5" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c91565e180aea25d9b80a910c546802526ffd0072d0b8974e3ebe59b686c9976" +checksum = "72e34f34298a7308d4397a6c7fbf5b84c5d491231ce3dd379707ba673ab3bd97" dependencies = [ "log", "symphonia-core", @@ -7716,9 +5704,9 @@ dependencies = [ [[package]] name = "symphonia-bundle-mp3" -version = "0.5.5" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4872dd6bb56bf5eac799e3e957aa1981086c3e613b27e0ac23b176054f7c57ed" +checksum = "c01c2aae70f0f1fb096b6f0ff112a930b1fb3626178fba3ae68b09dce71706d4" dependencies = [ "lazy_static", "log", @@ -7728,9 +5716,9 @@ dependencies = [ [[package]] name = "symphonia-codec-aac" -version = "0.5.5" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c263845aa86881416849c1729a54c7f55164f8b96111dba59de46849e73a790" +checksum = "cdbf25b545ad0d3ee3e891ea643ad115aff4ca92f6aec472086b957a58522f70" dependencies = [ "lazy_static", "log", @@ -7739,19 +5727,9 @@ dependencies = [ [[package]] name = "symphonia-codec-adpcm" -version = "0.5.5" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -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" +checksum = "c94e1feac3327cd616e973d5be69ad36b3945f16b06f19c6773fc3ac0b426a0f" dependencies = [ "log", "symphonia-core", @@ -7759,9 +5737,9 @@ dependencies = [ [[package]] name = "symphonia-codec-pcm" -version = "0.5.5" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e89d716c01541ad3ebe7c91ce4c8d38a7cf266a3f7b2f090b108fb0cb031d95" +checksum = "f395a67057c2ebc5e84d7bb1be71cce1a7ba99f64e0f0f0e303a03f79116f89b" dependencies = [ "log", "symphonia-core", @@ -7769,9 +5747,9 @@ dependencies = [ [[package]] name = "symphonia-codec-vorbis" -version = "0.5.5" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f025837c309cd69ffef572750b4a2257b59552c5399a5e49707cc5b1b85d1c73" +checksum = "5a98765fb46a0a6732b007f7e2870c2129b6f78d87db7987e6533c8f164a9f30" dependencies = [ "log", "symphonia-core", @@ -7780,9 +5758,9 @@ dependencies = [ [[package]] name = "symphonia-core" -version = "0.5.5" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea00cc4f79b7f6bb7ff87eddc065a1066f3a43fe1875979056672c9ef948c2af" +checksum = "798306779e3dc7d5231bd5691f5a813496dc79d3f56bf82e25789f2094e022c3" dependencies = [ "arrayvec", "bitflags 1.3.2", @@ -7791,22 +5769,11 @@ dependencies = [ "log", ] -[[package]] -name = "symphonia-format-caf" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8faf379316b6b6e6bbc274d00e7a592e0d63ff1a7e182ce8ba25e24edd3d096" -dependencies = [ - "log", - "symphonia-core", - "symphonia-metadata", -] - [[package]] name = "symphonia-format-isomp4" -version = "0.5.5" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "243739585d11f81daf8dac8d9f3d18cc7898f6c09a259675fc364b382c30e0a5" +checksum = "abfdf178d697e50ce1e5d9b982ba1b94c47218e03ec35022d9f0e071a16dc844" dependencies = [ "encoding_rs", "log", @@ -7815,36 +5782,11 @@ dependencies = [ "symphonia-utils-xiph", ] -[[package]] -name = "symphonia-format-mkv" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -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" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2d7c3df0e7d94efb68401d81906eae73c02b40d5ec1a141962c592d0f11a96f" +checksum = "05f7be232f962f937f4b7115cbe62c330929345434c834359425e043bfd15f50" dependencies = [ "extended", "log", @@ -7854,9 +5796,9 @@ dependencies = [ [[package]] name = "symphonia-metadata" -version = "0.5.5" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36306ff42b9ffe6e5afc99d49e121e0bd62fe79b9db7b9681d48e29fa19e6b16" +checksum = "bc622b9841a10089c5b18e99eb904f4341615d5aa55bbf4eedde1be721a4023c" dependencies = [ "encoding_rs", "lazy_static", @@ -7866,9 +5808,9 @@ dependencies = [ [[package]] name = "symphonia-utils-xiph" -version = "0.5.5" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee27c85ab799a338446b68eec77abf42e1a6f1bb490656e121c6e27bfbab9f16" +checksum = "484472580fa49991afda5f6550ece662237b00c6f562c7d9638d1b086ed010fe" dependencies = [ "symphonia-core", "symphonia-metadata", @@ -7887,24 +5829,15 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.111" +version = "2.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "390cc9a294ab71bdb1aa2e99d13be9c753cd2d7bd6560c77118597410c4d2e87" +checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] -[[package]] -name = "sync_wrapper" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" -dependencies = [ - "futures-core", -] - [[package]] name = "synstructure" version = "0.13.2" @@ -7913,7 +5846,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.106", ] [[package]] @@ -7925,97 +5858,55 @@ dependencies = [ "libc", ] -[[package]] -name = "system-configuration" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" -dependencies = [ - "bitflags 2.10.0", - "core-foundation 0.9.4", - "system-configuration-sys", -] - -[[package]] -name = "system-configuration-sys" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" -dependencies = [ - "core-foundation-sys", - "libc", -] - [[package]] name = "system-deps" -version = "7.0.7" +version = "6.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c8f33736f986f16d69b6cb8b03f55ddcad5c41acc4ccc39dd88e84aa805e7f" +checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349" dependencies = [ - "cfg-expr", + "cfg-expr 0.15.8", "heck 0.5.0", "pkg-config", - "toml 0.9.8", + "toml", "version-compare", ] [[package]] -name = "taffy" -version = "0.9.2" +name = "system-deps" +version = "7.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41ba83ebaf2954d31d05d67340fd46cebe99da2b7133b0dd68d70c65473a437b" +checksum = "e4be53aa0cba896d2dc615bd42bbc130acdcffa239e0a2d965ea5b3b2a86ffdb" 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", + "cfg-expr 0.20.2", + "heck 0.5.0", + "pkg-config", + "toml", + "version-compare", ] [[package]] name = "target-lexicon" -version = "0.13.3" +version = "0.12.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df7f62577c25e07834649fc3b39fafdc597c0a3527dc1c60129201ccfcbaa50c" +checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" [[package]] -name = "temp-dir" -version = "0.1.16" +name = "target-lexicon" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83176759e9416cf81ee66cb6508dbfe9c96f20b8b56265a39917551c23c70964" +checksum = "e502f78cdbb8ba4718f566c418c52bc729126ffd16baee5baa718cf25dd5a69a" [[package]] name = "tempfile" -version = "3.23.0" +version = "3.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" +checksum = "15b61f8f20e3a6f7e0649d825294eaf317edce30f82cf6026e7e4cb9222a7d1e" dependencies = [ "fastrand 2.3.0", - "getrandom 0.3.4", + "getrandom 0.3.3", "once_cell", - "rustix 1.1.2", - "windows-sys 0.61.2", -] - -[[package]] -name = "tendril" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0" -dependencies = [ - "futf", - "mac", - "utf-8", + "rustix 1.0.8", + "windows-sys 0.60.2", ] [[package]] @@ -8033,7 +5924,7 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60b8cb979cb11c32ce1603f8137b22262a9d131aaa5c37b5678025f22b8becd0" dependencies = [ - "rustix 1.1.2", + "rustix 1.0.8", "windows-sys 0.60.2", ] @@ -8044,7 +5935,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c13547615a44dc9c452a8a534638acdf07120d4b6847c8178705da06306a3057" dependencies = [ "unicode-linebreak", - "unicode-width 0.2.2", + "unicode-width 0.2.1", ] [[package]] @@ -8058,11 +5949,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.17" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" +checksum = "3467d614147380f2e4e374161426ff399c91084acd2363eaf549172b3d5e60c0" dependencies = [ - "thiserror-impl 2.0.17", + "thiserror-impl 2.0.16", ] [[package]] @@ -8073,18 +5964,18 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.106", ] [[package]] name = "thiserror-impl" -version = "2.0.17" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" +checksum = "6c5e1be1c48b9172ee610da68fd9cd2770e7a4056cb3fc98710ee6906f0c7960" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.106", ] [[package]] @@ -8098,23 +5989,20 @@ dependencies = [ [[package]] name = "tiff" -version = "0.10.3" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af9605de7fee8d9551863fd692cce7637f548dbd9db9180fcc07ccc6d26c336f" +checksum = "ba1310fcea54c6a9a4fd1aad794ecc02c31682f6bfbecdf460bf19533eed1e3e" dependencies = [ - "fax", "flate2", - "half", - "quick-error", + "jpeg-decoder", "weezl", - "zune-jpeg 0.4.21", ] [[package]] name = "time" -version = "0.3.44" +version = "0.3.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" +checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" dependencies = [ "deranged", "itoa", @@ -8129,15 +6017,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.6" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" +checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" [[package]] name = "time-macros" -version = "0.2.24" +version = "0.2.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" +checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" dependencies = [ "num-conv", "time-core", @@ -8154,7 +6042,7 @@ dependencies = [ "bytemuck", "cfg-if", "log", - "png 0.17.16", + "png", "tiny-skia-path", ] @@ -8184,12 +6072,11 @@ dependencies = [ [[package]] name = "tinystr" -version = "0.8.2" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" +checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" dependencies = [ "displaydoc", - "serde_core", "zerovec", ] @@ -8210,40 +6097,31 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.48.0" +version = "1.47.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" +checksum = "89e49afdadebb872d3145a5638b59eb0691ea23e46ca484037cfab3b76b95038" dependencies = [ + "backtrace", "bytes", + "io-uring", "libc", "mio", "pin-project-lite", - "signal-hook-registry", - "socket2 0.6.1", + "slab", + "socket2 0.6.0", "tokio-macros", - "tracing", - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] name = "tokio-macros" -version = "2.6.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" +checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", -] - -[[package]] -name = "tokio-rustls" -version = "0.26.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" -dependencies = [ - "rustls", - "tokio", + "syn 2.0.106", ] [[package]] @@ -8257,53 +6135,16 @@ dependencies = [ "tokio", ] -[[package]] -name = "tokio-tungstenite" -version = "0.26.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a9daff607c6d2bf6c16fd681ccb7eecc83e4e2cdc1ca067ffaadfca5de7f084" -dependencies = [ - "futures-util", - "log", - "tokio", - "tungstenite", -] - -[[package]] -name = "tokio-util" -version = "0.7.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "pin-project-lite", - "tokio", -] - [[package]] name = "toml" -version = "0.5.11" +version = "0.8.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" +checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" dependencies = [ "serde", -] - -[[package]] -name = "toml" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0dc8b1fb61449e27716ec0e1bdf0f6b8f3e8f6b05391e8497b8b6d7804ea6d8" -dependencies = [ - "indexmap 2.12.1", - "serde_core", "serde_spanned", - "toml_datetime 0.7.3", - "toml_parser", - "toml_writer", - "winnow 0.7.14", + "toml_datetime", + "toml_edit 0.22.27", ] [[package]] @@ -8311,14 +6152,8 @@ name = "toml_datetime" version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" - -[[package]] -name = "toml_datetime" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533" dependencies = [ - "serde_core", + "serde", ] [[package]] @@ -8327,88 +6162,29 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.12.1", - "toml_datetime 0.6.11", + "indexmap", + "toml_datetime", "winnow 0.5.40", ] [[package]] name = "toml_edit" -version = "0.23.9" +version = "0.22.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d7cbc3b4b49633d57a0509303158ca50de80ae32c265093b24c414705807832" +checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ - "indexmap 2.12.1", - "toml_datetime 0.7.3", - "toml_parser", - "winnow 0.7.14", + "indexmap", + "serde", + "serde_spanned", + "toml_datetime", + "winnow 0.7.12", ] -[[package]] -name = "toml_parser" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e" -dependencies = [ - "winnow 0.7.14", -] - -[[package]] -name = "toml_writer" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df8b2b54733674ad286d16267dcfc7a71ed5c776e4ac7aa3c3e2561f7c637bf2" - -[[package]] -name = "tower" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" -dependencies = [ - "futures-core", - "futures-util", - "pin-project-lite", - "sync_wrapper", - "tokio", - "tower-layer", - "tower-service", -] - -[[package]] -name = "tower-http" -version = "0.6.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8" -dependencies = [ - "bitflags 2.10.0", - "bytes", - "futures-util", - "http", - "http-body", - "iri-string", - "pin-project-lite", - "tower", - "tower-layer", - "tower-service", -] - -[[package]] -name = "tower-layer" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" - -[[package]] -name = "tower-service" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" - [[package]] name = "tracing" -version = "0.1.43" +version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d15d90a0b5c19378952d479dc858407149d7bb45a14de0142f6c534b16fc647" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ "log", "pin-project-lite", @@ -8418,20 +6194,20 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.31" +version = "0.1.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" +checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.106", ] [[package]] name = "tracing-core" -version = "0.1.35" +version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a04e24fab5c89c6a36eb8558c9656f30d81de51dfa4d3b45f26b21d61fa0a6c" +checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" dependencies = [ "once_cell", "valuable", @@ -8450,15 +6226,15 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.22" +version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f30143827ddab0d256fd843b7a66d164e9f271cfa0dde49142c5ca0ca291f1e" +checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" dependencies = [ "chrono", "matchers", "nu-ansi-term", "once_cell", - "regex-automata", + "regex", "sharded-slab", "smallvec", "thread_local", @@ -8469,10 +6245,10 @@ dependencies = [ ] [[package]] -name = "try-lock" -version = "0.2.5" +name = "ttf-parser" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" +checksum = "17f77d76d837a7830fe1d4f12b7b4ba4192c1888001c7164257e4bc6d21d96b4" [[package]] name = "ttf-parser" @@ -8485,41 +6261,12 @@ name = "ttf-parser" version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2df906b07856748fa3f6e0ad0cbaa047052d4a7dd609e231c4f72cee8c36f31" -dependencies = [ - "core_maths", -] - -[[package]] -name = "tungstenite" -version = "0.26.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4793cb5e56680ecbb1d843515b23b6de9a75eb04b66643e256a396d43be33c13" -dependencies = [ - "bytes", - "data-encoding", - "http", - "httparse", - "log", - "rand 0.9.2", - "sha1", - "thiserror 2.0.17", - "utf-8", -] - -[[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.19.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" +checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" [[package]] name = "uds_windows" @@ -8532,31 +6279,6 @@ 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" @@ -8569,29 +6291,17 @@ 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" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1df77b101bcc4ea3d78dafc5ad7e4f58ceffe0b2b16bf446aeb50b6cb4157656" -[[package]] -name = "unicode-ccc" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce61d488bcdc9bc8b5d1772c404828b17fc481c0a582b5581e95fb233aef503e" - [[package]] name = "unicode-ident" -version = "1.0.22" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" +checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" [[package]] name = "unicode-linebreak" @@ -8601,24 +6311,24 @@ checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f" [[package]] name = "unicode-normalization" -version = "0.1.25" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fd4f6878c9cb28d874b009da9e8d183b5abc80117c40bbd187a1fde336be6e8" +checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" dependencies = [ "tinyvec", ] [[package]] name = "unicode-properties" -version = "0.1.4" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7df058c713841ad818f1dc5d3fd88063241cc61f49f5fbea4b951e8cf5a8d71d" +checksum = "e70f2a8b45122e719eb623c01822704c4e0907e7e426a05927e1a1cfff5b75d0" [[package]] name = "unicode-script" -version = "0.5.8" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "383ad40bb927465ec0ce7720e033cb4ca06912855fc35db31b5755d0de75b1ee" +checksum = "9fb421b350c9aff471779e262955939f565ec18b86c15364e6bdf0d662ca7c1f" [[package]] name = "unicode-segmentation" @@ -8640,27 +6350,21 @@ checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" [[package]] name = "unicode-width" -version = "0.2.2" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" +checksum = "4a1a07cc7db3810833284e8d372ccdc6da29741639ecc70c9ec107df0fa6154c" [[package]] -name = "unicode-xid" -version = "0.2.6" +name = "unty" +version = "0.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" - -[[package]] -name = "untrusted" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" +checksum = "6d49784317cd0d1ee7ec5c716dd598ec5b4483ea832a2dced265471cc0f690ae" [[package]] name = "url" -version = "2.5.7" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" dependencies = [ "form_urlencoded", "idna", @@ -8684,12 +6388,12 @@ dependencies = [ "data-url", "flate2", "fontdb 0.18.0", - "imagesize 0.12.0", + "imagesize", "kurbo 0.11.3", "log", "pico-args", "roxmltree", - "rustybuzz 0.14.1", + "rustybuzz", "simplecss", "siphasher", "strict-num", @@ -8701,45 +6405,6 @@ 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 = "utf-8" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" - -[[package]] -name = "utf8-width" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1292c0d970b54115d14f2492fe0170adf21d68a1de108eebc51c1df4f346a091" - [[package]] name = "utf8_iter" version = "1.0.4" @@ -8752,17 +6417,6 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" -[[package]] -name = "uuid" -version = "1.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2e054861b4bd027cd373e18e8d8d8e6548085000e41290d95ce0c373a654b4a" -dependencies = [ - "js-sys", - "serde_core", - "wasm-bindgen", -] - [[package]] name = "v_frame" version = "0.3.9" @@ -8780,6 +6434,12 @@ 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" @@ -8788,9 +6448,9 @@ checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] name = "version-compare" -version = "0.2.1" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03c2856837ef78f57382f06b2b8563a2f512f7185d732608fd9176cb3b8edf0e" +checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b" [[package]] name = "version_check" @@ -8798,6 +6458,12 @@ 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" @@ -8814,15 +6480,6 @@ dependencies = [ "winapi-util", ] -[[package]] -name = "want" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" -dependencies = [ - "try-lock", -] - [[package]] name = "wasi" version = "0.11.1+wasi-snapshot-preview1" @@ -8830,12 +6487,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] -name = "wasip2" -version = "1.0.1+wasi-0.2.4" +name = "wasi" +version = "0.14.2+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" +checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" dependencies = [ - "wit-bindgen", + "wit-bindgen-rt", ] [[package]] @@ -8846,22 +6503,35 @@ checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" [[package]] name = "wasm-bindgen" -version = "0.2.106" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d759f433fa64a2d763d1340820e46e111a7a5ab75f993d1852d70b03dbb80fd" +checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" dependencies = [ "cfg-if", "once_cell", "rustversion", "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" +dependencies = [ + "bumpalo", + "log", + "proc-macro2", + "quote", + "syn 2.0.106", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.56" +version = "0.4.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "836d9622d604feee9e5de25ac10e3ea5f2d65b41eac0d9ce72eb5deae707ce7c" +checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" dependencies = [ "cfg-if", "js-sys", @@ -8872,9 +6542,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.106" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48cb0d2638f8baedbc542ed444afc0644a29166f1595371af4fecf8ce1e7eeb3" +checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -8882,39 +6552,38 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.106" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cefb59d5cd5f92d9dcf80e4683949f15ca4b511f4ac0a6e14d4e1ac60c6ecd40" +checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ - "bumpalo", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.106", + "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.106" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbc538057e648b67f72a982e708d485b2efa771e1ac05fec311f9f63e5800db4" +checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" dependencies = [ "unicode-ident", ] [[package]] -name = "wasm-timer" -version = "0.2.5" +name = "wasmtimer" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be0ecb0db480561e9a7642b5d3e4187c128914e58aa84330b9493e3eb68c5e7f" +checksum = "d8d49b5d6c64e8558d9b1b065014426f35c18de636895d24893dbbd329743446" dependencies = [ "futures", "js-sys", - "parking_lot 0.11.2", + "parking_lot", "pin-utils", + "slab", "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", ] [[package]] @@ -8925,7 +6594,7 @@ checksum = "673a33c33048a5ade91a6b139580fa174e19fb0d23f396dca9fa15f2e1e49b35" dependencies = [ "cc", "downcast-rs", - "rustix 1.1.2", + "rustix 1.0.8", "scoped-tls", "smallvec", "wayland-sys", @@ -8937,8 +6606,8 @@ version = "0.31.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c66a47e840dc20793f2264eb4b3e4ecb4b75d91c0dd4af04b456128e0bdd449d" dependencies = [ - "bitflags 2.10.0", - "rustix 1.1.2", + "bitflags 2.9.2", + "rustix 1.0.8", "wayland-backend", "wayland-scanner", ] @@ -8949,7 +6618,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.2", "cursor-icon", "wayland-backend", ] @@ -8960,7 +6629,7 @@ version = "0.31.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "447ccc440a881271b19e9989f75726d60faa09b95b0200a9b7eb5cc47c3eeb29" dependencies = [ - "rustix 1.1.2", + "rustix 1.0.8", "wayland-client", "xcursor", ] @@ -8971,37 +6640,10 @@ version = "0.32.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "efa790ed75fbfd71283bd2521a1cfdc022aabcc28bdcff00851f9e4ae88d9901" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.2", "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.10.0", - "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.10.0", - "wayland-backend", - "wayland-client", - "wayland-protocols", - "wayland-scanner", ] [[package]] @@ -9010,7 +6652,7 @@ version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a07a14257c077ab3279987c4f8bb987851bf57081b93710381daea94f2c2c032" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.2", "wayland-backend", "wayland-client", "wayland-protocols", @@ -9023,12 +6665,11 @@ version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "efd94963ed43cf9938a090ca4f7da58eb55325ec8200c3848963e98dc25b78ec" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.2", "wayland-backend", "wayland-client", "wayland-protocols", "wayland-scanner", - "wayland-server", ] [[package]] @@ -9042,19 +6683,6 @@ 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.10.0", - "downcast-rs", - "rustix 1.1.2", - "wayland-backend", - "wayland-scanner", -] - [[package]] name = "wayland-sys" version = "0.31.7" @@ -9069,9 +6697,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.83" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b32828d774c412041098d182a8b38b16ea816958e07cf40eec2bc080ae137ac" +checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" dependencies = [ "js-sys", "wasm-bindgen", @@ -9087,48 +6715,31 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "web_atoms" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57a9779e9f04d2ac1ce317aee707aa2f6b773afba7b931222bff6983843b1576" -dependencies = [ - "phf 0.13.1", - "phf_codegen", - "string_cache", - "string_cache_codegen", -] - -[[package]] -name = "webpki-root-certs" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36a29fc0408b113f68cf32637857ab740edfafdf460c326cd2afaa2d84cc05dc" -dependencies = [ - "rustls-pki-types", -] - [[package]] name = "weezl" -version = "0.1.12" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a28ac98ddc8b9274cb41bb4d9d4d5c425b6020c50c46f25559911905610b4a88" +checksum = "a751b3277700db47d3e574514de2eced5e54dc8a5436a3bf7a0b248b2cee16f3" [[package]] name = "wgpu" -version = "22.1.0" +version = "26.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1d1c4ba43f80542cf63a0a6ed3134629ae73e8ab51e4b765a67f3aa062eb433" +checksum = "70b6ff82bbf6e9206828e1a3178e851f8c20f1c9028e74dd3a8090741ccd5798" dependencies = [ "arrayvec", - "cfg_aliases 0.1.1", + "bitflags 2.9.2", + "cfg-if", + "cfg_aliases 0.2.1", "document-features", + "hashbrown", "js-sys", "log", "naga", - "parking_lot 0.12.5", + "parking_lot", + "portable-atomic", "profiling", - "raw-window-handle", + "raw-window-handle 0.6.2", "smallvec", "static_assertions", "wasm-bindgen", @@ -9141,50 +6752,84 @@ dependencies = [ [[package]] name = "wgpu-core" -version = "22.1.0" +version = "26.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0348c840d1051b8e86c3bcd31206080c5e71e5933dabd79be1ce732b0b2f089a" +checksum = "d5f62f1053bd28c2268f42916f31588f81f64796e2ff91b81293515017ca8bd9" dependencies = [ "arrayvec", + "bit-set", "bit-vec", - "bitflags 2.10.0", - "cfg_aliases 0.1.1", + "bitflags 2.9.2", + "cfg_aliases 0.2.1", "document-features", - "indexmap 2.12.1", + "hashbrown", + "indexmap", "log", "naga", "once_cell", - "parking_lot 0.12.5", + "parking_lot", + "portable-atomic", "profiling", - "raw-window-handle", + "raw-window-handle 0.6.2", "rustc-hash 1.1.0", "smallvec", - "thiserror 1.0.69", + "thiserror 2.0.16", + "wgpu-core-deps-apple", + "wgpu-core-deps-emscripten", + "wgpu-core-deps-windows-linux-android", "wgpu-hal", "wgpu-types", ] [[package]] -name = "wgpu-hal" -version = "22.0.0" +name = "wgpu-core-deps-apple" +version = "26.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6bbf4b4de8b2a83c0401d9e5ae0080a2792055f25859a02bf9be97952bbed4f" +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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7df2c64ac282a91ad7662c90bc4a77d4a2135bc0b2a2da5a4d4e267afc034b9e" dependencies = [ "android_system_properties", "arrayvec", "ash", "bit-set", - "bitflags 2.10.0", + "bitflags 2.9.2", "block", - "cfg_aliases 0.1.1", - "core-graphics-types", - "d3d12", + "bytemuck", + "cfg-if", + "cfg_aliases 0.2.1", + "core-graphics-types 0.2.0", "glow", "glutin_wgl_sys", "gpu-alloc", "gpu-allocator", "gpu-descriptor", - "hassle-rs", + "hashbrown", "js-sys", "khronos-egl", "libc", @@ -9192,31 +6837,36 @@ dependencies = [ "log", "metal", "naga", - "ndk-sys 0.5.0+25.2.9519653", + "ndk-sys 0.6.0+11769913", "objc", - "once_cell", - "parking_lot 0.12.5", + "ordered-float", + "parking_lot", + "portable-atomic", + "portable-atomic-util", "profiling", "range-alloc", - "raw-window-handle", + "raw-window-handle 0.6.2", "renderdoc-sys", - "rustc-hash 1.1.0", "smallvec", - "thiserror 1.0.69", + "thiserror 2.0.16", "wasm-bindgen", "web-sys", "wgpu-types", - "winapi", + "windows 0.58.0", + "windows-core 0.58.0", ] [[package]] name = "wgpu-types" -version = "22.0.0" +version = "26.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc9d91f0e2c4b51434dfa6db77846f2793149d8e73f800fa2e41f52b8eac3c5d" +checksum = "eca7a8d8af57c18f57d393601a1fb159ace8b2328f1b6b5f80893f7d672c9ae2" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.2", + "bytemuck", "js-sys", + "log", + "thiserror 2.0.16", "web-sys", ] @@ -9230,12 +6880,6 @@ 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" @@ -9254,11 +6898,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.11" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" +checksum = "0978bf7171b3d90bac376700cb56d606feb40f251a475a5d6634613564460b22" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.60.2", ] [[package]] @@ -9270,28 +6914,17 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "window_clipboard" version = "0.4.1" -source = "git+https://github.com/pop-os/window_clipboard.git?tag=pop-0.13-2#6b9faab87bea9cebec6ae036906fd67fed254f5f" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6d692d46038c433f9daee7ad8757e002a4248c20b0a3fbc991d99521d3bcb6d" dependencies = [ "clipboard-win", "clipboard_macos", "clipboard_wayland", "clipboard_x11", - "dnd", - "mime 0.1.0", - "raw-window-handle", + "raw-window-handle 0.6.2", "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" @@ -9299,17 +6932,16 @@ 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-core" -version = "0.52.0" +name = "windows" +version = "0.58.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" dependencies = [ + "windows-core 0.58.0", "windows-targets 0.52.6", ] @@ -9325,77 +6957,79 @@ dependencies = [ [[package]] name = "windows-core" -version = "0.62.2" +version = "0.58.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" +checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" dependencies = [ - "windows-implement 0.60.2", - "windows-interface 0.59.3", + "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-link", - "windows-result 0.4.1", - "windows-strings", + "windows-result 0.3.4", + "windows-strings 0.4.2", ] [[package]] name = "windows-implement" -version = "0.53.0" +version = "0.58.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "942ac266be9249c84ca862f0a164a39533dc2f6f33dc98ec89c8da99b82ea0bd" +checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.106", ] [[package]] name = "windows-implement" -version = "0.60.2" +version = "0.60.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" +checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.106", ] [[package]] name = "windows-interface" -version = "0.53.0" +version = "0.58.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da33557140a288fae4e1d5f8873aaf9eb6613a9cf82c3e070223ff177f598b60" +checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.106", ] [[package]] name = "windows-interface" -version = "0.59.3" +version = "0.59.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" +checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.106", ] [[package]] name = "windows-link" -version = "0.2.1" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" - -[[package]] -name = "windows-registry" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02752bf7fbdcce7f2a27a742f798510f3e5ad88dbe84871e5168e2120c3d5720" -dependencies = [ - "windows-link", - "windows-result 0.4.1", - "windows-strings", -] +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" [[package]] name = "windows-result" @@ -9408,18 +7042,37 @@ dependencies = [ [[package]] name = "windows-result" -version = "0.4.1" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" +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" dependencies = [ "windows-link", ] [[package]] name = "windows-strings" -version = "0.5.1" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" +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" dependencies = [ "windows-link", ] @@ -9466,16 +7119,7 @@ version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" dependencies = [ - "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", + "windows-targets 0.53.3", ] [[package]] @@ -9526,19 +7170,19 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.53.5" +version = "0.53.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" +checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91" dependencies = [ "windows-link", - "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", + "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", ] [[package]] @@ -9561,9 +7205,9 @@ checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_gnullvm" -version = "0.53.1" +version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" +checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" [[package]] name = "windows_aarch64_msvc" @@ -9585,9 +7229,9 @@ checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_aarch64_msvc" -version = "0.53.1" +version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" +checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" [[package]] name = "windows_i686_gnu" @@ -9609,9 +7253,9 @@ checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] name = "windows_i686_gnu" -version = "0.53.1" +version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" +checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" [[package]] name = "windows_i686_gnullvm" @@ -9621,9 +7265,9 @@ checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_gnullvm" -version = "0.53.1" +version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" +checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" [[package]] name = "windows_i686_msvc" @@ -9645,9 +7289,9 @@ checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_i686_msvc" -version = "0.53.1" +version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" +checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" [[package]] name = "windows_x86_64_gnu" @@ -9669,9 +7313,9 @@ checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnu" -version = "0.53.1" +version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" +checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" [[package]] name = "windows_x86_64_gnullvm" @@ -9693,9 +7337,9 @@ checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_gnullvm" -version = "0.53.1" +version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" +checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" [[package]] name = "windows_x86_64_msvc" @@ -9717,44 +7361,44 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "windows_x86_64_msvc" -version = "0.53.1" +version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" +checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" [[package]] name = "winit" -version = "0.30.5" -source = "git+https://github.com/pop-os/winit.git?tag=iced-xdg-surface-0.13-rc#12a5f17d1811cdebbcbd310a3d92965e9142fa12" +version = "0.30.8" +source = "git+https://github.com/iced-rs/winit.git?rev=11414b6aa45699f038114e61b4ddf5102b2d3b4b#11414b6aa45699f038114e61b4ddf5102b2d3b4b" dependencies = [ "ahash", "android-activity", "atomic-waker", - "bitflags 2.10.0", - "block2 0.5.1", + "bitflags 2.9.2", + "block2", "bytemuck", - "calloop 0.13.0", + "calloop", "cfg_aliases 0.2.1", "concurrent-queue", "core-foundation 0.9.4", - "core-graphics", + "core-graphics 0.23.2", "cursor-icon", "dpi", "js-sys", "libc", - "memmap2 0.9.9", - "ndk", - "objc2 0.5.2", - "objc2-app-kit 0.2.2", - "objc2-foundation 0.2.2", + "memmap2", + "ndk 0.9.0", + "objc2", + "objc2-app-kit", + "objc2-foundation", "objc2-ui-kit", "orbclient", "percent-encoding", "pin-project", - "raw-window-handle", - "redox_syscall 0.5.18", + "raw-window-handle 0.6.2", + "redox_syscall 0.4.1", "rustix 0.38.44", "sctk-adwaita", - "smithay-client-toolkit 0.19.2", + "smithay-client-toolkit", "smol_str", "tracing", "unicode-segmentation", @@ -9783,33 +7427,37 @@ dependencies = [ [[package]] name = "winnow" -version = "0.7.14" +version = "0.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5364e9d77fcdeeaa6062ced926ee3381faa2ee02d3eb83a5c27a8825540829" +checksum = "f3edebf492c8125044983378ecb5766203ad3b4c2f7a922bd7dd207f6d443e95" dependencies = [ "memchr", ] [[package]] -name = "wio" -version = "0.2.2" +name = "winreg" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d129932f4644ac2396cb456385cbf9e63b5b30c6e8dc4820bdca4eb082037a5" +checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5" dependencies = [ - "winapi", + "cfg-if", + "windows-sys 0.48.0", ] [[package]] -name = "wit-bindgen" -version = "0.46.0" +name = "wit-bindgen-rt" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" +checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" +dependencies = [ + "bitflags 2.9.2", +] [[package]] name = "writeable" -version = "0.6.2" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" +checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" [[package]] name = "x11-dl" @@ -9824,35 +7472,24 @@ dependencies = [ [[package]] name = "x11rb" -version = "0.13.2" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9993aa5be5a26815fe2c3eacfc1fde061fc1a1f094bf1ad2a18bf9c495dd7414" +checksum = "5d91ffca73ee7f68ce055750bf9f6eca0780b8c85eff9bc046a3b0da41755e12" dependencies = [ "as-raw-xcb-connection", "gethostname", "libc", "libloading", "once_cell", - "rustix 1.1.2", + "rustix 0.38.44", "x11rb-protocol", - "xcursor", ] [[package]] name = "x11rb-protocol" -version = "0.13.2" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -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", -] +checksum = "ec107c4503ea0b4a98ef47356329af139c0a4f7750e621cf2973cd3385ebcb3d" [[package]] name = "xcursor" @@ -9862,9 +7499,9 @@ checksum = "bec9e4a500ca8864c5b47b8b482a73d62e4237670e5b5f1d6b9e3cae50f28f2b" [[package]] name = "xdg" -version = "3.0.0" +version = "2.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fb433233f2df9344722454bc7e96465c9d03bff9d77c248f9e7523fe79585b5" +checksum = "213b7324336b53d2414b2db8537e56544d981803139155afa84f76eeebb7a546" [[package]] name = "xdg-home" @@ -9876,46 +7513,13 @@ 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.9", - "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.9", - "xkeysym", -] - [[package]] name = "xkbcommon-dl" version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.9.2", "dlib", "log", "once_cell", @@ -9927,15 +7531,12 @@ name = "xkeysym" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56" -dependencies = [ - "bytemuck", -] [[package]] name = "xml-rs" -version = "0.8.28" +version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ae8337f8a065cfc972643663ea4279e04e7256de865aa66fe25cec5fb912d3f" +checksum = "6fd8403733700263c6eb89f192880191f1b83e332f7a20371ddcf421c4a337c7" [[package]] name = "xmlwriter" @@ -9943,12 +7544,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec7a2a501ed189703dba8b08142f057e887dfc4b2cc4db2d343ac6376ba3e0b9" -[[package]] -name = "y4m" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5a4b21e1a62b67a2970e6831bc091d7b87e119e7f9791aef9702e3bef04448" - [[package]] name = "yansi" version = "1.0.1" @@ -9961,23 +7556,13 @@ 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.1" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954" +checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" dependencies = [ + "serde", "stable_deref_trait", "yoke-derive", "zerofrom", @@ -9985,13 +7570,13 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.8.1" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" +checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.106", "synstructure", ] @@ -10002,9 +7587,15 @@ 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", @@ -10016,12 +7607,11 @@ dependencies = [ "nix 0.26.4", "once_cell", "ordered-stream", - "rand 0.8.5", + "rand", "serde", "serde_repr", "sha1", "static_assertions", - "tokio", "tracing", "uds_windows", "winapi", @@ -10033,15 +7623,15 @@ dependencies = [ [[package]] name = "zbus" -version = "5.12.0" +version = "5.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b622b18155f7a93d1cd2dc8c01d2d6a44e08fb9ebb7b3f9e6ed101488bad6c91" +checksum = "4bb4f9a464286d42851d18a605f7193b8febaf5b0919d71c6399b7b26e5b0aad" dependencies = [ "async-broadcast 0.7.2", "async-executor", - "async-io 2.6.0", + "async-io 2.5.0", "async-lock 3.4.1", - "async-process 2.5.0", + "async-process 2.4.0", "async-recursion", "async-task", "async-trait", @@ -10055,15 +7645,13 @@ dependencies = [ "ordered-stream", "serde", "serde_repr", - "tokio", "tracing", "uds_windows", - "uuid", - "windows-sys 0.61.2", - "winnow 0.7.14", - "zbus_macros 5.12.0", + "windows-sys 0.59.0", + "winnow 0.7.12", + "zbus_macros 5.9.0", "zbus_names 4.2.0", - "zvariant 5.8.0", + "zvariant 5.6.0", ] [[package]] @@ -10082,17 +7670,17 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "5.12.0" +version = "5.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cdb94821ca8a87ca9c298b5d1cbd80e2a8b67115d99f6e4551ac49e42b6a314" +checksum = "ef9859f68ee0c4ee2e8cde84737c78e3f4c54f946f2a38645d0d4c7a95327659" dependencies = [ - "proc-macro-crate 3.4.0", + "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.106", "zbus_names 4.2.0", - "zvariant 5.8.0", - "zvariant_utils 3.2.1", + "zvariant 5.6.0", + "zvariant_utils 3.2.0", ] [[package]] @@ -10114,8 +7702,8 @@ checksum = "7be68e64bf6ce8db94f63e72f0c7eb9a60d733f7e0499e628dfab0f84d6bcb97" dependencies = [ "serde", "static_assertions", - "winnow 0.7.14", - "zvariant 5.8.0", + "winnow 0.7.12", + "zvariant 5.6.0", ] [[package]] @@ -10126,22 +7714,22 @@ checksum = "6df3dc4292935e51816d896edcd52aa30bc297907c26167fec31e2b0c6a32524" [[package]] name = "zerocopy" -version = "0.8.31" +version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd74ec98b9250adb3ca554bdde269adf631549f51d8a8f8f0a10b50f1cb298c3" +checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.31" +version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8a8d209fdf45cf5138cbb5a506f6b52522a25afccc534d1475dad8e31105c6a" +checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.106", ] [[package]] @@ -10161,21 +7749,21 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.106", "synstructure", ] [[package]] name = "zeroize" -version = "1.8.2" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" [[package]] name = "zerotrie" -version = "0.2.3" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851" +checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" dependencies = [ "displaydoc", "yoke", @@ -10184,11 +7772,10 @@ dependencies = [ [[package]] name = "zerovec" -version = "0.11.5" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" +checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b" dependencies = [ - "serde", "yoke", "zerofrom", "zerovec-derive", @@ -10196,47 +7783,13 @@ dependencies = [ [[package]] name = "zerovec-derive" -version = "0.11.2" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" +checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", -] - -[[package]] -name = "zmij" -version = "1.0.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" - -[[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", + "syn 2.0.106", ] [[package]] @@ -10245,12 +7798,6 @@ version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f423a2c17029964870cfaabb1f13dfab7d092a62a29a89264f4d36990ca414a" -[[package]] -name = "zune-core" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "111f7d9820f05fd715df3144e254d6fc02ee4088b0644c0ffd0efc9e6d9d2773" - [[package]] name = "zune-inflate" version = "0.2.54" @@ -10262,20 +7809,11 @@ dependencies = [ [[package]] name = "zune-jpeg" -version = "0.4.21" +version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29ce2c8a9384ad323cf564b67da86e21d3cfdff87908bc1223ed5c99bc792713" +checksum = "fc1f7e205ce79eb2da3cd71c5f55f3589785cb7c79f6a03d1c8d1491bda5d089" dependencies = [ - "zune-core 0.4.12", -] - -[[package]] -name = "zune-jpeg" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d915729b0e7d5fe35c2f294c5dc10b30207cc637920e5b59077bfa3da63f28" -dependencies = [ - "zune-core 0.5.0", + "zune-core", ] [[package]] @@ -10289,22 +7827,23 @@ dependencies = [ "libc", "serde", "static_assertions", + "url", "zvariant_derive 3.15.2", ] [[package]] name = "zvariant" -version = "5.8.0" +version = "5.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2be61892e4f2b1772727be11630a62664a1826b62efa43a6fe7449521cb8744c" +checksum = "d91b3680bb339216abd84714172b5138a4edac677e641ef17e1d8cb1b3ca6e6f" dependencies = [ "endi", "enumflags2", "serde", "url", - "winnow 0.7.14", - "zvariant_derive 5.8.0", - "zvariant_utils 3.2.1", + "winnow 0.7.12", + "zvariant_derive 5.6.0", + "zvariant_utils 3.2.0", ] [[package]] @@ -10322,15 +7861,15 @@ dependencies = [ [[package]] name = "zvariant_derive" -version = "5.8.0" +version = "5.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da58575a1b2b20766513b1ec59d8e2e68db2745379f961f86650655e862d2006" +checksum = "3a8c68501be459a8dbfffbe5d792acdd23b4959940fc87785fb013b32edbc208" dependencies = [ - "proc-macro-crate 3.4.0", + "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 2.0.111", - "zvariant_utils 3.2.1", + "syn 2.0.106", + "zvariant_utils 3.2.0", ] [[package]] @@ -10346,13 +7885,14 @@ dependencies = [ [[package]] name = "zvariant_utils" -version = "3.2.1" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6949d142f89f6916deca2232cf26a8afacf2b9fdc35ce766105e104478be599" +checksum = "e16edfee43e5d7b553b77872d99bc36afdda75c223ca7ad5e3fbecd82ca5fc34" dependencies = [ "proc-macro2", "quote", "serde", - "syn 2.0.111", - "winnow 0.7.14", + "static_assertions", + "syn 2.0.106", + "winnow 0.7.12", ] diff --git a/Cargo.toml b/Cargo.toml index 09ada1f..943bbd3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,10 +7,13 @@ description = "A cli presentation system" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -clap = { version = "4.5.20", features = ["derive"] } +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"] } @@ -18,48 +21,35 @@ strum = "0.26.3" strum_macros = "0.26.4" ron = "0.8.1" sqlx = { version = "0.8.2", features = ["sqlite", "runtime-tokio"] } -dirs = "6.0.0" +dirs = "5.0.1" tokio = "1.41.1" crisp = { git = "https://git.tfcconnection.org/chris/crisp", version = "0.1.3" } -rodio = { version = "0.21.1", features = ["symphonia-all", "tracing"] } +rodio = { version = "0.20.1", features = ["symphonia-all", "tracing"] } gstreamer = "0.23" gstreamer-app = "0.23" # gstreamer-video = "0.23" # gstreamer-allocators = "0.23" # cosmic-time = { git = "https://githubg.com/pop-os/cosmic-time" } url = "2" -# colors-transform = "0.2.11" +colors-transform = "0.2.11" rayon = "1.11.0" -resvg = "0.45.1" -image = "0.25.8" -rapidhash = "4.0.0" -rapidfuzz = "0.5.0" -# dragking = { git = "https://github.com/airstrike/dragking" } +# resvg = "0.45.1" # femtovg = { version = "0.16.0", features = ["wgpu"] } # wgpu = "26.0.1" # mupdf = "0.5.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" -obws = "0.14.0" -derive_more = { version = "2.1.1", features = ["debug"] } -reqwest = "0.13.1" -scraper = "0.25.0" -itertools = "0.14.0" -serde_json = "1.0.149" +rfd = { version = "0.12.1", features = ["xdg-portal"], default-features = false } +derive_setters = "0.1.8" +freedesktop-icons = "0.4.0" -# 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] +git = "https://github.com/iced-rs/iced" +branch = "master" +features = ["wgpu", "image", "advanced", "svg", "canvas", "hot", "debug", "lazy", "tokio"] [dependencies.iced_video_player] -git = "https://github.com/jackpot51/iced_video_player.git" -branch = "cosmic" -features = ["wgpu"] +git = "https://git.tfcconnection.org/chris/iced_video_player" +branch = "master" +# branch = "cosmic" # [profile.dev] # opt-level = 3 diff --git a/TODO.org b/TODO.org deleted file mode 100644 index faa2969..0000000 --- a/TODO.org +++ /dev/null @@ -1,137 +0,0 @@ -#+TITLE: The Task list for Lumina - - -* TODO [#A] Add Action system -This will be based on each slide having the ability to activate an action (i.e. OBS scene switch, OBS start or stop) when it is active. - -This is working but the right click context menu is all the way on the edge of the ui so you can't control all the slides. It also needs a lot of help in making the system more robust and potentially lest reliant on the Presenter struct itself. - -* TODO [#B] Font in the song editor doesn't always use the original version -There seems to be some issue with fontdb not able to decipher all the versions of some fonts that are OTF and then end up loading the wrong ones in some issues. - -* TODO [#B] Find a way to use auth-token in tests for ci -If I can find out how to use my secrets in ci that would free up more tests, but I could also just turn that test off for the CI so that it won't constantly fail for now -* TODO [#C] Rename menu actions to menu commands and build a reverse hashmap for settings to map commands to key-binding such that we can allow for remapping them on the fly. - -* TODO [#B] Saving and loading font awareness -Someday we should make the saving and loading to be aware of the fonts on the system and find a way to embed them into the save file. - -* TODO [#B] Develop ui for settings - -* TODO [#B] Develop library system for slides that are more than images or video i.e. content - -* TODO [#C] Use orgize as a file parser and allow for orgdown files to represent a presentation. -Orgize has some very nice features that will let me determine what things are in an orgdown file and thus take said file and turn it into a presentation. - -After looking more and more at how the orgize docs describe things and the testing platform found at: https://poiscript.github.io/orgize/ I believe this will work. The main things are that I can possibly decide how to interpret certain pieces of orgdown to mean certain things in lumina. Essentially a properties drawer or tag can indicate backgrounds and other info for the slides or songs and then the notes blocks can indicate text that shouldn't be printed into the slide, thus allowing a single orgdown document to illustrate both an entire presentation, but also the notes and plan for the presenter. - -I could potentially do the same with markdown, but since this is for me first, I'll use orgdown because I enjoy the syntax a lot more. - -* TODO [#C] Allow for a way to split the presentation up with a right click menu for the presentation preview row. - -* TODO [#C] Text could be built by using SVG instead of the text element. Maybe I could construct my own text element even -This does almost work. There is a clear amount of lag or rather hang up since switching to the =text_svg= element. I think I may only keep it till I can figure out how to do strokes and shadows in iced's normal text element. - -Actually, what if we just made the svg at load/creation time and stored it in the file system for later, then load the entire songs svg's into memory during the presentation to speed things up? Would that be faster than creating them at on the fly? Is it the creation of them that is slow or the rendering? - -** SVG performs badly -Since SVG's apparently run poorly in iced, instead I'll need to see about either creating a new text element, or teaching Iced to render strokes and shadows on text. - -** Fork Cryoglyph -This fork will render text 3 times. Once for the text, once for the stroke, once for the shadow. This will only be used in the slides and therefore should not be much of a performance hit since we will only be render 3 copies of the given text. This should not be bad performance since it's not a large amount of text. - -This also means in our custom widget with our custom fork, we can animate each individually perhaps. - -** Actually..... -I tried out a way of generating the svg and rasterizing it ahead of time and then storing it in the file system to be cached. This works out very well. The text is one whole image for a slides text that gets layered on top of the background, but it works out well for now. - -The problem with this approach is that every change to a song's text or font metrics means we need to rebuild all the text items for that song. I need to think of a way for the text generation to be done asynchronously so that the ui isn't locked up. - -I bet this is tricking up the loading mechanism. Loading only grabs all the backgrounds and audio pieces, not the text_svg pieces. So maybe it should so that the generator can run again and grab the same pieces from the filesystem rather than recreate them. This gets extra tricky because we may have fonts that are missing when loading a file. In such a case the loading mechanism ought to suggest to the user to grab those fonts and then perhaps load the cached file while being extra clear that any changes will mess up the text since they no longer possess the font that is in the loaded file. Maybe what we can do is during save, save a copy of all the fonts as well and then during load check to see if the computer has them, if they don't offer to install them on the spot such that they can use the font as is. I wonder if we are allowed to pass fonts around that way. - -** Made this slightly faster -Since strings are allocated on the heap, I've changed how to construct the svg string a bit, but honestly, it doesn't matter too much because most of the performance cost seems to be in rendering the string using resvg. So, this can still be something that get's fixed later, and I believe that fix will come in the form of a multi-channel signed distance field wgpu rendered text eventually. We can work on this much later though. - -* TODO [#C] Make the presenter more modular so things are easier to change. This is vague... - -* TODO [#C] Figure out why the Video element seems to have problems when moving the mouse around - -* DONE [#A] Create a view of all slides in a PDF presenation - -* DONE [#A] Develop DnD for library items -This is limited by the fact that I need to develop this in cosmic. I am honestly thinking that I'll need to build my own drag and drop system or at least work with system76 to fix their dnd system on other systems. - -This needs lots more attention - -* DONE [#A] File saving and loading -Need to make sure we can save a file with all files archived in it and load it back up. - -This is giving me a lot of thoughts... -1. That saving and loading needs to know about fonts as well. -2. That TextSvgs should likely be saved as well since the other machines may not always have the same fonts. -3. That means that TextSvg should have a path option that could hold the cached svg that has already been rendered and that this gets changed to the loaded files directory rather than using the default cache directory. - -* DONE [#A] Add removal and reordering of service_items -Reordering is finished -* DONE [#A] Change return type of all components to an Action enum instead of the Task type [0%] [0/0] -** DONE Library -** DONE SongEditor -** DONE Presenter - -* DONE [#A] Need to fix tests now that the basic app is working -Lots of them have been tweaked to be completing now, but there is more work to do and several need to likely be a lot more robust. - -Still failing 4 tests, all to do with the db or lisp. I might throw out the lisp code at some point tho. I keep thinking that a better alternative would be to have a markdown serialization system such that you can write slides in markdown somehow and they would be able to be loaded. - -* DONE [#A] Make sure updating verse updates the lyrics too -[[file:~/dev/lumina-iced/src/core/songs.rs::old_verse = verse;]] - -This is necessary so that the entire song gets changed and we can propogate those changes then back to the db. - -There is likely some work that still needs to be done here, I believe I am somehow deleting some of my verses. -* DONE [#A] Need to fixup how songs are edited in the editors -Currently the song is cloned many times to pass around and then finally get updated in DB. Instead, we need to edit the song directly in the editor and after it's been changed appropriatel, run the update_song method to get the current song and create slides from it and then update it in the DB. - -* DONE [#B] Functions for text alignments -This will need to be matched on for the =TextAlignment= from the user - -* DONE Move text_generation function to be asynchronous so that UI doesn't lock up during song editing. -* DONE Build a presentation editor - -* DONE Build library to see all available songs, images, videos, presentations, and slides -** DONE Develop ui for libraries -I've got the library basic layer done, I need to develop a way to open the libraries accordion button and then show the list of items in the library -** DONE Need to do search and creation systems yet - -* DONE [#B] Build editors for each possible item -** DONE Develop ui for editors - -* DONE [#B] Find a way to load and discover every font on the system for slide building -This may not be necessary since it is possible to create a font using =Box::leak()=. -#+begin_src rust -let font = self.current_slide.font().into_boxed_str(); -let family = Family::Name(Box::leak(font)); -let weight = Weight::Normal; -let stretch = Stretch::Normal; -let style = Style::Normal; -let font = Font { - family, - weight, - stretch, - style, -}; -#+end_src - -This code creates a font by leaking the Box to a ='static &str=. I just am not sure if the &str stays around in memory after the view function. If it does, then it's not on the stack anymore and should be fine, but if it isn't cleaned up then we will have a memory leak. - -Krimzin on Discord told me that maybe the =update= method is a better place for this Box to be created or updated and then maybe I could generate the view from there. - -* DONE Build an image editor -* DONE Use Rich Text instead of normal text for slides -This will make it so that we can add styling to the text like borders and backgrounds or highlights. Maybe in the future it'll add shadows too. -* DONE Build a video editor -* DONE Check into =mupdf-rs= for loading PDF's. - -* DONE Build Menu -* DONE Find a way for text to pass through a service item to a slide i.e. content piece -This proved easier by just creating the =Slide= first and inserting it into the =ServiceItem=. diff --git a/flake.lock b/flake.lock index aa3d695..d20281c 100644 --- a/flake.lock +++ b/flake.lock @@ -6,11 +6,11 @@ "rust-analyzer-src": "rust-analyzer-src" }, "locked": { - "lastModified": 1770794449, - "narHash": "sha256-1nFkhcZx9+Sdw5OXwJqp5TxvGncqRqLeK781v0XV3WI=", + "lastModified": 1755585599, + "narHash": "sha256-tl/0cnsqB/Yt7DbaGMel2RLa7QG5elA8lkaOXli6VdY=", "owner": "nix-community", "repo": "fenix", - "rev": "b19d93fdf9761e6101f8cb5765d638bacebd9a1b", + "rev": "6ed03ef4c8ec36d193c18e06b9ecddde78fb7e42", "type": "github" }, "original": { @@ -65,11 +65,11 @@ "nixpkgs": "nixpkgs_2" }, "locked": { - "lastModified": 1769799857, - "narHash": "sha256-88IFXZ7Sa1vxbz5pty0Io5qEaMQMMUPMonLa3Ls/ss4=", + "lastModified": 1752689277, + "narHash": "sha256-uldUBFkZe/E7qbvxa3mH1ItrWZyT6w1dBKJQF/3ZSsc=", "owner": "nix-community", "repo": "naersk", - "rev": "9d4ed44d8b8cecdceb1d6fd76e74123d90ae6339", + "rev": "0e72363d0938b0208d6c646d10649164c43f4d64", "type": "github" }, "original": { @@ -80,11 +80,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1770562336, - "narHash": "sha256-ub1gpAONMFsT/GU2hV6ZWJjur8rJ6kKxdm9IlCT0j84=", + "lastModified": 1755186698, + "narHash": "sha256-wNO3+Ks2jZJ4nTHMuks+cxAiVBGNuEBXsT29Bz6HASo=", "owner": "nixos", "repo": "nixpkgs", - "rev": "d6c71932130818840fc8fe9509cf50be8c64634f", + "rev": "fbcf476f790d8a217c3eab4e12033dc4a0f6d23c", "type": "github" }, "original": { @@ -112,11 +112,11 @@ }, "nixpkgs_3": { "locked": { - "lastModified": 1770562336, - "narHash": "sha256-ub1gpAONMFsT/GU2hV6ZWJjur8rJ6kKxdm9IlCT0j84=", + "lastModified": 1755615617, + "narHash": "sha256-HMwfAJBdrr8wXAkbGhtcby1zGFvs+StOp19xNsbqdOg=", "owner": "nixos", "repo": "nixpkgs", - "rev": "d6c71932130818840fc8fe9509cf50be8c64634f", + "rev": "20075955deac2583bb12f07151c2df830ef346b4", "type": "github" }, "original": { @@ -126,39 +126,22 @@ "type": "github" } }, - "nixpkgs_4": { - "locked": { - "lastModified": 1744536153, - "narHash": "sha256-awS2zRgF4uTwrOKwwiJcByDzDOdo3Q1rPZbiHQg/N38=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "18dd725c29603f582cf1900e0d25f9f1063dbf11", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixpkgs-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, "root": { "inputs": { "fenix": "fenix", "flake-utils": "flake-utils", "naersk": "naersk", - "nixpkgs": "nixpkgs_3", - "rust-overlay": "rust-overlay" + "nixpkgs": "nixpkgs_3" } }, "rust-analyzer-src": { "flake": false, "locked": { - "lastModified": 1770702974, - "narHash": "sha256-CbvWu72rpGHK5QynoXwuOnVzxX7njF2LYgk8wRSiAQ0=", + "lastModified": 1755504847, + "narHash": "sha256-VX0B9hwhJypCGqncVVLC+SmeMVd/GAYbJZ0MiiUn2Pk=", "owner": "rust-lang", "repo": "rust-analyzer", - "rev": "07a594815f7c1d6e7e39f21ddeeedb75b21795f4", + "rev": "a905e3b21b144d77e1b304e49f3264f6f8d4db75", "type": "github" }, "original": { @@ -185,24 +168,6 @@ "type": "github" } }, - "rust-overlay": { - "inputs": { - "nixpkgs": "nixpkgs_4" - }, - "locked": { - "lastModified": 1770779462, - "narHash": "sha256-ykcXTKtV+dOaKlOidAj6dpewBHjni9/oy/6VKcqfzfY=", - "owner": "oxalica", - "repo": "rust-overlay", - "rev": "8a53b3ade61914cdb10387db991b90a3a6f3c441", - "type": "github" - }, - "original": { - "owner": "oxalica", - "repo": "rust-overlay", - "type": "github" - } - }, "systems": { "locked": { "lastModified": 1681028828, diff --git a/flake.nix b/flake.nix index 396ab59..97f77af 100644 --- a/flake.nix +++ b/flake.nix @@ -6,134 +6,97 @@ naersk.url = "github:nix-community/naersk"; flake-utils.url = "github:numtide/flake-utils"; fenix.url = "github:nix-community/fenix"; - rust-overlay.url = "github:oxalica/rust-overlay"; }; - outputs = - inputs: - with inputs; - flake-utils.lib.eachDefaultSystem ( - system: - let - overlays = [ (import rust-overlay) ]; - pkgs = import nixpkgs { - inherit system overlays; - # overlays = [ rust-overlay.overlays.default ]; - # overlays = [cargo2nix.overlays.default]; - }; - naersk' = pkgs.callPackage naersk { }; + 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 + ]; - # toolchain = (with pkgs.fenix.default; [cargo clippy rust-std rust-src rustc rustfmt rust-analyzer-nightly]); - + bi = with pkgs; [ + gcc + stdenv + gnumake + gdb + lldb + cmake + makeWrapper + vulkan-headers + vulkan-loader + vulkan-tools + libGL + cargo-flamegraph - nativeBuildInputs = with pkgs; [ - # Rust tools - # toolchain - # (pkgs.fenix.default.withComponents [ - # "cargo" - # "clippy" - # "rust-std" - # # "rust-src" - # "rustc" - # "rustfmt" - # ]) - (rust-bin.selectLatestNightlyWith (toolchain: toolchain.default.override { - extensions = [ "rust-src" "rust-analyzer" "clippy" ]; - })) - cargo-nextest - cargo-criterion - # rust-analyzer-nightly - vulkan-loader - wayland - wayland-protocols - libxkbcommon - pkg-config - sccache - ]; + 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 - buildInputs = 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 - ffmpeg-full - mupdf - # yt-dlp - - just - sqlx-cli - cargo-watch - samply - ]; - - 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 - ] - }"; - in - rec { - devShell = - pkgs.mkShell.override - { - # stdenv = pkgs.stdenvAdapters.useMoldLinker pkgs.clangStdenv; - } - { - inherit nativeBuildInputs buildInputs LD_LIBRARY_PATH; - # LIBCLANG_PATH = "${pkgs.clang}"; - DATABASE_URL = "sqlite://./test.db"; - # RUST_SRC_PATH = "${toolchain.rust-src}/lib/rustlib/src/rust/library"; - }; - defaultPackage = naersk'.buildPackage { - inherit nativeBuildInputs buildInputs LD_LIBRARY_PATH; - src = ./.; - }; - packages = { - default = naersk'.buildPackage { - inherit nativeBuildInputs buildInputs LD_LIBRARY_PATH; + 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 { src = ./.; }; - }; - } - ); + packages = { + default = naersk'.buildPackage { + src = ./.; + }; + }; + } + ); } diff --git a/justfile b/justfile index b87ae1e..8eb74f5 100644 --- a/justfile +++ b/justfile @@ -1,37 +1,24 @@ ui := "-i" -verbose := "-v" file := "~/dev/lumina-iced/test_presentation.lisp" -export RUSTC_WRAPPER := "sccache" -# export RUST_LOG := "debug" - default: just --list build: - cargo build -build-release: - cargo build --release + RUST_LOG=debug cargo build +sbuild: + RUST_LOG=debug sccache cargo build run: - cargo run -- {{verbose}} {{ui}} -run-release: - cargo run --release -- {{verbose}} {{ui}} -run-file: - cargo run -- {{verbose}} {{ui}} {{file}} + RUST_LOG=debug cargo run -- {{ui}} {{file}} +srun: + RUST_LOG=debug sccache cargo run -- {{ui}} {{file}} clean: - cargo clean + RUST_LOG=debug cargo clean test: - cargo nextest run -ci-test: - cargo nextest run -- --skip test_db_and_model --skip test_update --skip test_song_slide_speed --skip test_song_to_slide --skip test_song_from_db -bench: - export NEXTEST_EXPERIMENTAL_BENCHMARKS=1 - cargo nextest bench + RUST_LOG=debug cargo test --benches --tests --all-features -- --nocapture profile: - samply record cargo run --release -- {{verbose}} {{ui}} + cargo flamegraph --image-width 8000 -- {{ui}} {{file}} alias b := build alias r := run -alias br := build-release -alias rr := run-release -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 deleted file mode 100644 index b1a6d30..0000000 --- a/migrations/20250925190420_Remove_the_page_count_column_in_presentations_table.sql +++ /dev/null @@ -1,3 +0,0 @@ --- 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 deleted file mode 100644 index abf000f..0000000 --- a/migrations/20251020184333_add_starting_index_and_ending_index_to_presentations_table.sql +++ /dev/null @@ -1,6 +0,0 @@ --- Add migration script here -ALTER TABLE presentations -ADD COLUMN starting_index INTEGER; - -ALTER TABLE presentations -ADD COLUMN ending_index INTEGER; diff --git a/migrations/20260211174933_add_stroke_and_shadow.sql b/migrations/20260211174933_add_stroke_and_shadow.sql deleted file mode 100644 index ca5955e..0000000 --- a/migrations/20260211174933_add_stroke_and_shadow.sql +++ /dev/null @@ -1,19 +0,0 @@ --- Add migration script here -ALTER TABLE songs -ADD COLUMN stroke_size INTEGER; - -ALTER TABLE songs -ADD COLUMN stroke_color TEXT; - -ALTER TABLE songs -ADD COLUMN shadow_size INTEGER; - -ALTER TABLE songs -ADD COLUMN shadow_offset_x INTEGER; - -ALTER TABLE songs -ADD COLUMN shadow_offset_y INTEGER; - -ALTER TABLE songs -ADD COLUMN shadow_color TEXT; - diff --git a/migrations/20260217193356_add_text_weight_and_style.sql b/migrations/20260217193356_add_text_weight_and_style.sql deleted file mode 100644 index ce3f306..0000000 --- a/migrations/20260217193356_add_text_weight_and_style.sql +++ /dev/null @@ -1,6 +0,0 @@ --- Add migration script here -ALTER TABLE songs -ADD COLUMN weight TEXT; - -ALTER TABLE songs -ADD COLUMN style TEXT; diff --git a/readme.org b/readme.org index e378379..7f7470c 100644 --- a/readme.org +++ b/readme.org @@ -4,12 +4,14 @@ 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 works. (PowerPoint, and Impress are in not implemented yet) +- Present Slides (PDF, 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/bigbuckbunny.mp4 b/res/bigbuckbunny.mp4 deleted file mode 100644 index 210600b..0000000 Binary files a/res/bigbuckbunny.mp4 and /dev/null differ diff --git a/res/chad.png b/res/chad.png deleted file mode 100644 index 44f21f3..0000000 Binary files a/res/chad.png and /dev/null differ diff --git a/res/list-add-above.svg b/res/list-add-above.svg deleted file mode 100644 index 27f02ba..0000000 --- a/res/list-add-above.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/res/list-add-below.svg b/res/list-add-below.svg deleted file mode 100644 index 99adb9e..0000000 --- a/res/list-add-below.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/res/nerdfont.ttf b/res/nerdfont.ttf deleted file mode 100644 index 38c24fb..0000000 Binary files a/res/nerdfont.ttf and /dev/null differ diff --git a/res/shadow.svg b/res/shadow.svg deleted file mode 100644 index 6203343..0000000 --- a/res/shadow.svg +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/res/split-above.svg b/res/split-above.svg deleted file mode 100644 index b105436..0000000 --- a/res/split-above.svg +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - diff --git a/res/split-below.svg b/res/split-below.svg deleted file mode 100644 index 072feb7..0000000 --- a/res/split-below.svg +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - diff --git a/res/text-outline.svg b/res/text-outline.svg deleted file mode 100644 index 4c12366..0000000 --- a/res/text-outline.svg +++ /dev/null @@ -1 +0,0 @@ -Text-effects-24-regular SVG Icon \ No newline at end of file diff --git a/res/text-shadow.svg b/res/text-shadow.svg deleted file mode 100644 index c55317c..0000000 --- a/res/text-shadow.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/rustfmt.toml b/rustfmt.toml index 91b451d..0f2a39c 100644 --- a/rustfmt.toml +++ b/rustfmt.toml @@ -1,3 +1,3 @@ max_width = 70 -style_edition = "2024" +# style_edition = "2018" # version = "Two" \ No newline at end of file diff --git a/src/core/file.rs b/src/core/file.rs index c0feefe..e3d5c8f 100644 --- a/src/core/file.rs +++ b/src/core/file.rs @@ -1,534 +1,356 @@ -use crate::core::{ - kinds::ServiceItemKind, service_items::ServiceItem, - slide::Background, -}; -use cosmic::widget::image::Handle; -use miette::{IntoDiagnostic, Result, miette}; -use std::{ - fs::{self, File}, - io::Write, - iter, - path::{Path, PathBuf}, -}; use tar::{Archive, Builder}; -use tracing::{debug, error}; -use zstd::{Decoder, Encoder}; +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}}; -#[allow(clippy::too_many_lines)] -pub fn save( - list: Vec, - path: impl AsRef, - overwrite: bool, -) -> Result<()> { +pub async fn save(list: Vec, path: impl AsRef) -> Result<()> { let path = path.as_ref(); - if overwrite && path.exists() { - fs::remove_file(path).into_diagnostic()?; - } - let save_file = File::create(path).into_diagnostic()?; - let ron_pretty = ron::ser::PrettyConfig::default(); - let ron = ron::ser::to_string_pretty(&list, ron_pretty) - .into_diagnostic()?; - - let encoder = Encoder::new(save_file, 3) - .expect("file encoder shouldn't fail") - .auto_finish(); - let mut tar = Builder::new(encoder); - let mut temp_dir = dirs::data_dir().expect( - "there should be a data directory, ~/.local/share/ for linux, but couldn't find it", - ); - 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); - fs::create_dir_all(&temp_dir).into_diagnostic()?; - let service_file = temp_dir.join("serviceitems.ron"); - debug!(?service_file); - fs::File::create(&service_file).into_diagnostic()?; - match fs::File::options() - .read(true) - .write(true) - .open(service_file) - { - Ok(mut f) => { - match f.write(ron.as_bytes()) { - Ok(size) => { - debug!(size); - } - Err(e) => { - error!(?e); - return Err(miette!("PROBS: {e}")); - } - } - match tar.append_file("serviceitems.ron", &mut f) { - Ok(()) => { - debug!( - "should have added serviceitems.ron to the file" - ); - } - Err(e) => { - error!(?e); - return Err(miette!("PROBS: {e}")); - } - } - } - Err(e) => { - error!("There were problems making a file i guess: {e}"); - return Err(miette!("There was a problem: {e}")); - } - } - - let mut append_file = |path: PathBuf| -> Result<()> { - let file_name = path.file_name().unwrap_or_default(); - let mut file = fs::File::open(&path).into_diagnostic()?; - tar.append_file(file_name, &mut file).into_diagnostic()?; - Ok(()) - }; - - for item in list { - let background; - let audio: Option; - 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(video) => { - background = Some( - Background::try_from(video.path.clone()) - .into_diagnostic()?, - ); - audio = None; - } - ServiceItemKind::Presentation(presentation) => { - background = Some( - Background::try_from(presentation.path.clone()) - .into_diagnostic()?, - ); - audio = None; - } - ServiceItemKind::Content(_slide) => { - todo!() - } - } - if let Some(path) = audio - && path.exists() - { - debug!(?path); - append_file(path)?; - } - if let Some(background) = background - && let path = background.path - && path.exists() - { - debug!(?path); - append_file(path)?; - } - for slide in item.slides { - if let Some(svg) = slide.text_svg - && let Some(path) = svg.path - { - append_file(path)?; - } - } - } - - match tar.finish() { - Ok(()) => (), - Err(e) => { - error!(?e); - return Err(miette!("tar error: {e}")); - } - } - fs::remove_dir_all(temp_dir).into_diagnostic() + 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(()) } -#[allow(clippy::too_many_lines)] -pub fn load(path: impl AsRef) -> Result> { - let decoder = - Decoder::new(fs::File::open(&path).into_diagnostic()?) - .into_diagnostic()?; - let mut tar = Archive::new(decoder); - - let mut cache_dir = - dirs::cache_dir().expect("Should be a cache dir"); - cache_dir.push("lumina"); - cache_dir.push("cached_save_files"); - - let save_name_ext = path - .as_ref() - .extension() - .expect("Should have extension") - .to_str() - .expect("Should be fine"); - let save_name_string = path - .as_ref() - .file_name() - .expect("Should be a name") - .to_os_string() - .into_string() - .expect("Should be fine"); - let save_name = save_name_string - .trim_end_matches(&format!(".{save_name_ext}")); - cache_dir.push(save_name); - - if let Err(e) = fs::remove_dir_all(&cache_dir) { - debug!("There is no dir here: {e}"); - } - fs::create_dir_all(&cache_dir).into_diagnostic()?; - - for entry in tar.entries().into_diagnostic()? { - let mut entry = entry.into_diagnostic()?; - entry.unpack_in(&cache_dir).into_diagnostic()?; - } - - let mut dir = fs::read_dir(&cache_dir).into_diagnostic()?; - let ron_file = dir - .find_map(|file| { - if file.as_ref().ok()?.path().extension()?.to_str()? - == "ron" - { - Some(file.ok()?.path()) +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(); + 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}"), + }; + for item in items { + 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)?); + audio = None; + }, + ServiceItemKind::Video => { + let video = get_video_from_db(item.database_id, db).await?; + background = Some(Background::try_from(video.path)?); + audio = None; + }, + ServiceItemKind::Presentation(_) => { + let presentation = get_presentation_from_db(item.database_id, db).await?; + background = Some(Background::try_from(presentation.path)?); + audio = None; + }, + ServiceItemKind::Content => { + 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")); + 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"); } else { - None + 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"); } - }) - .expect("Should have a ron file"); - - let ron_string = - fs::read_to_string(ron_file).into_diagnostic()?; - - let mut items = - ron::de::from_str::>(&ron_string) - .into_diagnostic()?; - - for item in &mut items { - let dir = fs::read_dir(&cache_dir).into_diagnostic()?; - for file in dir { - for slide in &mut item.slides { - if let Ok(file) = file.as_ref() { - let file_name = file.file_name(); - let audio_path = - slide.audio().clone().unwrap_or_default(); - let text_path = slide - .text_svg - .as_ref() - .and_then(|svg| svg.path.clone()); - if Some(file_name.as_os_str()) - == slide.background.path.file_name() - { - slide.background.path = file.path(); - } else if Some(file_name.as_os_str()) - == audio_path.file_name() - { - let new_slide = slide - .clone() - .set_audio(Some(file.path())); - *slide = new_slide; - } else if Some(file_name.as_os_str()) - == text_path - .clone() - .unwrap_or_default() - .file_name() - && let Some(svg) = slide.text_svg.as_mut() - { - svg.path = Some(file.path()); - svg.handle = - Some(Handle::from_path(file.path())); - } - } - } - - match &mut item.kind { - ServiceItemKind::Song(song) => { - if let Ok(file) = file.as_ref() { - let file_name = file.file_name(); - let audio_path = - song.audio.clone().unwrap_or_default(); - if Some(file_name.as_os_str()) - == song - .background - .clone() - .unwrap_or_default() - .path - .file_name() - { - let background = song.background.clone(); - song.background = - background.map(|mut background| { - background.path = file.path(); - background - }); - } else if Some(file_name.as_os_str()) - == audio_path.file_name() - { - song.audio = Some(file.path()); - } - } - } - ServiceItemKind::Video(video) => { - if let Ok(file) = file.as_ref() { - let file_name = file.file_name(); - if Some(file_name.as_os_str()) - == video.path.file_name() - { - video.path = file.path(); - } - } - } - ServiceItemKind::Image(image) => { - if let Ok(file) = file.as_ref() { - let file_name = file.file_name(); - if Some(file_name.as_os_str()) - == image.path.file_name() - { - image.path = file.path(); - } - } - } - ServiceItemKind::Presentation(presentation) => { - if let Ok(file) = file.as_ref() { - let file_name = file.file_name(); - if Some(file_name.as_os_str()) - == presentation.path.file_name() - { - presentation.path = file.path(); - } - } - } - ServiceItemKind::Content(_slide) => todo!(), + }; + 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")); + 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"); + } 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"); } } } - Ok(items) + Ok(()) +} + +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_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_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_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 rayon::iter::{IntoParallelIterator, ParallelIterator}; - use resvg::usvg::fontdb; + use std::path::PathBuf; + use fs::canonicalize; + use sqlx::Connection; + use pretty_assertions::assert_eq; + use tracing::debug; use super::*; - use crate::{ - core::{ - service_items::ServiceTrait, - slide::{Slide, TextAlignment}, - songs::{Song, VerseName}, - }, - ui::text_svg::text_svg_generator, - }; - use std::{collections::HashMap, path::PathBuf, sync::Arc}; - fn test_song() -> Song { - let lyrics = "Some({Verse(number:4):\"Our Savior displayed\\nOn a criminal\\'s cross\\n\\nDarkness rejoiced as though\\nHeaven had lost\\n\\nBut then Jesus arose\\nWith our freedom in hand\\n\\nThat\\'s when death was arrested\\nAnd my life began\\n\\nThat\\'s when death was arrested\\nAnd my life began\",Intro(number:1):\"Death Was Arrested\\nNorth Point Worship\",Verse(number:3):\"Released from my chains,\\nI\\'m a prisoner no more\\n\\nMy shame was a ransom\\nHe faithfully bore\\n\\nHe cancelled my debt and\\nHe called me His friend\\n\\nWhen death was arrested\\nAnd my life began\",Bridge(number:1):\"Oh, we\\'re free, free,\\nForever we\\'re free\\n\\nCome join the song\\nOf all the redeemed\\n\\nYes, we\\'re free, free,\\nForever amen\\n\\nWhen death was arrested\\nAnd my life began\\n\\nOh, we\\'re free, free,\\nForever we\\'re free\\n\\nCome join the song\\nOf all the redeemed\\n\\nYes, we\\'re free, free,\\nForever amen\\n\\nWhen death was arrested\\nAnd my life began\",Other(number:99):\"When death was arrested\\nAnd my life began\\n\\nThat\\'s when death was arrested\\nAnd my life began\",Verse(number:2):\"Ash was redeemed\\nOnly beauty remains\\n\\nMy orphan heart\\nWas given a name\\n\\nMy mourning grew quiet,\\nMy feet rose to dance\\n\\nWhen death was arrested\\nAnd my life began\",Verse(number:1):\"Alone in my sorrow\\nAnd dead in my sin\\n\\nLost without hope\\nWith no place to begin\\n\\nYour love made a way\\nTo let mercy come in\\n\\nWhen death was arrested\\nAnd my life began\",Chorus(number:1):\"Oh, Your grace so free,\\nWashes over me\\n\\nYou have made me new,\\nNow life begins with You\\n\\nIt\\'s Your endless love,\\nPouring down on us\\n\\nYou have made us new,\\nNow life begins with You\"})".to_string(); - let verse_map: Option> = - ron::from_str(&lyrics).unwrap(); - Song { - id: 7, - title: "Death Was Arrested".to_string(), - lyrics: Some(lyrics), - author: Some( - "North Point Worship".to_string(), - ), - ccli: None, - audio: Some("/home/chris/music/North Point InsideOut/Nothing Ordinary, Pt. 1 (Live)/05 Death Was Arrested (feat. Seth Condrey).mp3".into()), - verse_order: Some(vec!["Some([Chorus(number:1),Intro(number:1),Other(number:99),Bridge(number:1),Verse(number:4),Verse(number:2),Verse(number:3),Verse(number:1)])".to_string()]), - background: Some(Background::try_from("/home/chris/nc/tfc/openlp/Flood/motions/Ocean_Floor_HD.mp4").unwrap()), - text_alignment: Some(TextAlignment::MiddleCenter), - font: None, - font_size: Some(120), - font_style: None, - font_weight: None, - text_color: None, - stroke_size: None, - verses: Some(vec![VerseName::Chorus { number: 1 }, VerseName::Intro { number: 1 }, VerseName::Other { number: 99 }, VerseName::Bridge { number: 1 }, VerseName::Verse { number: 4 }, VerseName::Verse { number: 2 }, VerseName::Verse { number: 3 }, VerseName::Verse { number: 1 } - ]), - verse_map, - ..Default::default() + 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_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_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 song = test_song(); - let mut fontdb = fontdb::Database::new(); - fontdb.load_system_fonts(); - let fontdb = Arc::new(fontdb); - let slides = song - .to_slides() - .unwrap() - .into_par_iter() - .map(|slide| { - text_svg_generator( - slide.clone(), - &Arc::clone(&fontdb), - ) - .map_or_else( - |e| { - assert!(false, "Couldn't create svg: {e}"); - slide - }, - |slide| slide, - ) - }) - .collect::>(); let items = vec![ ServiceItem { database_id: 7, - kind: ServiceItemKind::Song(song.clone()), + kind: ServiceItemKind::Song, id: 0, - title: "Death was Arrested".into(), - slides: slides.clone(), }, ServiceItem { - database_id: 7, - kind: ServiceItemKind::Song(song), - id: 1, - title: "Death was Arrested".into(), - slides: slides, + database_id: 54, + kind: ServiceItemKind::Presentation(PresKind::Html), + id: 0, + }, + ServiceItem { + database_id: 73, + kind: ServiceItemKind::Video, + id: 0, }, ]; items } - #[test] - fn test_load() -> Result<(), String> { - test_save(); - let path = PathBuf::from("./test.pres"); - let result = load(&path); - match result { - Ok(items) => { - assert!(items.len() > 0); - // assert_eq!(items, get_items()); - let cache_dir = cache_dir(); - assert!(fs::read_dir(&cache_dir).is_ok()); - assert!( - find_paths(&items), - "Some paths must not have the cache_dir in it's path" - ); - find_svgs(&items)?; - Ok(()) + #[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}"), + } } - Err(e) => Err(e.to_string()), } } - fn find_svgs(items: &Vec) -> Result<(), String> { - let cache_dir = cache_dir(); - items.iter().try_for_each(|item| { - if let ServiceItemKind::Song(..) = item.kind { - item.slides.iter().try_for_each(|slide| { - slide.text_svg.as_ref().map_or(Err(String::from("There is no TextSvg for this song")), |text_svg| { + // #[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}"), + // } + // } - if text_svg.handle.is_none() { - return Err(String::from("There is no handle in this song's TextSvg")); - }; - - text_svg.path.as_ref().map_or(Err(String::from("There is no path in this song's TextSvg")), |path| { - if path.exists() { - let mut path = path.clone(); - if path.metadata().unwrap().len() < 20000 { - return Err(String::from("SVG text is too small, maybe the svg didn't generate properly")) - } - if path.pop() && path == cache_dir { - Ok(()) - } else { - Err(String::from("The path of the TextSvg isn't in the load directory")) - } - } else { - Err(String::from("The path in this TextSvg doesn't exist")) - } - }) - }) - }) - } else { - Ok(()) - } - }) - } - - // checks to make sure all paths in slides and items point to cache_dir - fn find_paths(items: &Vec) -> bool { - let cache_dir = cache_dir(); - items.iter().all(|item| { - match &item.kind { - ServiceItemKind::Song(song) => { - if let Some(bg) = &song.background { - if !bg.path.starts_with(&cache_dir) { - return false; - } - } - if let Some(audio) = &song.audio { - if !audio.starts_with(&cache_dir) { - return false; - } - } - } - ServiceItemKind::Video(video) => { - if !video.path.starts_with(&cache_dir) { - return false; - } - } - ServiceItemKind::Image(image) => { - if !image.path.starts_with(&cache_dir) { - return false; - } - } - ServiceItemKind::Presentation(presentation) => { - if !presentation.path.starts_with(&cache_dir) { - return false; - } - } - ServiceItemKind::Content(_slide) => todo!(), - } - for slide in &item.slides { - if !slide.background().path.starts_with(&cache_dir) { - return false; - } - if !slide.audio().map_or(true, |audio| { - audio.starts_with(&cache_dir) - }) { - return false; - } - } - true - }) - } - - fn cache_dir() -> PathBuf { - let mut cache_dir = dirs::cache_dir().unwrap(); - cache_dir.push("lumina"); - cache_dir.push("cached_save_files"); - cache_dir.push("test"); - cache_dir - } - - #[test] - fn test_save() { - let path = PathBuf::from("./test.pres"); + #[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(); - match save(list, &path, true) { - Ok(_) => { - assert!(path.is_file()); - let Ok(file) = fs::File::open(path) else { - return assert!(false, "couldn't open file"); - }; - let Ok(size) = file.metadata().map(|data| data.len()) - else { - return assert!( - false, - "couldn't get file metadata" - ); - }; - assert!(size > 0); + 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}"), } - Err(e) => assert!(false, "{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 3667c49..beba760 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::{ - Sqlite, SqliteConnection, SqlitePool, pool::PoolConnection, - query, query_as, + pool::PoolConnection, query, query_as, Sqlite, SqliteConnection, + SqlitePool, }; -use std::path::{Path, PathBuf}; -use tracing::{debug, error}; +use std::path::PathBuf; +use tracing::error; #[derive( - Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize, + Clone, Debug, Default, PartialEq, Serialize, Deserialize, )] pub struct Image { pub id: i32, @@ -25,30 +25,8 @@ 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 { + fn from(value: &Image) -> Self { Self::List(vec![Self::Symbol(Symbol("image".into()))]) } } @@ -72,10 +50,10 @@ impl Content for Image { fn subtext(&self) -> String { if self.path.exists() { - self.path.file_name().map_or_else( - || "Missing image".into(), - |f| f.to_string_lossy().to_string(), - ) + self.path + .file_name() + .map(|f| f.to_string_lossy().to_string()) + .unwrap_or("Missing image".into()) } else { "Missing image".into() } @@ -88,7 +66,6 @@ impl From for Image { } } -#[allow(clippy::option_if_let_else)] impl From<&Value> for Image { fn from(value: &Value) -> Self { match value { @@ -108,7 +85,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 { @@ -177,51 +154,17 @@ impl Model { .await; match result { Ok(v) => { - for image in v { + for image in v.into_iter() { 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, @@ -229,29 +172,19 @@ pub async fn update_image_in_db( let path = image .path .to_str() - .map(std::string::ToString::to_string) + .map(|s| s.to_string()) .unwrap_or_default(); - let mut db = db.detach(); - debug!(?image, "should be been updated"); - let result = query!( + query!( r#"UPDATE images SET title = $2, file_path = $3 WHERE id = $1"#, image.id, image.title, path, ) - .execute(&mut db) - .await.into_diagnostic(); + .execute(&mut db.detach()) + .await + .into_diagnostic()?; - match result { - Ok(_) => { - debug!("should have been updated"); - Ok(()) - } - Err(e) => { - error! {?e}; - Err(e) - } - } + Ok(()) } pub async fn get_image_from_db( @@ -269,9 +202,7 @@ mod test { fn test_image(title: String) -> Image { Image { title, - path: PathBuf::from( - "/home/chris/pics/memes/no-i-dont-think.gif", - ), + path: PathBuf::from("~/pics/camprules2024.mp4"), ..Default::default() } } @@ -282,10 +213,10 @@ mod test { items: vec![], kind: LibraryKind::Image, }; - let mut db = add_db().await.unwrap().acquire().await.unwrap(); + let mut db = crate::core::model::get_db().await; image_model.load_from_db(&mut db).await; - if let Some(image) = image_model.find(|i| i.id == 23) { - let test_image = test_image("no-i-dont-think.gif".into()); + if let Some(image) = image_model.find(|i| i.id == 3) { + let test_image = test_image("nccq5".into()); assert_eq!(test_image.title, image.title); } else { assert!(false); @@ -319,9 +250,4 @@ mod test { ), } } - - async fn add_db() -> Result { - let db_url = String::from("sqlite://./test.db"); - SqlitePool::connect(&db_url).await.into_diagnostic() - } } diff --git a/src/core/kinds.rs b/src/core/kinds.rs index 59de7ba..b366997 100644 --- a/src/core/kinds.rs +++ b/src/core/kinds.rs @@ -1,11 +1,8 @@ -use std::{error::Error, fmt::Display, path::PathBuf}; +use std::{error::Error, fmt::Display}; use serde::{Deserialize, Serialize}; -use crate::{ - Slide, - core::{content::Content, service_items::ServiceItem}, -}; +use crate::Slide; use super::{ images::Image, presentations::Presentation, songs::Song, @@ -21,67 +18,14 @@ pub enum ServiceItemKind { Content(Slide), } -impl TryFrom for ServiceItemKind { - type Error = miette::Error; - - fn try_from(path: PathBuf) -> Result { - let ext = path - .extension() - .and_then(|ext| ext.to_str()) - .ok_or_else(|| { - 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))) - } - "pdf" => Ok(Self::Presentation(Presentation::from(path))), - _ => Err(miette::miette!("Unknown item")), - } - } -} - -impl ServiceItemKind { - pub fn title(&self) -> String { - match self { - Self::Song(song) => song.title.clone(), - Self::Video(video) => video.title.clone(), - Self::Image(image) => image.title.clone(), - Self::Presentation(presentation) => { - presentation.title.clone() - } - Self::Content(_slide) => todo!(), - } - } - - pub fn to_service_item(&self) -> ServiceItem { - match self { - Self::Song(song) => song.to_service_item(), - Self::Video(video) => video.to_service_item(), - Self::Image(image) => image.to_service_item(), - Self::Presentation(presentation) => { - presentation.to_service_item() - } - Self::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(_) => "song".to_owned(), - Self::Image(_) => "image".to_owned(), - Self::Video(_) => "video".to_owned(), - Self::Presentation(_) => "html".to_owned(), - Self::Content(_) => "content".to_owned(), + 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(), }; write!(f, "{s}") } @@ -106,7 +50,7 @@ impl std::fmt::Display for ServiceItemKind { // } impl From for String { - fn from(val: ServiceItemKind) -> Self { + fn from(val: ServiceItemKind) -> String { match val { ServiceItemKind::Song(_) => "song".to_owned(), ServiceItemKind::Video(_) => "video".to_owned(), @@ -132,9 +76,7 @@ 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 new file mode 100644 index 0000000..2c1a666 --- /dev/null +++ b/src/core/lisp.rs @@ -0,0 +1,157 @@ +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 4c6c1dc..e23192e 100644 --- a/src/core/mod.rs +++ b/src/core/mod.rs @@ -1,14 +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 slide_actions; -pub mod song_search; pub mod songs; pub mod thumbnail; pub mod videos; diff --git a/src/core/model.rs b/src/core/model.rs index 03615b4..8452cc1 100644 --- a/src/core/model.rs +++ b/src/core/model.rs @@ -1,10 +1,7 @@ -use std::{borrow::Cow, fs, mem::replace, path::PathBuf}; +use std::mem::replace; -use cosmic::iced::clipboard::mime::{AllowedMimeTypes, AsMimeTypes}; -use miette::{IntoDiagnostic, Result, miette}; -use serde::{Deserialize, Serialize}; +use miette::{miette, Result}; use sqlx::{Connection, SqliteConnection}; -use tracing::debug; #[derive(Debug, Clone)] pub struct Model { @@ -12,9 +9,7 @@ pub struct Model { pub kind: LibraryKind, } -#[derive( - Debug, Clone, PartialEq, Eq, Copy, Hash, Serialize, Deserialize, -)] +#[derive(Debug, Clone, PartialEq, Copy)] pub enum LibraryKind { Song, Video, @@ -22,98 +17,36 @@ 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); Ok(()) } - pub fn add_to_db(&mut self, _item: T) -> Result<()> { + pub fn add_to_db(&mut self, item: T) -> Result<()> { todo!() } pub fn update_item(&mut self, item: T, index: i32) -> Result<()> { - self.items - .get_mut( - usize::try_from(index) - .expect("Shouldn't be negative"), - ) - .map_or_else( - || { - Err(miette!( - "Item doesn't exist in model. Id was {index}" - )) - }, - |current_item| { - let _old_item = replace(current_item, item); - Ok(()) - }, - ) + if let Some(current_item) = self.items.get_mut(index as usize) + { + let _old_item = replace(current_item, item); + Ok(()) + } else { + Err(miette!( + "Item doesn't exist in model. Id was {}", + index + )) + } } pub fn remove_item(&mut self, index: i32) -> Result<()> { - self.items.remove( - usize::try_from(index).expect("Shouldn't be negative"), - ); + self.items.remove(index as usize); Ok(()) } - #[must_use] pub fn get_item(&self, index: i32) -> Option<&T> { - self.items.get( - usize::try_from(index).expect("shouldn't be negative"), - ) + self.items.get(index as usize) } pub fn find

(&self, f: P) -> Option<&T> @@ -124,10 +57,7 @@ impl Model { } pub fn insert_item(&mut self, item: T, index: i32) -> Result<()> { - self.items.insert( - usize::try_from(index).expect("Shouldn't be negative"), - item, - ); + self.items.insert(index as usize, item); Ok(()) } } @@ -144,13 +74,11 @@ impl Model { // } pub async fn get_db() -> SqliteConnection { - let mut data = dirs::data_local_dir() - .expect("Should be able to find a data dir"); + let mut data = dirs::data_local_dir().unwrap(); data.push("lumina"); - let _ = fs::create_dir_all(&data); data.push("library-db.sqlite3"); let mut db_url = String::from("sqlite://"); - db_url.push_str(data.to_str().expect("Should be there")); + db_url.push_str(data.to_str().unwrap()); SqliteConnection::connect(&db_url).await.expect("problems") } diff --git a/src/core/presentations.rs b/src/core/presentations.rs index 4a74f79..106f8c4 100644 --- a/src/core/presentations.rs +++ b/src/core/presentations.rs @@ -1,14 +1,12 @@ -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::{ - Row, Sqlite, SqliteConnection, SqlitePool, pool::PoolConnection, - prelude::FromRow, query, sqlite::SqliteRow, + pool::PoolConnection, prelude::FromRow, query, sqlite::SqliteRow, + Row, Sqlite, SqliteConnection, SqlitePool, }; -use std::path::{Path, PathBuf}; -use tracing::{debug, error}; +use std::path::PathBuf; +use tracing::error; use crate::{Background, Slide, SlideBuilder, TextAlignment}; @@ -24,15 +22,14 @@ use super::{ )] pub enum PresKind { Html, - Pdf { - starting_index: i32, - ending_index: i32, - }, #[default] + Pdf, Generic, } -#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[derive( + Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize, +)] pub struct Presentation { pub id: i32, pub title: String, @@ -40,69 +37,8 @@ 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" => Document::open(&value.as_path()).map_or( - PresKind::Pdf { - starting_index: 0, - ending_index: 0, - }, - |document| { - document.page_count().map_or( - PresKind::Pdf { - starting_index: 0, - ending_index: 0, - }, - |count| PresKind::Pdf { - starting_index: 0, - ending_index: count - 1, - }, - ) - }, - ), - "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()))]) } } @@ -126,10 +62,10 @@ impl Content for Presentation { fn subtext(&self) -> String { if self.path.exists() { - self.path.file_name().map_or_else( - || "Missing presentation".into(), - |f| f.to_string_lossy().to_string(), - ) + self.path + .file_name() + .map(|f| f.to_string_lossy().to_string()) + .unwrap_or("Missing presentation".into()) } else { "Missing presentation".into() } @@ -142,7 +78,6 @@ impl From for Presentation { } } -#[allow(clippy::option_if_let_else)] impl From<&Value> for Presentation { fn from(value: &Value) -> Self { match value { @@ -182,78 +117,22 @@ impl ServiceTrait for Presentation { } fn to_slides(&self) -> Result> { - 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)| { - let index = i32::try_from(index) - .expect("Shouldn't be that high"); + 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()?; - if index < starting_index || index > ending_index { - return None; - } - - let page = page.ok()?; - 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( - u32::try_from(index) - .expect("Shouldn't get that high"), - ) - .pdf_page(page) - .build()?; - slides.push(slide); - } - debug!(?slides); - Ok(slides) + Ok(vec![slide]) } fn box_clone(&self) -> Box { @@ -262,16 +141,14 @@ impl ServiceTrait for Presentation { } impl Presentation { - #[must_use] pub fn new() -> Self { Self { - title: String::new(), + title: "".to_string(), ..Default::default() } } - #[must_use] - pub const fn get_kind(&self) -> &PresKind { + pub fn get_kind(&self) -> &PresKind { &self.kind } } @@ -288,10 +165,7 @@ impl FromRow<'_, SqliteRow> for Presentation { kind: if row.try_get(3)? { PresKind::Html } else { - PresKind::Pdf { - starting_index: row.try_get(4)?, - ending_index: row.try_get(5)?, - } + PresKind::Pdf }, }) } @@ -311,60 +185,21 @@ 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, starting_index, ending_index from presentations"# + r#"SELECT id as "id: i32", title, file_path as "path", html from presentations"# ) .fetch_all(db) .await; - match result { Ok(v) => { - for presentation in v { + for presentation in v.into_iter() { let _ = self.add_item(Presentation { id: presentation.id, title: presentation.title, - path: presentation.path.clone().into(), + path: presentation.path.into(), kind: if presentation.html { PresKind::Html - } else if let ( - Some(starting_index), - Some(ending_index), - ) = ( - presentation.starting_index, - presentation.ending_index, - ) { - PresKind::Pdf { - starting_index: i32::try_from( - starting_index, - ) - .expect("Shouldn't get that high"), - ending_index: i32::try_from( - ending_index, - ) - .expect("Shouldn't get that high"), - } } else { - let path = - PathBuf::from(presentation.path); - - Document::open(path.as_path()).map_or( - PresKind::Generic, - |document| { - document.page_count().map_or( - PresKind::Pdf { - starting_index: 0, - ending_index: 0, - }, - |count| { - let ending_index = - count - 1; - PresKind::Pdf { - starting_index: 0, - ending_index, - } - }, - ) - }, - ) + PresKind::Pdf }, }); } @@ -376,51 +211,6 @@ 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(); - let (starting_index, ending_index) = if let PresKind::Pdf { - starting_index, - ending_index, - } = presentation.kind - { - (starting_index, ending_index) - } else { - (0, 0) - }; - query!( - r#"INSERT INTO presentations (title, file_path, html, starting_index, ending_index) VALUES ($1, $2, $3, $4, $5)"#, - presentation.title, - path, - html, - starting_index, - ending_index - ) - .execute(&mut db) - .await - .into_diagnostic()?; - Ok(()) -} - pub async fn update_presentation_in_db( presentation: Presentation, db: PoolConnection, @@ -428,89 +218,21 @@ pub async fn update_presentation_in_db( let path = presentation .path .to_str() - .map(std::string::ToString::to_string) + .map(|s| s.to_string()) .unwrap_or_default(); let html = presentation.kind == PresKind::Html; - let mut db = db.detach(); - let (starting_index, ending_index) = if let PresKind::Pdf { - starting_index: s_index, - ending_index: e_index, - } = - presentation.get_kind() - { - (*s_index, *e_index) - } else { - (0, 0) - }; - debug!(starting_index, ending_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 adding a new presentation" - ); - 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!("presentation should have been added"); - Ok(()) - } - Err(e) => { - error! {?e}; - Err(e) - } - }; - } - 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, starting_index = $5, ending_index = $6 WHERE id = $1"#, + query!( + r#"UPDATE presentations SET title = $2, file_path = $3, html = $4 WHERE id = $1"#, presentation.id, presentation.title, path, - html, - starting_index, - ending_index + html ) - .execute(&mut db) - .await.into_diagnostic(); + .execute(&mut db.detach()) + .await + .into_diagnostic()?; - match result { - Ok(_) => { - debug!("should have been updated"); - Ok(()) - } - Err(e) => { - error! {?e}; - Err(e) - } - } + Ok(()) } pub async fn get_presentation_from_db( @@ -528,25 +250,19 @@ mod test { fn test_presentation() -> Presentation { Presentation { - id: 4, - title: "mzt52.pdf".into(), - path: PathBuf::from("/home/chris/docs/mzt52.pdf"), - kind: PresKind::Pdf { - starting_index: 0, - ending_index: 67, - }, + id: 54, + title: "20240327T133649--12-isaiah-and-jesus__lesson_project_tfc".into(), + path: PathBuf::from( + "file:///home/chris/docs/notes/lessons/20240327T133649--12-isaiah-and-jesus__lesson_project_tfc.html", + ), + kind: PresKind::Html, } } #[test] pub fn test_pres() { let pres = Presentation::new(); - assert_eq!(pres.get_kind(), &PresKind::Generic) - } - - async fn add_db() -> Result { - let mut db_url = String::from("sqlite://./test.db"); - SqlitePool::connect(&db_url).await.into_diagnostic() + assert_eq!(pres.get_kind(), &PresKind::Pdf) } #[tokio::test] @@ -555,10 +271,10 @@ mod test { items: vec![], kind: LibraryKind::Presentation, }; - let mut db = add_db().await.unwrap().acquire().await.unwrap(); + let mut db = crate::core::model::get_db().await; presentation_model.load_from_db(&mut db).await; if let Some(presentation) = - presentation_model.find(|p| p.id == 4) + presentation_model.find(|p| p.id == 54) { let test_presentation = test_presentation(); assert_eq!(&test_presentation, presentation); diff --git a/src/core/service_items.rs b/src/core/service_items.rs index fb341fa..15673d0 100644 --- a/src/core/service_items.rs +++ b/src/core/service_items.rs @@ -1,30 +1,29 @@ use std::borrow::Cow; use std::cmp::Ordering; use std::ops::Deref; -use std::path::PathBuf; +use std::sync::Arc; -use cosmic::iced::clipboard::mime::{AllowedMimeTypes, AsMimeTypes}; use crisp::types::{Keyword, Symbol, Value}; -use miette::{IntoDiagnostic, Result, miette}; -use serde::{Deserialize, Serialize}; +// use cosmic::iced::clipboard::mime::{AllowedMimeTypes, AsMimeTypes}; +use miette::Result; use tracing::{debug, error}; use crate::Slide; use super::images::Image; use super::presentations::Presentation; -use super::songs::{Song, lisp_to_song}; +use super::songs::{lisp_to_song, Song}; use super::videos::Video; use super::kinds::ServiceItemKind; -#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +#[derive(Debug, PartialEq, Clone)] pub struct ServiceItem { pub id: i32, pub title: String, pub database_id: i32, pub kind: ServiceItemKind, - pub slides: Vec, + pub slides: Arc<[Slide]>, // pub item: Box, } @@ -32,7 +31,7 @@ impl Eq for ServiceItem {} impl PartialOrd for ServiceItem { fn partial_cmp(&self, other: &Self) -> Option { - Some(self.cmp(other)) + self.id.partial_cmp(&other.id) } } @@ -48,74 +47,49 @@ impl TryFrom<(Vec, String)> for ServiceItem { fn try_from( value: (Vec, String), ) -> std::result::Result { - let (data, mime) = value; - debug!(?mime); - ron::de::from_bytes(&data).into_diagnostic() + debug!(?value); + let val = Value::from( + String::from_utf8(value.0) + .expect("Value couldn't be made"), + ); + Ok(Self::from(&val)) } } -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 AllowedMimeTypes for ServiceItem { +// fn allowed() -> Cow<'static, [String]> { +// 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()]) - } +// 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 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() - .and_then(|ext| ext.to_str()) - .ok_or_else(|| { - 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")), - } - } -} +// 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())) +// } +// } impl From<&ServiceItem> for Value { fn from(value: &ServiceItem) -> Self { match &value.kind { - ServiceItemKind::Song(song) => Self::from(song), - ServiceItemKind::Video(video) => Self::from(video), - ServiceItemKind::Image(image) => Self::from(image), + ServiceItemKind::Song(song) => Value::from(song), + ServiceItemKind::Video(video) => Value::from(video), + ServiceItemKind::Image(image) => Value::from(image), ServiceItemKind::Presentation(presentation) => { - Self::from(presentation) + Value::from(presentation) } - ServiceItemKind::Content(slide) => Self::from(slide), + ServiceItemKind::Content(slide) => Value::from(slide), } } } @@ -147,7 +121,7 @@ impl Default for ServiceItem { title: String::default(), database_id: 0, kind: ServiceItemKind::Content(Slide::default()), - slides: vec![], + slides: Arc::new([]), // item: Box::new(Image::default()), } } @@ -159,8 +133,6 @@ impl From for ServiceItem { } } -#[allow(clippy::option_if_let_else)] -#[allow(clippy::match_like_matches_macro)] impl From<&Value> for ServiceItem { fn from(value: &Value) -> Self { match value { @@ -177,7 +149,7 @@ impl From<&Value> for ServiceItem { _ => false, }) .map_or_else(|| 1, |pos| pos + 1); - if let Some(_content) = + if let Some(content) = list.iter().position(|v| match v { Value::List(list) if list.iter().next() @@ -199,13 +171,13 @@ impl From<&Value> for ServiceItem { kind: ServiceItemKind::Content( slide.clone(), ), - slides: vec![slide], + slides: Arc::new([slide]), } } else if let Some(background) = list.get(background_pos) { - if let Value::List(item) = background { - match &item[0] { + match background { + Value::List(item) => match &item[0] { Value::Symbol(Symbol(s)) if s == "image" => { @@ -228,29 +200,30 @@ 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 ); - Self::default() + ServiceItem::default() } } Value::Symbol(Symbol(s)) if s == "song" => { let song = lisp_to_song(list.clone()); Self::from(&song) } - _ => Self::default(), + _ => ServiceItem::default(), }, - _ => Self::default(), + _ => ServiceItem::default(), } } } @@ -284,96 +257,100 @@ impl From> for Service { impl From<&Song> for ServiceItem { fn from(song: &Song) -> Self { - song.to_slides().map_or_else( - |_| Self { + if let Ok(slides) = song.to_slides() { + Self { + kind: ServiceItemKind::Song(song.clone()), + database_id: song.id, + title: song.title.clone(), + slides: slides.into(), + ..Default::default() + } + } else { + Self { kind: ServiceItemKind::Song(song.clone()), database_id: song.id, title: song.title.clone(), ..Default::default() - }, - |slides| Self { - kind: ServiceItemKind::Song(song.clone()), - database_id: song.id, - title: song.title.clone(), - slides, - ..Default::default() - }, - ) - } -} - -impl From<&Video> for ServiceItem { - fn from(video: &Video) -> Self { - video.to_slides().map_or_else( - |_| Self { - kind: ServiceItemKind::Video(video.clone()), - database_id: video.id, - title: video.title.clone(), - ..Default::default() - }, - |slides| Self { - kind: ServiceItemKind::Video(video.clone()), - database_id: video.id, - title: video.title.clone(), - slides, - ..Default::default() - }, - ) - } -} - -impl From<&Image> for ServiceItem { - fn from(image: &Image) -> Self { - image.to_slides().map_or_else( - |_| Self { - kind: ServiceItemKind::Image(image.clone()), - database_id: image.id, - title: image.title.clone(), - ..Default::default() - }, - |slides| Self { - kind: ServiceItemKind::Image(image.clone()), - database_id: image.id, - title: image.title.clone(), - slides, - ..Default::default() - }, - ) - } -} - -impl From<&Presentation> for ServiceItem { - fn from(presentation: &Presentation) -> 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() - } } } } } -#[allow(unused)] +impl From<&Video> for ServiceItem { + fn from(video: &Video) -> Self { + if let Ok(slides) = video.to_slides() { + Self { + kind: ServiceItemKind::Video(video.clone()), + database_id: video.id, + title: video.title.clone(), + slides: slides.into(), + ..Default::default() + } + } else { + Self { + kind: ServiceItemKind::Video(video.clone()), + database_id: video.id, + title: video.title.clone(), + ..Default::default() + } + } + } +} + +impl From<&Image> for ServiceItem { + fn from(image: &Image) -> Self { + if let Ok(slides) = image.to_slides() { + Self { + kind: ServiceItemKind::Image(image.clone()), + database_id: image.id, + title: image.title.clone(), + slides: slides.into(), + ..Default::default() + } + } else { + Self { + kind: ServiceItemKind::Image(image.clone()), + database_id: image.id, + title: image.title.clone(), + ..Default::default() + } + } + } +} + +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 { + kind: ServiceItemKind::Presentation( + presentation.clone(), + ), + database_id: presentation.id, + title: presentation.title.clone(), + ..Default::default() + } + } + } +} + impl Service { - fn add_item(&mut self, item: impl Into) { + fn add_item( + &mut self, + item: impl Into, + ) -> Result<()> { let service_item: ServiceItem = item.into(); self.items.push(service_item); + Ok(()) } pub fn to_slides(&self) -> Result> { @@ -389,7 +366,7 @@ impl Service { .collect::>(); let mut final_slides = vec![]; for (index, mut slide) in slides.into_iter().enumerate() { - slide.set_index(i32::try_from(index).into_diagnostic()?); + slide.set_index(index as i32); final_slides.push(slide); } Ok(final_slides) @@ -452,15 +429,19 @@ mod test { let pres = test_presentation(); let pres_item = ServiceItem::from(&pres); let mut service_model = Service::default(); - service_model.add_item(&song); - assert_eq!( - ServiceItemKind::Song(song), - service_model.items[0].kind - ); - assert_eq!( - ServiceItemKind::Presentation(pres), - pres_item.kind - ); - assert_eq!(service_item, service_model.items[0]); + match service_model.add_item(&song) { + Ok(_) => { + assert_eq!( + ServiceItemKind::Song(song), + service_model.items[0].kind + ); + assert_eq!( + ServiceItemKind::Presentation(pres), + pres_item.kind + ); + assert_eq!(service_item, service_model.items[0]); + } + Err(e) => panic!("Problem adding item: {:?}", e), + } } } diff --git a/src/core/settings.rs b/src/core/settings.rs deleted file mode 100644 index 9b64ea1..0000000 --- a/src/core/settings.rs +++ /dev/null @@ -1,70 +0,0 @@ -// 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, - Default, -)] -pub struct PersistentState { - pub recent_files: VecDeque, -} diff --git a/src/core/slide.rs b/src/core/slide.rs index 721c7fb..6400639 100644 --- a/src/core/slide.rs +++ b/src/core/slide.rs @@ -1,9 +1,7 @@ -#![allow(clippy::similar_names, unused)] -use cosmic::widget::image::Handle; -// use cosmic::dialog::ashpd::url::Url; +// use iced::dialog::ashpd::url::Url; use crisp::types::{Keyword, Symbol, Value}; use iced_video_player::Video; -use miette::{Result, miette}; +use miette::{miette, Result}; use serde::{Deserialize, Serialize}; use std::{ fmt::Display, @@ -11,44 +9,10 @@ use std::{ }; use tracing::error; -use crate::ui::text_svg::{Color, Font, Shadow, Stroke, TextSvg}; +use crate::ui::text_svg::{self, TextSvg}; use super::songs::Song; -#[derive( - Clone, Debug, Default, PartialEq, Serialize, Deserialize, -)] -pub struct Slide { - id: i32, - pub(crate) background: Background, - text: String, - font: Option, - font_size: i32, - stroke: Option, - shadow: Option, - text_alignment: TextAlignment, - text_color: Option, - audio: Option, - video_loop: bool, - video_start_time: f32, - video_end_time: f32, - pdf_index: u32, - pub text_svg: Option, - #[serde(skip)] - pdf_page: Option, -} - -#[derive( - Clone, Copy, Debug, Default, PartialEq, Eq, Serialize, Deserialize, -)] -pub enum BackgroundKind { - #[default] - Image, - Video, - Pdf, - Html, -} - #[derive( Clone, Copy, @@ -103,9 +67,9 @@ impl TryFrom<&Background> for Video { fn try_from( value: &Background, ) -> std::result::Result { - Self::new( + Video::new( &url::Url::from_file_path(value.path.clone()) - .map_err(|()| ParseError::BackgroundNotVideo)?, + .map_err(|_| ParseError::BackgroundNotVideo)?, ) .map_err(|_| ParseError::BackgroundNotVideo) } @@ -117,9 +81,9 @@ impl TryFrom for Video { fn try_from( value: Background, ) -> std::result::Result { - Self::new( + Video::new( &url::Url::from_file_path(value.path) - .map_err(|()| ParseError::BackgroundNotVideo)?, + .map_err(|_| ParseError::BackgroundNotVideo)?, ) .map_err(|_| ParseError::BackgroundNotVideo) } @@ -128,7 +92,7 @@ impl TryFrom for Video { impl TryFrom for Background { type Error = ParseError; fn try_from(value: String) -> Result { - Self::try_from(value.as_str()) + Background::try_from(value.as_str()) } } @@ -136,17 +100,14 @@ impl TryFrom for Background { type Error = ParseError; fn try_from(path: PathBuf) -> Result { let path = if path.starts_with("~") { - let path = path - .to_str() - .expect("Should have a string") - .to_string(); + let path = path.to_str().unwrap().to_string(); let path = path.trim_start_matches("file://"); let home = dirs::home_dir() - .expect("We should have a home directory") + .unwrap() .to_str() - .expect("Gah") + .unwrap() .to_string(); - let path = path.replace('~', &home); + let path = path.replace("~", &home); PathBuf::from(path) } else { path @@ -160,27 +121,21 @@ impl TryFrom for Background { .to_str() .unwrap_or_default(); match extension { - "jpeg" | "jpg" | "png" | "webp" => Ok(Self { - path: value, - kind: BackgroundKind::Image, - }), + "jpeg" | "jpg" | "png" | "webp" | "html" => { + 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); + Err(e) => { + error!("Couldn't canonicalize: {e} {:?}", path); Err(ParseError::CannotCanonicalize) } } @@ -191,19 +146,17 @@ 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('~') { - dirs::home_dir().map_or_else( - || Self::try_from(PathBuf::from(value)), - |home| { - home.to_str().map_or_else( - || Self::try_from(PathBuf::from(value)), - |home| { - let value = value.replace('~', home); - Self::try_from(PathBuf::from(value)) - }, - ) - }, - ) + if value.starts_with("~") { + if let Some(home) = dirs::home_dir() { + if let Some(home) = home.to_str() { + let value = value.replace("~", home); + Self::try_from(PathBuf::from(value)) + } else { + Self::try_from(PathBuf::from(value)) + } + } else { + Self::try_from(PathBuf::from(value)) + } } else if value.starts_with("./") { Err(ParseError::CannotCanonicalize) } else { @@ -250,140 +203,97 @@ 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" { - Self::Image + BackgroundKind::Image } else { - Self::Video + BackgroundKind::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 { + fn from(value: &Slide) -> Self { Self::List(vec![Self::Symbol(Symbol("slide".into()))]) } } impl Slide { - #[must_use] pub fn set_text(mut self, text: impl AsRef) -> Self { self.text = text.as_ref().into(); self } - #[must_use] - pub fn with_text_svg(mut self, text_svg: TextSvg) -> Self { - self.text_svg = Some(text_svg); - self - } - - #[must_use] pub fn set_font(mut self, font: impl AsRef) -> Self { - self.font = Some(font.as_ref().into()); + self.font = font.as_ref().into(); self } - #[must_use] - pub const fn set_font_size(mut self, font_size: i32) -> Self { + pub fn set_font_size(mut self, font_size: i32) -> Self { self.font_size = font_size; self } - #[must_use] pub fn set_audio(mut self, audio: Option) -> Self { self.audio = audio; self } - #[must_use] - pub const fn set_pdf_index(mut self, pdf_index: u32) -> Self { - self.pdf_index = pdf_index; - self - } - - #[must_use] - pub const fn set_stroke(mut self, stroke: Stroke) -> Self { - self.stroke = Some(stroke); - self - } - - #[must_use] - pub const fn set_shadow(mut self, shadow: Shadow) -> Self { - self.shadow = Some(shadow); - self - } - - #[must_use] - pub const fn set_text_color(mut self, color: Color) -> Self { - self.text_color = Some(color); - self - } - - #[must_use] - pub const fn background(&self) -> &Background { + pub fn background(&self) -> &Background { &self.background } - #[must_use] pub fn text(&self) -> String { self.text.clone() } - #[must_use] - pub const fn text_alignment(&self) -> TextAlignment { - self.text_alignment - } - - #[must_use] - pub const fn font_size(&self) -> i32 { + pub fn font_size(&self) -> i32 { self.font_size } - #[must_use] - pub fn font(&self) -> Option { + pub fn font(&self) -> String { self.font.clone() } - #[must_use] - pub const fn video_loop(&self) -> bool { + pub fn video_loop(&self) -> bool { self.video_loop } - #[must_use] pub fn audio(&self) -> Option { self.audio.clone() } - #[must_use] - pub fn pdf_page(&self) -> Option { - self.pdf_page.clone() - } - - #[must_use] - pub fn text_color(&self) -> Option { - self.text_color.clone() - } - - #[must_use] - pub fn stroke(&self) -> Option { - self.stroke.clone() - } - - #[must_use] - pub fn shadow(&self) -> Option { - self.shadow.clone() - } - - #[must_use] - 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(); @@ -407,10 +317,14 @@ impl Slide { Ok(slides) } - pub(crate) const fn set_index(&mut self, index: i32) { + pub(crate) fn set_index(&mut self, index: i32) { self.id = index; } + pub(crate) fn text_to_image(&self) { + todo!() + } + // pub fn slides_from_item(item: &ServiceItem) -> Result> { // todo!() // } @@ -426,13 +340,12 @@ impl From<&Value> for Slide { fn from(value: &Value) -> Self { match value { Value::List(list) => lisp_to_slide(list), - _ => Self::default(), + _ => Slide::default(), } } } -#[allow(clippy::option_if_let_else)] -fn lisp_to_slide(lisp: &[Value]) -> Slide { +fn lisp_to_slide(lisp: &Vec) -> Slide { const DEFAULT_BACKGROUND_LOCATION: usize = 1; const DEFAULT_TEXT_LOCATION: usize = 0; @@ -450,7 +363,7 @@ fn lisp_to_slide(lisp: &[Value]) -> 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) => { @@ -496,7 +409,6 @@ fn lisp_to_slide(lisp: &[Value]) -> Slide { } } -#[allow(clippy::option_if_let_else)] fn lisp_to_font_size(lisp: &Value) -> i32 { match lisp { Value::List(list) => { @@ -529,11 +441,10 @@ fn lisp_to_text(lisp: &Value) -> impl Into { // Need to return a Result here so that we can propogate // errors and then handle them appropriately -#[allow(clippy::option_if_let_else)] pub fn lisp_to_background(lisp: &Value) -> Background { match lisp { Value::List(list) => { - let _kind = list[0].clone(); + let kind = list[0].clone(); if let Some(source) = list.iter().position(|v| { v == &Value::Keyword(Keyword::from("source")) }) { @@ -588,19 +499,13 @@ pub fn lisp_to_background(lisp: &Value) -> Background { pub struct SlideBuilder { background: Option, text: Option, - font: Option, + font: Option, font_size: Option, audio: Option, - stroke: Option, - shadow: Option, - text_color: Option, text_alignment: Option, video_loop: Option, video_start_time: Option, video_end_time: Option, - pdf_index: Option, - #[serde(skip)] - pdf_page: Option, #[serde(skip)] text_svg: Option, } @@ -632,20 +537,12 @@ impl SlideBuilder { self } - pub(crate) fn text_color( - mut self, - text_color: impl Into, - ) -> Self { - let _ = self.text_color.insert(text_color.into()); - self - } - pub(crate) fn audio(mut self, audio: impl Into) -> Self { let _ = self.audio.insert(audio.into()); self } - pub(crate) fn font(mut self, font: impl Into) -> Self { + pub(crate) fn font(mut self, font: impl Into) -> Self { let _ = self.font.insert(font.into()); self } @@ -655,27 +552,6 @@ impl SlideBuilder { self } - pub(crate) fn color(mut self, color: impl Into) -> Self { - let _ = self.text_color.insert(color.into()); - self - } - - pub(crate) fn stroke( - mut self, - stroke: impl Into, - ) -> Self { - let _ = self.stroke.insert(stroke.into()); - self - } - - pub(crate) fn shadow( - mut self, - shadow: impl Into, - ) -> Self { - let _ = self.shadow.insert(shadow.into()); - self - } - pub(crate) fn text_alignment( mut self, text_alignment: TextAlignment, @@ -713,19 +589,6 @@ 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")); @@ -733,6 +596,9 @@ impl SlideBuilder { let Some(text) = self.text else { return Err(miette!("No text")); }; + let Some(font) = self.font else { + return Err(miette!("No font")); + }; let Some(font_size) = self.font_size else { return Err(miette!("No font_size")); }; @@ -748,24 +614,60 @@ impl SlideBuilder { let Some(video_end_time) = self.video_end_time else { return Err(miette!("No video_end_time")); }; - Ok(Slide { - background, - text, - font: self.font, - font_size, - text_alignment, - audio: self.audio, - stroke: self.stroke, - shadow: self.shadow, - text_color: self.text_color, - 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, + 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() + }) + } + } +} + +#[derive(Debug, Clone, Default)] +struct Image { + pub source: String, + pub fit: String, + pub children: Vec, +} + +impl Image { + fn new() -> Self { + Self { ..Default::default() - }) + } } } @@ -781,8 +683,8 @@ mod test { text: "This is frodo".to_string(), background: Background::try_from("~/pics/frodo.jpg") .unwrap(), - font: Some("Quicksand".to_string().into()), - font_size: 140, + font: "Quicksand".to_string(), + font_size: 70, ..Default::default() } } @@ -794,21 +696,40 @@ mod test { "~/vids/test/camprules2024.mp4", ) .unwrap(), - font: Some("Quicksand".to_string().into()), + font: "Quicksand".to_string(), ..Default::default() } } + #[test] + fn test_lisp_serialize() { + let lisp = + read_to_string("./test_presentation.lisp").expect("oops"); + let lisp_value = crisp::reader::read(&lisp); + match lisp_value { + Value::List(value) => { + let slide = Slide::from(value[0].clone()); + let test_slide = test_slide(); + assert_eq!(slide, test_slide); + + let second_slide = Slide::from(value[1].clone()); + let second_test_slide = test_second_slide(); + assert_eq!(second_slide, second_test_slide) + } + _ => panic!("this should be a lisp"), + } + } + #[test] fn test_ron_deserialize() { let slide = read_to_string("./test_presentation.ron") .expect("Problem getting file read"); match ron::from_str::>(&slide) { - Ok(_s) => { + Ok(s) => { assert!(true) } Err(e) => { - assert!(false, "{:?}", e) + assert!(false) } } } diff --git a/src/core/slide_actions.rs b/src/core/slide_actions.rs deleted file mode 100644 index 766149f..0000000 --- a/src/core/slide_actions.rs +++ /dev/null @@ -1,41 +0,0 @@ -use miette::{IntoDiagnostic, Result}; -use std::sync::Arc; -use tracing::warn; - -use obws::{Client, responses::scenes::Scene}; -use serde::{Deserialize, Serialize}; - -#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] -pub(crate) enum ObsAction { - Scene { scene: Scene }, - StartStream, - StopStream, -} - -#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] -pub(crate) enum Action { - Obs { action: ObsAction }, - Other, -} - -impl ObsAction { - pub async fn run(&self, client: Arc) -> Result<()> { - match self { - Self::Scene { scene } => { - warn!(?scene, "Changing obs scenes"); - client - .scenes() - .set_current_program_scene(&scene.id) - .await - .into_diagnostic()?; - } - Self::StartStream => { - client.streaming().start().await.into_diagnostic()?; - } - Self::StopStream => { - client.streaming().stop().await.into_diagnostic()?; - } - } - Ok(()) - } -} diff --git a/src/core/song_search.rs b/src/core/song_search.rs deleted file mode 100644 index e43b441..0000000 --- a/src/core/song_search.rs +++ /dev/null @@ -1,327 +0,0 @@ -use itertools::Itertools; -use miette::{IntoDiagnostic, Result, miette}; -use reqwest::header; -use serde::{Deserialize, Serialize}; -use serde_json::Value; - -#[derive( - Clone, - Debug, - Default, - PartialEq, - PartialOrd, - Ord, - Eq, - Serialize, - Deserialize, -)] -pub struct OnlineSong { - pub lyrics: String, - pub title: String, - pub author: String, - pub site: String, - pub link: String, -} - -pub async fn search_genius_links( - query: impl AsRef + std::fmt::Display, -) -> Result> { - let auth_token = env!("GENIUS_TOKEN"); - let mut headers = header::HeaderMap::new(); - headers.insert( - header::AUTHORIZATION, - header::HeaderValue::from_static(auth_token), - ); - let client = reqwest::Client::builder() - .default_headers(headers) - .build() - .into_diagnostic()?; - let response = client - .get(format!("https://api.genius.com/search?q={query}")) - .send() - .await - .into_diagnostic()? - .error_for_status() - .into_diagnostic()? - .text() - .await - .into_diagnostic()?; - let json: Value = - serde_json::from_str(&response).into_diagnostic()?; - let hits = json - .get("response") - .expect("respose") - .get("hits") - .expect("hits") - .as_array() - .expect("array"); - Ok(hits - .iter() - .map(|hit| { - let result = hit.get("result").expect("result"); - let title = result - .get("full_title") - .expect("title") - .as_str() - .expect("title") - .to_string(); - let title = title.replace("\u{a0}", " "); - let author = result - .get("artist_names") - .expect("artists") - .as_str() - .expect("artists") - .to_string(); - let link = result - .get("url") - .expect("url") - .as_str() - .expect("url") - .to_string(); - OnlineSong { - lyrics: String::new(), - title, - author, - site: String::from("https://genius.com"), - link, - } - }) - .collect()) -} - -pub async fn get_genius_lyrics( - mut song: OnlineSong, -) -> Result { - let html = reqwest::get(&song.link) - .await - .into_diagnostic()? - .error_for_status() - .into_diagnostic()? - .text() - .await - .into_diagnostic()?; - let document = scraper::Html::parse_document(&html); - let Ok(lyrics_root_selector) = scraper::Selector::parse( - r#"div[data-lyrics-container="true"]"#, - ) else { - return Err(miette!("error in finding lyrics_root")); - }; - - let lyrics = document - .select(&lyrics_root_selector) - .map(|root| { - // dbg!(&root); - root.inner_html() - }) - .collect::(); - let lyrics = lyrics.find("[").map_or_else( - || { - lyrics.find("").map_or( - lyrics.clone(), - |position| { - lyrics.split_at(position + 18).1.to_string() - }, - ) - }, - |position| lyrics.split_at(position).1.to_string(), - ); - let lyrics = lyrics.replace("
", "\n"); - song.lyrics = lyrics; - Ok(song) -} - -pub async fn search_lyrics_com_links( - query: impl AsRef + std::fmt::Display, -) -> Result> { - let html = - reqwest::get(format!("http://www.lyrics.com/lyrics/{query}")) - .await - .into_diagnostic()? - .error_for_status() - .into_diagnostic()? - .text() - .await - .into_diagnostic()?; - - let document = scraper::Html::parse_document(&html); - let Ok(best_matches_selector) = - scraper::Selector::parse(".best-matches") - else { - return Err(miette!("error in finding matches")); - }; - let Ok(lyric_selector) = scraper::Selector::parse("a") else { - return Err(miette!("error in finding a links")); - }; - - Ok(document - .select(&best_matches_selector) - .flat_map(|best_section| best_section.select(&lyric_selector)) - .map(|a| { - a.value().attr("href").unwrap_or("").trim().to_string() - }) - .filter(|a| a.contains("/lyric/")) - .dedup() - .map(|link| { - link.strip_prefix("/lyric/") - .unwrap_or_else(|| &link) - .to_string() - }) - .collect()) -} - -// leaving this lint unfixed because I don't know if we will need this -// id value or not in the future and I'd like to keep the code understanding -// of what this variable might be. -#[allow(clippy::no_effect_underscore_binding)] -pub async fn lyrics_com_link_to_song( - links: Vec + std::fmt::Display>, -) -> Result> { - let mut songs = vec![]; - for link in links { - let parts = link - .as_ref() - .split('/') - .map(std::string::ToString::to_string) - .collect::>(); - let link = format!("https://www.lyrics.com/lyric/{link}"); - let _id = &parts[0]; - let author = &parts[1].replace('+', " "); - let title = &parts[2].replace('+', " "); - - let html = reqwest::get(&link) - .await - .into_diagnostic()? - .error_for_status() - .into_diagnostic()? - .text() - .await - .into_diagnostic()?; - - let document = scraper::Html::parse_document(&html); - let Ok(lyric_selector) = - scraper::Selector::parse(".lyric-body") - else { - return Err(miette!("error in finding lyric-body",)); - }; - - let lyrics = document - .select(&lyric_selector) - .map(|a| a.text().collect::()) - .dedup() - .next(); - - if let Some(lyrics) = lyrics { - let song = OnlineSong { - lyrics, - title: title.clone(), - author: author.clone(), - site: "https://www.lyrics.com".into(), - link, - }; - - songs.push(song); - } - } - Ok(songs) -} - -#[cfg(test)] -mod test { - use crate::core::songs::Song; - - use super::*; - use pretty_assertions::assert_eq; - - #[tokio::test] - async fn test_genius() -> Result<(), String> { - let song = OnlineSong { - lyrics: String::new(), - title: "Death Was Arrested by North Point Worship (Ft. Seth Condrey)".to_string(), - author: "North Point Worship (Ft. Seth Condrey)".to_string(), - site: "https://genius.com".to_string(), - link: "https://genius.com/North-point-worship-death-was-arrested-lyrics".to_string(), - }; - let hits = search_genius_links("Death was arrested") - .await - .map_err(|e| e.to_string())?; - - let titles: Vec = - hits.iter().map(|song| song.title.clone()).collect(); - dbg!(titles); - for hit in hits { - let new_song = get_genius_lyrics(hit) - .await - .map_err(|e| e.to_string())?; - dbg!(&new_song); - if !new_song.lyrics.starts_with("[Verse 1]") { - assert!(new_song.lyrics.len() > 10); - } else { - assert!(new_song.lyrics.contains("[Verse 2]")); - if !new_song.lyrics.contains("[Chorus]") { - assert!(new_song.lyrics.contains("[Chorus 1]")) - } - } - } - - Ok(()) - } - - #[tokio::test] - async fn test_search_to_song() -> Result<(), String> { - let song = OnlineSong { - lyrics: "Alone in my sorrow and dead in my sin\nLost without hope with no place to begin\nYour love Made a way to let mercy come in\nWhen death was arrested and my life began\n\nAsh was redeemed only beauty remains\nMy orphan heart was given a name\nMy mourning grew quiet my feet rose to dance\nWhen death was arrested and my life began\n\nOh, Your grace so free\nWashes over me\nYou have made me new\nNow life begins with You\nIt's your endless love\nPouring down on us\nYou have made us new\nNow life begins with You\n\nReleased from my chains I'm a prisoner no more\nMy shame was a ransom He faithfully bore\nHe cancelled my debt and He called me His friend\nWhen death was arrested and my life began\n\nOh, Your grace so free\nWashes over me\nYou have made me new\nNow life begins with You\nIt's your endless love\nPouring down on us\nYou have made us new\nNow life begins with You\n\nOur savior displayed on a criminal's cross\nDarkness rejoiced as though heaven had lost\nBut then Jesus arose with our freedom in hand\nThat's when death was arrested and my life began\n\nOh, Your grace so free\nWashes over me\nYou have made me new\nNow life begins with You\nIt's your endless love\nPouring down on us\nYou have made us new\nNow life begins with You\n\nOh, we're free, free\nForever we're free\nCome join the song\nOf all the redeemed\nYes, we're free free\nForever amen\nWhen death was arrested and my life began\n\nOh, we're free, free\nForever we're free\nCome join the song\nOf all the redeemed\nYes, we're free free\nForever amen\nWhen death was arrested and my life began\n\nWhen death was arrested and my life began\nWhen death was arrested and my life began".to_string(), - title: "Death Was Arrested".to_string(), - author: "North Point InsideOut".to_string(), - site: "https://www.lyrics.com".to_string(), - link: "https://www.lyrics.com/lyric/35090938/North+Point+InsideOut/Death+Was+Arrested".to_string(), - }; - let links = search_lyrics_com_links("Death was arrested") - .await - .map_err(|e| format!("{e}"))?; - let songs = lyrics_com_link_to_song(links) - .await - .map_err(|e| format!("{e}"))?; - if let Some(first) = songs.iter().find_or_first(|song| { - song.author == "North Point InsideOut" - }) { - assert_eq!(&song, first); - online_song_to_song(song)? - } - Ok(()) - } - - fn online_song_to_song(song: OnlineSong) -> Result<(), String> { - let song = Song::from(song); - if let Some(verse_map) = song.verse_map.as_ref() { - if verse_map.len() < 2 { - return Err(format!( - "VerseMap wasn't built right likely: {:?}", - song - )); - } - } else { - return Err(String::from( - "There is no VerseMap in this song", - )); - }; - Ok(()) - } - - #[tokio::test] - async fn test_online_search() { - let search = - search_lyrics_com_links("Death was arrested").await; - match search { - Ok(songs) => { - assert_eq!( - songs, - vec![ - "33755723/Various+Artists/Death+Was+Arrested", - "35090938/North+Point+InsideOut/Death+Was+Arrested" - ] - ); - } - Err(e) => assert!(false, "{}", e), - } - } -} diff --git a/src/core/songs.rs b/src/core/songs.rs index 3093f2c..270bc00 100644 --- a/src/core/songs.rs +++ b/src/core/songs.rs @@ -1,39 +1,26 @@ -use std::{ - borrow::Cow, collections::HashMap, option::Option, path::PathBuf, -}; +use std::{collections::HashMap, option::Option, path::PathBuf}; -use cosmic::{ - cosmic_theme::palette::Srgb, - iced::{ - clipboard::mime::AsMimeTypes, - font::{Style, Weight}, - }, -}; use crisp::types::{Keyword, Symbol, Value}; -use itertools::Itertools; -use miette::{IntoDiagnostic, Result, miette}; +use miette::{miette, IntoDiagnostic, Result}; use serde::{Deserialize, Serialize}; use sqlx::{ - FromRow, Row, Sqlite, SqliteConnection, SqlitePool, - pool::PoolConnection, query, sqlite::SqliteRow, + pool::PoolConnection, query, sqlite::SqliteRow, FromRow, Row, + Sqlite, SqliteConnection, SqlitePool, }; -use tracing::{debug, error}; +use tracing::error; -use crate::{ - Slide, SlideBuilder, - core::{ - content::Content, - kinds::ServiceItemKind, - model::{LibraryKind, Model}, - service_items::ServiceTrait, - slide::{self, Background, TextAlignment}, - song_search::OnlineSong, - }, - ui::text_svg::{Color, Font, Stroke, shadow, stroke}, +use crate::{core::slide, Slide, SlideBuilder}; + +use super::{ + content::Content, + kinds::ServiceItemKind, + model::{LibraryKind, Model}, + service_items::ServiceTrait, + slide::{Background, TextAlignment}, }; #[derive( - Clone, Debug, Default, PartialEq, Serialize, Deserialize, + Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize, )] pub struct Song { pub id: i32, @@ -47,198 +34,10 @@ pub struct Song { pub text_alignment: Option, pub font: Option, pub font_size: Option, - pub font_weight: Option, - pub font_style: Option", - // ); - - let _ = write!( - final_svg, - "'); - - for (index, text) in self.text.lines().enumerate() { - let _ = write!( - final_svg, - "{}", - (index as f32).mul_add( - text_and_line_spacing, + let text_pieces: Vec = self + .text + .lines() + .enumerate() + .map(|(index, text)| { + format!( + "{}", starting_y_position - ), - text - ); - } + + (index as f32 * text_and_line_spacing), + text + ) + }) + .collect(); + let text: String = text_pieces.join("\n"); - final_svg.push_str(""); - - // final_svg.push_str(&format!( - // "{}{}", - // size.width, - // size.height, - // shadow, - // self.font.name, - // font_size, - // self.fill, - // stroke, - // text - // )); - - if let Some(path) = cache.as_mut() { - let hashed_title = rapidhash_v3(final_svg.as_bytes()); - path.push(PathBuf::from(hashed_title.to_string())); - path.set_extension("png"); - - if path.exists() { - // debug!("cached"); - let handle = Handle::from_path(&path); - self.path = Some(path.clone()); - self.handle = Some(handle); - return self; - } - } - // debug!("text string built..."); - let Ok(resvg_tree) = Tree::from_data( - final_svg.as_bytes(), - &resvg::usvg::Options { - fontdb: Arc::clone(&self.fontdb), - ..Default::default() - }, - ) else { - error!("Couldn't parse the svg into a tree"); - return self; - }; - // debug!("parsed"); - let transform = tiny_skia::Transform::default(); - - #[allow(clippy::cast_sign_loss)] - let (size_width, size_height) = - (size.width as u32, size.height as u32); - - let Some(mut pixmap) = Pixmap::new(size_width, size_height) - else { - error!("Couldn't create a new pixmap from size"); - return self; - }; - resvg::render(&resvg_tree, transform, &mut pixmap.as_mut()); - // debug!("rendered"); - - if let Some(path) = cache.as_ref() - && let Err(e) = pixmap.save_png(path) - { - error!(?e, "Couldn't save a copy of the text"); - } - self.path = cache; - - // debug!("saved"); - // let handle = Handle::from_path(path); - let handle = - Handle::from_rgba(size_width, size_height, pixmap.take()); + let final_svg = format!("{}{}", + size.width, + size.height, + shadow, + self.font.name, + self.font.size, + self.fill, stroke, text); + let handle = Handle::from_memory( + Box::leak( + ::clone(&final_svg) + .into_boxed_str(), + ) + .as_bytes(), + ); self.handle = Some(handle); - // debug!("stored"); self } pub fn view<'a>(&self) -> Element<'a, Message> { - self.handle.clone().map_or_else( - || Element::from(Space::new(Length::Fill, Length::Fill)), - |handle| { - Image::new(handle) - .content_fit(ContentFit::Cover) - .width(Length::Fill) - .height(Length::Fill) - .into() - }, + container( + Svg::new(self.handle.clone().unwrap()) + .width(Length::Fill) + .height(Length::Fill), ) + .width(Length::Fill) + .height(Length::Fill) + .into() + } + + fn text_spans(&self) -> Vec { + self.text + .lines() + .enumerate() + .map(|(i, t)| format!("{}", t)) + .collect() } } @@ -555,92 +317,26 @@ pub fn color(color: impl AsRef) -> Color { Color::from_hex_str(color) } -pub fn text_svg_generator( - slide: crate::core::slide::Slide, - fontdb: &Arc, -) -> Result { - let Some(mut path) = dirs::cache_dir() else { - error!("Cannot find the cache dir"); - return Err(miette!("Cannot find the cache dir")); - }; - path.push("lumina"); - path.push("text_svg_cache"); - let _ = fs::create_dir_all(&path); - - text_svg_generator_with_cache(slide, fontdb, Some(path)) -} - -pub fn text_svg_generator_with_cache( - mut slide: crate::core::slide::Slide, - fontdb: &Arc, - cache: Option, -) -> Result { - if slide.text().is_empty() { - Err(miette!("There is no slide text")) - } else { - let font = slide.font().unwrap_or_default(); - let text_svg = TextSvg::new(slide.text()) - .alignment(slide.text_alignment()) - .fill( - slide.text_color().unwrap_or_else(|| "#fff".into()), - ); - let text_svg = if let Some(stroke) = slide.stroke() { - text_svg.stroke(stroke) - } else { - text_svg - }; - let text_svg = if let Some(shadow) = slide.shadow() { - text_svg.shadow(shadow) - } else { - text_svg - }; - let text_svg = text_svg.font(font).fontdb(Arc::clone(fontdb)); - // debug!(fill = ?text_svg.fill, font = ?text_svg.font, stroke = ?text_svg.stroke, shadow = ?text_svg.shadow, text = ?text_svg.text); - let text_svg = - text_svg.build(Size::new(1280.0, 720.0), cache); - slide.text_svg = Some(text_svg); - Ok(slide) - } -} - #[cfg(test)] -mod tests { - use crate::core::slide::Slide; +mod test { + use pretty_assertions::assert_eq; - use super::*; - use rayon::iter::{IntoParallelIterator, ParallelIterator}; - use resvg::usvg::fontdb::Database; - use tracing::debug; + use super::TextSvg; #[test] - fn test_generator() { - let slide = Slide::default(); - debug!("test"); - let mut fontdb = Database::new(); - fontdb.load_system_fonts(); - let fontdb = Arc::new(fontdb); - (0..400).into_par_iter().for_each(|_| { - let slide = slide - .clone() - .set_font_size(120) - .set_font("") - .set_shadow(shadow(5, 5, 5, "#000")) - .set_stroke(stroke(9, "#000")) - .set_text("This is the first slide of text\nAnd we are singing\nTo save the world!"); - match text_svg_generator_with_cache( - slide, - &fontdb, - None, - ) { - Ok(slide) => { - assert!( - slide - .text_svg - .is_some_and(|svg| svg.handle.is_some()) - ) - }, - Err(e) => assert!(false, "There was an issue creating the TextSvg: {e}"), - }; - }); + fn test_text_spans() { + let mut text = TextSvg::new("yes"); + text.text = "This is +multiline +text." + .into(); + assert_eq!( + vec![ + String::from("This is"), + String::from("multiline"), + String::from("text."), + ], + text.text_spans() + ) } } diff --git a/src/ui/video_editor.rs b/src/ui/video_editor.rs deleted file mode 100644 index 6295ed6..0000000 --- a/src/ui/video_editor.rs +++ /dev/null @@ -1,237 +0,0 @@ -use std::{io, path::PathBuf}; - -use cosmic::{ - Element, Task, - dialog::file_chooser::{FileFilter, open::Dialog}, - iced::{Length, alignment::Vertical}, - iced_widget::{column, row}, - theme, - widget::{ - Space, button, container, horizontal_space, icon, - progress_bar, text, text_input, - }, -}; -use iced_video_player::{Video, VideoPlayer}; -use tracing::{debug, error, warn}; -use url::Url; - -use crate::core::videos; - -#[derive(Debug)] -pub struct VideoEditor { - pub video: Option