From d168b6ddcdaf69f38dadd54e58a8e5060dc34a32 Mon Sep 17 00:00:00 2001 From: kodjomoustapha <107993382+kodjodevf@users.noreply.github.com> Date: Thu, 14 Mar 2024 17:40:15 +0100 Subject: [PATCH] Added cronet_http & cupertino_http, remove unnecessary packages --- Cargo.lock | 1315 +++++++---------- lib/eval/dart/bridge/m_provider.dart | 8 +- lib/main.dart | 13 + lib/models/source.dart | 3 +- .../browse/extension/extension_detail.dart | 59 +- .../widgets/extension_list_tile_widget.dart | 21 +- .../browse/sources/sources_filter_screen.dart | 20 +- .../sources/widgets/source_list_tile.dart | 20 +- .../widgets/library_gridview_widget.dart | 4 +- .../widgets/library_listview_widget.dart | 4 +- .../manga/detail/manga_detail_view.dart | 4 +- .../detail/widgets/tracker_search_widget.dart | 7 +- .../manga/reader/image_view_center.dart | 3 +- .../manga/reader/image_view_vertical.dart | 3 +- .../custom_extended_image_provider.dart | 364 +++++ .../widgets/manga_image_card_widget.dart | 9 +- lib/services/boa_js.dart | 24 - lib/services/http/interceptor.dart | 25 + lib/services/torrent_server.dart | 5 +- lib/utils/cached_network.dart | 46 +- linux/flutter/generated_plugins.cmake | 1 + macos/Flutter/GeneratedPluginRegistrant.swift | 2 - messages/boa_js.proto | 14 - native/hub/Cargo.toml | 7 +- native/hub/src/boa_js.rs | 20 - native/hub/src/imagecrop.rs | 4 +- native/hub/src/lib.rs | 2 - pubspec.lock | 106 +- pubspec.yaml | 5 +- windows/flutter/generated_plugins.cmake | 1 + 30 files changed, 1148 insertions(+), 971 deletions(-) create mode 100644 lib/modules/widgets/custom_extended_image_provider.dart delete mode 100644 lib/services/boa_js.dart delete mode 100644 messages/boa_js.proto delete mode 100644 native/hub/src/boa_js.rs diff --git a/Cargo.lock b/Cargo.lock index 4e9ca118..b0742486 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -18,16 +18,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] -name = "ahash" -version = "0.8.6" +name = "aligned-vec" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a" -dependencies = [ - "cfg-if", - "once_cell", - "version_check", - "zerocopy", -] +checksum = "4aa90d7ce82d4be67b64039a3d588d38dbcc6736577de4a847025ce5b0c468d1" [[package]] name = "allo-isolate" @@ -38,48 +32,80 @@ dependencies = [ "atomic", ] -[[package]] -name = "android-tzdata" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" - -[[package]] -name = "android_system_properties" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" -dependencies = [ - "libc", -] - [[package]] name = "anyhow" version = "1.0.75" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" +[[package]] +name = "arbitrary" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db55d72333851e17d572bec876e390cd3b11eb1ef53ae821dd9f3b653d2b4569" + +[[package]] +name = "arbitrary" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d5a26814d8dcb93b0e5a0ff3c6d80a8843bafb21b39e8e18a6f05471870e110" + +[[package]] +name = "arg_enum_proc_macro" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.52", +] + +[[package]] +name = "arrayvec" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" +dependencies = [ + "serde", +] + [[package]] name = "atomic" version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c59bdb34bc650a32731b31bd8f0829cc15d24a708ee31559e0bb34f2bc320cba" -[[package]] -name = "atomic-polyfill" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cf2bce30dfe09ef0bfaef228b9d414faaf7e563035494d7fe092dba54b300f4" -dependencies = [ - "critical-section", -] - [[package]] name = "autocfg" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +[[package]] +name = "av1-grain" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6678909d8c5d46a42abcf571271e15fdbc0a225e3646cf23762cd415046c78bf" +dependencies = [ + "anyhow", + "arrayvec", + "log", + "nom", + "num-rational", + "serde", + "v_frame", +] + +[[package]] +name = "avif-serialize" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "876c75a42f6364451a033496a14c44bffe41f5f4a8236f697391f11024e596d2" +dependencies = [ + "arrayvec", +] + [[package]] name = "backtrace" version = "0.3.69" @@ -120,142 +146,31 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" [[package]] -name = "boa_ast" -version = "0.17.3" +name = "bitstream-io" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73498e9b2f0aa7db74977afa4d594657611e90587abf0dd564c0b55b4a130163" +checksum = "e445576659fd04a57b44cbd00aa37aaa815ebefa0aa3cb677a6b5e63d883074f" + +[[package]] +name = "bitstream-io" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06c9989a51171e2e81038ab168b6ae22886fe9ded214430dbb4f41c28cf176da" + +[[package]] +name = "built" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b9c056b9ed43aee5e064b683aa1ec783e19c6acec7559e3ae931b7490472fbe" dependencies = [ - "bitflags 2.4.1", - "boa_interner", - "boa_macros", - "indexmap", - "num-bigint", - "rustc-hash", + "cargo-lock", ] [[package]] -name = "boa_engine" -version = "0.17.3" +name = "built" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16377479d5d6d33896e7acdd1cc698d04a8f72004025bbbddf47558cd29146a6" -dependencies = [ - "bitflags 2.4.1", - "boa_ast", - "boa_gc", - "boa_icu_provider", - "boa_interner", - "boa_macros", - "boa_parser", - "boa_profiler", - "chrono", - "dashmap", - "fast-float", - "icu_normalizer", - "indexmap", - "itertools", - "num-bigint", - "num-integer", - "num-traits", - "num_enum", - "once_cell", - "pollster", - "rand", - "regress", - "rustc-hash", - "ryu-js", - "serde", - "serde_json", - "sptr", - "static_assertions", - "tap", - "thin-vec", - "thiserror", -] - -[[package]] -name = "boa_gc" -version = "0.17.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c97b44beaef9d4452342d117d94607fdfa8d474280f1ba0fd97853834e3a49b2" -dependencies = [ - "boa_macros", - "boa_profiler", - "thin-vec", -] - -[[package]] -name = "boa_icu_provider" -version = "0.17.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b30e52e34e451dd0bfc2c654a9a43ed34b0073dbd4ae3394b40313edda8627aa" -dependencies = [ - "icu_collections", - "icu_normalizer", - "icu_properties", - "icu_provider", - "icu_provider_adapters", - "icu_provider_blob", - "once_cell", -] - -[[package]] -name = "boa_interner" -version = "0.17.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3e5afa991908cfbe79bd3109b824e473a1dc5f74f31fab91bb44c9e245daa77" -dependencies = [ - "boa_gc", - "boa_macros", - "hashbrown 0.14.3", - "indexmap", - "once_cell", - "phf", - "rustc-hash", - "static_assertions", -] - -[[package]] -name = "boa_macros" -version = "0.17.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "005fa0c5bd20805466dda55eb34cd709bb31a2592bb26927b47714eeed6914d8" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.38", - "synstructure", -] - -[[package]] -name = "boa_parser" -version = "0.17.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e09afb035377a9044443b598187a7d34cd13164617182a4d7c348522ee3f052" -dependencies = [ - "bitflags 2.4.1", - "boa_ast", - "boa_icu_provider", - "boa_interner", - "boa_macros", - "boa_profiler", - "fast-float", - "icu_locid", - "icu_properties", - "icu_provider", - "icu_provider_macros", - "num-bigint", - "num-traits", - "once_cell", - "regress", - "rustc-hash", - "tinystr", -] - -[[package]] -name = "boa_profiler" -version = "0.17.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3190f92dfe48224adc92881c620f08ccf37ff62b91a094bb357fe53bd5e84647" +checksum = "38d17f4d6e4dc36d1a02fbedc2753a096848e7c1b0772f7654eab8e2c927dd53" [[package]] name = "bumpalo" @@ -281,51 +196,50 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" +[[package]] +name = "cargo-lock" +version = "8.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "031718ddb8f78aa5def78a09e90defe30151d1f6c672f937af4dd916429ed996" +dependencies = [ + "semver", + "serde", + "toml 0.5.11", + "url", +] + [[package]] name = "cc" version = "1.0.83" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" dependencies = [ + "jobserver", "libc", ] +[[package]] +name = "cfg-expr" +version = "0.15.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa50868b64a9a6fda9d593ce778849ea8715cd2a3d2cc17ffdb4a2f2f2f1961d" +dependencies = [ + "smallvec", + "target-lexicon", +] + [[package]] name = "cfg-if" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" -[[package]] -name = "chrono" -version = "0.4.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38" -dependencies = [ - "android-tzdata", - "iana-time-zone", - "num-traits", - "windows-targets 0.48.5", -] - -[[package]] -name = "cobs" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67ba02a97a2bd10f4b59b25c7973101c79642302776489e030cd13cdab09ed15" - [[package]] name = "color_quant" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" -[[package]] -name = "core-foundation-sys" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" - [[package]] name = "crc32fast" version = "1.3.2" @@ -335,12 +249,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "critical-section" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7059fff8937831a9ae6f0fe4d658ffabf58f2ca96aa9dec1c889f936f705f216" - [[package]] name = "crossbeam-deque" version = "0.8.3" @@ -380,42 +288,12 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" -[[package]] -name = "dashmap" -version = "5.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" -dependencies = [ - "cfg-if", - "hashbrown 0.14.3", - "lock_api", - "once_cell", - "parking_lot_core", -] - -[[package]] -name = "displaydoc" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.38", -] - [[package]] name = "either" version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" -[[package]] -name = "embedded-io" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef1a6892d9eef45c8fa6b9e0086428a2cca8491aca8f787c534a3d6d0bcb3ced" - [[package]] name = "equivalent" version = "1.0.1" @@ -448,12 +326,6 @@ dependencies = [ "zune-inflate", ] -[[package]] -name = "fast-float" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95765f67b4b18863968b4a1bd5bb576f732b29a4a28c7cd84c09fa3e2875f33c" - [[package]] name = "fdeflate" version = "0.3.0" @@ -493,18 +365,18 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" dependencies = [ "futures-core", ] [[package]] name = "futures-core" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" [[package]] name = "getrandom" @@ -519,9 +391,9 @@ dependencies = [ [[package]] name = "gif" -version = "0.12.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80792593675e051cf94a4b111980da2ba60d4a83e43e0048c5693baab3977045" +checksum = "3fb2d69b19215e18bb912fa30f7ce15846e301408695e44e0ef719f1da9e19f2" dependencies = [ "color_quant", "weezl", @@ -542,21 +414,18 @@ dependencies = [ "crunchy", ] -[[package]] -name = "hashbrown" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" -dependencies = [ - "ahash", -] - [[package]] name = "hashbrown" version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + [[package]] name = "hermit-abi" version = "0.3.3" @@ -577,7 +446,6 @@ name = "hub" version = "0.1.0" dependencies = [ "allo-isolate", - "boa_engine", "image", "prost", "rinf", @@ -585,145 +453,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "iana-time-zone" -version = "0.1.58" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8326b86b6cff230b97d0d312a6c40a60726df3332e721f72a1b035f451663b20" -dependencies = [ - "android_system_properties", - "core-foundation-sys", - "iana-time-zone-haiku", - "js-sys", - "wasm-bindgen", - "windows-core", -] - -[[package]] -name = "iana-time-zone-haiku" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" -dependencies = [ - "cc", -] - -[[package]] -name = "icu_collections" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef8302d8dfd6044d3ddb3f807a5ef3d7bbca9a574959c6d6e4dc39aa7012d0d5" -dependencies = [ - "displaydoc", - "serde", - "yoke", - "zerofrom", - "zerovec", -] - -[[package]] -name = "icu_locid" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3003f85dccfc0e238ff567693248c59153a46f4e6125ba4020b973cef4d1d335" -dependencies = [ - "displaydoc", - "litemap", - "serde", - "tinystr", - "writeable", - "zerovec", -] - -[[package]] -name = "icu_normalizer" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "652869735c9fb9f5a64ba180ee16f2c848390469c116deef517ecc53f4343598" -dependencies = [ - "displaydoc", - "icu_collections", - "icu_properties", - "icu_provider", - "serde", - "smallvec", - "utf16_iter", - "utf8_iter", - "write16", - "zerovec", -] - -[[package]] -name = "icu_properties" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce0e1aa26851f16c9e04412a5911c86b7f8768dac8f8d4c5f1c568a7e5d7a434" -dependencies = [ - "displaydoc", - "icu_collections", - "icu_provider", - "serde", - "tinystr", - "zerovec", -] - -[[package]] -name = "icu_provider" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8dc312a7b6148f7dfe098047ae2494d12d4034f48ade58d4f353000db376e305" -dependencies = [ - "displaydoc", - "icu_locid", - "icu_provider_macros", - "postcard", - "serde", - "stable_deref_trait", - "writeable", - "yoke", - "zerofrom", - "zerovec", -] - -[[package]] -name = "icu_provider_adapters" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4ae1e2bd0c41728b77e7c46e9afdec5e2127d1eedacc684724667d50c126bd3" -dependencies = [ - "icu_locid", - "icu_provider", - "serde", - "tinystr", - "yoke", - "zerovec", -] - -[[package]] -name = "icu_provider_blob" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd364c9a01f791a4bc04a74cf2a1d01d9f6926a40fd5ae1c28004e1e70d8338b" -dependencies = [ - "icu_provider", - "postcard", - "serde", - "writeable", - "yoke", - "zerovec", -] - -[[package]] -name = "icu_provider_macros" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd8b728b9421e93eff1d9f8681101b78fa745e0748c95c655c83f337044a7e10" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "idna" version = "0.5.0" @@ -736,30 +465,71 @@ dependencies = [ [[package]] name = "image" -version = "0.24.8" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "034bbe799d1909622a74d1193aa50147769440040ff36cb2baa947609b0a4e23" +checksum = "a9b4f005360d32e9325029b38ba47ebd7a56f3316df09249368939562d518645" dependencies = [ "bytemuck", "byteorder", "color_quant", "exr", "gif", - "jpeg-decoder", + "image-webp", "num-traits", "png", "qoi", + "ravif", + "rayon", + "rgb", "tiff", + "zune-core", + "zune-jpeg", ] [[package]] -name = "indexmap" -version = "2.1.0" +name = "image-webp" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" +checksum = "ba6107a25f04af48ceeb4093eebc9b405ee5a1813a0bab5ecf1805d3eabb3337" +dependencies = [ + "byteorder", + "thiserror", +] + +[[package]] +name = "imgref" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44feda355f4159a7c757171a77de25daf6411e217b4cabd03bd6650690468126" + +[[package]] +name = "indexmap" +version = "2.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b0b929d511467233429c45a44ac1dcaa21ba0f5ba11e4879e6ed28ddb4f9df4" dependencies = [ "equivalent", - "hashbrown 0.14.3", + "hashbrown", +] + +[[package]] +name = "interpolate_name" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.52", +] + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", ] [[package]] @@ -772,25 +542,34 @@ dependencies = [ ] [[package]] -name = "itoa" -version = "1.0.10" +name = "itertools" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + +[[package]] +name = "jobserver" +version = "0.1.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab46a6e9526ddef3ae7f787c06f0f2600639ba80ea3eade3d8e670a2230f51d6" +dependencies = [ + "libc", +] [[package]] name = "jpeg-decoder" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc0000e42512c92e31c2252315bda326620a4e034105e900c98ec492fa077b3e" -dependencies = [ - "rayon", -] [[package]] name = "js-sys" -version = "0.3.67" +version = "0.3.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a1d36f1235bc969acba30b7f5990b864423a6068a10f7c90ae8f0112e3a59d1" +checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" dependencies = [ "wasm-bindgen", ] @@ -807,18 +586,33 @@ version = "0.2.153" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" +[[package]] +name = "libfuzzer-sys" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcf184a4b6b274f82a5df6b357da6055d3e82272327bba281c28bbba6f1664ef" +dependencies = [ + "arbitrary 0.4.7", + "cc", +] + +[[package]] +name = "libfuzzer-sys" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a96cfd5557eb82f2b83fed4955246c988d331975a002961b07c81584d107e7f7" +dependencies = [ + "arbitrary 1.3.2", + "cc", + "once_cell", +] + [[package]] name = "linux-raw-sys" version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" -[[package]] -name = "litemap" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9d642685b028806386b2b6e75685faadd3eb65a85fff7df711ce18446a422da" - [[package]] name = "lock_api" version = "0.4.11" @@ -835,6 +629,25 @@ version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" +[[package]] +name = "loop9" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fae87c125b03c1d2c0150c90365d7d6bcc53fb73a9acaef207d2d065860f062" +dependencies = [ + "imgref", +] + +[[package]] +name = "maybe-rayon" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ea1f30cedd69f0a2954655f7188c6a834246d2bcf1e315e2ac40c4b24dc9519" +dependencies = [ + "cfg-if", + "rayon", +] + [[package]] name = "memchr" version = "2.6.4" @@ -850,6 +663,12 @@ dependencies = [ "autocfg", ] +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + [[package]] name = "miniz_oxide" version = "0.7.1" @@ -871,6 +690,28 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "new_debug_unreachable" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "noop_proc_macro" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0676bb32a98c1a483ce53e500a81ad9c3d5b3f7c920c28c24e9cb0980d0b5bc8" + [[package]] name = "num-bigint" version = "0.4.4" @@ -880,16 +721,48 @@ dependencies = [ "autocfg", "num-integer", "num-traits", - "serde", +] + +[[package]] +name = "num-derive" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "num-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.52", ] [[package]] name = "num-integer" -version = "0.1.45" +version = "0.1.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" dependencies = [ "autocfg", + "num-bigint", + "num-integer", "num-traits", ] @@ -912,27 +785,6 @@ dependencies = [ "libc", ] -[[package]] -name = "num_enum" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a015b430d3c108a207fd776d2e2196aaf8b1cf8cf93253e3a097ff3085076a1" -dependencies = [ - "num_enum_derive", -] - -[[package]] -name = "num_enum_derive" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96667db765a921f7b295ffee8b60472b686a51d4f21c2ee4ffdb94c7013b65a6" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 2.0.38", -] - [[package]] name = "object" version = "0.32.1" @@ -944,13 +796,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.18.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" -dependencies = [ - "atomic-polyfill", - "critical-section", -] +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" [[package]] name = "os-thread-local" @@ -985,60 +833,30 @@ dependencies = [ "windows-targets 0.48.5", ] +[[package]] +name = "paste" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" + [[package]] name = "percent-encoding" version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" -[[package]] -name = "phf" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" -dependencies = [ - "phf_macros", - "phf_shared", -] - -[[package]] -name = "phf_generator" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" -dependencies = [ - "phf_shared", - "rand", -] - -[[package]] -name = "phf_macros" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b" -dependencies = [ - "phf_generator", - "phf_shared", - "proc-macro2", - "quote", - "syn 2.0.38", -] - -[[package]] -name = "phf_shared" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" -dependencies = [ - "siphasher", -] - [[package]] name = "pin-project-lite" version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" +[[package]] +name = "pkg-config" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" + [[package]] name = "png" version = "0.17.10" @@ -1052,23 +870,6 @@ dependencies = [ "miniz_oxide", ] -[[package]] -name = "pollster" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22686f4785f02a4fcc856d3b3bb19bf6c8160d103f7a99cc258bddd0251dc7f2" - -[[package]] -name = "postcard" -version = "1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a55c51ee6c0db07e68448e336cf8ea4131a620edefebf9893e759b2d793420f8" -dependencies = [ - "cobs", - "embedded-io", - "serde", -] - [[package]] name = "ppv-lite86" version = "0.2.17" @@ -1076,22 +877,31 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" [[package]] -name = "proc-macro-crate" -version = "1.3.1" +name = "proc-macro2" +version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +checksum = "e835ff2298f5721608eb1a980ecaee1aef2c132bf95ecc026a11b7bf3c01c02e" dependencies = [ - "once_cell", - "toml_edit", + "unicode-ident", ] [[package]] -name = "proc-macro2" -version = "1.0.69" +name = "profiling" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da" +checksum = "43d84d1d7a6ac92673717f9f6d1518374ef257669c24ebc5ac25d5033828be58" dependencies = [ - "unicode-ident", + "profiling-procmacros", +] + +[[package]] +name = "profiling-procmacros" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8021cf59c8ec9c432cfc2526ac6b8aa508ecaf29cd415f271b8406c1b851c3fd" +dependencies = [ + "quote", + "syn 2.0.52", ] [[package]] @@ -1111,17 +921,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "efb6c9a1dd1def8e2124d17e83a20af56f1570d6c2d2bd9e266ccb768df3840e" dependencies = [ "anyhow", - "itertools", + "itertools 0.11.0", "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.52", ] [[package]] name = "protoc-prebuilt" -version = "0.2.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37aee930fb53074ec083bf049aa6133bb1a93cce8fc39f83e07f36a0937304dd" +checksum = "4d85d4641fe3b8c6e853dfd09fe35379bc6b6e66bd692ac29ed4f7087de69ed5" dependencies = [ "ureq", "zip", @@ -1137,10 +947,16 @@ dependencies = [ ] [[package]] -name = "quote" -version = "1.0.33" +name = "quick-error" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" +checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" + +[[package]] +name = "quote" +version = "1.0.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" dependencies = [ "proc-macro2", ] @@ -1175,6 +991,92 @@ dependencies = [ "getrandom", ] +[[package]] +name = "rav1e" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16c383692a5e7abd9f6d1eddb1a5e0269f859392387883361bb09e5555852ec1" +dependencies = [ + "arbitrary 0.4.7", + "arg_enum_proc_macro", + "arrayvec", + "av1-grain", + "bitstream-io 1.10.0", + "built 0.5.2", + "cfg-if", + "interpolate_name", + "itertools 0.10.5", + "libc", + "libfuzzer-sys 0.3.5", + "log", + "maybe-rayon", + "new_debug_unreachable", + "noop_proc_macro", + "num-derive 0.3.3", + "num-traits", + "once_cell", + "paste", + "rand", + "rand_chacha", + "rust_hawktracer", + "rustc_version", + "simd_helpers", + "system-deps", + "thiserror", + "v_frame", + "wasm-bindgen", +] + +[[package]] +name = "rav1e" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd87ce80a7665b1cce111f8a16c1f3929f6547ce91ade6addf4ec86a8dda5ce9" +dependencies = [ + "arbitrary 1.3.2", + "arg_enum_proc_macro", + "arrayvec", + "av1-grain", + "bitstream-io 2.2.0", + "built 0.7.1", + "cfg-if", + "interpolate_name", + "itertools 0.12.1", + "libc", + "libfuzzer-sys 0.4.7", + "log", + "maybe-rayon", + "new_debug_unreachable", + "noop_proc_macro", + "num-derive 0.4.2", + "num-traits", + "once_cell", + "paste", + "profiling", + "rand", + "rand_chacha", + "simd_helpers", + "system-deps", + "thiserror", + "v_frame", +] + +[[package]] +name = "ravif" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d44feba0b8a381a5efa2c0baf8dace8418904403260233f4a614503b018fc288" +dependencies = [ + "avif-serialize", + "imgref", + "loop9", + "quick-error", + "rav1e 0.6.6", + "rav1e 0.7.1", + "rayon", + "rgb", +] + [[package]] name = "rayon" version = "1.8.0" @@ -1205,20 +1107,19 @@ dependencies = [ ] [[package]] -name = "regress" -version = "0.6.0" +name = "rgb" +version = "0.8.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82a9ecfa0cb04d0b04dddb99b8ccf4f66bc8dfd23df694b398570bd8ae3a50fb" +checksum = "05aaa8004b64fd573fc9d002f4e632d51ad4f026c2b5ba95fcb6c2f32c2c47d8" dependencies = [ - "hashbrown 0.13.2", - "memchr", + "bytemuck", ] [[package]] name = "rinf" -version = "6.4.0" +version = "6.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "525fbe92d54cd8ac897310e03f8346122ea04fcb3cb627ebbaabff29264d2e3a" +checksum = "98fbe84dbe539079b4a200e1d815229bd12fee0e984768cb88e62febec705752" dependencies = [ "allo-isolate", "backtrace", @@ -1244,6 +1145,28 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "rust_hawktracer" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3480a29b927f66c6e06527be7f49ef4d291a01d694ec1fe85b0de71d6b02ac1" +dependencies = [ + "rust_hawktracer_normal_macro", + "rust_hawktracer_proc_macro", +] + +[[package]] +name = "rust_hawktracer_normal_macro" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a570059949e1dcdc6f35228fa389f54c2c84dfe0c94c05022baacd56eacd2e9" + +[[package]] +name = "rust_hawktracer_proc_macro" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb626abdbed5e93f031baae60d72032f56bc964e11ac2ff65f2ba3ed98d6d3e1" + [[package]] name = "rustc-demangle" version = "0.1.23" @@ -1251,10 +1174,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" [[package]] -name = "rustc-hash" -version = "1.1.0" +name = "rustc_version" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] [[package]] name = "rustix" @@ -1291,18 +1217,6 @@ dependencies = [ "untrusted", ] -[[package]] -name = "ryu" -version = "1.0.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" - -[[package]] -name = "ryu-js" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6518fc26bced4d53678a22d6e423e9d8716377def84545fe328236e3af070e7f" - [[package]] name = "scopeguard" version = "1.2.0" @@ -1320,33 +1234,40 @@ dependencies = [ ] [[package]] -name = "serde" -version = "1.0.193" +name = "semver" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89" +checksum = "92d43fe69e652f3df9bdc2b85b2854a0825b86e4fb76bc44d945137d053639ca" +dependencies = [ + "serde", +] + +[[package]] +name = "serde" +version = "1.0.197" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fb1c873e1b9b056a4dc4c0c198b24c3ffa059243875552b2bd0933b1aee4ce2" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.193" +version = "1.0.197" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3" +checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.52", ] [[package]] -name = "serde_json" -version = "1.0.108" +name = "serde_spanned" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b" +checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1" dependencies = [ - "itoa", - "ryu", "serde", ] @@ -1366,10 +1287,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" [[package]] -name = "siphasher" -version = "0.3.11" +name = "simd_helpers" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" +checksum = "95890f873bec569a0362c235787f3aca6e1e887302ba4840839bcc6459c42da6" +dependencies = [ + "quote", +] [[package]] name = "smallvec" @@ -1396,24 +1320,6 @@ dependencies = [ "lock_api", ] -[[package]] -name = "sptr" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b9b39299b249ad65f3b7e96443bad61c02ca5cd3589f46cb6d610a0fd6c0d6a" - -[[package]] -name = "stable_deref_trait" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" - -[[package]] -name = "static_assertions" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" - [[package]] name = "syn" version = "1.0.109" @@ -1427,9 +1333,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.38" +version = "2.0.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e96b79aaa137db8f61e26363a0c9b47d8b4ec75da28b7d1d614c2303e232408b" +checksum = "b699d15b36d1f02c3e7c69f8ffef53de37aefae075d8488d4ba1a7788d574a07" dependencies = [ "proc-macro2", "quote", @@ -1437,47 +1343,42 @@ dependencies = [ ] [[package]] -name = "synstructure" -version = "0.13.0" +name = "system-deps" +version = "6.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "285ba80e733fac80aa4270fbcdf83772a79b80aa35c97075320abfee4a915b06" +checksum = "2a2d580ff6a20c55dfb86be5f9c238f67835d0e81cbdea8bf5680e0897320331" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.38", - "unicode-xid", + "cfg-expr", + "heck", + "pkg-config", + "toml 0.8.11", + "version-compare", ] [[package]] -name = "tap" -version = "1.0.1" +name = "target-lexicon" +version = "0.12.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" - -[[package]] -name = "thin-vec" -version = "0.2.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a38c90d48152c236a3ab59271da4f4ae63d678c5d7ad6b7714d7cb9760be5e4b" +checksum = "e1fc403891a21bcfb7c37834ba66a547a8f402146eba7265b5a6d88059c9ff2f" [[package]] name = "thiserror" -version = "1.0.52" +version = "1.0.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83a48fd946b02c0a526b2e9481c8e2a17755e47039164a86c4070446e3a4614d" +checksum = "03468839009160513471e86a034bb2c5c0e4baae3b43f79ffc55c4a5427b3297" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.52" +version = "1.0.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7fbe9b594d6568a6a1443250a7e67d80b74e1e96f6d1715e1e21cc1888291d3" +checksum = "c61f3ba182994efc43764a46c018c347bc492c79f024e705f46567b418f6d4f7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.52", ] [[package]] @@ -1491,17 +1392,6 @@ dependencies = [ "weezl", ] -[[package]] -name = "tinystr" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8faa444297615a4e020acb64146b0603c9c395c03a97c17fd9028816d3b4d63e" -dependencies = [ - "displaydoc", - "serde", - "zerovec", -] - [[package]] name = "tinyvec" version = "1.6.0" @@ -1544,14 +1434,14 @@ checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.52", ] [[package]] name = "tokio_with_wasm" -version = "0.4.0" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e3e506fe942e7be6a129f928f263d4bf5d9c8c7104c885574aedb5c6138a164" +checksum = "e9e6a955eb27969f01cdc13784eb46dbadda5f75dee2de887bd538ba987a87b8" dependencies = [ "futures-channel", "js-sys", @@ -1561,19 +1451,45 @@ dependencies = [ "web-sys", ] +[[package]] +name = "toml" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" +dependencies = [ + "serde", +] + +[[package]] +name = "toml" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af06656561d28735e9c1cd63dfd57132c8155426aa6af24f36a00a351f88c48e" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit", +] + [[package]] name = "toml_datetime" version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" +dependencies = [ + "serde", +] [[package]] name = "toml_edit" -version = "0.19.15" +version = "0.22.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +checksum = "18769cd1cec395d70860ceb4d932812a0b4d06b1a4bb336745a4d21b9496e992" dependencies = [ "indexmap", + "serde", + "serde_spanned", "toml_datetime", "winnow", ] @@ -1599,12 +1515,6 @@ dependencies = [ "tinyvec", ] -[[package]] -name = "unicode-xid" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" - [[package]] name = "untrusted" version = "0.9.0" @@ -1638,22 +1548,21 @@ dependencies = [ ] [[package]] -name = "utf16_iter" -version = "1.0.5" +name = "v_frame" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" +checksum = "d6f32aaa24bacd11e488aa9ba66369c7cd514885742c9fe08cfe85884db3e92b" +dependencies = [ + "aligned-vec", + "num-traits", + "wasm-bindgen", +] [[package]] -name = "utf8_iter" -version = "1.0.4" +name = "version-compare" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" - -[[package]] -name = "version_check" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +checksum = "579a42fc0b8e0c63b76519a339be31bed574929511fa53c1a3acae26eb258f29" [[package]] name = "wasi" @@ -1663,9 +1572,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.90" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1223296a201415c7fad14792dbefaace9bd52b62d33453ade1c5b5f07555406" +checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -1673,24 +1582,24 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.90" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcdc935b63408d58a32f8cc9738a0bffd8f05cc7c002086c6ef20b7312ad9dcd" +checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.52", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.37" +version = "0.4.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c02dbc21516f9f1f04f187958890d7e6026df8d16540b7ad9492bc34a67cea03" +checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" dependencies = [ "cfg-if", "js-sys", @@ -1700,9 +1609,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.90" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e4c238561b2d428924c49815533a8b9121c664599558a5d9ec51f8a1740a999" +checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -1710,28 +1619,28 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.90" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bae1abb6806dc1ad9e560ed242107c0f6c84335f1749dd4e8ddb012ebd5e25a7" +checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.52", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.90" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d91413b1c31d7539ba5ef2451af3f0b833a005eb27a631cec32bc0635a8602b" +checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" [[package]] name = "web-sys" -version = "0.3.64" +version = "0.3.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b" +checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" dependencies = [ "js-sys", "wasm-bindgen", @@ -1745,9 +1654,9 @@ checksum = "1778a42e8b3b90bff8d0f5032bf22250792889a5cdc752aa0020c84abe3aaf10" [[package]] name = "weezl" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb" +checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082" [[package]] name = "which" @@ -1784,15 +1693,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" -[[package]] -name = "windows-core" -version = "0.51.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64" -dependencies = [ - "windows-targets 0.48.5", -] - [[package]] name = "windows-sys" version = "0.48.0" @@ -1927,113 +1827,13 @@ checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" [[package]] name = "winnow" -version = "0.5.30" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b5c3db89721d50d0e2a673f5043fc4722f76dcc352d7b1ab8b8288bed4ed2c5" +checksum = "dffa400e67ed5a4dd237983829e66475f0a4a26938c4b04c21baede6262215b8" dependencies = [ "memchr", ] -[[package]] -name = "write16" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" - -[[package]] -name = "writeable" -version = "0.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dad7bb64b8ef9c0aa27b6da38b452b0ee9fd82beaf276a87dd796fb55cbae14e" - -[[package]] -name = "yoke" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65e71b2e4f287f467794c671e2b8f8a5f3716b3c829079a1c44740148eff07e4" -dependencies = [ - "serde", - "stable_deref_trait", - "yoke-derive", - "zerofrom", -] - -[[package]] -name = "yoke-derive" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e6936f0cce458098a201c245a11bef556c6a0181129c7034d10d76d1ec3a2b8" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.38", - "synstructure", -] - -[[package]] -name = "zerocopy" -version = "0.7.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" -dependencies = [ - "zerocopy-derive", -] - -[[package]] -name = "zerocopy-derive" -version = "0.7.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.38", -] - -[[package]] -name = "zerofrom" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "655b0814c5c0b19ade497851070c640773304939a6c0fd5f5fb43da0696d05b7" -dependencies = [ - "zerofrom-derive", -] - -[[package]] -name = "zerofrom-derive" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6a647510471d372f2e6c2e6b7219e44d8c574d24fdc11c610a61455782f18c3" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.38", - "synstructure", -] - -[[package]] -name = "zerovec" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "591691014119b87047ead4dcf3e6adfbf73cb7c38ab6980d4f18a32138f35d46" -dependencies = [ - "serde", - "yoke", - "zerofrom", - "zerovec-derive", -] - -[[package]] -name = "zerovec-derive" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a4a1638a1934450809c2266a70362bfc96cd90550c073f5b8a55014d1010157" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.38", -] - [[package]] name = "zip" version = "0.6.6" @@ -2046,6 +1846,12 @@ dependencies = [ "flate2", ] +[[package]] +name = "zune-core" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f423a2c17029964870cfaabb1f13dfab7d092a62a29a89264f4d36990ca414a" + [[package]] name = "zune-inflate" version = "0.2.54" @@ -2054,3 +1860,12 @@ checksum = "73ab332fe2f6680068f3582b16a24f90ad7096d5d39b974d1c0aff0125116f02" dependencies = [ "simd-adler32", ] + +[[package]] +name = "zune-jpeg" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec866b44a2a1fd6133d363f073ca1b179f438f99e7e5bfb1e33f7181facfe448" +dependencies = [ + "zune-core", +] diff --git a/lib/eval/dart/bridge/m_provider.dart b/lib/eval/dart/bridge/m_provider.dart index 67de45a5..95672974 100644 --- a/lib/eval/dart/bridge/m_provider.dart +++ b/lib/eval/dart/bridge/m_provider.dart @@ -2,6 +2,7 @@ import 'dart:convert'; import 'package:dart_eval/dart_eval.dart'; import 'package:dart_eval/dart_eval_bridge.dart'; import 'package:dart_eval/stdlib/core.dart'; +import 'package:flutter_qjs/flutter_qjs.dart'; import 'package:mangayomi/eval/dart/bridge/document.dart'; import 'package:mangayomi/eval/dart/bridge/filter.dart'; import 'package:mangayomi/eval/dart/bridge/m_manga.dart'; @@ -16,7 +17,6 @@ import 'package:mangayomi/eval/dart/model/m_manga.dart'; import 'package:mangayomi/eval/dart/model/m_provider.dart'; import 'package:mangayomi/models/video.dart'; import 'package:mangayomi/modules/browse/extension/providers/extension_preferences_providers.dart'; -import 'package:mangayomi/services/boa_js.dart'; class $MProvider extends MProvider with $Bridge { static $MProvider $construct( @@ -748,8 +748,10 @@ class $MProvider extends MProvider with $Bridge { $Value? $bridgeGet(String identifier) { return switch (identifier) { 'evalJs' => $Function((_, __, List<$Value?> args) { - return $Future - .wrap(evalJs(args[0]!.$reified).then((value) => $String(value))); + final runtime = getJavascriptRuntime(); + return $Future.wrap(runtime + .evaluateAsync(args[0]!.$reified) + .then((value) => $String(value.stringResult))); }), 'getUrlWithoutDomain' => $Function((_, __, List<$Value?> args) { final uri = Uri.parse(args[0]!.$value.replaceAll(' ', '%20')); diff --git a/lib/main.dart b/lib/main.dart index fb33e9b6..6595f5de 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -4,7 +4,9 @@ import 'package:desktop_webview_window/desktop_webview_window.dart'; import 'package:flex_color_scheme/flex_color_scheme.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:google_api_availability/google_api_availability.dart'; import 'package:google_fonts/google_fonts.dart'; import 'package:intl/date_symbol_data_local.dart'; import 'package:intl/intl.dart'; @@ -25,6 +27,9 @@ import 'package:window_manager/window_manager.dart'; // Global instance of the Isar database. late Isar isar; +GooglePlayServicesAvailability playStoreAvailability = + GooglePlayServicesAvailability.unknown; + /// Overrides the default HTTP client to allow all certificates class MyHttpoverrides extends HttpOverrides { @override @@ -57,6 +62,14 @@ void main(List args) async { isar = await StorageProvider().initDB(null, inspector: kDebugMode); await StorageProvider().requestPermission(); GoogleFonts.aBeeZee(); + if (Platform.isAndroid) { + try { + playStoreAvailability = await GoogleApiAvailability.instance + .checkGooglePlayServicesAvailability(); + } on PlatformException { + playStoreAvailability = GooglePlayServicesAvailability.unknown; + } + } // Start the app. runApp(const ProviderScope(child: MyApp())); } diff --git a/lib/models/source.dart b/lib/models/source.dart index 94048393..504deb39 100644 --- a/lib/models/source.dart +++ b/lib/models/source.dart @@ -107,7 +107,8 @@ class Source { version = json['version']; versionLast = json['versionLast']; additionalParams = json['additionalParams'] ?? ""; - sourceCodeLanguage = SourceCodeLanguage.values[json['sourceCodeLanguage']]; + sourceCodeLanguage = + SourceCodeLanguage.values[json['sourceCodeLanguage'] ?? 0]; } Map toJson() => { diff --git a/lib/modules/browse/extension/extension_detail.dart b/lib/modules/browse/extension/extension_detail.dart index 8adcbd8b..11279bab 100644 --- a/lib/modules/browse/extension/extension_detail.dart +++ b/lib/modules/browse/extension/extension_detail.dart @@ -1,6 +1,6 @@ -import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:isar/isar.dart'; import 'package:mangayomi/eval/dart/model/source_preference.dart'; import 'package:mangayomi/main.dart'; import 'package:mangayomi/models/source.dart'; @@ -8,6 +8,8 @@ import 'package:mangayomi/modules/browse/extension/providers/extension_preferenc import 'package:mangayomi/modules/browse/extension/widgets/source_preference_widget.dart'; import 'package:mangayomi/providers/l10n_providers.dart'; import 'package:mangayomi/services/get_source_preference.dart'; +import 'package:mangayomi/sources/source_test.dart'; +import 'package:mangayomi/utils/cached_network.dart'; import 'package:mangayomi/utils/extensions/build_context_extensions.dart'; import 'package:mangayomi/utils/language.dart'; @@ -22,6 +24,7 @@ class ExtensionDetail extends ConsumerStatefulWidget { class _ExtensionDetailState extends ConsumerState { late Source source = widget.source; List sourcePreference = []; + bool _isLoading = true; @override void initState() { getSourcePreferenceAsync(source: source).then((value) { @@ -30,10 +33,11 @@ class _ExtensionDetailState extends ConsumerState { sourcePreference = value .map((e) => getSourcePreferenceEntry(e.key!, source.id!)) .toList(); + _isLoading = false; }); } }); - + print(source.id); super.initState(); } @@ -56,20 +60,19 @@ class _ExtensionDetailState extends ConsumerState { borderRadius: BorderRadius.circular(10)), child: widget.source.iconUrl!.isEmpty ? const Icon(Icons.source_outlined, size: 140) - : CachedNetworkImage( + : cachedNetworkImage( imageUrl: widget.source.iconUrl!, fit: BoxFit.contain, width: 140, height: 140, - errorWidget: (context, url, error) { - return const SizedBox( - width: 140, - height: 140, - child: Center( - child: Icon(Icons.source_outlined, size: 140), - ), - ); - }, + errorWidget: const SizedBox( + width: 140, + height: 140, + child: Center( + child: Icon(Icons.source_outlined, size: 140), + ), + ), + headers: {}, ), ), ), @@ -176,11 +179,34 @@ class _ExtensionDetailState extends ConsumerState { ), TextButton( onPressed: () { - isar.writeTxnSync(() => + final sourcePrefsIds = isar + .sourcePreferences + .filter() + .sourceIdEqualTo(source.id!) + .findAllSync() + .map((e) => e.id!) + .toList(); + final sourcePrefsStringIds = isar + .sourcePreferenceStringValues + .filter() + .sourceIdEqualTo(source.id!) + .findAllSync() + .map((e) => e.id) + .toList(); + isar.writeTxnSync(() { + if (!useTestSourceCode) { isar.sources.putSync(widget.source ..sourceCode = "" ..isAdded = false - ..isPinned = false)); + ..isPinned = false); + } + isar.sourcePreferences + .deleteAllSync(sourcePrefsIds); + isar.sourcePreferenceStringValues + .deleteAllSync( + sourcePrefsStringIds); + }); + Navigator.pop(ctx); Navigator.pop(context); }, @@ -198,8 +224,9 @@ class _ExtensionDetailState extends ConsumerState { )), ), ), - SourcePreferenceWidget( - sourcePreference: sourcePreference, source: source) + if (!_isLoading) + SourcePreferenceWidget( + sourcePreference: sourcePreference, source: source) ], ), ), diff --git a/lib/modules/browse/extension/widgets/extension_list_tile_widget.dart b/lib/modules/browse/extension/widgets/extension_list_tile_widget.dart index 4a11a5fd..16ffb7f4 100644 --- a/lib/modules/browse/extension/widgets/extension_list_tile_widget.dart +++ b/lib/modules/browse/extension/widgets/extension_list_tile_widget.dart @@ -1,4 +1,3 @@ -import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:go_router/go_router.dart'; @@ -7,6 +6,7 @@ import 'package:mangayomi/models/source.dart'; import 'package:mangayomi/modules/browse/extension/providers/fetch_anime_sources.dart'; import 'package:mangayomi/modules/browse/extension/providers/fetch_manga_sources.dart'; import 'package:mangayomi/providers/l10n_providers.dart'; +import 'package:mangayomi/utils/cached_network.dart'; import 'package:mangayomi/utils/language.dart'; class ExtensionListTileWidget extends ConsumerStatefulWidget { @@ -68,20 +68,19 @@ class _ExtensionListTileWidgetState borderRadius: BorderRadius.circular(5)), child: widget.source.iconUrl!.isEmpty ? const Icon(Icons.source_outlined) - : CachedNetworkImage( + : cachedNetworkImage( imageUrl: widget.source.iconUrl!, fit: BoxFit.contain, width: 37, height: 37, - errorWidget: (context, url, error) { - return const SizedBox( - width: 37, - height: 37, - child: Center( - child: Icon(Icons.source_outlined), - ), - ); - }, + errorWidget: const SizedBox( + width: 37, + height: 37, + child: Center( + child: Icon(Icons.source_outlined), + ), + ), + headers: {}, ), ), title: Text(widget.source.name!), diff --git a/lib/modules/browse/sources/sources_filter_screen.dart b/lib/modules/browse/sources/sources_filter_screen.dart index 8408f021..2878f6fe 100644 --- a/lib/modules/browse/sources/sources_filter_screen.dart +++ b/lib/modules/browse/sources/sources_filter_screen.dart @@ -1,4 +1,3 @@ -import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:grouped_list/grouped_list.dart'; @@ -7,6 +6,7 @@ import 'package:mangayomi/main.dart'; import 'package:mangayomi/models/source.dart'; import 'package:mangayomi/modules/more/settings/browse/providers/browse_state_provider.dart'; import 'package:mangayomi/providers/l10n_providers.dart'; +import 'package:mangayomi/utils/cached_network.dart'; import 'package:mangayomi/utils/language.dart'; class SourcesFilterScreen extends ConsumerWidget { @@ -86,20 +86,18 @@ class SourcesFilterScreen extends ConsumerWidget { borderRadius: BorderRadius.circular(5)), child: element.iconUrl!.isEmpty ? const Icon(Icons.source_outlined) - : CachedNetworkImage( + : cachedNetworkImage( imageUrl: element.iconUrl!, fit: BoxFit.contain, width: 37, height: 37, - errorWidget: (context, url, error) { - return const SizedBox( - width: 37, - height: 37, - child: Center( - child: Icon(Icons.source_outlined), - ), - ); - }, + errorWidget: const SizedBox( + width: 37, + height: 37, + child: Center( + child: Icon(Icons.source_outlined), + ), + ), ), ), onChanged: (bool? value) { diff --git a/lib/modules/browse/sources/widgets/source_list_tile.dart b/lib/modules/browse/sources/widgets/source_list_tile.dart index bae998f1..5f1de52a 100644 --- a/lib/modules/browse/sources/widgets/source_list_tile.dart +++ b/lib/modules/browse/sources/widgets/source_list_tile.dart @@ -6,9 +6,9 @@ import 'package:mangayomi/main.dart'; import 'package:mangayomi/models/source.dart'; import 'package:mangayomi/providers/l10n_providers.dart'; import 'package:mangayomi/sources/source_test.dart'; +import 'package:mangayomi/utils/cached_network.dart'; import 'package:mangayomi/utils/extensions/build_context_extensions.dart'; import 'package:mangayomi/utils/language.dart'; -import 'package:cached_network_image/cached_network_image.dart'; class SourceListTile extends StatelessWidget { final bool isManga; @@ -46,20 +46,18 @@ class SourceListTile extends StatelessWidget { borderRadius: BorderRadius.circular(5)), child: source.iconUrl!.isEmpty ? const Icon(Icons.source_outlined) - : CachedNetworkImage( + : cachedNetworkImage( imageUrl: source.iconUrl!, fit: BoxFit.contain, width: 37, height: 37, - errorWidget: (context, url, error) { - return const SizedBox( - width: 37, - height: 37, - child: Center( - child: Icon(Icons.source_outlined), - ), - ); - }, + errorWidget: const SizedBox( + width: 37, + height: 37, + child: Center( + child: Icon(Icons.source_outlined), + ), + ), ), ), subtitle: Row( diff --git a/lib/modules/library/widgets/library_gridview_widget.dart b/lib/modules/library/widgets/library_gridview_widget.dart index bb1ac4a4..822b7c69 100644 --- a/lib/modules/library/widgets/library_gridview_widget.dart +++ b/lib/modules/library/widgets/library_gridview_widget.dart @@ -1,5 +1,4 @@ import 'dart:typed_data'; -import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:isar/isar.dart'; @@ -10,6 +9,7 @@ import 'package:mangayomi/modules/library/providers/library_state_provider.dart' import 'package:mangayomi/modules/library/widgets/measure_widget_sync.dart'; import 'package:mangayomi/modules/manga/reader/providers/push_router.dart'; import 'package:mangayomi/models/manga.dart'; +import 'package:mangayomi/modules/widgets/custom_extended_image_provider.dart'; import 'package:mangayomi/utils/extensions/build_context_extensions.dart'; import 'package:mangayomi/utils/constant.dart'; import 'package:mangayomi/utils/headers.dart'; @@ -103,7 +103,7 @@ class _LibraryGridViewWidgetState extends State { image: entry.customCoverImage != null ? MemoryImage(entry.customCoverImage as Uint8List) as ImageProvider - : CachedNetworkImageProvider( + : CustomExtendedNetworkImageProvider( toImgUrl(entry.customCoverFromTracker ?? entry.imageUrl!), headers: entry.isLocalArchive! diff --git a/lib/modules/library/widgets/library_listview_widget.dart b/lib/modules/library/widgets/library_listview_widget.dart index 520a1672..28ac28b3 100644 --- a/lib/modules/library/widgets/library_listview_widget.dart +++ b/lib/modules/library/widgets/library_listview_widget.dart @@ -1,5 +1,4 @@ import 'dart:typed_data'; -import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:isar/isar.dart'; @@ -9,6 +8,7 @@ import 'package:mangayomi/modules/history/providers/isar_providers.dart'; import 'package:mangayomi/modules/library/providers/library_state_provider.dart'; import 'package:mangayomi/modules/manga/reader/providers/push_router.dart'; import 'package:mangayomi/models/manga.dart'; +import 'package:mangayomi/modules/widgets/custom_extended_image_provider.dart'; import 'package:mangayomi/utils/extensions/build_context_extensions.dart'; import 'package:mangayomi/utils/constant.dart'; import 'package:mangayomi/utils/headers.dart'; @@ -98,7 +98,7 @@ class LibraryListViewWidget extends StatelessWidget { image: entry.customCoverImage != null ? MemoryImage(entry.customCoverImage as Uint8List) as ImageProvider - : CachedNetworkImageProvider( + : CustomExtendedNetworkImageProvider( toImgUrl( entry.customCoverFromTracker ?? entry.imageUrl!), diff --git a/lib/modules/manga/detail/manga_detail_view.dart b/lib/modules/manga/detail/manga_detail_view.dart index 23407e78..e40688f3 100644 --- a/lib/modules/manga/detail/manga_detail_view.dart +++ b/lib/modules/manga/detail/manga_detail_view.dart @@ -1,6 +1,5 @@ import 'dart:io'; import 'dart:typed_data'; -import 'package:cached_network_image/cached_network_image.dart'; import 'package:draggable_menu/draggable_menu.dart'; import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; @@ -24,6 +23,7 @@ import 'package:mangayomi/modules/manga/reader/providers/reader_controller_provi import 'package:mangayomi/modules/more/settings/appearance/providers/pure_black_dark_mode_state_provider.dart'; import 'package:mangayomi/modules/more/settings/track/widgets/track_listile.dart'; import 'package:mangayomi/modules/widgets/custom_draggable_tabbar.dart'; +import 'package:mangayomi/modules/widgets/custom_extended_image_provider.dart'; import 'package:mangayomi/modules/widgets/draggable_scroll_bar.dart'; import 'package:mangayomi/providers/l10n_providers.dart'; import 'package:mangayomi/providers/storage_provider.dart'; @@ -1366,7 +1366,7 @@ class _MangaDetailViewState extends ConsumerState final imageProvider = widget.manga!.customCoverImage != null ? MemoryImage(widget.manga!.customCoverImage as Uint8List) as ImageProvider - : CachedNetworkImageProvider( + : CustomExtendedNetworkImageProvider( toImgUrl(widget.manga!.customCoverFromTracker ?? widget.manga!.imageUrl!), headers: widget.manga!.isLocalArchive! diff --git a/lib/modules/manga/detail/widgets/tracker_search_widget.dart b/lib/modules/manga/detail/widgets/tracker_search_widget.dart index 4bee4f05..2566e2a7 100644 --- a/lib/modules/manga/detail/widgets/tracker_search_widget.dart +++ b/lib/modules/manga/detail/widgets/tracker_search_widget.dart @@ -1,10 +1,10 @@ -import 'package:cached_network_image/cached_network_image.dart'; import 'package:draggable_menu/draggable_menu.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:mangayomi/models/track.dart'; import 'package:mangayomi/models/track_search.dart'; import 'package:mangayomi/modules/manga/detail/providers/track_state_providers.dart'; +import 'package:mangayomi/modules/widgets/custom_extended_image_provider.dart'; import 'package:mangayomi/modules/widgets/progress_center.dart'; import 'package:mangayomi/utils/extensions/build_context_extensions.dart'; @@ -84,8 +84,9 @@ class _TrackerWidgetSearchState extends ConsumerState { height: 120, width: 80, fit: BoxFit.cover, - image: CachedNetworkImageProvider( - tracks![index].coverUrl!), + image: + CustomExtendedNetworkImageProvider( + tracks![index].coverUrl!), ), ), const SizedBox( diff --git a/lib/modules/manga/reader/image_view_center.dart b/lib/modules/manga/reader/image_view_center.dart index 5bc881bf..3de1d2fe 100644 --- a/lib/modules/manga/reader/image_view_center.dart +++ b/lib/modules/manga/reader/image_view_center.dart @@ -7,6 +7,7 @@ import 'package:mangayomi/modules/manga/reader/providers/reader_controller_provi import 'package:mangayomi/modules/manga/reader/reader_view.dart'; import 'package:mangayomi/modules/manga/reader/widgets/color_filter_widget.dart'; import 'package:mangayomi/modules/more/settings/reader/providers/reader_state_provider.dart'; +import 'package:mangayomi/modules/widgets/custom_extended_image_provider.dart'; import 'package:mangayomi/utils/headers.dart'; import 'package:mangayomi/utils/reg_exp_matcher.dart'; @@ -43,7 +44,7 @@ class ImageViewCenter extends ConsumerWidget { ? ExtendedMemoryImageProvider(archiveImage) : ExtendedFileImageProvider( File('${datas.path!.path}${padIndex(datas.index! + 1)}.jpg')) - : ExtendedNetworkImageProvider(datas.url!.trim().trimLeft().trimRight(), + : CustomExtendedNetworkImageProvider(datas.url!.trim().trimLeft().trimRight(), cache: true, cacheMaxAge: const Duration(days: 7), headers: ref.watch(headersProvider( diff --git a/lib/modules/manga/reader/image_view_vertical.dart b/lib/modules/manga/reader/image_view_vertical.dart index 145035d9..98789ab2 100644 --- a/lib/modules/manga/reader/image_view_vertical.dart +++ b/lib/modules/manga/reader/image_view_vertical.dart @@ -7,6 +7,7 @@ import 'package:mangayomi/modules/manga/reader/providers/reader_controller_provi import 'package:mangayomi/modules/manga/reader/reader_view.dart'; import 'package:mangayomi/modules/manga/reader/widgets/color_filter_widget.dart'; import 'package:mangayomi/modules/more/settings/reader/providers/reader_state_provider.dart'; +import 'package:mangayomi/modules/widgets/custom_extended_image_provider.dart'; import 'package:mangayomi/providers/l10n_providers.dart'; import 'package:mangayomi/utils/extensions/build_context_extensions.dart'; import 'package:mangayomi/utils/headers.dart'; @@ -42,7 +43,7 @@ class ImageViewVertical extends ConsumerWidget { ? ExtendedMemoryImageProvider(archiveImage) : ExtendedFileImageProvider( File('${datas.path!.path}${padIndex(datas.index! + 1)}.jpg')) - : ExtendedNetworkImageProvider(datas.url!.trim().trimLeft().trimRight(), + : CustomExtendedNetworkImageProvider(datas.url!.trim().trimLeft().trimRight(), cache: true, cacheMaxAge: const Duration(days: 7), headers: ref.watch(headersProvider( diff --git a/lib/modules/widgets/custom_extended_image_provider.dart b/lib/modules/widgets/custom_extended_image_provider.dart new file mode 100644 index 00000000..8188fffd --- /dev/null +++ b/lib/modules/widgets/custom_extended_image_provider.dart @@ -0,0 +1,364 @@ +// ignore_for_file: non_nullable_equals_parameter, depend_on_referenced_packages, implementation_imports +import 'dart:async'; +import 'dart:io'; +import 'dart:ui' as ui show Codec; +import 'package:extended_image_library/src/extended_image_provider.dart'; +import 'package:extended_image_library/src/platform.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/widgets.dart'; +import 'package:http_client_helper/http_client_helper.dart'; +import 'package:mangayomi/services/http/interceptor.dart'; +import 'package:path/path.dart'; +import 'package:path_provider/path_provider.dart'; +import 'package:extended_image_library/src/network/extended_network_image_provider.dart' + as image_provider; + +class CustomExtendedNetworkImageProvider + extends ImageProvider + with ExtendedImageProvider + implements image_provider.ExtendedNetworkImageProvider { + /// Creates an object that fetches the image at the given URL. + /// + /// The arguments must not be null. + CustomExtendedNetworkImageProvider( + this.url, { + this.scale = 1.0, + this.headers, + this.cache = true, + this.retries = 3, + this.timeLimit, + this.timeRetry = const Duration(milliseconds: 100), + this.cacheKey, + this.printError = true, + this.cacheRawData = false, + this.cancelToken, + this.imageCacheName, + this.cacheMaxAge = const Duration(days: 30), + }); + + /// The name of [ImageCache], you can define custom [ImageCache] to store this provider. + @override + final String? imageCacheName; + + /// Whether cache raw data if you need to get raw data directly. + /// For example, we need raw image data to edit, + /// but [ui.Image.toByteData()] is very slow. So we cache the image + /// data here. + @override + final bool cacheRawData; + + /// The time limit to request image + @override + final Duration? timeLimit; + + /// The time to retry to request + @override + final int retries; + + /// The time duration to retry to request + @override + final Duration timeRetry; + + /// Whether cache image to local + @override + final bool cache; + + /// The URL from which the image will be fetched. + @override + final String url; + + /// The scale to place in the [ImageInfo] object of the image. + @override + final double scale; + + /// The HTTP headers that will be used with [HttpClient.get] to fetch image from network. + @override + final Map? headers; + + /// The token to cancel network request + @override + final CancellationToken? cancelToken; + + /// Custom cache key + @override + final String? cacheKey; + + /// print error + @override + final bool printError; + + /// The max duration to cahce image. + /// After this time the cache is expired and the image is reloaded. + @override + final Duration? cacheMaxAge; + + @override + ImageStreamCompleter loadImage( + image_provider.ExtendedNetworkImageProvider key, + ImageDecoderCallback decode, + ) { + // Ownership of this controller is handed off to [_loadAsync]; it is that + // method's responsibility to close the controller's stream when the image + // has been loaded or an error is thrown. + final StreamController chunkEvents = + StreamController(); + + return MultiFrameImageStreamCompleter( + codec: _loadAsync( + key as CustomExtendedNetworkImageProvider, + chunkEvents, + decode, + ), + scale: key.scale, + chunkEvents: chunkEvents.stream, + debugLabel: key.url, + informationCollector: () { + return [ + DiagnosticsProperty('Image provider', this), + DiagnosticsProperty( + 'Image key', key), + ]; + }, + ); + } + + @override + Future obtainKey( + ImageConfiguration configuration) { + return SynchronousFuture(this); + } + + Future _loadAsync( + CustomExtendedNetworkImageProvider key, + StreamController chunkEvents, + ImageDecoderCallback decode, + ) async { + assert(key == this); + final String md5Key = cacheKey ?? keyToMd5(key.url); + ui.Codec? result; + if (cache) { + try { + final Uint8List? data = await _loadCache( + key, + chunkEvents, + md5Key, + ); + if (data != null) { + result = await instantiateImageCodec(data, decode); + } + } catch (e) { + if (kDebugMode) { + print(e); + } + } + } + + if (result == null) { + try { + final Uint8List? data = await _loadNetwork( + key, + chunkEvents, + ); + if (data != null) { + result = await instantiateImageCodec(data, decode); + } + } catch (e) { + if (kDebugMode) { + print(e); + } + } + } + + //Failed to load + if (result == null) { + //result = await ui.instantiateImageCodec(kTransparentImage); + return Future.error(StateError('Failed to load $url.')); + } + + return result; + } + + /// Get the image from cache folder. + Future _loadCache( + CustomExtendedNetworkImageProvider key, + StreamController? chunkEvents, + String md5Key, + ) async { + final Directory cacheImagesDirectory = Directory( + join((await getTemporaryDirectory()).path, cacheImageFolderName)); + Uint8List? data; + // exist, try to find cache image file + if (cacheImagesDirectory.existsSync()) { + final File cacheFlie = File(join(cacheImagesDirectory.path, md5Key)); + if (cacheFlie.existsSync()) { + if (key.cacheMaxAge != null) { + final DateTime now = DateTime.now(); + final FileStat fs = cacheFlie.statSync(); + if (now.subtract(key.cacheMaxAge!).isAfter(fs.changed)) { + cacheFlie.deleteSync(recursive: true); + } else { + data = await cacheFlie.readAsBytes(); + } + } else { + data = await cacheFlie.readAsBytes(); + } + } + } + // create folder + else { + await cacheImagesDirectory.create(); + } + // load from network + if (data == null) { + data = await _loadNetwork( + key, + chunkEvents, + ); + if (data != null) { + // cache image file + await File(join(cacheImagesDirectory.path, md5Key)).writeAsBytes(data); + } + } + + return data; + } + + /// Get the image from network. + Future _loadNetwork( + CustomExtendedNetworkImageProvider key, + StreamController? chunkEvents, + ) async { + try { + final Uri resolved = Uri.base.resolve(key.url); + final StreamedResponse? response = await _tryGetResponse(resolved); + List bytes = []; + final int total = response!.contentLength ?? 0; + if (response.statusCode == HttpStatus.ok) { + int received = 0; + response.stream.asBroadcastStream(); + await for (var chunk in response.stream) { + bytes.addAll(chunk); + try { + received += chunk.length; + if (chunkEvents != null) {} + chunkEvents!.add(ImageChunkEvent( + cumulativeBytesLoaded: received, expectedTotalBytes: total)); + } catch (e) { + if (kDebugMode) { + print(e); + } + } + } + } else { + return null; + } + + if (bytes.isEmpty) { + return Future.error( + StateError('NetworkImage is an empty file: $resolved')); + } + + return Uint8List.fromList(bytes); + } on OperationCanceledError catch (_) { + if (kDebugMode) { + print('User cancel request $url.'); + } + return Future.error(StateError('User cancel request $url.')); + } catch (e) { + if (kDebugMode) { + print(e); + } + } finally { + await chunkEvents?.close(); + } + return null; + } + + Future _getResponse(Uri resolved) async { + var request = Request('GET', resolved); + request.headers.addAll(headers ?? {}); + + StreamedResponse response = await MInterceptor.init().send(request); + + return response; + } + + // Http get with cancel, delay try again + Future _tryGetResponse( + Uri resolved, + ) async { + cancelToken?.throwIfCancellationRequested(); + return await RetryHelper.tryRun( + () { + return CancellationTokenSource.register( + cancelToken, + _getResponse(resolved), + ); + }, + cancelToken: cancelToken, + timeRetry: timeRetry, + retries: retries, + ); + } + + @override + bool operator ==(dynamic other) { + if (other.runtimeType != runtimeType) { + return false; + } + return other is CustomExtendedNetworkImageProvider && + url == other.url && + scale == other.scale && + cacheRawData == other.cacheRawData && + timeLimit == other.timeLimit && + cancelToken == other.cancelToken && + timeRetry == other.timeRetry && + cache == other.cache && + cacheKey == other.cacheKey && + //headers == other.headers && + retries == other.retries && + imageCacheName == other.imageCacheName && + cacheMaxAge == other.cacheMaxAge; + } + + @override + int get hashCode => Object.hash( + url, + scale, + cacheRawData, + timeLimit, + cancelToken, + timeRetry, + cache, + cacheKey, + //headers, + retries, + imageCacheName, + cacheMaxAge, + ); + + @override + String toString() => '$runtimeType("$url", scale: $scale)'; + + @override + + /// Get network image data from cached + Future getNetworkImageData({ + StreamController? chunkEvents, + }) async { + final String uId = cacheKey ?? keyToMd5(url); + + if (cache) { + return await _loadCache( + this, + chunkEvents, + uId, + ); + } + + return await _loadNetwork( + this, + chunkEvents, + ); + } +} diff --git a/lib/modules/widgets/manga_image_card_widget.dart b/lib/modules/widgets/manga_image_card_widget.dart index 81fbb0f4..18182052 100644 --- a/lib/modules/widgets/manga_image_card_widget.dart +++ b/lib/modules/widgets/manga_image_card_widget.dart @@ -1,5 +1,4 @@ import 'dart:typed_data'; -import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:go_router/go_router.dart'; @@ -10,6 +9,7 @@ import 'package:mangayomi/models/manga.dart'; import 'package:mangayomi/models/settings.dart'; import 'package:mangayomi/models/source.dart'; import 'package:mangayomi/modules/manga/detail/manga_detail_main.dart'; +import 'package:mangayomi/modules/widgets/custom_extended_image_provider.dart'; import 'package:mangayomi/router/router.dart'; import 'package:mangayomi/utils/extensions/build_context_extensions.dart'; import 'package:mangayomi/utils/constant.dart'; @@ -52,7 +52,7 @@ class MangaImageCardWidget extends ConsumerWidget { ? MemoryImage( snapshot.data!.first.customCoverImage as Uint8List) as ImageProvider - : CachedNetworkImageProvider( + : CustomExtendedNetworkImageProvider( toImgUrl(hasData ? snapshot.data!.first.customCoverFromTracker ?? snapshot.data!.first.imageUrl ?? @@ -60,7 +60,8 @@ class MangaImageCardWidget extends ConsumerWidget { : getMangaDetail!.imageUrl!), headers: ref.watch(headersProvider( source: source.name!, lang: source.lang!)), - ), + cache: true, + cacheMaxAge: const Duration(days: 7)), onTap: () { pushToMangaReaderDetail( context: context, @@ -125,7 +126,7 @@ class MangaImageCardListTileWidget extends ConsumerWidget { final image = hasData && snapshot.data!.first.customCoverImage != null ? MemoryImage(snapshot.data!.first.customCoverImage as Uint8List) as ImageProvider - : CachedNetworkImageProvider( + : CustomExtendedNetworkImageProvider( toImgUrl(hasData ? snapshot.data!.first.customCoverFromTracker ?? snapshot.data!.first.imageUrl ?? diff --git a/lib/services/boa_js.dart b/lib/services/boa_js.dart deleted file mode 100644 index 0bbaaf81..00000000 --- a/lib/services/boa_js.dart +++ /dev/null @@ -1,24 +0,0 @@ -import 'package:mangayomi/messages/boa_js.pb.dart'; -import 'dart:async'; - -int nextId = 0; - -Future evalJs(String script) async { - final currentId = nextId; - nextId++; - final completer = Completer(); - BoaInput( - interactionId: currentId, - codeScript: script, - ).sendSignalToRust(null); - final stream = BoaOutput.rustSignalStream; - final subscription = stream.listen((rustSignal) { - if (rustSignal.message.interactionId == currentId) { - completer.complete(rustSignal.message.response); - } - }); - final response = await completer.future; - subscription.cancel(); - - return response; -} diff --git a/lib/services/http/interceptor.dart b/lib/services/http/interceptor.dart index 4e996761..d5f16d67 100644 --- a/lib/services/http/interceptor.dart +++ b/lib/services/http/interceptor.dart @@ -1,4 +1,6 @@ +import 'package:cupertino_http/cupertino_http.dart'; import 'package:flutter/foundation.dart'; +import 'package:google_api_availability/google_api_availability.dart'; import 'package:http_interceptor/http_interceptor.dart'; import 'package:mangayomi/eval/dart/model/m_bridge.dart'; import 'dart:async'; @@ -8,16 +10,39 @@ import 'package:mangayomi/main.dart'; import 'package:flutter_inappwebview/flutter_inappwebview.dart' as flutter_inappwebview; import 'package:mangayomi/models/settings.dart'; +import 'package:cronet_http/cronet_http.dart'; +import 'package:http/io_client.dart'; class MInterceptor { static final flutter_inappwebview.CookieManager _cookieManager = flutter_inappwebview.CookieManager.instance(); MInterceptor(); + static Client httpClient() { + if (Platform.isAndroid) { + if (playStoreAvailability == GooglePlayServicesAvailability.unknown) { + return IOClient(HttpClient()); + } + final engine = CronetEngine.build( + enablePublicKeyPinningBypassForLocalTrustAnchors: true, + enableHttp2: true, + enableBrotli: true, + cacheMode: CacheMode.memory, + cacheMaxSize: 5 * 1024 * 1024); + return CronetClient.fromCronetEngine(engine); + } + if (Platform.isIOS || Platform.isMacOS) { + final config = URLSessionConfiguration.ephemeralSessionConfiguration() + ..cache = URLCache.withCapacity(memoryCapacity: 5 * 1024 * 1024); + return CupertinoClient.fromSessionConfiguration(config); + } + return IOClient(HttpClient()); + } static InterceptedClient init( {MSource? source, Map? reqcopyWith}) { return InterceptedClient.build( + client: httpClient(), interceptors: [MCookieManager(reqcopyWith), LoggerInterceptor()]); } diff --git a/lib/services/torrent_server.dart b/lib/services/torrent_server.dart index df1d46b7..4cb6d58f 100644 --- a/lib/services/torrent_server.dart +++ b/lib/services/torrent_server.dart @@ -14,7 +14,7 @@ import 'package:riverpod_annotation/riverpod_annotation.dart'; part 'torrent_server.g.dart'; class MTorrentServer { - final http = MInterceptor.init(); + final http = Client(); Future removeTorrent(String? inforHash) async { if (inforHash == null || inforHash.isEmpty) return false; try { @@ -44,7 +44,8 @@ class MTorrentServer { Future getInfohash(String url) async { try { - final torrentByte = (await http.get(Uri.parse(url))).bodyBytes; + final torrentByte = + (await MInterceptor.init().get(Uri.parse(url))).bodyBytes; var request = MultipartRequest('POST', Uri.parse('$_baseUrl/torrent/add')); diff --git a/lib/utils/cached_network.dart b/lib/utils/cached_network.dart index 7ad774e5..06ecf4c8 100644 --- a/lib/utils/cached_network.dart +++ b/lib/utils/cached_network.dart @@ -1,33 +1,29 @@ -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/foundation.dart'; +import 'package:extended_image/extended_image.dart'; import 'package:flutter/material.dart'; +import 'package:mangayomi/modules/widgets/custom_extended_image_provider.dart'; Widget cachedNetworkImage( - {required Map? headers, + {Map? headers, required String imageUrl, required double? width, required double? height, required BoxFit? fit, - AlignmentGeometry? alignment}) { - if (kIsWeb) { - return Image.network( - imageUrl, - width: width, - height: height, - fit: fit, - alignment: alignment ?? Alignment.center, - ); - } else { - return CachedNetworkImage( - httpHeaders: headers ?? {}, - imageUrl: imageUrl, - fit: fit, - width: width, - height: height, - errorWidget: (context, url, error) => const Icon( - Icons.error, - size: 50, - ), - ); - } + AlignmentGeometry? alignment, + Widget errorWidget = const Icon(Icons.error, size: 50)}) { + return ExtendedImage( + image: CustomExtendedNetworkImageProvider(imageUrl, headers: headers), + width: width, + height: height, + fit: fit, + filterQuality: FilterQuality.medium, + enableMemoryCache: true, + mode: ExtendedImageMode.gesture, + handleLoadingProgress: true, + loadStateChanged: (state) { + if (state.extendedImageLoadState == LoadState.failed) { + return errorWidget; + } + return null; + }, + ); } diff --git a/linux/flutter/generated_plugins.cmake b/linux/flutter/generated_plugins.cmake index bb32c8a0..b32753b4 100644 --- a/linux/flutter/generated_plugins.cmake +++ b/linux/flutter/generated_plugins.cmake @@ -14,6 +14,7 @@ list(APPEND FLUTTER_PLUGIN_LIST ) list(APPEND FLUTTER_FFI_PLUGIN_LIST + jni media_kit_native_event_loop rinf ) diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index f621a09f..4c67dc0b 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -16,7 +16,6 @@ import path_provider_foundation import screen_brightness_macos import screen_retriever import share_plus -import sqflite import url_launcher_macos import wakelock_plus import window_manager @@ -34,7 +33,6 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { ScreenBrightnessMacosPlugin.register(with: registry.registrar(forPlugin: "ScreenBrightnessMacosPlugin")) ScreenRetrieverPlugin.register(with: registry.registrar(forPlugin: "ScreenRetrieverPlugin")) SharePlusMacosPlugin.register(with: registry.registrar(forPlugin: "SharePlusMacosPlugin")) - SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin")) UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin")) WakelockPlusMacosPlugin.register(with: registry.registrar(forPlugin: "WakelockPlusMacosPlugin")) WindowManagerPlugin.register(with: registry.registrar(forPlugin: "WindowManagerPlugin")) diff --git a/messages/boa_js.proto b/messages/boa_js.proto deleted file mode 100644 index 4255cca2..00000000 --- a/messages/boa_js.proto +++ /dev/null @@ -1,14 +0,0 @@ -syntax = "proto3"; -package boa_js; - -// [RINF:DART-SIGNAL] -message BoaInput { - int32 interaction_id = 1; - string code_script = 2; -} - -// [RINF:RUST-SIGNAL] -message BoaOutput { - int32 interaction_id = 1; - string response = 2; -} diff --git a/native/hub/Cargo.toml b/native/hub/Cargo.toml index 58a92dca..1a821cd8 100644 --- a/native/hub/Cargo.toml +++ b/native/hub/Cargo.toml @@ -12,10 +12,9 @@ edition = "2021" crate-type = ["lib", "cdylib", "staticlib"] [dependencies] -rinf = "6.4.0" +rinf = "6.6.3" allo-isolate = "0.1.24" wasm-bindgen = "0.2.90" prost = "0.12.3" -tokio_with_wasm = "0.4.0" -image = "0.24.8" -boa_engine = "0.17.3" +tokio_with_wasm = "0.4.3" +image = "0.25.0" diff --git a/native/hub/src/boa_js.rs b/native/hub/src/boa_js.rs deleted file mode 100644 index 50eeafb5..00000000 --- a/native/hub/src/boa_js.rs +++ /dev/null @@ -1,20 +0,0 @@ -use crate::messages; -use boa_engine::{Context, Source}; - -pub async fn eval_js() { - use messages::boa_js::*; - - let mut receiver = BoaInput::get_dart_signal_receiver(); - while let Some(dart_signal) = receiver.recv().await { - let mut context = Context::default(); - let code_script = dart_signal.message.code_script; - BoaOutput { - interaction_id: dart_signal.message.interaction_id, - response: match context.eval(Source::from_bytes(code_script.as_bytes())) { - Ok(res) => res.to_string(&mut context).unwrap().to_std_string_escaped(), - Err(_e) => "error".to_string(), - }, - } - .send_signal_to_dart(None); - } -} diff --git a/native/hub/src/imagecrop.rs b/native/hub/src/imagecrop.rs index d586b7d6..80816e36 100644 --- a/native/hub/src/imagecrop.rs +++ b/native/hub/src/imagecrop.rs @@ -20,7 +20,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.*/ use crate::messages; -use image::{DynamicImage, GenericImageView, ImageOutputFormat, ImageResult, Rgba}; +use image::{DynamicImage, GenericImageView, ImageResult, Rgba}; use std::io::Cursor; pub struct Point { @@ -145,7 +145,7 @@ pub async fn start_croping() { let image = dart_signal.blob.unwrap(); let res = crop_image(image); let mut image_data: Vec = Vec::new(); - res.write_to(&mut Cursor::new(&mut image_data), ImageOutputFormat::Png) + res.write_to(&mut Cursor::new(&mut image_data), image::ImageFormat::Png) .unwrap(); CropBordersOutput { interaction_id: dart_signal.message.interaction_id, diff --git a/native/hub/src/lib.rs b/native/hub/src/lib.rs index 83e269de..84cef72b 100644 --- a/native/hub/src/lib.rs +++ b/native/hub/src/lib.rs @@ -1,6 +1,5 @@ use tokio_with_wasm::tokio; -mod boa_js; mod imagecrop; mod messages; @@ -11,6 +10,5 @@ rinf::write_interface!(); async fn main() { // Repeat `crate::spawn` anywhere in your code // if more concurrent tasks are needed. - tokio::spawn(boa_js::eval_js()); tokio::spawn(imagecrop::start_croping()); } diff --git a/pubspec.lock b/pubspec.lock index 60a367b6..004b1332 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -146,30 +146,6 @@ packages: url: "https://pub.dev" source: hosted version: "8.9.0" - cached_network_image: - dependency: "direct main" - description: - name: cached_network_image - sha256: "28ea9690a8207179c319965c13cd8df184d5ee721ae2ce60f398ced1219cea1f" - url: "https://pub.dev" - source: hosted - version: "3.3.1" - cached_network_image_platform_interface: - dependency: transitive - description: - name: cached_network_image_platform_interface - sha256: "9e90e78ae72caa874a323d78fa6301b3fb8fa7ea76a8f96dc5b5bf79f283bf2f" - url: "https://pub.dev" - source: hosted - version: "4.0.0" - cached_network_image_web: - dependency: transitive - description: - name: cached_network_image_web - sha256: "42a835caa27c220d1294311ac409a43361088625a4f23c820b006dd9bffb3316" - url: "https://pub.dev" - source: hosted - version: "1.1.1" characters: dependency: transitive description: @@ -234,6 +210,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.1.1" + cronet_http: + dependency: "direct main" + description: + name: cronet_http + sha256: a38ffbb49797ae1e0f774fc884d128a7023986b14a3165e1e39841f9f7e22137 + url: "https://pub.dev" + source: hosted + version: "1.1.1" cross_file: dependency: transitive description: @@ -258,6 +242,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.0" + cupertino_http: + dependency: "direct main" + description: + name: cupertino_http + sha256: "0e3ed481280ad41d42d4881d4b6f89c083c17aa010205c9381ecb4c7ea7bdf1f" + url: "https://pub.dev" + source: hosted + version: "1.3.0" cupertino_icons: dependency: "direct main" description: @@ -462,14 +454,6 @@ packages: description: flutter source: sdk version: "0.0.0" - flutter_cache_manager: - dependency: transitive - description: - name: flutter_cache_manager - sha256: "8207f27539deb83732fdda03e259349046a39a4c767269285f449ade355d54ba" - url: "https://pub.dev" - source: hosted - version: "3.3.1" flutter_inappwebview: dependency: "direct main" description: @@ -599,6 +583,30 @@ packages: url: "https://pub.dev" source: hosted version: "12.1.3" + google_api_availability: + dependency: "direct main" + description: + name: google_api_availability + sha256: "3e9548cfd991d983d11425a2436d5bd957d048c279cc9e145ffe3f36fd847385" + url: "https://pub.dev" + source: hosted + version: "5.0.0" + google_api_availability_android: + dependency: transitive + description: + name: google_api_availability_android + sha256: d95429ae78083585c312de2c6578085e7d53d100a94656d691bce0bb0ce435be + url: "https://pub.dev" + source: hosted + version: "1.0.1" + google_api_availability_platform_interface: + dependency: transitive + description: + name: google_api_availability_platform_interface + sha256: "65b7da62fe5b582bb3d508628ad827d36d890710ea274766a992a56fa5420da6" + url: "https://pub.dev" + source: hosted + version: "1.0.1" google_fonts: dependency: "direct main" description: @@ -632,7 +640,7 @@ packages: source: hosted version: "0.15.4" http: - dependency: "direct overridden" + dependency: "direct main" description: name: http sha256: a2bbf9d017fcced29139daa8ed2bba4ece450ab222871df93ca9eec6f80c34ba @@ -735,6 +743,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.1.0+1" + jni: + dependency: transitive + description: + name: jni + sha256: "0d88790bdf7e298aa65a9094c62b58ea231169a2deb84f23defc7d7955885b43" + url: "https://pub.dev" + source: hosted + version: "0.7.2" js: dependency: transitive description: @@ -936,14 +952,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.2" - octo_image: - dependency: transitive - description: - name: octo_image - sha256: "45b40f99622f11901238e18d48f5f12ea36426d8eced9f4cbf58479c7aa2430d" - url: "https://pub.dev" - source: hosted - version: "2.0.0" package_config: dependency: transitive description: @@ -1349,22 +1357,6 @@ packages: url: "https://pub.dev" source: hosted version: "7.0.0" - sqflite: - dependency: transitive - description: - name: sqflite - sha256: a9016f495c927cb90557c909ff26a6d92d9bd54fc42ba92e19d4e79d61e798c6 - url: "https://pub.dev" - source: hosted - version: "2.3.2" - sqflite_common: - dependency: transitive - description: - name: sqflite_common - sha256: "28d8c66baee4968519fb8bd6cdbedad982d6e53359091f0b74544a9f32ec72d5" - url: "https://pub.dev" - source: hosted - version: "2.5.3" stack_trace: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 52a35227..2bd64ff9 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -14,7 +14,6 @@ dependencies: sdk: flutter go_router: ^12.1.3 flutter_riverpod: ^2.4.10 - cached_network_image: ^3.3.1 riverpod_annotation: ^2.3.3 html: ^0.15.4 font_awesome_flutter: ^10.6.0 @@ -75,6 +74,10 @@ dependencies: git: url: https://github.com/kodjodevf/flutter_qjs.git ref: main + cronet_http: ^1.1.1 + cupertino_http: ^1.3.0 + http: ^1.2.0 + google_api_availability: ^5.0.0 dependency_overrides: diff --git a/windows/flutter/generated_plugins.cmake b/windows/flutter/generated_plugins.cmake index 7304b10c..5cba74d0 100644 --- a/windows/flutter/generated_plugins.cmake +++ b/windows/flutter/generated_plugins.cmake @@ -18,6 +18,7 @@ list(APPEND FLUTTER_PLUGIN_LIST ) list(APPEND FLUTTER_FFI_PLUGIN_LIST + jni media_kit_native_event_loop rinf )