From 62e41e5f0726836abce01bb0bb9b887637239d82 Mon Sep 17 00:00:00 2001 From: Youwes09 Date: Sat, 28 Mar 2026 17:15:01 -0500 Subject: [PATCH] Fix: Reader Store Refactor (Issue #11) & Feat: Drag n Drop (WIP) --- dev.moku.app.yml | 2 +- packaging/cargo-sources.json | 983 +++++++++++++-------- src/components/pages/Discover.svelte | 32 +- src/components/pages/GenreDrillPage.svelte | 43 +- src/components/pages/Home.svelte | 37 +- src/components/pages/Library.svelte | 541 ++++++++++-- src/components/pages/SeriesDetail.svelte | 84 +- src/components/reader/Reader.svelte | 13 +- src/components/settings/Settings.svelte | 143 ++- src/components/shared/MangaPreview.svelte | 78 +- src/components/shared/SourceBrowse.svelte | 79 +- src/lib/cache.ts | 1 + src/lib/queries.ts | 89 ++ src/lib/types.ts | 12 + src/store/state.svelte.ts | 169 ++-- 15 files changed, 1633 insertions(+), 673 deletions(-) diff --git a/dev.moku.app.yml b/dev.moku.app.yml index 5508e52..43c7792 100644 --- a/dev.moku.app.yml +++ b/dev.moku.app.yml @@ -181,7 +181,7 @@ modules: path: . - type: file path: packaging/frontend-dist.tar.gz - sha256: 3ac5d822ac1840473333510b5e45220298702e6d1435e2cdd4b5c2f7195d764f + sha256: a6b7b0f57210ea15b1a7ef580be9f89a667d647373abca4f34fe017a5ac8c850 - packaging/cargo-sources.json - type: inline dest: src-tauri/.cargo diff --git a/packaging/cargo-sources.json b/packaging/cargo-sources.json index 396da24..a4e0415 100644 --- a/packaging/cargo-sources.json +++ b/packaging/cargo-sources.json @@ -168,6 +168,32 @@ "dest": "cargo/vendor/base64-0.22.1", "dest-filename": ".cargo-checksum.json" }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/bit-set/bit-set-0.8.0.crate", + "sha256": "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3", + "dest": "cargo/vendor/bit-set-0.8.0" + }, + { + "type": "inline", + "contents": "{\"package\": \"08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3\", \"files\": {}}", + "dest": "cargo/vendor/bit-set-0.8.0", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/bit-vec/bit-vec-0.8.0.crate", + "sha256": "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7", + "dest": "cargo/vendor/bit-vec-0.8.0" + }, + { + "type": "inline", + "contents": "{\"package\": \"5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7\", \"files\": {}}", + "dest": "cargo/vendor/bit-vec-0.8.0", + "dest-filename": ".cargo-checksum.json" + }, { "type": "archive", "archive-type": "tar-gzip", @@ -379,14 +405,14 @@ { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/cc/cc-1.2.56.crate", - "sha256": "aebf35691d1bfb0ac386a69bac2fde4dd276fb618cf8bf4f5318fe285e821bb2", - "dest": "cargo/vendor/cc-1.2.56" + "url": "https://static.crates.io/crates/cc/cc-1.2.58.crate", + "sha256": "e1e928d4b69e3077709075a938a05ffbedfa53a84c8f766efbf8220bb1ff60e1", + "dest": "cargo/vendor/cc-1.2.58" }, { "type": "inline", - "contents": "{\"package\": \"aebf35691d1bfb0ac386a69bac2fde4dd276fb618cf8bf4f5318fe285e821bb2\", \"files\": {}}", - "dest": "cargo/vendor/cc-1.2.56", + "contents": "{\"package\": \"e1e928d4b69e3077709075a938a05ffbedfa53a84c8f766efbf8220bb1ff60e1\", \"files\": {}}", + "dest": "cargo/vendor/cc-1.2.58", "dest-filename": ".cargo-checksum.json" }, { @@ -457,14 +483,14 @@ { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/chrono/chrono-0.4.43.crate", - "sha256": "fac4744fb15ae8337dc853fee7fb3f4e48c0fbaa23d0afe49c447b4fab126118", - "dest": "cargo/vendor/chrono-0.4.43" + "url": "https://static.crates.io/crates/chrono/chrono-0.4.44.crate", + "sha256": "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0", + "dest": "cargo/vendor/chrono-0.4.44" }, { "type": "inline", - "contents": "{\"package\": \"fac4744fb15ae8337dc853fee7fb3f4e48c0fbaa23d0afe49c447b4fab126118\", \"files\": {}}", - "dest": "cargo/vendor/chrono-0.4.43", + "contents": "{\"package\": \"c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0\", \"files\": {}}", + "dest": "cargo/vendor/chrono-0.4.44", "dest-filename": ".cargo-checksum.json" }, { @@ -574,14 +600,14 @@ { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/core-graphics/core-graphics-0.24.0.crate", - "sha256": "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1", - "dest": "cargo/vendor/core-graphics-0.24.0" + "url": "https://static.crates.io/crates/core-graphics/core-graphics-0.25.0.crate", + "sha256": "064badf302c3194842cf2c5d61f56cc88e54a759313879cdf03abdd27d0c3b97", + "dest": "cargo/vendor/core-graphics-0.25.0" }, { "type": "inline", - "contents": "{\"package\": \"fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1\", \"files\": {}}", - "dest": "cargo/vendor/core-graphics-0.24.0", + "contents": "{\"package\": \"064badf302c3194842cf2c5d61f56cc88e54a759313879cdf03abdd27d0c3b97\", \"files\": {}}", + "dest": "cargo/vendor/core-graphics-0.25.0", "dest-filename": ".cargo-checksum.json" }, { @@ -701,6 +727,19 @@ "dest": "cargo/vendor/cssparser-0.29.6", "dest-filename": ".cargo-checksum.json" }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/cssparser/cssparser-0.36.0.crate", + "sha256": "dae61cf9c0abb83bd659dab65b7e4e38d8236824c85f0f804f173567bda257d2", + "dest": "cargo/vendor/cssparser-0.36.0" + }, + { + "type": "inline", + "contents": "{\"package\": \"dae61cf9c0abb83bd659dab65b7e4e38d8236824c85f0f804f173567bda257d2\", \"files\": {}}", + "dest": "cargo/vendor/cssparser-0.36.0", + "dest-filename": ".cargo-checksum.json" + }, { "type": "archive", "archive-type": "tar-gzip", @@ -730,40 +769,40 @@ { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/darling/darling-0.21.3.crate", - "sha256": "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0", - "dest": "cargo/vendor/darling-0.21.3" + "url": "https://static.crates.io/crates/darling/darling-0.23.0.crate", + "sha256": "25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d", + "dest": "cargo/vendor/darling-0.23.0" }, { "type": "inline", - "contents": "{\"package\": \"9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0\", \"files\": {}}", - "dest": "cargo/vendor/darling-0.21.3", + "contents": "{\"package\": \"25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d\", \"files\": {}}", + "dest": "cargo/vendor/darling-0.23.0", "dest-filename": ".cargo-checksum.json" }, { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/darling_core/darling_core-0.21.3.crate", - "sha256": "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4", - "dest": "cargo/vendor/darling_core-0.21.3" + "url": "https://static.crates.io/crates/darling_core/darling_core-0.23.0.crate", + "sha256": "9865a50f7c335f53564bb694ef660825eb8610e0a53d3e11bf1b0d3df31e03b0", + "dest": "cargo/vendor/darling_core-0.23.0" }, { "type": "inline", - "contents": "{\"package\": \"1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4\", \"files\": {}}", - "dest": "cargo/vendor/darling_core-0.21.3", + "contents": "{\"package\": \"9865a50f7c335f53564bb694ef660825eb8610e0a53d3e11bf1b0d3df31e03b0\", \"files\": {}}", + "dest": "cargo/vendor/darling_core-0.23.0", "dest-filename": ".cargo-checksum.json" }, { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/darling_macro/darling_macro-0.21.3.crate", - "sha256": "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81", - "dest": "cargo/vendor/darling_macro-0.21.3" + "url": "https://static.crates.io/crates/darling_macro/darling_macro-0.23.0.crate", + "sha256": "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d", + "dest": "cargo/vendor/darling_macro-0.23.0" }, { "type": "inline", - "contents": "{\"package\": \"d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81\", \"files\": {}}", - "dest": "cargo/vendor/darling_macro-0.21.3", + "contents": "{\"package\": \"ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d\", \"files\": {}}", + "dest": "cargo/vendor/darling_macro-0.23.0", "dest-filename": ".cargo-checksum.json" }, { @@ -782,14 +821,14 @@ { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/deranged/deranged-0.5.6.crate", - "sha256": "cc3dc5ad92c2e2d1c193bbbbdf2ea477cb81331de4f3103f267ca18368b988c4", - "dest": "cargo/vendor/deranged-0.5.6" + "url": "https://static.crates.io/crates/deranged/deranged-0.5.8.crate", + "sha256": "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c", + "dest": "cargo/vendor/deranged-0.5.8" }, { "type": "inline", - "contents": "{\"package\": \"cc3dc5ad92c2e2d1c193bbbbdf2ea477cb81331de4f3103f267ca18368b988c4\", \"files\": {}}", - "dest": "cargo/vendor/deranged-0.5.6", + "contents": "{\"package\": \"7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c\", \"files\": {}}", + "dest": "cargo/vendor/deranged-0.5.8", "dest-filename": ".cargo-checksum.json" }, { @@ -818,6 +857,32 @@ "dest": "cargo/vendor/derive_more-0.99.20", "dest-filename": ".cargo-checksum.json" }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/derive_more/derive_more-2.1.1.crate", + "sha256": "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134", + "dest": "cargo/vendor/derive_more-2.1.1" + }, + { + "type": "inline", + "contents": "{\"package\": \"d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134\", \"files\": {}}", + "dest": "cargo/vendor/derive_more-2.1.1", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/derive_more-impl/derive_more-impl-2.1.1.crate", + "sha256": "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb", + "dest": "cargo/vendor/derive_more-impl-2.1.1" + }, + { + "type": "inline", + "contents": "{\"package\": \"799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb\", \"files\": {}}", + "dest": "cargo/vendor/derive_more-impl-2.1.1", + "dest-filename": ".cargo-checksum.json" + }, { "type": "archive", "archive-type": "tar-gzip", @@ -886,27 +951,14 @@ { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/dispatch/dispatch-0.2.0.crate", - "sha256": "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b", - "dest": "cargo/vendor/dispatch-0.2.0" + "url": "https://static.crates.io/crates/dispatch2/dispatch2-0.3.1.crate", + "sha256": "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38", + "dest": "cargo/vendor/dispatch2-0.3.1" }, { "type": "inline", - "contents": "{\"package\": \"bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b\", \"files\": {}}", - "dest": "cargo/vendor/dispatch-0.2.0", - "dest-filename": ".cargo-checksum.json" - }, - { - "type": "archive", - "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/dispatch2/dispatch2-0.3.0.crate", - "sha256": "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec", - "dest": "cargo/vendor/dispatch2-0.3.0" - }, - { - "type": "inline", - "contents": "{\"package\": \"89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec\", \"files\": {}}", - "dest": "cargo/vendor/dispatch2-0.3.0", + "contents": "{\"package\": \"1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38\", \"files\": {}}", + "dest": "cargo/vendor/dispatch2-0.3.1", "dest-filename": ".cargo-checksum.json" }, { @@ -961,6 +1013,19 @@ "dest": "cargo/vendor/document-features-0.2.12", "dest-filename": ".cargo-checksum.json" }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/dom_query/dom_query-0.27.0.crate", + "sha256": "521e380c0c8afb8d9a1e83a1822ee03556fc3e3e7dbc1fd30be14e37f9cb3f89", + "dest": "cargo/vendor/dom_query-0.27.0" + }, + { + "type": "inline", + "contents": "{\"package\": \"521e380c0c8afb8d9a1e83a1822ee03556fc3e3e7dbc1fd30be14e37f9cb3f89\", \"files\": {}}", + "dest": "cargo/vendor/dom_query-0.27.0", + "dest-filename": ".cargo-checksum.json" + }, { "type": "archive", "archive-type": "tar-gzip", @@ -1042,14 +1107,14 @@ { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/embed-resource/embed-resource-3.0.6.crate", - "sha256": "55a075fc573c64510038d7ee9abc7990635863992f83ebc52c8b433b8411a02e", - "dest": "cargo/vendor/embed-resource-3.0.6" + "url": "https://static.crates.io/crates/embed-resource/embed-resource-3.0.8.crate", + "sha256": "63a1d0de4f2249aa0ff5884d7080814f446bb241a559af6c170a41e878ed2d45", + "dest": "cargo/vendor/embed-resource-3.0.8" }, { "type": "inline", - "contents": "{\"package\": \"55a075fc573c64510038d7ee9abc7990635863992f83ebc52c8b433b8411a02e\", \"files\": {}}", - "dest": "cargo/vendor/embed-resource-3.0.6", + "contents": "{\"package\": \"63a1d0de4f2249aa0ff5884d7080814f446bb241a559af6c170a41e878ed2d45\", \"files\": {}}", + "dest": "cargo/vendor/embed-resource-3.0.8", "dest-filename": ".cargo-checksum.json" }, { @@ -1094,14 +1159,14 @@ { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/erased-serde/erased-serde-0.4.9.crate", - "sha256": "89e8918065695684b2b0702da20382d5ae6065cf3327bc2d6436bd49a71ce9f3", - "dest": "cargo/vendor/erased-serde-0.4.9" + "url": "https://static.crates.io/crates/erased-serde/erased-serde-0.4.10.crate", + "sha256": "d2add8a07dd6a8d93ff627029c51de145e12686fbc36ecb298ac22e74cf02dec", + "dest": "cargo/vendor/erased-serde-0.4.10" }, { "type": "inline", - "contents": "{\"package\": \"89e8918065695684b2b0702da20382d5ae6065cf3327bc2d6436bd49a71ce9f3\", \"files\": {}}", - "dest": "cargo/vendor/erased-serde-0.4.9", + "contents": "{\"package\": \"d2add8a07dd6a8d93ff627029c51de145e12686fbc36ecb298ac22e74cf02dec\", \"files\": {}}", + "dest": "cargo/vendor/erased-serde-0.4.10", "dest-filename": ".cargo-checksum.json" }, { @@ -1221,6 +1286,19 @@ "dest": "cargo/vendor/foldhash-0.1.5", "dest-filename": ".cargo-checksum.json" }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/foldhash/foldhash-0.2.0.crate", + "sha256": "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb", + "dest": "cargo/vendor/foldhash-0.2.0" + }, + { + "type": "inline", + "contents": "{\"package\": \"77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb\", \"files\": {}}", + "dest": "cargo/vendor/foldhash-0.2.0", + "dest-filename": ".cargo-checksum.json" + }, { "type": "archive", "archive-type": "tar-gzip", @@ -1562,14 +1640,14 @@ { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/getrandom/getrandom-0.4.1.crate", - "sha256": "139ef39800118c7683f2fd3c98c1b23c09ae076556b435f8e9064ae108aaeeec", - "dest": "cargo/vendor/getrandom-0.4.1" + "url": "https://static.crates.io/crates/getrandom/getrandom-0.4.2.crate", + "sha256": "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555", + "dest": "cargo/vendor/getrandom-0.4.2" }, { "type": "inline", - "contents": "{\"package\": \"139ef39800118c7683f2fd3c98c1b23c09ae076556b435f8e9064ae108aaeeec\", \"files\": {}}", - "dest": "cargo/vendor/getrandom-0.4.1", + "contents": "{\"package\": \"0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555\", \"files\": {}}", + "dest": "cargo/vendor/getrandom-0.4.2", "dest-filename": ".cargo-checksum.json" }, { @@ -1806,6 +1884,19 @@ "dest": "cargo/vendor/html5ever-0.29.1", "dest-filename": ".cargo-checksum.json" }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/html5ever/html5ever-0.38.0.crate", + "sha256": "1054432bae2f14e0061e33d23402fbaa67a921d319d56adc6bcf887ddad1cbc2", + "dest": "cargo/vendor/html5ever-0.38.0" + }, + { + "type": "inline", + "contents": "{\"package\": \"1054432bae2f14e0061e33d23402fbaa67a921d319d56adc6bcf887ddad1cbc2\", \"files\": {}}", + "dest": "cargo/vendor/html5ever-0.38.0", + "dest-filename": ".cargo-checksum.json" + }, { "type": "archive", "archive-type": "tar-gzip", @@ -2121,27 +2212,27 @@ { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/ipnet/ipnet-2.11.0.crate", - "sha256": "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130", - "dest": "cargo/vendor/ipnet-2.11.0" + "url": "https://static.crates.io/crates/ipnet/ipnet-2.12.0.crate", + "sha256": "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2", + "dest": "cargo/vendor/ipnet-2.12.0" }, { "type": "inline", - "contents": "{\"package\": \"469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130\", \"files\": {}}", - "dest": "cargo/vendor/ipnet-2.11.0", + "contents": "{\"package\": \"d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2\", \"files\": {}}", + "dest": "cargo/vendor/ipnet-2.12.0", "dest-filename": ".cargo-checksum.json" }, { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/iri-string/iri-string-0.7.10.crate", - "sha256": "c91338f0783edbd6195decb37bae672fd3b165faffb89bf7b9e6942f8b1a731a", - "dest": "cargo/vendor/iri-string-0.7.10" + "url": "https://static.crates.io/crates/iri-string/iri-string-0.7.11.crate", + "sha256": "d8e7418f59cc01c88316161279a7f665217ae316b388e58a0d10e29f54f1e5eb", + "dest": "cargo/vendor/iri-string-0.7.11" }, { "type": "inline", - "contents": "{\"package\": \"c91338f0783edbd6195decb37bae672fd3b165faffb89bf7b9e6942f8b1a731a\", \"files\": {}}", - "dest": "cargo/vendor/iri-string-0.7.10", + "contents": "{\"package\": \"d8e7418f59cc01c88316161279a7f665217ae316b388e58a0d10e29f54f1e5eb\", \"files\": {}}", + "dest": "cargo/vendor/iri-string-0.7.11", "dest-filename": ".cargo-checksum.json" }, { @@ -2173,14 +2264,14 @@ { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/itoa/itoa-1.0.17.crate", - "sha256": "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2", - "dest": "cargo/vendor/itoa-1.0.17" + "url": "https://static.crates.io/crates/itoa/itoa-1.0.18.crate", + "sha256": "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682", + "dest": "cargo/vendor/itoa-1.0.18" }, { "type": "inline", - "contents": "{\"package\": \"92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2\", \"files\": {}}", - "dest": "cargo/vendor/itoa-1.0.17", + "contents": "{\"package\": \"8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682\", \"files\": {}}", + "dest": "cargo/vendor/itoa-1.0.18", "dest-filename": ".cargo-checksum.json" }, { @@ -2225,27 +2316,53 @@ { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/jni-sys/jni-sys-0.3.0.crate", - "sha256": "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130", - "dest": "cargo/vendor/jni-sys-0.3.0" + "url": "https://static.crates.io/crates/jni-sys/jni-sys-0.3.1.crate", + "sha256": "41a652e1f9b6e0275df1f15b32661cf0d4b78d4d87ddec5e0c3c20f097433258", + "dest": "cargo/vendor/jni-sys-0.3.1" }, { "type": "inline", - "contents": "{\"package\": \"8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130\", \"files\": {}}", - "dest": "cargo/vendor/jni-sys-0.3.0", + "contents": "{\"package\": \"41a652e1f9b6e0275df1f15b32661cf0d4b78d4d87ddec5e0c3c20f097433258\", \"files\": {}}", + "dest": "cargo/vendor/jni-sys-0.3.1", "dest-filename": ".cargo-checksum.json" }, { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/js-sys/js-sys-0.3.86.crate", - "sha256": "d36139f1c97c42c0c86a411910b04e48d4939a0376e6e0f989420cbdee0120e5", - "dest": "cargo/vendor/js-sys-0.3.86" + "url": "https://static.crates.io/crates/jni-sys/jni-sys-0.4.1.crate", + "sha256": "c6377a88cb3910bee9b0fa88d4f42e1d2da8e79915598f65fb0c7ee14c878af2", + "dest": "cargo/vendor/jni-sys-0.4.1" }, { "type": "inline", - "contents": "{\"package\": \"d36139f1c97c42c0c86a411910b04e48d4939a0376e6e0f989420cbdee0120e5\", \"files\": {}}", - "dest": "cargo/vendor/js-sys-0.3.86", + "contents": "{\"package\": \"c6377a88cb3910bee9b0fa88d4f42e1d2da8e79915598f65fb0c7ee14c878af2\", \"files\": {}}", + "dest": "cargo/vendor/jni-sys-0.4.1", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/jni-sys-macros/jni-sys-macros-0.4.1.crate", + "sha256": "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264", + "dest": "cargo/vendor/jni-sys-macros-0.4.1" + }, + { + "type": "inline", + "contents": "{\"package\": \"38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264\", \"files\": {}}", + "dest": "cargo/vendor/jni-sys-macros-0.4.1", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/js-sys/js-sys-0.3.92.crate", + "sha256": "cc4c90f45aa2e6eacbe8645f77fdea542ac97a494bcd117a67df9ff4d611f995", + "dest": "cargo/vendor/js-sys-0.3.92" + }, + { + "type": "inline", + "contents": "{\"package\": \"cc4c90f45aa2e6eacbe8645f77fdea542ac97a494bcd117a67df9ff4d611f995\", \"files\": {}}", + "dest": "cargo/vendor/js-sys-0.3.92", "dest-filename": ".cargo-checksum.json" }, { @@ -2300,19 +2417,6 @@ "dest": "cargo/vendor/kuchikiki-0.8.8-speedreader", "dest-filename": ".cargo-checksum.json" }, - { - "type": "archive", - "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/lazy_static/lazy_static-1.5.0.crate", - "sha256": "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe", - "dest": "cargo/vendor/lazy_static-1.5.0" - }, - { - "type": "inline", - "contents": "{\"package\": \"bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe\", \"files\": {}}", - "dest": "cargo/vendor/lazy_static-1.5.0", - "dest-filename": ".cargo-checksum.json" - }, { "type": "archive", "archive-type": "tar-gzip", @@ -2355,14 +2459,14 @@ { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/libc/libc-0.2.182.crate", - "sha256": "6800badb6cb2082ffd7b6a67e6125bb39f18782f793520caee8cb8846be06112", - "dest": "cargo/vendor/libc-0.2.182" + "url": "https://static.crates.io/crates/libc/libc-0.2.183.crate", + "sha256": "b5b646652bf6661599e1da8901b3b9522896f01e736bad5f723fe7a3a27f899d", + "dest": "cargo/vendor/libc-0.2.183" }, { "type": "inline", - "contents": "{\"package\": \"6800badb6cb2082ffd7b6a67e6125bb39f18782f793520caee8cb8846be06112\", \"files\": {}}", - "dest": "cargo/vendor/libc-0.2.182", + "contents": "{\"package\": \"b5b646652bf6661599e1da8901b3b9522896f01e736bad5f723fe7a3a27f899d\", \"files\": {}}", + "dest": "cargo/vendor/libc-0.2.183", "dest-filename": ".cargo-checksum.json" }, { @@ -2381,14 +2485,14 @@ { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/libredox/libredox-0.1.12.crate", - "sha256": "3d0b95e02c851351f877147b7deea7b1afb1df71b63aa5f8270716e0c5720616", - "dest": "cargo/vendor/libredox-0.1.12" + "url": "https://static.crates.io/crates/libredox/libredox-0.1.15.crate", + "sha256": "7ddbf48fd451246b1f8c2610bd3b4ac0cc6e149d89832867093ab69a17194f08", + "dest": "cargo/vendor/libredox-0.1.15" }, { "type": "inline", - "contents": "{\"package\": \"3d0b95e02c851351f877147b7deea7b1afb1df71b63aa5f8270716e0c5720616\", \"files\": {}}", - "dest": "cargo/vendor/libredox-0.1.12", + "contents": "{\"package\": \"7ddbf48fd451246b1f8c2610bd3b4ac0cc6e149d89832867093ab69a17194f08\", \"files\": {}}", + "dest": "cargo/vendor/libredox-0.1.15", "dest-filename": ".cargo-checksum.json" }, { @@ -2495,6 +2599,19 @@ "dest": "cargo/vendor/markup5ever-0.14.1", "dest-filename": ".cargo-checksum.json" }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/markup5ever/markup5ever-0.38.0.crate", + "sha256": "8983d30f2915feeaaab2d6babdd6bc7e9ed1a00b66b5e6d74df19aa9c0e91862", + "dest": "cargo/vendor/markup5ever-0.38.0" + }, + { + "type": "inline", + "contents": "{\"package\": \"8983d30f2915feeaaab2d6babdd6bc7e9ed1a00b66b5e6d74df19aa9c0e91862\", \"files\": {}}", + "dest": "cargo/vendor/markup5ever-0.38.0", + "dest-filename": ".cargo-checksum.json" + }, { "type": "archive", "archive-type": "tar-gzip", @@ -2589,14 +2706,14 @@ { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/mio/mio-1.1.1.crate", - "sha256": "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc", - "dest": "cargo/vendor/mio-1.1.1" + "url": "https://static.crates.io/crates/mio/mio-1.2.0.crate", + "sha256": "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1", + "dest": "cargo/vendor/mio-1.2.0" }, { "type": "inline", - "contents": "{\"package\": \"a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc\", \"files\": {}}", - "dest": "cargo/vendor/mio-1.1.1", + "contents": "{\"package\": \"50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1\", \"files\": {}}", + "dest": "cargo/vendor/mio-1.2.0", "dest-filename": ".cargo-checksum.json" }, { @@ -2706,14 +2823,14 @@ { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/num-conv/num-conv-0.2.0.crate", - "sha256": "cf97ec579c3c42f953ef76dbf8d55ac91fb219dde70e49aa4a6b7d74e9919050", - "dest": "cargo/vendor/num-conv-0.2.0" + "url": "https://static.crates.io/crates/num-conv/num-conv-0.2.1.crate", + "sha256": "c6673768db2d862beb9b39a78fdcb1a69439615d5794a1be50caa9bc92c81967", + "dest": "cargo/vendor/num-conv-0.2.1" }, { "type": "inline", - "contents": "{\"package\": \"cf97ec579c3c42f953ef76dbf8d55ac91fb219dde70e49aa4a6b7d74e9919050\", \"files\": {}}", - "dest": "cargo/vendor/num-conv-0.2.0", + "contents": "{\"package\": \"c6673768db2d862beb9b39a78fdcb1a69439615d5794a1be50caa9bc92c81967\", \"files\": {}}", + "dest": "cargo/vendor/num-conv-0.2.1", "dest-filename": ".cargo-checksum.json" }, { @@ -2732,40 +2849,40 @@ { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/num_enum/num_enum-0.7.5.crate", - "sha256": "b1207a7e20ad57b847bbddc6776b968420d38292bbfe2089accff5e19e82454c", - "dest": "cargo/vendor/num_enum-0.7.5" + "url": "https://static.crates.io/crates/num_enum/num_enum-0.7.6.crate", + "sha256": "5d0bca838442ec211fa11de3a8b0e0e8f3a4522575b5c4c06ed722e005036f26", + "dest": "cargo/vendor/num_enum-0.7.6" }, { "type": "inline", - "contents": "{\"package\": \"b1207a7e20ad57b847bbddc6776b968420d38292bbfe2089accff5e19e82454c\", \"files\": {}}", - "dest": "cargo/vendor/num_enum-0.7.5", + "contents": "{\"package\": \"5d0bca838442ec211fa11de3a8b0e0e8f3a4522575b5c4c06ed722e005036f26\", \"files\": {}}", + "dest": "cargo/vendor/num_enum-0.7.6", "dest-filename": ".cargo-checksum.json" }, { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/num_enum_derive/num_enum_derive-0.7.5.crate", - "sha256": "ff32365de1b6743cb203b710788263c44a03de03802daf96092f2da4fe6ba4d7", - "dest": "cargo/vendor/num_enum_derive-0.7.5" + "url": "https://static.crates.io/crates/num_enum_derive/num_enum_derive-0.7.6.crate", + "sha256": "680998035259dcfcafe653688bf2aa6d3e2dc05e98be6ab46afb089dc84f1df8", + "dest": "cargo/vendor/num_enum_derive-0.7.6" }, { "type": "inline", - "contents": "{\"package\": \"ff32365de1b6743cb203b710788263c44a03de03802daf96092f2da4fe6ba4d7\", \"files\": {}}", - "dest": "cargo/vendor/num_enum_derive-0.7.5", + "contents": "{\"package\": \"680998035259dcfcafe653688bf2aa6d3e2dc05e98be6ab46afb089dc84f1df8\", \"files\": {}}", + "dest": "cargo/vendor/num_enum_derive-0.7.6", "dest-filename": ".cargo-checksum.json" }, { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/objc2/objc2-0.6.3.crate", - "sha256": "b7c2599ce0ec54857b29ce62166b0ed9b4f6f1a70ccc9a71165b6154caca8c05", - "dest": "cargo/vendor/objc2-0.6.3" + "url": "https://static.crates.io/crates/objc2/objc2-0.6.4.crate", + "sha256": "3a12a8ed07aefc768292f076dc3ac8c48f3781c8f2d5851dd3d98950e8c5a89f", + "dest": "cargo/vendor/objc2-0.6.4" }, { "type": "inline", - "contents": "{\"package\": \"b7c2599ce0ec54857b29ce62166b0ed9b4f6f1a70ccc9a71165b6154caca8c05\", \"files\": {}}", - "dest": "cargo/vendor/objc2-0.6.3", + "contents": "{\"package\": \"3a12a8ed07aefc768292f076dc3ac8c48f3781c8f2d5851dd3d98950e8c5a89f\", \"files\": {}}", + "dest": "cargo/vendor/objc2-0.6.4", "dest-filename": ".cargo-checksum.json" }, { @@ -2872,19 +2989,6 @@ "dest": "cargo/vendor/objc2-core-text-0.3.2", "dest-filename": ".cargo-checksum.json" }, - { - "type": "archive", - "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/objc2-core-video/objc2-core-video-0.3.2.crate", - "sha256": "d425caf1df73233f29fd8a5c3e5edbc30d2d4307870f802d18f00d83dc5141a6", - "dest": "cargo/vendor/objc2-core-video-0.3.2" - }, - { - "type": "inline", - "contents": "{\"package\": \"d425caf1df73233f29fd8a5c3e5edbc30d2d4307870f802d18f00d83dc5141a6\", \"files\": {}}", - "dest": "cargo/vendor/objc2-core-video-0.3.2", - "dest-filename": ".cargo-checksum.json" - }, { "type": "archive", "archive-type": "tar-gzip", @@ -2937,19 +3041,6 @@ "dest": "cargo/vendor/objc2-io-surface-0.3.2", "dest-filename": ".cargo-checksum.json" }, - { - "type": "archive", - "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/objc2-javascript-core/objc2-javascript-core-0.3.2.crate", - "sha256": "2a1e6550c4caed348956ce3370c9ffeca70bb1dbed4fa96112e7c6170e074586", - "dest": "cargo/vendor/objc2-javascript-core-0.3.2" - }, - { - "type": "inline", - "contents": "{\"package\": \"2a1e6550c4caed348956ce3370c9ffeca70bb1dbed4fa96112e7c6170e074586\", \"files\": {}}", - "dest": "cargo/vendor/objc2-javascript-core-0.3.2", - "dest-filename": ".cargo-checksum.json" - }, { "type": "archive", "archive-type": "tar-gzip", @@ -2976,19 +3067,6 @@ "dest": "cargo/vendor/objc2-quartz-core-0.3.2", "dest-filename": ".cargo-checksum.json" }, - { - "type": "archive", - "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/objc2-security/objc2-security-0.3.2.crate", - "sha256": "709fe137109bd1e8b5a99390f77a7d8b2961dafc1a1c5db8f2e60329ad6d895a", - "dest": "cargo/vendor/objc2-security-0.3.2" - }, - { - "type": "inline", - "contents": "{\"package\": \"709fe137109bd1e8b5a99390f77a7d8b2961dafc1a1c5db8f2e60329ad6d895a\", \"files\": {}}", - "dest": "cargo/vendor/objc2-security-0.3.2", - "dest-filename": ".cargo-checksum.json" - }, { "type": "archive", "archive-type": "tar-gzip", @@ -3031,14 +3109,14 @@ { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/once_cell/once_cell-1.21.3.crate", - "sha256": "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d", - "dest": "cargo/vendor/once_cell-1.21.3" + "url": "https://static.crates.io/crates/once_cell/once_cell-1.21.4.crate", + "sha256": "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50", + "dest": "cargo/vendor/once_cell-1.21.4" }, { "type": "inline", - "contents": "{\"package\": \"42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d\", \"files\": {}}", - "dest": "cargo/vendor/once_cell-1.21.3", + "contents": "{\"package\": \"9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50\", \"files\": {}}", + "dest": "cargo/vendor/once_cell-1.21.4", "dest-filename": ".cargo-checksum.json" }, { @@ -3236,6 +3314,19 @@ "dest": "cargo/vendor/phf-0.11.3", "dest-filename": ".cargo-checksum.json" }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/phf/phf-0.13.1.crate", + "sha256": "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf", + "dest": "cargo/vendor/phf-0.13.1" + }, + { + "type": "inline", + "contents": "{\"package\": \"c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf\", \"files\": {}}", + "dest": "cargo/vendor/phf-0.13.1", + "dest-filename": ".cargo-checksum.json" + }, { "type": "archive", "archive-type": "tar-gzip", @@ -3262,6 +3353,19 @@ "dest": "cargo/vendor/phf_codegen-0.11.3", "dest-filename": ".cargo-checksum.json" }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/phf_codegen/phf_codegen-0.13.1.crate", + "sha256": "49aa7f9d80421bca176ca8dbfebe668cc7a2684708594ec9f3c0db0805d5d6e1", + "dest": "cargo/vendor/phf_codegen-0.13.1" + }, + { + "type": "inline", + "contents": "{\"package\": \"49aa7f9d80421bca176ca8dbfebe668cc7a2684708594ec9f3c0db0805d5d6e1\", \"files\": {}}", + "dest": "cargo/vendor/phf_codegen-0.13.1", + "dest-filename": ".cargo-checksum.json" + }, { "type": "archive", "archive-type": "tar-gzip", @@ -3301,6 +3405,19 @@ "dest": "cargo/vendor/phf_generator-0.11.3", "dest-filename": ".cargo-checksum.json" }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/phf_generator/phf_generator-0.13.1.crate", + "sha256": "135ace3a761e564ec88c03a77317a7c6b80bb7f7135ef2544dbe054243b89737", + "dest": "cargo/vendor/phf_generator-0.13.1" + }, + { + "type": "inline", + "contents": "{\"package\": \"135ace3a761e564ec88c03a77317a7c6b80bb7f7135ef2544dbe054243b89737\", \"files\": {}}", + "dest": "cargo/vendor/phf_generator-0.13.1", + "dest-filename": ".cargo-checksum.json" + }, { "type": "archive", "archive-type": "tar-gzip", @@ -3327,6 +3444,19 @@ "dest": "cargo/vendor/phf_macros-0.11.3", "dest-filename": ".cargo-checksum.json" }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/phf_macros/phf_macros-0.13.1.crate", + "sha256": "812f032b54b1e759ccd5f8b6677695d5268c588701effba24601f6932f8269ef", + "dest": "cargo/vendor/phf_macros-0.13.1" + }, + { + "type": "inline", + "contents": "{\"package\": \"812f032b54b1e759ccd5f8b6677695d5268c588701effba24601f6932f8269ef\", \"files\": {}}", + "dest": "cargo/vendor/phf_macros-0.13.1", + "dest-filename": ".cargo-checksum.json" + }, { "type": "archive", "archive-type": "tar-gzip", @@ -3369,14 +3499,27 @@ { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/pin-project-lite/pin-project-lite-0.2.16.crate", - "sha256": "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b", - "dest": "cargo/vendor/pin-project-lite-0.2.16" + "url": "https://static.crates.io/crates/phf_shared/phf_shared-0.13.1.crate", + "sha256": "e57fef6bc5981e38c2ce2d63bfa546861309f875b8a75f092d1d54ae2d64f266", + "dest": "cargo/vendor/phf_shared-0.13.1" }, { "type": "inline", - "contents": "{\"package\": \"3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b\", \"files\": {}}", - "dest": "cargo/vendor/pin-project-lite-0.2.16", + "contents": "{\"package\": \"e57fef6bc5981e38c2ce2d63bfa546861309f875b8a75f092d1d54ae2d64f266\", \"files\": {}}", + "dest": "cargo/vendor/phf_shared-0.13.1", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/pin-project-lite/pin-project-lite-0.2.17.crate", + "sha256": "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd", + "dest": "cargo/vendor/pin-project-lite-0.2.17" + }, + { + "type": "inline", + "contents": "{\"package\": \"a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd\", \"files\": {}}", + "dest": "cargo/vendor/pin-project-lite-0.2.17", "dest-filename": ".cargo-checksum.json" }, { @@ -3405,6 +3548,19 @@ "dest": "cargo/vendor/pkg-config-0.3.32", "dest-filename": ".cargo-checksum.json" }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/plain/plain-0.2.3.crate", + "sha256": "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6", + "dest": "cargo/vendor/plain-0.2.3" + }, + { + "type": "inline", + "contents": "{\"package\": \"b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6\", \"files\": {}}", + "dest": "cargo/vendor/plain-0.2.3", + "dest-filename": ".cargo-checksum.json" + }, { "type": "archive", "archive-type": "tar-gzip", @@ -3525,14 +3681,14 @@ { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/proc-macro-crate/proc-macro-crate-3.4.0.crate", - "sha256": "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983", - "dest": "cargo/vendor/proc-macro-crate-3.4.0" + "url": "https://static.crates.io/crates/proc-macro-crate/proc-macro-crate-3.5.0.crate", + "sha256": "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f", + "dest": "cargo/vendor/proc-macro-crate-3.5.0" }, { "type": "inline", - "contents": "{\"package\": \"219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983\", \"files\": {}}", - "dest": "cargo/vendor/proc-macro-crate-3.4.0", + "contents": "{\"package\": \"e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f\", \"files\": {}}", + "dest": "cargo/vendor/proc-macro-crate-3.5.0", "dest-filename": ".cargo-checksum.json" }, { @@ -3668,14 +3824,14 @@ { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/quote/quote-1.0.44.crate", - "sha256": "21b2ebcf727b7760c461f091f9f0f539b77b8e87f2fd88131e7f1b433b3cece4", - "dest": "cargo/vendor/quote-1.0.44" + "url": "https://static.crates.io/crates/quote/quote-1.0.45.crate", + "sha256": "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924", + "dest": "cargo/vendor/quote-1.0.45" }, { "type": "inline", - "contents": "{\"package\": \"21b2ebcf727b7760c461f091f9f0f539b77b8e87f2fd88131e7f1b433b3cece4\", \"files\": {}}", - "dest": "cargo/vendor/quote-1.0.44", + "contents": "{\"package\": \"41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924\", \"files\": {}}", + "dest": "cargo/vendor/quote-1.0.45", "dest-filename": ".cargo-checksum.json" }, { @@ -3691,6 +3847,19 @@ "dest": "cargo/vendor/r-efi-5.3.0", "dest-filename": ".cargo-checksum.json" }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/r-efi/r-efi-6.0.0.crate", + "sha256": "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf", + "dest": "cargo/vendor/r-efi-6.0.0" + }, + { + "type": "inline", + "contents": "{\"package\": \"f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf\", \"files\": {}}", + "dest": "cargo/vendor/r-efi-6.0.0", + "dest-filename": ".cargo-checksum.json" + }, { "type": "archive", "archive-type": "tar-gzip", @@ -3980,14 +4149,14 @@ { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/regex-syntax/regex-syntax-0.8.9.crate", - "sha256": "a96887878f22d7bad8a3b6dc5b7440e0ada9a245242924394987b21cf2210a4c", - "dest": "cargo/vendor/regex-syntax-0.8.9" + "url": "https://static.crates.io/crates/regex-syntax/regex-syntax-0.8.10.crate", + "sha256": "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a", + "dest": "cargo/vendor/regex-syntax-0.8.10" }, { "type": "inline", - "contents": "{\"package\": \"a96887878f22d7bad8a3b6dc5b7440e0ada9a245242924394987b21cf2210a4c\", \"files\": {}}", - "dest": "cargo/vendor/regex-syntax-0.8.9", + "contents": "{\"package\": \"dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a\", \"files\": {}}", + "dest": "cargo/vendor/regex-syntax-0.8.10", "dest-filename": ".cargo-checksum.json" }, { @@ -4302,6 +4471,19 @@ "dest": "cargo/vendor/selectors-0.24.0", "dest-filename": ".cargo-checksum.json" }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/selectors/selectors-0.36.1.crate", + "sha256": "c5d9c0c92a92d33f08817311cf3f2c29a3538a8240e94a6a3c622ce652d7e00c", + "dest": "cargo/vendor/selectors-0.36.1" + }, + { + "type": "inline", + "contents": "{\"package\": \"c5d9c0c92a92d33f08817311cf3f2c29a3538a8240e94a6a3c622ce652d7e00c\", \"files\": {}}", + "dest": "cargo/vendor/selectors-0.36.1", + "dest-filename": ".cargo-checksum.json" + }, { "type": "archive", "archive-type": "tar-gzip", @@ -4422,14 +4604,14 @@ { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/serde_spanned/serde_spanned-1.0.4.crate", - "sha256": "f8bbf91e5a4d6315eee45e704372590b30e260ee83af6639d64557f51b067776", - "dest": "cargo/vendor/serde_spanned-1.0.4" + "url": "https://static.crates.io/crates/serde_spanned/serde_spanned-1.1.0.crate", + "sha256": "876ac351060d4f882bb1032b6369eb0aef79ad9df1ea8bc404874d8cc3d0cd98", + "dest": "cargo/vendor/serde_spanned-1.1.0" }, { "type": "inline", - "contents": "{\"package\": \"f8bbf91e5a4d6315eee45e704372590b30e260ee83af6639d64557f51b067776\", \"files\": {}}", - "dest": "cargo/vendor/serde_spanned-1.0.4", + "contents": "{\"package\": \"876ac351060d4f882bb1032b6369eb0aef79ad9df1ea8bc404874d8cc3d0cd98\", \"files\": {}}", + "dest": "cargo/vendor/serde_spanned-1.1.0", "dest-filename": ".cargo-checksum.json" }, { @@ -4448,27 +4630,27 @@ { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/serde_with/serde_with-3.16.1.crate", - "sha256": "4fa237f2807440d238e0364a218270b98f767a00d3dada77b1c53ae88940e2e7", - "dest": "cargo/vendor/serde_with-3.16.1" + "url": "https://static.crates.io/crates/serde_with/serde_with-3.18.0.crate", + "sha256": "dd5414fad8e6907dbdd5bc441a50ae8d6e26151a03b1de04d89a5576de61d01f", + "dest": "cargo/vendor/serde_with-3.18.0" }, { "type": "inline", - "contents": "{\"package\": \"4fa237f2807440d238e0364a218270b98f767a00d3dada77b1c53ae88940e2e7\", \"files\": {}}", - "dest": "cargo/vendor/serde_with-3.16.1", + "contents": "{\"package\": \"dd5414fad8e6907dbdd5bc441a50ae8d6e26151a03b1de04d89a5576de61d01f\", \"files\": {}}", + "dest": "cargo/vendor/serde_with-3.18.0", "dest-filename": ".cargo-checksum.json" }, { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/serde_with_macros/serde_with_macros-3.16.1.crate", - "sha256": "52a8e3ca0ca629121f70ab50f95249e5a6f925cc0f6ffe8256c45b728875706c", - "dest": "cargo/vendor/serde_with_macros-3.16.1" + "url": "https://static.crates.io/crates/serde_with_macros/serde_with_macros-3.18.0.crate", + "sha256": "d3db8978e608f1fe7357e211969fd9abdcae80bac1ba7a3369bb7eb6b404eb65", + "dest": "cargo/vendor/serde_with_macros-3.18.0" }, { "type": "inline", - "contents": "{\"package\": \"52a8e3ca0ca629121f70ab50f95249e5a6f925cc0f6ffe8256c45b728875706c\", \"files\": {}}", - "dest": "cargo/vendor/serde_with_macros-3.16.1", + "contents": "{\"package\": \"d3db8978e608f1fe7357e211969fd9abdcae80bac1ba7a3369bb7eb6b404eb65\", \"files\": {}}", + "dest": "cargo/vendor/serde_with_macros-3.18.0", "dest-filename": ".cargo-checksum.json" }, { @@ -4510,6 +4692,19 @@ "dest": "cargo/vendor/servo_arc-0.2.0", "dest-filename": ".cargo-checksum.json" }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/servo_arc/servo_arc-0.4.3.crate", + "sha256": "170fb83ab34de17dc69aa7c67482b22218ddb85da56546f9bd6b929e32a05930", + "dest": "cargo/vendor/servo_arc-0.4.3" + }, + { + "type": "inline", + "contents": "{\"package\": \"170fb83ab34de17dc69aa7c67482b22218ddb85da56546f9bd6b929e32a05930\", \"files\": {}}", + "dest": "cargo/vendor/servo_arc-0.4.3", + "dest-filename": ".cargo-checksum.json" + }, { "type": "archive", "archive-type": "tar-gzip", @@ -4591,14 +4786,14 @@ { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/simd-adler32/simd-adler32-0.3.8.crate", - "sha256": "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2", - "dest": "cargo/vendor/simd-adler32-0.3.8" + "url": "https://static.crates.io/crates/simd-adler32/simd-adler32-0.3.9.crate", + "sha256": "703d5c7ef118737c72f1af64ad2f6f8c5e1921f818cdcb97b8fe6fc69bf66214", + "dest": "cargo/vendor/simd-adler32-0.3.9" }, { "type": "inline", - "contents": "{\"package\": \"e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2\", \"files\": {}}", - "dest": "cargo/vendor/simd-adler32-0.3.8", + "contents": "{\"package\": \"703d5c7ef118737c72f1af64ad2f6f8c5e1921f818cdcb97b8fe6fc69bf66214\", \"files\": {}}", + "dest": "cargo/vendor/simd-adler32-0.3.9", "dest-filename": ".cargo-checksum.json" }, { @@ -4656,14 +4851,14 @@ { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/socket2/socket2-0.6.2.crate", - "sha256": "86f4aa3ad99f2088c990dfa82d367e19cb29268ed67c574d10d0a4bfe71f07e0", - "dest": "cargo/vendor/socket2-0.6.2" + "url": "https://static.crates.io/crates/socket2/socket2-0.6.3.crate", + "sha256": "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e", + "dest": "cargo/vendor/socket2-0.6.3" }, { "type": "inline", - "contents": "{\"package\": \"86f4aa3ad99f2088c990dfa82d367e19cb29268ed67c574d10d0a4bfe71f07e0\", \"files\": {}}", - "dest": "cargo/vendor/socket2-0.6.2", + "contents": "{\"package\": \"3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e\", \"files\": {}}", + "dest": "cargo/vendor/socket2-0.6.3", "dest-filename": ".cargo-checksum.json" }, { @@ -4731,6 +4926,19 @@ "dest": "cargo/vendor/string_cache-0.8.9", "dest-filename": ".cargo-checksum.json" }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/string_cache/string_cache-0.9.0.crate", + "sha256": "a18596f8c785a729f2819c0f6a7eae6ebeebdfffbfe4214ae6b087f690e31901", + "dest": "cargo/vendor/string_cache-0.9.0" + }, + { + "type": "inline", + "contents": "{\"package\": \"a18596f8c785a729f2819c0f6a7eae6ebeebdfffbfe4214ae6b087f690e31901\", \"files\": {}}", + "dest": "cargo/vendor/string_cache-0.9.0", + "dest-filename": ".cargo-checksum.json" + }, { "type": "archive", "archive-type": "tar-gzip", @@ -4744,6 +4952,19 @@ "dest": "cargo/vendor/string_cache_codegen-0.5.4", "dest-filename": ".cargo-checksum.json" }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/string_cache_codegen/string_cache_codegen-0.6.1.crate", + "sha256": "585635e46db231059f76c5849798146164652513eb9e8ab2685939dd90f29b69", + "dest": "cargo/vendor/string_cache_codegen-0.6.1" + }, + { + "type": "inline", + "contents": "{\"package\": \"585635e46db231059f76c5849798146164652513eb9e8ab2685939dd90f29b69\", \"files\": {}}", + "dest": "cargo/vendor/string_cache_codegen-0.6.1", + "dest-filename": ".cargo-checksum.json" + }, { "type": "archive", "archive-type": "tar-gzip", @@ -4903,14 +5124,14 @@ { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/tao/tao-0.34.5.crate", - "sha256": "f3a753bdc39c07b192151523a3f77cd0394aa75413802c883a0f6f6a0e5ee2e7", - "dest": "cargo/vendor/tao-0.34.5" + "url": "https://static.crates.io/crates/tao/tao-0.34.8.crate", + "sha256": "9103edf55f2da3c82aea4c7fab7c4241032bfeea0e71fa557d98e00e7ce7cc20", + "dest": "cargo/vendor/tao-0.34.8" }, { "type": "inline", - "contents": "{\"package\": \"f3a753bdc39c07b192151523a3f77cd0394aa75413802c883a0f6f6a0e5ee2e7\", \"files\": {}}", - "dest": "cargo/vendor/tao-0.34.5", + "contents": "{\"package\": \"9103edf55f2da3c82aea4c7fab7c4241032bfeea0e71fa557d98e00e7ce7cc20\", \"files\": {}}", + "dest": "cargo/vendor/tao-0.34.8", "dest-filename": ".cargo-checksum.json" }, { @@ -4955,66 +5176,66 @@ { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/tauri/tauri-2.10.2.crate", - "sha256": "463ae8677aa6d0f063a900b9c41ecd4ac2b7ca82f0b058cc4491540e55b20129", - "dest": "cargo/vendor/tauri-2.10.2" + "url": "https://static.crates.io/crates/tauri/tauri-2.10.3.crate", + "sha256": "da77cc00fb9028caf5b5d4650f75e31f1ef3693459dfca7f7e506d1ecef0ba2d", + "dest": "cargo/vendor/tauri-2.10.3" }, { "type": "inline", - "contents": "{\"package\": \"463ae8677aa6d0f063a900b9c41ecd4ac2b7ca82f0b058cc4491540e55b20129\", \"files\": {}}", - "dest": "cargo/vendor/tauri-2.10.2", + "contents": "{\"package\": \"da77cc00fb9028caf5b5d4650f75e31f1ef3693459dfca7f7e506d1ecef0ba2d\", \"files\": {}}", + "dest": "cargo/vendor/tauri-2.10.3", "dest-filename": ".cargo-checksum.json" }, { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/tauri-build/tauri-build-2.5.5.crate", - "sha256": "ca7bd893329425df750813e95bd2b643d5369d929438da96d5bbb7cc2c918f74", - "dest": "cargo/vendor/tauri-build-2.5.5" + "url": "https://static.crates.io/crates/tauri-build/tauri-build-2.5.6.crate", + "sha256": "4bbc990d1dbf57a8e1c7fa2327f2a614d8b757805603c1b9ba5c81bade09fd4d", + "dest": "cargo/vendor/tauri-build-2.5.6" }, { "type": "inline", - "contents": "{\"package\": \"ca7bd893329425df750813e95bd2b643d5369d929438da96d5bbb7cc2c918f74\", \"files\": {}}", - "dest": "cargo/vendor/tauri-build-2.5.5", + "contents": "{\"package\": \"4bbc990d1dbf57a8e1c7fa2327f2a614d8b757805603c1b9ba5c81bade09fd4d\", \"files\": {}}", + "dest": "cargo/vendor/tauri-build-2.5.6", "dest-filename": ".cargo-checksum.json" }, { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/tauri-codegen/tauri-codegen-2.5.4.crate", - "sha256": "aac423e5859d9f9ccdd32e3cf6a5866a15bedbf25aa6630bcb2acde9468f6ae3", - "dest": "cargo/vendor/tauri-codegen-2.5.4" + "url": "https://static.crates.io/crates/tauri-codegen/tauri-codegen-2.5.5.crate", + "sha256": "d4a24476afd977c5d5d169f72425868613d82747916dd29e0a357c84c4bd6d29", + "dest": "cargo/vendor/tauri-codegen-2.5.5" }, { "type": "inline", - "contents": "{\"package\": \"aac423e5859d9f9ccdd32e3cf6a5866a15bedbf25aa6630bcb2acde9468f6ae3\", \"files\": {}}", - "dest": "cargo/vendor/tauri-codegen-2.5.4", + "contents": "{\"package\": \"d4a24476afd977c5d5d169f72425868613d82747916dd29e0a357c84c4bd6d29\", \"files\": {}}", + "dest": "cargo/vendor/tauri-codegen-2.5.5", "dest-filename": ".cargo-checksum.json" }, { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/tauri-macros/tauri-macros-2.5.4.crate", - "sha256": "1b6a1bd2861ff0c8766b1d38b32a6a410f6dc6532d4ef534c47cfb2236092f59", - "dest": "cargo/vendor/tauri-macros-2.5.4" + "url": "https://static.crates.io/crates/tauri-macros/tauri-macros-2.5.5.crate", + "sha256": "d39b349a98dadaffebb73f0a40dcd1f23c999211e5a2e744403db384d0c33de7", + "dest": "cargo/vendor/tauri-macros-2.5.5" }, { "type": "inline", - "contents": "{\"package\": \"1b6a1bd2861ff0c8766b1d38b32a6a410f6dc6532d4ef534c47cfb2236092f59\", \"files\": {}}", - "dest": "cargo/vendor/tauri-macros-2.5.4", + "contents": "{\"package\": \"d39b349a98dadaffebb73f0a40dcd1f23c999211e5a2e744403db384d0c33de7\", \"files\": {}}", + "dest": "cargo/vendor/tauri-macros-2.5.5", "dest-filename": ".cargo-checksum.json" }, { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/tauri-plugin/tauri-plugin-2.5.3.crate", - "sha256": "692a77abd8b8773e107a42ec0e05b767b8d2b7ece76ab36c6c3947e34df9f53f", - "dest": "cargo/vendor/tauri-plugin-2.5.3" + "url": "https://static.crates.io/crates/tauri-plugin/tauri-plugin-2.5.4.crate", + "sha256": "ddde7d51c907b940fb573006cdda9a642d6a7c8153657e88f8a5c3c9290cd4aa", + "dest": "cargo/vendor/tauri-plugin-2.5.4" }, { "type": "inline", - "contents": "{\"package\": \"692a77abd8b8773e107a42ec0e05b767b8d2b7ece76ab36c6c3947e34df9f53f\", \"files\": {}}", - "dest": "cargo/vendor/tauri-plugin-2.5.3", + "contents": "{\"package\": \"ddde7d51c907b940fb573006cdda9a642d6a7c8153657e88f8a5c3c9290cd4aa\", \"files\": {}}", + "dest": "cargo/vendor/tauri-plugin-2.5.4", "dest-filename": ".cargo-checksum.json" }, { @@ -5098,40 +5319,40 @@ { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/tauri-runtime/tauri-runtime-2.10.0.crate", - "sha256": "b885ffeac82b00f1f6fd292b6e5aabfa7435d537cef57d11e38a489956535651", - "dest": "cargo/vendor/tauri-runtime-2.10.0" + "url": "https://static.crates.io/crates/tauri-runtime/tauri-runtime-2.10.1.crate", + "sha256": "2826d79a3297ed08cd6ea7f412644ef58e32969504bc4fbd8d7dbeabc4445ea2", + "dest": "cargo/vendor/tauri-runtime-2.10.1" }, { "type": "inline", - "contents": "{\"package\": \"b885ffeac82b00f1f6fd292b6e5aabfa7435d537cef57d11e38a489956535651\", \"files\": {}}", - "dest": "cargo/vendor/tauri-runtime-2.10.0", + "contents": "{\"package\": \"2826d79a3297ed08cd6ea7f412644ef58e32969504bc4fbd8d7dbeabc4445ea2\", \"files\": {}}", + "dest": "cargo/vendor/tauri-runtime-2.10.1", "dest-filename": ".cargo-checksum.json" }, { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/tauri-runtime-wry/tauri-runtime-wry-2.10.0.crate", - "sha256": "5204682391625e867d16584fedc83fc292fb998814c9f7918605c789cd876314", - "dest": "cargo/vendor/tauri-runtime-wry-2.10.0" + "url": "https://static.crates.io/crates/tauri-runtime-wry/tauri-runtime-wry-2.10.1.crate", + "sha256": "e11ea2e6f801d275fdd890d6c9603736012742a1c33b96d0db788c9cdebf7f9e", + "dest": "cargo/vendor/tauri-runtime-wry-2.10.1" }, { "type": "inline", - "contents": "{\"package\": \"5204682391625e867d16584fedc83fc292fb998814c9f7918605c789cd876314\", \"files\": {}}", - "dest": "cargo/vendor/tauri-runtime-wry-2.10.0", + "contents": "{\"package\": \"e11ea2e6f801d275fdd890d6c9603736012742a1c33b96d0db788c9cdebf7f9e\", \"files\": {}}", + "dest": "cargo/vendor/tauri-runtime-wry-2.10.1", "dest-filename": ".cargo-checksum.json" }, { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/tauri-utils/tauri-utils-2.8.2.crate", - "sha256": "fcd169fccdff05eff2c1033210b9b94acd07a47e6fa9a3431cf09cfd4f01c87e", - "dest": "cargo/vendor/tauri-utils-2.8.2" + "url": "https://static.crates.io/crates/tauri-utils/tauri-utils-2.8.3.crate", + "sha256": "219a1f983a2af3653f75b5747f76733b0da7ff03069c7a41901a5eb3ace4557d", + "dest": "cargo/vendor/tauri-utils-2.8.3" }, { "type": "inline", - "contents": "{\"package\": \"fcd169fccdff05eff2c1033210b9b94acd07a47e6fa9a3431cf09cfd4f01c87e\", \"files\": {}}", - "dest": "cargo/vendor/tauri-utils-2.8.2", + "contents": "{\"package\": \"219a1f983a2af3653f75b5747f76733b0da7ff03069c7a41901a5eb3ace4557d\", \"files\": {}}", + "dest": "cargo/vendor/tauri-utils-2.8.3", "dest-filename": ".cargo-checksum.json" }, { @@ -5173,6 +5394,19 @@ "dest": "cargo/vendor/tendril-0.4.3", "dest-filename": ".cargo-checksum.json" }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/tendril/tendril-0.5.0.crate", + "sha256": "c4790fc369d5a530f4b544b094e31388b9b3a37c0f4652ade4505945f5660d24", + "dest": "cargo/vendor/tendril-0.5.0" + }, + { + "type": "inline", + "contents": "{\"package\": \"c4790fc369d5a530f4b544b094e31388b9b3a37c0f4652ade4505945f5660d24\", \"files\": {}}", + "dest": "cargo/vendor/tendril-0.5.0", + "dest-filename": ".cargo-checksum.json" + }, { "type": "archive", "archive-type": "tar-gzip", @@ -5306,14 +5540,14 @@ { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/tokio/tokio-1.49.0.crate", - "sha256": "72a2903cd7736441aac9df9d7688bd0ce48edccaadf181c3b90be801e81d3d86", - "dest": "cargo/vendor/tokio-1.49.0" + "url": "https://static.crates.io/crates/tokio/tokio-1.50.0.crate", + "sha256": "27ad5e34374e03cfffefc301becb44e9dc3c17584f414349ebe29ed26661822d", + "dest": "cargo/vendor/tokio-1.50.0" }, { "type": "inline", - "contents": "{\"package\": \"72a2903cd7736441aac9df9d7688bd0ce48edccaadf181c3b90be801e81d3d86\", \"files\": {}}", - "dest": "cargo/vendor/tokio-1.49.0", + "contents": "{\"package\": \"27ad5e34374e03cfffefc301becb44e9dc3c17584f414349ebe29ed26661822d\", \"files\": {}}", + "dest": "cargo/vendor/tokio-1.50.0", "dest-filename": ".cargo-checksum.json" }, { @@ -5407,6 +5641,19 @@ "dest": "cargo/vendor/toml_datetime-0.7.5+spec-1.1.0", "dest-filename": ".cargo-checksum.json" }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/toml_datetime/toml_datetime-1.1.0+spec-1.1.0.crate", + "sha256": "97251a7c317e03ad83774a8752a7e81fb6067740609f75ea2b585b569a59198f", + "dest": "cargo/vendor/toml_datetime-1.1.0+spec-1.1.0" + }, + { + "type": "inline", + "contents": "{\"package\": \"97251a7c317e03ad83774a8752a7e81fb6067740609f75ea2b585b569a59198f\", \"files\": {}}", + "dest": "cargo/vendor/toml_datetime-1.1.0+spec-1.1.0", + "dest-filename": ".cargo-checksum.json" + }, { "type": "archive", "archive-type": "tar-gzip", @@ -5436,40 +5683,40 @@ { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/toml_edit/toml_edit-0.23.10+spec-1.0.0.crate", - "sha256": "84c8b9f757e028cee9fa244aea147aab2a9ec09d5325a9b01e0a49730c2b5269", - "dest": "cargo/vendor/toml_edit-0.23.10+spec-1.0.0" + "url": "https://static.crates.io/crates/toml_edit/toml_edit-0.25.8+spec-1.1.0.crate", + "sha256": "16bff38f1d86c47f9ff0647e6838d7bb362522bdf44006c7068c2b1e606f1f3c", + "dest": "cargo/vendor/toml_edit-0.25.8+spec-1.1.0" }, { "type": "inline", - "contents": "{\"package\": \"84c8b9f757e028cee9fa244aea147aab2a9ec09d5325a9b01e0a49730c2b5269\", \"files\": {}}", - "dest": "cargo/vendor/toml_edit-0.23.10+spec-1.0.0", + "contents": "{\"package\": \"16bff38f1d86c47f9ff0647e6838d7bb362522bdf44006c7068c2b1e606f1f3c\", \"files\": {}}", + "dest": "cargo/vendor/toml_edit-0.25.8+spec-1.1.0", "dest-filename": ".cargo-checksum.json" }, { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/toml_parser/toml_parser-1.0.9+spec-1.1.0.crate", - "sha256": "702d4415e08923e7e1ef96cd5727c0dfed80b4d2fa25db9647fe5eb6f7c5a4c4", - "dest": "cargo/vendor/toml_parser-1.0.9+spec-1.1.0" + "url": "https://static.crates.io/crates/toml_parser/toml_parser-1.1.0+spec-1.1.0.crate", + "sha256": "2334f11ee363607eb04df9b8fc8a13ca1715a72ba8662a26ac285c98aabb4011", + "dest": "cargo/vendor/toml_parser-1.1.0+spec-1.1.0" }, { "type": "inline", - "contents": "{\"package\": \"702d4415e08923e7e1ef96cd5727c0dfed80b4d2fa25db9647fe5eb6f7c5a4c4\", \"files\": {}}", - "dest": "cargo/vendor/toml_parser-1.0.9+spec-1.1.0", + "contents": "{\"package\": \"2334f11ee363607eb04df9b8fc8a13ca1715a72ba8662a26ac285c98aabb4011\", \"files\": {}}", + "dest": "cargo/vendor/toml_parser-1.1.0+spec-1.1.0", "dest-filename": ".cargo-checksum.json" }, { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/toml_writer/toml_writer-1.0.6+spec-1.1.0.crate", - "sha256": "ab16f14aed21ee8bfd8ec22513f7287cd4a91aa92e44edfe2c17ddd004e92607", - "dest": "cargo/vendor/toml_writer-1.0.6+spec-1.1.0" + "url": "https://static.crates.io/crates/toml_writer/toml_writer-1.1.0+spec-1.1.0.crate", + "sha256": "d282ade6016312faf3e41e57ebbba0c073e4056dab1232ab1cb624199648f8ed", + "dest": "cargo/vendor/toml_writer-1.1.0+spec-1.1.0" }, { "type": "inline", - "contents": "{\"package\": \"ab16f14aed21ee8bfd8ec22513f7287cd4a91aa92e44edfe2c17ddd004e92607\", \"files\": {}}", - "dest": "cargo/vendor/toml_writer-1.0.6+spec-1.1.0", + "contents": "{\"package\": \"d282ade6016312faf3e41e57ebbba0c073e4056dab1232ab1cb624199648f8ed\", \"files\": {}}", + "dest": "cargo/vendor/toml_writer-1.1.0+spec-1.1.0", "dest-filename": ".cargo-checksum.json" }, { @@ -5683,14 +5930,14 @@ { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/unicode-segmentation/unicode-segmentation-1.12.0.crate", - "sha256": "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493", - "dest": "cargo/vendor/unicode-segmentation-1.12.0" + "url": "https://static.crates.io/crates/unicode-segmentation/unicode-segmentation-1.13.2.crate", + "sha256": "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c", + "dest": "cargo/vendor/unicode-segmentation-1.13.2" }, { "type": "inline", - "contents": "{\"package\": \"f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493\", \"files\": {}}", - "dest": "cargo/vendor/unicode-segmentation-1.12.0", + "contents": "{\"package\": \"9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c\", \"files\": {}}", + "dest": "cargo/vendor/unicode-segmentation-1.13.2", "dest-filename": ".cargo-checksum.json" }, { @@ -5774,14 +6021,14 @@ { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/uuid/uuid-1.21.0.crate", - "sha256": "b672338555252d43fd2240c714dc444b8c6fb0a5c5335e65a07bba7742735ddb", - "dest": "cargo/vendor/uuid-1.21.0" + "url": "https://static.crates.io/crates/uuid/uuid-1.23.0.crate", + "sha256": "5ac8b6f42ead25368cf5b098aeb3dc8a1a2c05a3eee8a9a1a68c640edbfc79d9", + "dest": "cargo/vendor/uuid-1.23.0" }, { "type": "inline", - "contents": "{\"package\": \"b672338555252d43fd2240c714dc444b8c6fb0a5c5335e65a07bba7742735ddb\", \"files\": {}}", - "dest": "cargo/vendor/uuid-1.21.0", + "contents": "{\"package\": \"5ac8b6f42ead25368cf5b098aeb3dc8a1a2c05a3eee8a9a1a68c640edbfc79d9\", \"files\": {}}", + "dest": "cargo/vendor/uuid-1.23.0", "dest-filename": ".cargo-checksum.json" }, { @@ -5917,66 +6164,66 @@ { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/wasm-bindgen/wasm-bindgen-0.2.109.crate", - "sha256": "9ff9c7baef35ac3c0e17d8bfc9ad75eb62f85a2f02bccc906699dadb0aa9c622", - "dest": "cargo/vendor/wasm-bindgen-0.2.109" + "url": "https://static.crates.io/crates/wasm-bindgen/wasm-bindgen-0.2.115.crate", + "sha256": "6523d69017b7633e396a89c5efab138161ed5aafcbc8d3e5c5a42ae38f50495a", + "dest": "cargo/vendor/wasm-bindgen-0.2.115" }, { "type": "inline", - "contents": "{\"package\": \"9ff9c7baef35ac3c0e17d8bfc9ad75eb62f85a2f02bccc906699dadb0aa9c622\", \"files\": {}}", - "dest": "cargo/vendor/wasm-bindgen-0.2.109", + "contents": "{\"package\": \"6523d69017b7633e396a89c5efab138161ed5aafcbc8d3e5c5a42ae38f50495a\", \"files\": {}}", + "dest": "cargo/vendor/wasm-bindgen-0.2.115", "dest-filename": ".cargo-checksum.json" }, { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/wasm-bindgen-futures/wasm-bindgen-futures-0.4.59.crate", - "sha256": "d24699cd39db9966cf6e2ef10d2f72779c961ad905911f395ea201c3ec9f545d", - "dest": "cargo/vendor/wasm-bindgen-futures-0.4.59" + "url": "https://static.crates.io/crates/wasm-bindgen-futures/wasm-bindgen-futures-0.4.65.crate", + "sha256": "2d1faf851e778dfa54db7cd438b70758eba9755cb47403f3496edd7c8fc212f0", + "dest": "cargo/vendor/wasm-bindgen-futures-0.4.65" }, { "type": "inline", - "contents": "{\"package\": \"d24699cd39db9966cf6e2ef10d2f72779c961ad905911f395ea201c3ec9f545d\", \"files\": {}}", - "dest": "cargo/vendor/wasm-bindgen-futures-0.4.59", + "contents": "{\"package\": \"2d1faf851e778dfa54db7cd438b70758eba9755cb47403f3496edd7c8fc212f0\", \"files\": {}}", + "dest": "cargo/vendor/wasm-bindgen-futures-0.4.65", "dest-filename": ".cargo-checksum.json" }, { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/wasm-bindgen-macro/wasm-bindgen-macro-0.2.109.crate", - "sha256": "39455e84ad887a0bbc93c116d72403f1bb0a39e37dd6f235a43e2128a0c7f1fd", - "dest": "cargo/vendor/wasm-bindgen-macro-0.2.109" + "url": "https://static.crates.io/crates/wasm-bindgen-macro/wasm-bindgen-macro-0.2.115.crate", + "sha256": "4e3a6c758eb2f701ed3d052ff5737f5bfe6614326ea7f3bbac7156192dc32e67", + "dest": "cargo/vendor/wasm-bindgen-macro-0.2.115" }, { "type": "inline", - "contents": "{\"package\": \"39455e84ad887a0bbc93c116d72403f1bb0a39e37dd6f235a43e2128a0c7f1fd\", \"files\": {}}", - "dest": "cargo/vendor/wasm-bindgen-macro-0.2.109", + "contents": "{\"package\": \"4e3a6c758eb2f701ed3d052ff5737f5bfe6614326ea7f3bbac7156192dc32e67\", \"files\": {}}", + "dest": "cargo/vendor/wasm-bindgen-macro-0.2.115", "dest-filename": ".cargo-checksum.json" }, { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/wasm-bindgen-macro-support/wasm-bindgen-macro-support-0.2.109.crate", - "sha256": "dff4761f60b0b51fd13fec8764167b7bbcc34498ce3e52805fe1db6f2d56b6d6", - "dest": "cargo/vendor/wasm-bindgen-macro-support-0.2.109" + "url": "https://static.crates.io/crates/wasm-bindgen-macro-support/wasm-bindgen-macro-support-0.2.115.crate", + "sha256": "921de2737904886b52bcbb237301552d05969a6f9c40d261eb0533c8b055fedf", + "dest": "cargo/vendor/wasm-bindgen-macro-support-0.2.115" }, { "type": "inline", - "contents": "{\"package\": \"dff4761f60b0b51fd13fec8764167b7bbcc34498ce3e52805fe1db6f2d56b6d6\", \"files\": {}}", - "dest": "cargo/vendor/wasm-bindgen-macro-support-0.2.109", + "contents": "{\"package\": \"921de2737904886b52bcbb237301552d05969a6f9c40d261eb0533c8b055fedf\", \"files\": {}}", + "dest": "cargo/vendor/wasm-bindgen-macro-support-0.2.115", "dest-filename": ".cargo-checksum.json" }, { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/wasm-bindgen-shared/wasm-bindgen-shared-0.2.109.crate", - "sha256": "bc6a171c53d98021a93a474c4a4579d76ba97f9517d871bc12e27640f218b6dd", - "dest": "cargo/vendor/wasm-bindgen-shared-0.2.109" + "url": "https://static.crates.io/crates/wasm-bindgen-shared/wasm-bindgen-shared-0.2.115.crate", + "sha256": "a93e946af942b58934c604527337bad9ae33ba1d5c6900bbb41c2c07c2364a93", + "dest": "cargo/vendor/wasm-bindgen-shared-0.2.115" }, { "type": "inline", - "contents": "{\"package\": \"bc6a171c53d98021a93a474c4a4579d76ba97f9517d871bc12e27640f218b6dd\", \"files\": {}}", - "dest": "cargo/vendor/wasm-bindgen-shared-0.2.109", + "contents": "{\"package\": \"a93e946af942b58934c604527337bad9ae33ba1d5c6900bbb41c2c07c2364a93\", \"files\": {}}", + "dest": "cargo/vendor/wasm-bindgen-shared-0.2.115", "dest-filename": ".cargo-checksum.json" }, { @@ -6034,14 +6281,14 @@ { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/web-sys/web-sys-0.3.86.crate", - "sha256": "668fa5d00434e890a452ab060d24e3904d1be93f7bb01b70e5603baa2b8ab23b", - "dest": "cargo/vendor/web-sys-0.3.86" + "url": "https://static.crates.io/crates/web-sys/web-sys-0.3.92.crate", + "sha256": "84cde8507f4d7cfcb1185b8cb5890c494ffea65edbe1ba82cfd63661c805ed94", + "dest": "cargo/vendor/web-sys-0.3.92" }, { "type": "inline", - "contents": "{\"package\": \"668fa5d00434e890a452ab060d24e3904d1be93f7bb01b70e5603baa2b8ab23b\", \"files\": {}}", - "dest": "cargo/vendor/web-sys-0.3.86", + "contents": "{\"package\": \"84cde8507f4d7cfcb1185b8cb5890c494ffea65edbe1ba82cfd63661c805ed94\", \"files\": {}}", + "dest": "cargo/vendor/web-sys-0.3.92", "dest-filename": ".cargo-checksum.json" }, { @@ -6057,6 +6304,19 @@ "dest": "cargo/vendor/web-time-1.1.0", "dest-filename": ".cargo-checksum.json" }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/web_atoms/web_atoms-0.2.3.crate", + "sha256": "57a9779e9f04d2ac1ce317aee707aa2f6b773afba7b931222bff6983843b1576", + "dest": "cargo/vendor/web_atoms-0.2.3" + }, + { + "type": "inline", + "contents": "{\"package\": \"57a9779e9f04d2ac1ce317aee707aa2f6b773afba7b931222bff6983843b1576\", \"files\": {}}", + "dest": "cargo/vendor/web_atoms-0.2.3", + "dest-filename": ".cargo-checksum.json" + }, { "type": "archive", "archive-type": "tar-gzip", @@ -7035,14 +7295,27 @@ { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/winnow/winnow-0.7.14.crate", - "sha256": "5a5364e9d77fcdeeaa6062ced926ee3381faa2ee02d3eb83a5c27a8825540829", - "dest": "cargo/vendor/winnow-0.7.14" + "url": "https://static.crates.io/crates/winnow/winnow-0.7.15.crate", + "sha256": "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945", + "dest": "cargo/vendor/winnow-0.7.15" }, { "type": "inline", - "contents": "{\"package\": \"5a5364e9d77fcdeeaa6062ced926ee3381faa2ee02d3eb83a5c27a8825540829\", \"files\": {}}", - "dest": "cargo/vendor/winnow-0.7.14", + "contents": "{\"package\": \"df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945\", \"files\": {}}", + "dest": "cargo/vendor/winnow-0.7.15", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/winnow/winnow-1.0.0.crate", + "sha256": "a90e88e4667264a994d34e6d1ab2d26d398dcdca8b7f52bec8668957517fc7d8", + "dest": "cargo/vendor/winnow-1.0.0" + }, + { + "type": "inline", + "contents": "{\"package\": \"a90e88e4667264a994d34e6d1ab2d26d398dcdca8b7f52bec8668957517fc7d8\", \"files\": {}}", + "dest": "cargo/vendor/winnow-1.0.0", "dest-filename": ".cargo-checksum.json" }, { @@ -7152,14 +7425,14 @@ { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/wry/wry-0.54.2.crate", - "sha256": "bb26159b420aa77684589a744ae9a9461a95395b848764ad12290a14d960a11a", - "dest": "cargo/vendor/wry-0.54.2" + "url": "https://static.crates.io/crates/wry/wry-0.54.4.crate", + "sha256": "e5a8135d8676225e5744de000d4dff5a082501bf7db6a1c1495034f8c314edbc", + "dest": "cargo/vendor/wry-0.54.4" }, { "type": "inline", - "contents": "{\"package\": \"bb26159b420aa77684589a744ae9a9461a95395b848764ad12290a14d960a11a\", \"files\": {}}", - "dest": "cargo/vendor/wry-0.54.2", + "contents": "{\"package\": \"e5a8135d8676225e5744de000d4dff5a082501bf7db6a1c1495034f8c314edbc\", \"files\": {}}", + "dest": "cargo/vendor/wry-0.54.4", "dest-filename": ".cargo-checksum.json" }, { @@ -7230,27 +7503,27 @@ { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/zerocopy/zerocopy-0.8.39.crate", - "sha256": "db6d35d663eadb6c932438e763b262fe1a70987f9ae936e60158176d710cae4a", - "dest": "cargo/vendor/zerocopy-0.8.39" + "url": "https://static.crates.io/crates/zerocopy/zerocopy-0.8.47.crate", + "sha256": "efbb2a062be311f2ba113ce66f697a4dc589f85e78a4aea276200804cea0ed87", + "dest": "cargo/vendor/zerocopy-0.8.47" }, { "type": "inline", - "contents": "{\"package\": \"db6d35d663eadb6c932438e763b262fe1a70987f9ae936e60158176d710cae4a\", \"files\": {}}", - "dest": "cargo/vendor/zerocopy-0.8.39", + "contents": "{\"package\": \"efbb2a062be311f2ba113ce66f697a4dc589f85e78a4aea276200804cea0ed87\", \"files\": {}}", + "dest": "cargo/vendor/zerocopy-0.8.47", "dest-filename": ".cargo-checksum.json" }, { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/zerocopy-derive/zerocopy-derive-0.8.39.crate", - "sha256": "4122cd3169e94605190e77839c9a40d40ed048d305bfdc146e7df40ab0f3e517", - "dest": "cargo/vendor/zerocopy-derive-0.8.39" + "url": "https://static.crates.io/crates/zerocopy-derive/zerocopy-derive-0.8.47.crate", + "sha256": "0e8bc7269b54418e7aeeef514aa68f8690b8c0489a06b0136e5f57c4c5ccab89", + "dest": "cargo/vendor/zerocopy-derive-0.8.47" }, { "type": "inline", - "contents": "{\"package\": \"4122cd3169e94605190e77839c9a40d40ed048d305bfdc146e7df40ab0f3e517\", \"files\": {}}", - "dest": "cargo/vendor/zerocopy-derive-0.8.39", + "contents": "{\"package\": \"0e8bc7269b54418e7aeeef514aa68f8690b8c0489a06b0136e5f57c4c5ccab89\", \"files\": {}}", + "dest": "cargo/vendor/zerocopy-derive-0.8.47", "dest-filename": ".cargo-checksum.json" }, { diff --git a/src/components/pages/Discover.svelte b/src/components/pages/Discover.svelte index 78a2040..77b4c68 100644 --- a/src/components/pages/Discover.svelte +++ b/src/components/pages/Discover.svelte @@ -2,11 +2,11 @@ import { onDestroy } from "svelte"; import { BookmarkSimple, FolderSimplePlus, Folder, Sparkle, ArrowsClockwise } from "phosphor-svelte"; import { gql, thumbUrl } from "../../lib/client"; - import { GET_SOURCES, FETCH_SOURCE_MANGA, UPDATE_MANGA } from "../../lib/queries"; + import { GET_SOURCES, FETCH_SOURCE_MANGA, UPDATE_MANGA, GET_CATEGORIES, CREATE_CATEGORY, UPDATE_MANGA_CATEGORIES } from "../../lib/queries"; import { cache, CACHE_KEYS } from "../../lib/cache"; import { dedupeSources, dedupeMangaByTitle, dedupeMangaById } from "../../lib/util"; - import { store, addFolder, assignMangaToFolder, setPreviewManga, clearDiscoverCache } from "../../store/state.svelte"; - import type { Manga, Source } from "../../lib/types"; + import { store, setPreviewManga, clearDiscoverCache } from "../../store/state.svelte"; + import type { Manga, Source, Category } from "../../lib/types"; import ContextMenu from "../shared/ContextMenu.svelte"; import type { MenuEntry } from "../shared/ContextMenu.svelte"; import SourceBrowse from "../shared/SourceBrowse.svelte"; @@ -48,6 +48,8 @@ let activeCtrl: AbortController | null = null; let ctx: { x: number; y: number; manga: Manga } | null = $state(null); + let categories: Category[] = $state([]); + let catsLoaded = false; const isLoading = $derived(genreLoading || refreshing || (currentGenre === "All" && loadingLib)); const visibleGrid = $derived(genreResults.get(currentGenre) ?? []); @@ -253,6 +255,12 @@ function openCtx(e: MouseEvent, m: Manga) { e.preventDefault(); e.stopPropagation(); ctx = { x: e.clientX, y: e.clientY, manga: m }; + if (!catsLoaded) { + catsLoaded = true; + gql<{ categories: { nodes: Category[] } }>(GET_CATEGORIES) + .then(d => { categories = d.categories.nodes.filter(c => c.id !== 0); }) + .catch(console.error); + } } function buildCtxItems(m: Manga): MenuEntry[] { @@ -266,20 +274,26 @@ store.discoverLibraryIds = new Set([...store.discoverLibraryIds, m.id]); }).catch(console.error), }, - ...(store.settings.folders.length > 0 ? [ + ...(categories.length > 0 ? [ { separator: true } as MenuEntry, - ...store.settings.folders.map(f => ({ - label: f.mangaIds.includes(m.id) ? `✓ ${f.name}` : f.name, + ...categories.map(cat => ({ + label: (cat.mangas?.nodes ?? []).some(x => x.id === m.id) ? `✓ ${cat.name}` : cat.name, icon: Folder, - onClick: () => assignMangaToFolder(f.id, m.id), + onClick: () => gql(UPDATE_MANGA_CATEGORIES, { mangaId: m.id, addTo: [cat.id], removeFrom: [] }).catch(console.error), })), ] : []), { separator: true }, { label: "New folder & add", icon: FolderSimplePlus, - onClick: () => { + onClick: async () => { const n = prompt("Folder name:"); - if (n?.trim()) { const id = addFolder(n.trim()); assignMangaToFolder(id, m.id); } + if (!n?.trim()) return; + const res = await gql<{ createCategory: { category: Category } }>(CREATE_CATEGORY, { name: n.trim() }).catch(console.error); + if (res) { + const cat = res.createCategory.category; + categories = [...categories, cat]; + await gql(UPDATE_MANGA_CATEGORIES, { mangaId: m.id, addTo: [cat.id], removeFrom: [] }).catch(console.error); + } }, }, ]; diff --git a/src/components/pages/GenreDrillPage.svelte b/src/components/pages/GenreDrillPage.svelte index e6301d0..bb10caa 100644 --- a/src/components/pages/GenreDrillPage.svelte +++ b/src/components/pages/GenreDrillPage.svelte @@ -2,11 +2,11 @@ import { ArrowLeft, BookmarkSimple, FolderSimplePlus, Folder, CircleNotch } from "phosphor-svelte"; import { untrack } from "svelte"; import { gql, thumbUrl } from "../../lib/client"; - import { GET_ALL_MANGA, GET_LIBRARY, GET_SOURCES, FETCH_SOURCE_MANGA, UPDATE_MANGA } from "../../lib/queries"; + import { GET_ALL_MANGA, GET_LIBRARY, GET_SOURCES, FETCH_SOURCE_MANGA, UPDATE_MANGA, GET_CATEGORIES, CREATE_CATEGORY, UPDATE_MANGA_CATEGORIES } from "../../lib/queries"; import { cache, CACHE_KEYS, getPageSet } from "../../lib/cache"; import { dedupeSources, dedupeMangaById } from "../../lib/util"; - import { store, addFolder, assignMangaToFolder, setGenreFilter, setPreviewManga, setNavPage } from "../../store/state.svelte"; - import type { Manga, Source } from "../../lib/types"; + import { store, setGenreFilter, setPreviewManga, setNavPage } from "../../store/state.svelte"; + import type { Manga, Source, Category } from "../../lib/types"; import ContextMenu, { type MenuEntry } from "../shared/ContextMenu.svelte"; const PAGE_SIZE = 50; @@ -39,6 +39,8 @@ let loadingMore = $state(false); let visibleCount = $state(PAGE_SIZE); let ctx: { x: number; y: number; manga: Manga } | null = $state(null); + let categories: Category[] = $state([]); + let catsLoaded = false; const nextPageMap = new Map(); let sources: Source[] = $state([]); @@ -143,19 +145,42 @@ } } + function openCtx(e: MouseEvent, m: Manga) { + e.preventDefault(); + ctx = { x: e.clientX, y: e.clientY, manga: m }; + if (!catsLoaded) { + catsLoaded = true; + gql<{ categories: { nodes: Category[] } }>(GET_CATEGORIES) + .then(d => { categories = d.categories.nodes.filter(c => c.id !== 0); }) + .catch(console.error); + } + } + function buildCtxItems(m: Manga): MenuEntry[] { return [ { label: m.inLibrary ? "In Library" : "Add to library", icon: BookmarkSimple, disabled: m.inLibrary, onClick: () => gql(UPDATE_MANGA, { id: m.id, inLibrary: true }).then(() => { sourceManga = sourceManga.map((x) => x.id === m.id ? { ...x, inLibrary: true } : x); cache.clear(CACHE_KEYS.LIBRARY); }).catch(console.error) }, - ...(store.settings.folders.length > 0 ? [ + ...(categories.length > 0 ? [ { separator: true } as MenuEntry, - ...store.settings.folders.map((f): MenuEntry => ({ - label: f.mangaIds.includes(m.id) ? `✓ ${f.name}` : f.name, icon: Folder, - onClick: () => assignMangaToFolder(f.id, m.id), + ...categories.map((cat): MenuEntry => ({ + label: (cat.mangas?.nodes ?? []).some(x => x.id === m.id) ? `✓ ${cat.name}` : cat.name, icon: Folder, + onClick: () => gql(UPDATE_MANGA_CATEGORIES, { mangaId: m.id, addTo: [cat.id], removeFrom: [] }).catch(console.error), })), ] : []), { separator: true }, - { label: "New folder & add", icon: FolderSimplePlus, onClick: () => { const name = prompt("Folder name:"); if (name?.trim()) { const id = addFolder(name.trim()); assignMangaToFolder(id, m.id); } } }, + { label: "New folder & add", icon: FolderSimplePlus, onClick: async () => { + const name = prompt("Folder name:"); + if (!name?.trim()) return; + const res = await gql<{ createCategory: { category: Category } }>( + CREATE_CATEGORY, + { name: name.trim() } + ).catch(console.error); + if (res) { + const cat = (res as any).createCategory.category; + categories = [...categories, cat]; + await gql(UPDATE_MANGA_CATEGORIES, { mangaId: m.id, addTo: [cat.id], removeFrom: [] }).catch(console.error); + } + }}, ]; } @@ -190,7 +215,7 @@ {:else}
{#each visibleItems as m (m.id)} - {/each} - {#each store.settings.folders.filter(f => f.showTab) as folder} - + {#if dragInsertIdx === idx + 1 && activeDragKind === "tab" && idx === visibleCategories.length - 1} + + {/if} {/each}
@@ -257,7 +609,15 @@ {:else}
{#each visibleManga as m (m.id)} - - +
{#if folderPickerOpen}
- {#if store.settings.folders.length === 0 && !folderCreating} + {#if catsLoading} +

Loading…

+ {:else if allCategories.length === 0 && !folderCreating}

No folders yet

{/if} - {#each store.settings.folders as folder} - {@const isIn = store.activeManga ? folder.mangaIds.includes(store.activeManga.id) : false} - {/each}
{#if folderCreating}
{ if (e.key === "Enter") createFolder(); if (e.key === "Escape") { folderCreating = false; folderNewName = ""; } }} use:focusOnMount /> - + onkeydown={(e) => { if (e.key === "Enter") createCategory(); if (e.key === "Escape") { folderCreating = false; folderNewName = ""; } }} use:focusOnMount /> + diff --git a/src/components/reader/Reader.svelte b/src/components/reader/Reader.svelte index b6a7921..805ed57 100644 --- a/src/components/reader/Reader.svelte +++ b/src/components/reader/Reader.svelte @@ -199,8 +199,7 @@ error = null; pageGroups = []; pageReady = false; - stripChapters = []; - visibleChapterId = null; + stripChapters = []; store.pageUrls = []; store.pageNumber = 1; try { @@ -457,7 +456,7 @@ } function maybeMarkCurrentRead() { - const ch = store.activeChapter; + const ch = displayChapter ?? store.activeChapter; if (ch && markOnNext) markChapterRead(ch.id); } @@ -711,11 +710,11 @@
- -
diff --git a/src/components/settings/Settings.svelte b/src/components/settings/Settings.svelte index 9ffdbb3..caa3883 100644 --- a/src/components/settings/Settings.svelte +++ b/src/components/settings/Settings.svelte @@ -1,14 +1,16 @@ -{#if $store.activeSource} +{#if store.activeSource}
- - {$store.activeSource.displayName} + {store.activeSource.displayName}
{#each (["POPULAR", "LATEST"] as BrowseType[]) as mode} - {/each} @@ -80,7 +102,7 @@
e.key === "Enter" && submitSearch()} /> + onkeydown={(e) => e.key === "Enter" && submitSearch()} />
@@ -95,8 +117,8 @@ {:else}
{#each mangas as m (m.id)} - {page} -
@@ -158,4 +180,5 @@ .page-btn:disabled { opacity: 0.3; cursor: default; } .page-num { font-family: var(--font-ui); font-size: var(--text-xs); color: var(--text-muted); letter-spacing: var(--tracking-wider); min-width: 24px; text-align: center; } .empty { display: flex; align-items: center; justify-content: center; flex: 1; color: var(--text-muted); font-family: var(--font-ui); font-size: var(--text-xs); letter-spacing: var(--tracking-wide); } + @keyframes fadeIn { from { opacity: 0 } to { opacity: 1 } } diff --git a/src/lib/cache.ts b/src/lib/cache.ts index ad5e654..dfcedd1 100644 --- a/src/lib/cache.ts +++ b/src/lib/cache.ts @@ -154,6 +154,7 @@ export const CACHE_GROUPS = { export const CACHE_KEYS = { LIBRARY: "library", ALL_MANGA: "all_manga_unfiltered", + CATEGORIES: "categories", DISCOVER: "discover_all_manga", // Discover's unfiltered fetch — separate from library SOURCES: "sources", POPULAR: "popular", diff --git a/src/lib/queries.ts b/src/lib/queries.ts index bc2590b..237adbf 100644 --- a/src/lib/queries.ts +++ b/src/lib/queries.ts @@ -191,6 +191,95 @@ export const GET_DOWNLOADS_PATH = ` } `; +// ── Categories ──────────────────────────────────────────────────────────────── + +export const GET_CATEGORIES = ` + query GetCategories { + categories { + nodes { + id + name + order + default + includeInUpdate + includeInDownload + mangas { + nodes { + id + title + thumbnailUrl + inLibrary + downloadCount + unreadCount + } + } + } + } + } +`; + +export const CREATE_CATEGORY = ` + mutation CreateCategory($name: String!) { + createCategory(input: { name: $name }) { + category { + id + name + order + default + includeInUpdate + includeInDownload + } + } + } +`; + +export const UPDATE_CATEGORY = ` + mutation UpdateCategory($id: Int!, $name: String) { + updateCategory(input: { id: $id, patch: { name: $name } }) { + category { + id + name + order + } + } + } +`; + +export const DELETE_CATEGORY = ` + mutation DeleteCategory($id: Int!) { + deleteCategory(input: { categoryId: $id }) { + category { + id + } + } + } +`; + +export const UPDATE_CATEGORY_ORDER = ` + mutation UpdateCategoryOrder($id: Int!, $position: Int!) { + updateCategoryOrder(input: { id: $id, position: $position }) { + categories { + id + name + order + default + includeInUpdate + includeInDownload + } + } + } +`; + +export const UPDATE_MANGA_CATEGORIES = ` + mutation UpdateMangaCategories($mangaId: Int!, $addTo: [Int!]!, $removeFrom: [Int!]!) { + updateMangaCategories(input: { id: $mangaId, patch: { addToCategories: $addTo, removeFromCategories: $removeFrom } }) { + manga { + id + } + } + } +`; + // ── Downloads ───────────────────────────────────────────────────────────────── export const GET_DOWNLOAD_STATUS = ` diff --git a/src/lib/types.ts b/src/lib/types.ts index 5fd3303..c160edc 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -1,3 +1,15 @@ +export interface Category { + id: number; + name: string; + order: number; + default: boolean; + includeInUpdate: string; + includeInDownload: string; + mangas?: { + nodes: Manga[]; + }; +} + export interface Manga { id: number; title: string; diff --git a/src/store/state.svelte.ts b/src/store/state.svelte.ts index eaf8f99..0979115 100644 --- a/src/store/state.svelte.ts +++ b/src/store/state.svelte.ts @@ -1,4 +1,4 @@ -import type { Manga, Chapter, Source } from "../lib/types"; +import type { Manga, Chapter, Category, Source } from "../lib/types"; import { DEFAULT_KEYBINDS, type Keybinds } from "../lib/keybinds"; export type PageStyle = "single" | "double" | "longstrip"; @@ -78,7 +78,6 @@ export const DEFAULT_THEME_TOKENS: ThemeTokens = { "color-info-bg": "#121a1f", }; -export const COMPLETED_FOLDER_ID = "completed"; export interface HistoryEntry { mangaId: number; @@ -142,13 +141,6 @@ export interface ActiveDownload { progress: number; } -export interface Folder { - id: string; - name: string; - mangaIds: number[]; - showTab: boolean; - system?: boolean; -} export interface Settings { pageStyle: PageStyle; @@ -178,7 +170,6 @@ export interface Settings { idleTimeoutMin?: number; splashCards?: boolean; storageLimitGb: number | null; - folders: Folder[]; markReadOnNext: boolean; readerDebounceMs: number; theme: Theme; @@ -204,15 +195,11 @@ export interface Settings { appLockEnabled: boolean; appLockPin: string; customThemes: CustomTheme[]; + hiddenCategoryIds: number[]; + /** Category ID that opens by default when the Library tab is first visited. null = no default (shows Saved). */ + defaultLibraryCategoryId: number | null; } -const COMPLETED_FOLDER_DEFAULT: Folder = { - id: COMPLETED_FOLDER_ID, - name: "Completed", - mangaIds: [], - showTab: true, - system: true, -}; export const DEFAULT_SETTINGS: Settings = { pageStyle: "longstrip", @@ -242,7 +229,6 @@ export const DEFAULT_SETTINGS: Settings = { idleTimeoutMin: 5, splashCards: true, storageLimitGb: null, - folders: [COMPLETED_FOLDER_DEFAULT], markReadOnNext: true, readerDebounceMs: 120, theme: "dark", @@ -268,6 +254,8 @@ export const DEFAULT_SETTINGS: Settings = { appLockEnabled: false, appLockPin: "", customThemes: [], + hiddenCategoryIds: [], + defaultLibraryCategoryId: null, }; // ── Persistence ─────────────────────────────────────────────────────────────── @@ -318,20 +306,14 @@ const saved = (() => { })(); function mergeSettings(saved: any): Settings { - const userFolders: Folder[] = saved?.settings?.folders ?? []; - const existingCompleted = userFolders.find(f => f.id === COMPLETED_FOLDER_ID); - const completedFolder: Folder = existingCompleted - ? { ...COMPLETED_FOLDER_DEFAULT, mangaIds: existingCompleted.mangaIds } - : COMPLETED_FOLDER_DEFAULT; - const otherFolders = userFolders.filter(f => f.id !== COMPLETED_FOLDER_ID); return { ...DEFAULT_SETTINGS, ...saved?.settings, - folders: [completedFolder, ...otherFolders], - keybinds: { ...DEFAULT_KEYBINDS, ...saved?.settings?.keybinds }, - heroSlots: saved?.settings?.heroSlots ?? [null, null, null, null], - mangaLinks: saved?.settings?.mangaLinks ?? {}, + keybinds: { ...DEFAULT_KEYBINDS, ...saved?.settings?.keybinds }, + heroSlots: saved?.settings?.heroSlots ?? [null, null, null, null], + mangaLinks: saved?.settings?.mangaLinks ?? {}, customThemes: saved?.settings?.customThemes ?? [], + hiddenCategoryIds: saved?.settings?.hiddenCategoryIds ?? [], }; } @@ -350,7 +332,7 @@ const genId = () => Math.random().toString(36).slice(2, 10); class Store { navPage: NavPage = $state(saved?.navPage ?? "home"); - libraryFilter: LibraryFilter = $state(saved?.libraryFilter ?? "library"); + libraryFilter: LibraryFilter = $state("library"); history: HistoryEntry[] = $state(saved?.history ?? []); /** * readLog — append-only, never deduped. Every chapter completion/progress @@ -504,31 +486,9 @@ class Store { this.history = []; this.readLog = []; this.readingStats = { ...DEFAULT_READING_STATS }; - this.settings = { ...this.settings, folders: [COMPLETED_FOLDER_DEFAULT], heroSlots: [null, null, null, null], mangaLinks: {} }; + this.settings = { ...this.settings, heroSlots: [null, null, null, null], mangaLinks: {} }; } - markMangaCompleted(mangaId: number) { - const folder = this.settings.folders.find(f => f.id === COMPLETED_FOLDER_ID); - if (!folder) return; - if (!folder.mangaIds.includes(mangaId)) - folder.mangaIds = [...folder.mangaIds, mangaId]; - } - - unmarkMangaCompleted(mangaId: number) { - const folder = this.settings.folders.find(f => f.id === COMPLETED_FOLDER_ID); - if (!folder) return; - folder.mangaIds = folder.mangaIds.filter(id => id !== mangaId); - } - - isCompleted(mangaId: number): boolean { - return this.settings.folders.find(f => f.id === COMPLETED_FOLDER_ID)?.mangaIds.includes(mangaId) ?? false; - } - - checkAndMarkCompleted(mangaId: number, chapters: Chapter[]) { - if (!chapters.length) return; - if (chapters.every(c => c.isRead)) this.markMangaCompleted(mangaId); - else this.unmarkMangaCompleted(mangaId); - } linkManga(idA: number, idB: number) { if (idA === idB) return; @@ -575,53 +535,6 @@ class Store { updateSettings(patch: Partial) { this.settings = { ...this.settings, ...patch }; } resetKeybinds() { this.settings = { ...this.settings, keybinds: DEFAULT_KEYBINDS }; } - addFolder(name: string): string { - const id = genId(); - this.settings = { ...this.settings, folders: [...this.settings.folders, { id, name: name.trim(), mangaIds: [], showTab: false }] }; - return id; - } - - removeFolder(id: string) { - this.settings = { ...this.settings, folders: this.settings.folders.filter(f => f.id !== id || f.system) }; - } - - renameFolder(id: string, name: string) { - this.settings = { - ...this.settings, - folders: this.settings.folders.map(f => f.id === id && !f.system ? { ...f, name: name.trim() } : f), - }; - } - - toggleFolderTab(id: string) { - this.settings = { - ...this.settings, - folders: this.settings.folders.map(f => f.id === id ? { ...f, showTab: !f.showTab } : f), - }; - } - - assignMangaToFolder(folderId: string, mangaId: number) { - this.settings = { - ...this.settings, - folders: this.settings.folders.map(f => - f.id === folderId && !f.mangaIds.includes(mangaId) - ? { ...f, mangaIds: [...f.mangaIds, mangaId] } - : f - ), - }; - } - - removeMangaFromFolder(folderId: string, mangaId: number) { - this.settings = { - ...this.settings, - folders: this.settings.folders.map(f => - f.id === folderId ? { ...f, mangaIds: f.mangaIds.filter(id => id !== mangaId) } : f - ), - }; - } - - getMangaFolders(mangaId: number): Folder[] { - return this.settings.folders.filter(f => f.mangaIds.includes(mangaId)); - } saveCustomTheme(theme: CustomTheme) { const existing = this.settings.customThemes.findIndex(t => t.id === theme.id); @@ -637,6 +550,42 @@ class Store { this.settings = { ...this.settings, customThemes: next, theme: wasActive ? "dark" : this.settings.theme }; } + /** + * Auto-assign or remove the "Completed" category for a manga based on + * whether all chapters are read. Pass the `gql` executor to avoid a + * circular import between state.svelte.ts and client.ts. + * + * Call after any batch mark-read/unread operation. + */ + async checkAndMarkCompleted( + mangaId: number, + chaps: Chapter[], + categories: Category[], + gqlFn: (query: string, vars: Record) => Promise, + UPDATE_MANGA_CATEGORIES: string, + UPDATE_MANGA?: string, + ): Promise { + if (!chaps.length) return; + const allRead = chaps.every(c => c.isRead); + const completed = categories.find(c => c.name === "Completed"); + if (!completed) return; + if (allRead) { + await gqlFn(UPDATE_MANGA_CATEGORIES, { mangaId, addTo: [completed.id], removeFrom: [] }).catch(console.error); + // Ensure the manga is in the library so it shows up in the Saved tab + if (UPDATE_MANGA) { + await gqlFn(UPDATE_MANGA, { id: mangaId, inLibrary: true }).catch(console.error); + } + } else { + await gqlFn(UPDATE_MANGA_CATEGORIES, { mangaId, addTo: [], removeFrom: [completed.id] }).catch(console.error); + } + } + + toggleHiddenCategory(id: number) { + const ids = this.settings.hiddenCategoryIds ?? []; + const next = ids.includes(id) ? ids.filter(x => x !== id) : [...ids, id]; + this.settings = { ...this.settings, hiddenCategoryIds: next }; + } + clearDiscoverCache() { this.discoverCache = new Map(); this.discoverLibraryIds = new Set(); @@ -654,10 +603,6 @@ export function addHistory(entry: HistoryEntry, completed?: boolean, minutes?: n export function clearHistory() { store.clearHistory(); } export function clearHistoryForManga(mangaId: number) { store.clearHistoryForManga(mangaId); } export function wipeAllData() { store.wipeAllData(); } -export function markMangaCompleted(mangaId: number) { store.markMangaCompleted(mangaId); } -export function unmarkMangaCompleted(mangaId: number) { store.unmarkMangaCompleted(mangaId); } -export function isCompleted(mangaId: number) { return store.isCompleted(mangaId); } -export function checkAndMarkCompleted(mangaId: number, c: Chapter[]) { store.checkAndMarkCompleted(mangaId, c); } export function linkManga(idA: number, idB: number) { store.linkManga(idA, idB); } export function unlinkManga(idA: number, idB: number) { store.unlinkManga(idA, idB); } export function getLinkedMangaIds(mangaId: number) { return store.getLinkedMangaIds(mangaId); } @@ -678,13 +623,17 @@ export function setLibraryTagFilter(next: string[]) { store export function setSettingsOpen(next: boolean) { store.setSettingsOpen(next); } export function updateSettings(patch: Partial) { store.updateSettings(patch); } export function resetKeybinds() { store.resetKeybinds(); } -export function addFolder(name: string) { return store.addFolder(name); } -export function removeFolder(id: string) { store.removeFolder(id); } -export function renameFolder(id: string, name: string) { store.renameFolder(id, name); } -export function toggleFolderTab(id: string) { store.toggleFolderTab(id); } -export function assignMangaToFolder(folderId: string, mangaId: number) { store.assignMangaToFolder(folderId, mangaId); } -export function removeMangaFromFolder(folderId: string, mangaId: number) { store.removeMangaFromFolder(folderId, mangaId); } -export function getMangaFolders(mangaId: number) { return store.getMangaFolders(mangaId); } export function clearDiscoverCache() { store.clearDiscoverCache(); } +export function toggleHiddenCategory(id: number) { store.toggleHiddenCategory(id); } export function saveCustomTheme(theme: CustomTheme) { store.saveCustomTheme(theme); } export function deleteCustomTheme(id: string) { store.deleteCustomTheme(id); } +export async function checkAndMarkCompleted( + mangaId: number, + chaps: Chapter[], + categories: Category[], + gqlFn: (query: string, vars: Record) => Promise, + UPDATE_MANGA_CATEGORIES: string, + UPDATE_MANGA?: string, +): Promise { + return store.checkAndMarkCompleted(mangaId, chaps, categories, gqlFn, UPDATE_MANGA_CATEGORIES, UPDATE_MANGA); +}