From ff5fcc4fc0dd97e187fac15480406993bc4231da Mon Sep 17 00:00:00 2001 From: Youwes09 Date: Wed, 15 Apr 2026 18:24:46 -0500 Subject: [PATCH] Chore: Flathub Support (Tinkering Around) --- PKGBUILD | 14 +- flake.nix | 4 +- ...oku.app.yml => io.github.Youwes09.Moku.yml | 46 +++--- packaging/cargo-sources.json | 96 ++++++++----- packaging/dev.moku.app.metainfo.xml | 36 ----- ...esktop => io.github.Youwes09.Moku.desktop} | 2 +- .../io.github.Youwes09.Moku.metainfo.xml | 68 +++++++++ src-tauri/Cargo.lock | 135 ++++++++++++------ src-tauri/Cargo.toml | 3 +- src-tauri/src/lib.rs | 16 ++- src-tauri/tauri.conf.json | 2 +- src/components/settings/Settings.svelte | 15 +- 12 files changed, 283 insertions(+), 154 deletions(-) rename dev.moku.app.yml => io.github.Youwes09.Moku.yml (84%) delete mode 100644 packaging/dev.moku.app.metainfo.xml rename packaging/{dev.moku.app.desktop => io.github.Youwes09.Moku.desktop} (86%) create mode 100644 packaging/io.github.Youwes09.Moku.metainfo.xml diff --git a/PKGBUILD b/PKGBUILD index a6f150d..f702df7 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -99,16 +99,16 @@ exec /usr/lib/moku/jre/bin/java \ -jar /usr/lib/moku/tachidesk/Suwayomi-Server.jar EOF - install -Dm644 packaging/dev.moku.app.desktop \ - "$pkgdir/usr/share/applications/dev.moku.app.desktop" + install -Dm644 packaging/io.github.Youwes09.Moku.app.desktop \ + "$pkgdir/usr/share/applications/io.github.Youwes09.Moku.app.desktop" install -Dm644 src-tauri/icons/32x32.png \ - "$pkgdir/usr/share/icons/hicolor/32x32/apps/dev.moku.app.png" + "$pkgdir/usr/share/icons/hicolor/32x32/apps/io.github.Youwes09.Moku.app.png" install -Dm644 src-tauri/icons/128x128.png \ - "$pkgdir/usr/share/icons/hicolor/128x128/apps/dev.moku.app.png" + "$pkgdir/usr/share/icons/hicolor/128x128/apps/io.github.Youwes09.Moku.app.png" install -Dm644 src-tauri/icons/128x128@2x.png \ - "$pkgdir/usr/share/icons/hicolor/256x256/apps/dev.moku.app.png" - install -Dm644 packaging/dev.moku.app.metainfo.xml \ - "$pkgdir/usr/share/metainfo/dev.moku.app.metainfo.xml" + "$pkgdir/usr/share/icons/hicolor/256x256/apps/io.github.Youwes09.Moku.app.png" + install -Dm644 packaging/io.github.Youwes09.Moku.app.metainfo.xml \ + "$pkgdir/usr/share/metainfo/io.github.Youwes09.Moku.metainfo.xml" install -Dm644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE" } diff --git a/flake.nix b/flake.nix index 982f8a1..2e50a34 100644 --- a/flake.nix +++ b/flake.nix @@ -177,7 +177,7 @@ EOF [[ $# -lt 1 ]] && { echo "Usage: nix run .#flatpak -- "; exit 1; } VERSION="$1" REPO="$(git rev-parse --show-toplevel)" - MANIFEST="$REPO/dev.moku.app.yml" + MANIFEST="$REPO/io.github.Youwes09.Moku.yml" echo "── Bumping versions ──" sed -i "s/\"version\": \"[^\"]*\"/\"version\": \"$VERSION\"/" \ @@ -226,7 +226,7 @@ EOF --force-clean \ "$REPO/build-dir" \ "$MANIFEST" - flatpak build-bundle "$REPO/repo" "$REPO/moku.flatpak" dev.moku.app + flatpak build-bundle "$REPO/repo" "$REPO/moku.flatpak" io.github.Youwes09.Moku rm -rf "$REPO/build-dir" "$REPO/repo" echo "moku.flatpak created" diff --git a/dev.moku.app.yml b/io.github.Youwes09.Moku.yml similarity index 84% rename from dev.moku.app.yml rename to io.github.Youwes09.Moku.yml index a55a944..3940c83 100644 --- a/dev.moku.app.yml +++ b/io.github.Youwes09.Moku.yml @@ -1,4 +1,4 @@ -app-id: dev.moku.app +app-id: io.github.Youwes09.Moku runtime: org.gnome.Platform runtime-version: '48' sdk: org.gnome.Sdk @@ -9,16 +9,22 @@ separate-locales: false finish-args: - --socket=wayland - - --socket=x11 - --socket=fallback-x11 - --share=ipc - --device=dri - --share=network - - --socket=session-bus - - --socket=system-bus - - --filesystem=home + + - --talk-name=org.freedesktop.Notifications + - --talk-name=org.freedesktop.portal.Desktop + - --talk-name=org.freedesktop.portal.FileTransfer + + - --talk-name=org.kde.StatusNotifierWatcher + - --talk-name=com.canonical.AppMenu.Registrar + - --talk-name=com.canonical.indicator.application + + - --filesystem=xdg-run/discord-ipc-0:ro - --filesystem=xdg-data/moku:create - - --talk-name=org.freedesktop.Flatpak + - --filesystem=xdg-download build-options: append-path: /usr/lib/sdk/rust-stable/bin @@ -33,13 +39,10 @@ modules: - tar -xf jdk.tar.gz -C /app/jre --strip-components=1 sources: - type: file - url: https://github.com/adoptium/temurin21-binaries/releases/download/jdk-21.0.3%2B9/OpenJDK21U-jre_x64_linux_hotspot_21.0.3_9.tar.gz - sha256: f1af100c4afca2035f446967323230150cfe5872b5a664d98c86963e5c066e0d + url: https://github.com/adoptium/temurin21-binaries/releases/download/jdk-21.0.5%2B11/OpenJDK21U-jre_x64_linux_hotspot_21.0.5_11.tar.gz + sha256: 553dda64b3b1c3c16f8afe402377ffebe64fb4a1721a46ed426a91fd18185e62 dest-filename: jdk.tar.gz - # catch_abort.so — intercepts SIGTRAP/SIGILL from KCEF's CEF subprocess and - # exits just that thread instead of killing the whole JVM. Official Suwayomi - # fix for headless environments. Source inlined to avoid upstream drift. - name: catch-abort buildsystem: simple build-commands: @@ -120,7 +123,6 @@ modules: fi # Force-patch the three keys that cause JCEF/GUI crashes every launch. - # Suwayomi ignores -D JVM flags when a conf file exists on disk. sed -i \ -e 's|server\.webUIEnabled.*|server.webUIEnabled = false|' \ -e 's|server\.initialOpenInBrowserEnabled.*|server.initialOpenInBrowserEnabled = false|' \ @@ -138,8 +140,6 @@ modules: export _JAVA_OPTIONS="-Djava.awt.headless=true" export JAVA_TOOL_OPTIONS="-Djava.awt.headless=true" - # Intercepts SIGTRAP/SIGILL from KCEF's CEF subprocess, exits just - # that thread instead of crashing the whole JVM process. export LD_PRELOAD="/app/lib/catch_abort.so" exec /app/jre/bin/java \ @@ -171,17 +171,19 @@ modules: - tar -xzf frontend-dist.tar.gz - . /usr/lib/sdk/rust-stable/enable.sh && PKG_CONFIG_PATH=/usr/lib/pkgconfig:/usr/share/pkgconfig cargo build --release --manifest-path src-tauri/Cargo.toml - install -Dm755 src-tauri/target/release/moku /app/bin/moku - - install -Dm644 packaging/dev.moku.app.desktop /app/share/applications/dev.moku.app.desktop - - install -Dm644 src-tauri/icons/32x32.png /app/share/icons/hicolor/32x32/apps/dev.moku.app.png - - install -Dm644 src-tauri/icons/128x128.png /app/share/icons/hicolor/128x128/apps/dev.moku.app.png - - install -Dm644 src-tauri/icons/128x128@2x.png /app/share/icons/hicolor/256x256/apps/dev.moku.app.png - - install -Dm644 packaging/dev.moku.app.metainfo.xml /app/share/metainfo/dev.moku.app.metainfo.xml + - install -Dm644 packaging/io.github.Youwes09.Moku.desktop /app/share/applications/io.github.Youwes09.Moku.desktop + - install -Dm644 src-tauri/icons/32x32.png /app/share/icons/hicolor/32x32/apps/io.github.Youwes09.Moku.png + - install -Dm644 src-tauri/icons/128x128.png /app/share/icons/hicolor/128x128/apps/io.github.Youwes09.Moku.png + - install -Dm644 src-tauri/icons/128x128@2x.png /app/share/icons/hicolor/256x256/apps/io.github.Youwes09.Moku.png + - install -Dm644 packaging/io.github.Youwes09.Moku.metainfo.xml /app/share/metainfo/io.github.Youwes09.Moku.metainfo.xml sources: - - type: dir - path: . + - type: git + url: https://github.com/Youwes09/Moku.git + tag: v0.8.0 + commit: 64f63ceaa2574622f07febf2b7b381b616544bd3 - type: file path: packaging/frontend-dist.tar.gz - sha256: 32773b16189f30dea3c54f7f3ae4416599f7b73d47edef03090f5b67de9560be + sha256: 1ceac38722071fc61dfb241803d93588279af3062aac82e526942e9857329e1e - packaging/cargo-sources.json - type: inline dest: src-tauri/.cargo diff --git a/packaging/cargo-sources.json b/packaging/cargo-sources.json index 7bc9970..749f34a 100644 --- a/packaging/cargo-sources.json +++ b/packaging/cargo-sources.json @@ -216,14 +216,14 @@ { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/bitflags/bitflags-2.11.0.crate", - "sha256": "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af", - "dest": "cargo/vendor/bitflags-2.11.0" + "url": "https://static.crates.io/crates/bitflags/bitflags-2.11.1.crate", + "sha256": "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3", + "dest": "cargo/vendor/bitflags-2.11.1" }, { "type": "inline", - "contents": "{\"package\": \"843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af\", \"files\": {}}", - "dest": "cargo/vendor/bitflags-2.11.0", + "contents": "{\"package\": \"c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3\", \"files\": {}}", + "dest": "cargo/vendor/bitflags-2.11.1", "dest-filename": ".cargo-checksum.json" }, { @@ -1997,14 +1997,14 @@ { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/hyper-rustls/hyper-rustls-0.27.8.crate", - "sha256": "c2b52f86d1d4bc0d6b4e6826d960b1b333217e07d36b882dca570a5e1c48895b", - "dest": "cargo/vendor/hyper-rustls-0.27.8" + "url": "https://static.crates.io/crates/hyper-rustls/hyper-rustls-0.27.9.crate", + "sha256": "33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f", + "dest": "cargo/vendor/hyper-rustls-0.27.9" }, { "type": "inline", - "contents": "{\"package\": \"c2b52f86d1d4bc0d6b4e6826d960b1b333217e07d36b882dca570a5e1c48895b\", \"files\": {}}", - "dest": "cargo/vendor/hyper-rustls-0.27.8", + "contents": "{\"package\": \"33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f\", \"files\": {}}", + "dest": "cargo/vendor/hyper-rustls-0.27.9", "dest-filename": ".cargo-checksum.json" }, { @@ -2504,14 +2504,14 @@ { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/libc/libc-0.2.184.crate", - "sha256": "48f5d2a454e16a5ea0f4ced81bd44e4cfc7bd3a507b61887c99fd3538b28e4af", - "dest": "cargo/vendor/libc-0.2.184" + "url": "https://static.crates.io/crates/libc/libc-0.2.185.crate", + "sha256": "52ff2c0fe9bc6cb6b14a0592c2ff4fa9ceb83eea9db979b0487cd054946a2b8f", + "dest": "cargo/vendor/libc-0.2.185" }, { "type": "inline", - "contents": "{\"package\": \"48f5d2a454e16a5ea0f4ced81bd44e4cfc7bd3a507b61887c99fd3538b28e4af\", \"files\": {}}", - "dest": "cargo/vendor/libc-0.2.184", + "contents": "{\"package\": \"52ff2c0fe9bc6cb6b14a0592c2ff4fa9ceb83eea9db979b0487cd054946a2b8f\", \"files\": {}}", + "dest": "cargo/vendor/libc-0.2.185", "dest-filename": ".cargo-checksum.json" }, { @@ -3986,14 +3986,14 @@ { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/rand/rand-0.9.3.crate", - "sha256": "7ec095654a25171c2124e9e3393a930bddbffdc939556c914957a4c3e0a87166", - "dest": "cargo/vendor/rand-0.9.3" + "url": "https://static.crates.io/crates/rand/rand-0.9.4.crate", + "sha256": "44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea", + "dest": "cargo/vendor/rand-0.9.4" }, { "type": "inline", - "contents": "{\"package\": \"7ec095654a25171c2124e9e3393a930bddbffdc939556c914957a4c3e0a87166\", \"files\": {}}", - "dest": "cargo/vendor/rand-0.9.3", + "contents": "{\"package\": \"44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea\", \"files\": {}}", + "dest": "cargo/vendor/rand-0.9.4", "dest-filename": ".cargo-checksum.json" }, { @@ -4116,14 +4116,14 @@ { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/rayon/rayon-1.11.0.crate", - "sha256": "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f", - "dest": "cargo/vendor/rayon-1.11.0" + "url": "https://static.crates.io/crates/rayon/rayon-1.12.0.crate", + "sha256": "fb39b166781f92d482534ef4b4b1b2568f42613b53e5b6c160e24cfbfa30926d", + "dest": "cargo/vendor/rayon-1.12.0" }, { "type": "inline", - "contents": "{\"package\": \"368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f\", \"files\": {}}", - "dest": "cargo/vendor/rayon-1.11.0", + "contents": "{\"package\": \"fb39b166781f92d482534ef4b4b1b2568f42613b53e5b6c160e24cfbfa30926d\", \"files\": {}}", + "dest": "cargo/vendor/rayon-1.12.0", "dest-filename": ".cargo-checksum.json" }, { @@ -4282,6 +4282,19 @@ "dest": "cargo/vendor/reqwest-0.13.2", "dest-filename": ".cargo-checksum.json" }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/rfd/rfd-0.16.0.crate", + "sha256": "a15ad77d9e70a92437d8f74c35d99b4e4691128df018833e99f90bcd36152672", + "dest": "cargo/vendor/rfd-0.16.0" + }, + { + "type": "inline", + "contents": "{\"package\": \"a15ad77d9e70a92437d8f74c35d99b4e4691128df018833e99f90bcd36152672\", \"files\": {}}", + "dest": "cargo/vendor/rfd-0.16.0", + "dest-filename": ".cargo-checksum.json" + }, { "type": "archive", "archive-type": "tar-gzip", @@ -4402,14 +4415,14 @@ { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/rustls-webpki/rustls-webpki-0.103.11.crate", - "sha256": "20a6af516fea4b20eccceaf166e8aa666ac996208e8a644ce3ef5aa783bc7cd4", - "dest": "cargo/vendor/rustls-webpki-0.103.11" + "url": "https://static.crates.io/crates/rustls-webpki/rustls-webpki-0.103.12.crate", + "sha256": "8279bb85272c9f10811ae6a6c547ff594d6a7f3c6c6b02ee9726d1d0dcfcdd06", + "dest": "cargo/vendor/rustls-webpki-0.103.12" }, { "type": "inline", - "contents": "{\"package\": \"20a6af516fea4b20eccceaf166e8aa666ac996208e8a644ce3ef5aa783bc7cd4\", \"files\": {}}", - "dest": "cargo/vendor/rustls-webpki-0.103.11", + "contents": "{\"package\": \"8279bb85272c9f10811ae6a6c547ff594d6a7f3c6c6b02ee9726d1d0dcfcdd06\", \"files\": {}}", + "dest": "cargo/vendor/rustls-webpki-0.103.12", "dest-filename": ".cargo-checksum.json" }, { @@ -5348,6 +5361,19 @@ "dest": "cargo/vendor/tauri-plugin-2.5.4", "dest-filename": ".cargo-checksum.json" }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/tauri-plugin-dialog/tauri-plugin-dialog-2.7.0.crate", + "sha256": "a1fa4150c95ae391946cc8b8f905ab14797427caba3a8a2f79628e956da91809", + "dest": "cargo/vendor/tauri-plugin-dialog-2.7.0" + }, + { + "type": "inline", + "contents": "{\"package\": \"a1fa4150c95ae391946cc8b8f905ab14797427caba3a8a2f79628e956da91809\", \"files\": {}}", + "dest": "cargo/vendor/tauri-plugin-dialog-2.7.0", + "dest-filename": ".cargo-checksum.json" + }, { "type": "shell", "commands": [ @@ -5668,14 +5694,14 @@ { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/tokio/tokio-1.51.1.crate", - "sha256": "f66bf9585cda4b724d3e78ab34b73fb2bbaba9011b9bfdf69dc836382ea13b8c", - "dest": "cargo/vendor/tokio-1.51.1" + "url": "https://static.crates.io/crates/tokio/tokio-1.52.0.crate", + "sha256": "a91135f59b1cbf38c91e73cf3386fca9bb77915c45ce2771460c9d92f0f3d776", + "dest": "cargo/vendor/tokio-1.52.0" }, { "type": "inline", - "contents": "{\"package\": \"f66bf9585cda4b724d3e78ab34b73fb2bbaba9011b9bfdf69dc836382ea13b8c\", \"files\": {}}", - "dest": "cargo/vendor/tokio-1.51.1", + "contents": "{\"package\": \"a91135f59b1cbf38c91e73cf3386fca9bb77915c45ce2771460c9d92f0f3d776\", \"files\": {}}", + "dest": "cargo/vendor/tokio-1.52.0", "dest-filename": ".cargo-checksum.json" }, { diff --git a/packaging/dev.moku.app.metainfo.xml b/packaging/dev.moku.app.metainfo.xml deleted file mode 100644 index f362f7a..0000000 --- a/packaging/dev.moku.app.metainfo.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - dev.moku.app - MIT - MIT - - Moku - Manga reader powered by Suwayomi - - -

- Moku is a desktop manga reader built on top of Suwayomi-Server (Tachidesk), - providing a clean native interface for browsing, reading, and managing your - manga library across hundreds of sources. -

-
- - dev.moku.app.desktop - - https://github.com/shozikan/Moku - https://github.com/shozikan/Moku/issues - - - moku - - - - - - - -

Svelte rewrite with improved UI, bundled server, and cross-platform fixes.

-
-
-
-
diff --git a/packaging/dev.moku.app.desktop b/packaging/io.github.Youwes09.Moku.desktop similarity index 86% rename from packaging/dev.moku.app.desktop rename to packaging/io.github.Youwes09.Moku.desktop index 4e865a5..5bfd4ff 100644 --- a/packaging/dev.moku.app.desktop +++ b/packaging/io.github.Youwes09.Moku.desktop @@ -2,7 +2,7 @@ Name=Moku Comment=Manga reader powered by Suwayomi Exec=moku -Icon=dev.moku.app +Icon=io.github.Youwes09.Moku Terminal=false Type=Application Categories=Graphics;Viewer; diff --git a/packaging/io.github.Youwes09.Moku.metainfo.xml b/packaging/io.github.Youwes09.Moku.metainfo.xml new file mode 100644 index 0000000..3d5903f --- /dev/null +++ b/packaging/io.github.Youwes09.Moku.metainfo.xml @@ -0,0 +1,68 @@ + + + io.github.Youwes09.Moku + MIT + MIT + + Moku + Manga reader powered by Suwayomi + + +

+ Moku is a desktop manga reader built on top of Suwayomi-Server (Tachidesk), + providing a clean native interface for browsing, reading, and managing your + manga library across hundreds of sources. +

+

+ Features include library management, chapter tracking, extension support, + reading history, notifications, and Discord Rich Presence integration. +

+
+ + io.github.Youwes09.Moku.desktop + + https://github.com/Youwes09/Moku + https://github.com/Youwes09/Moku/issues + + + + https://raw.githubusercontent.com/Youwes09/Moku/main/docs/screenshots/Moku-Home.png + Home screen showing your manga library + + + https://raw.githubusercontent.com/Youwes09/Moku/main/docs/screenshots/Moku-Reader.png + Built-in manga reader + + + https://raw.githubusercontent.com/Youwes09/Moku/main/docs/screenshots/Moku-Discover.png + Discover new manga across hundreds of sources + + + https://raw.githubusercontent.com/Youwes09/Moku/main/docs/screenshots/Moku-Downloads.png + Download manager + + + https://raw.githubusercontent.com/Youwes09/Moku/main/docs/screenshots/Moku-Settings.png + Settings + + + + + moku + + + + + + + +

Latest release with improved stability and UI refinements.

+
+
+ + +

Svelte rewrite with improved UI, bundled server, and cross-platform fixes.

+
+
+
+
diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 81da2ab..927487d 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -126,9 +126,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.11.0" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af" +checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3" dependencies = [ "serde_core", ] @@ -205,7 +205,7 @@ version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "cairo-sys-rs", "glib", "libc", @@ -404,7 +404,7 @@ version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "064badf302c3194842cf2c5d61f56cc88e54a759313879cdf03abdd27d0c3b97" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "core-foundation 0.10.1", "core-graphics-types", "foreign-types 0.5.0", @@ -417,7 +417,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "core-foundation 0.10.1", "libc", ] @@ -702,7 +702,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "block2", "libc", "objc2", @@ -1284,7 +1284,7 @@ version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "futures-channel", "futures-core", "futures-executor", @@ -1536,9 +1536,9 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.27.8" +version = "0.27.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2b52f86d1d4bc0d6b4e6826d960b1b333217e07d36b882dca570a5e1c48895b" +checksum = "33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f" dependencies = [ "http", "hyper", @@ -1920,7 +1920,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "serde", "unicode-segmentation", ] @@ -1969,9 +1969,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.184" +version = "0.2.185" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48f5d2a454e16a5ea0f4ced81bd44e4cfc7bd3a507b61887c99fd3538b28e4af" +checksum = "52ff2c0fe9bc6cb6b14a0592c2ff4fa9ceb83eea9db979b0487cd054946a2b8f" [[package]] name = "libloading" @@ -1989,7 +1989,7 @@ version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e02f3bb43d335493c96bf3fd3a321600bf6bd07ed34bc64118e9293bdffea46c" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "libc", "plain", "redox_syscall 0.7.4", @@ -2141,6 +2141,7 @@ dependencies = [ "sysinfo 0.32.1", "tauri", "tauri-build", + "tauri-plugin-dialog", "tauri-plugin-discord-rpc", "tauri-plugin-http", "tauri-plugin-os", @@ -2196,7 +2197,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "jni-sys 0.3.1", "log", "ndk-sys", @@ -2232,7 +2233,7 @@ version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "cfg-if", "cfg_aliases", "libc", @@ -2306,7 +2307,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "block2", "objc2", "objc2-core-foundation", @@ -2319,7 +2320,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73ad74d880bb43877038da939b7427bba67e9dd42004a18b809ba7d87cee241c" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "objc2", "objc2-foundation", ] @@ -2340,7 +2341,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "dispatch2", "objc2", ] @@ -2351,7 +2352,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "dispatch2", "objc2", "objc2-core-foundation", @@ -2384,7 +2385,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0cde0dfb48d25d2b4862161a4d5fcc0e3c24367869ad306b0c9ec0073bfed92d" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "objc2", "objc2-core-foundation", "objc2-core-graphics", @@ -2411,7 +2412,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "block2", "libc", "objc2", @@ -2434,7 +2435,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "objc2", "objc2-core-foundation", ] @@ -2445,7 +2446,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f112d1746737b0da274ef79a23aac283376f335f4095a083a267a082f21db0c0" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "objc2", "objc2-app-kit", "objc2-foundation", @@ -2457,7 +2458,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96c1358452b371bf9f104e21ec536d37a650eb10f7ee379fff67d2e08d537f1f" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "objc2", "objc2-core-foundation", "objc2-foundation", @@ -2469,7 +2470,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d87d638e33c06f577498cbcc50491496a3ed4246998a7fbba7ccb98b1e7eab22" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "block2", "objc2", "objc2-cloud-kit", @@ -2500,7 +2501,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b2e5aaab980c433cf470df9d7af96a7b46a9d892d521a2cbbb2f8a4c16751e7f" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "block2", "objc2", "objc2-app-kit", @@ -2532,7 +2533,7 @@ version = "0.10.77" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfe4646e360ec77dff7dde40ed3d6c5fee52d156ef4a62f53973d38294dad87f" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "cfg-if", "foreign-types 0.3.2", "libc", @@ -3069,7 +3070,7 @@ dependencies = [ "bytes", "getrandom 0.3.4", "lru-slab", - "rand 0.9.3", + "rand 0.9.4", "ring", "rustc-hash", "rustls", @@ -3143,9 +3144,9 @@ dependencies = [ [[package]] name = "rand" -version = "0.9.3" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ec095654a25171c2124e9e3393a930bddbffdc939556c914957a4c3e0a87166" +checksum = "44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea" dependencies = [ "rand_chacha 0.9.0", "rand_core 0.9.5", @@ -3234,9 +3235,9 @@ checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" [[package]] name = "rayon" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" +checksum = "fb39b166781f92d482534ef4b4b1b2568f42613b53e5b6c160e24cfbfa30926d" dependencies = [ "either", "rayon-core", @@ -3258,7 +3259,7 @@ version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", ] [[package]] @@ -3267,7 +3268,7 @@ version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f450ad9c3b1da563fb6948a8e0fb0fb9269711c9c73d9ea1de5058c79c8d643a" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", ] [[package]] @@ -3428,6 +3429,30 @@ dependencies = [ "web-sys", ] +[[package]] +name = "rfd" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a15ad77d9e70a92437d8f74c35d99b4e4691128df018833e99f90bcd36152672" +dependencies = [ + "block2", + "dispatch2", + "glib-sys", + "gobject-sys", + "gtk-sys", + "js-sys", + "log", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-foundation", + "raw-window-handle", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "windows-sys 0.60.2", +] + [[package]] name = "ring" version = "0.17.14" @@ -3463,7 +3488,7 @@ version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "errno", "libc", "linux-raw-sys", @@ -3535,9 +3560,9 @@ checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" [[package]] name = "rustls-webpki" -version = "0.103.11" +version = "0.103.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20a6af516fea4b20eccceaf166e8aa666ac996208e8a644ce3ef5aa783bc7cd4" +checksum = "8279bb85272c9f10811ae6a6c547ff594d6a7f3c6c6b02ee9726d1d0dcfcdd06" dependencies = [ "ring", "rustls-pki-types", @@ -3637,7 +3662,7 @@ version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "core-foundation 0.10.1", "core-foundation-sys", "libc", @@ -3678,7 +3703,7 @@ version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c5d9c0c92a92d33f08817311cf3f2c29a3538a8240e94a6a3c622ce652d7e00c" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "cssparser 0.36.0", "derive_more 2.1.1", "log", @@ -4190,7 +4215,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a13f3d0daba03132c0aa9767f98351b3488edc2c100cda2d2ec2b04f3d8d3c8b" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "core-foundation 0.9.4", "system-configuration-sys", ] @@ -4224,7 +4249,7 @@ version = "0.34.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9103edf55f2da3c82aea4c7fab7c4241032bfeea0e71fa557d98e00e7ce7cc20" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "block2", "core-foundation 0.10.1", "core-graphics", @@ -4415,6 +4440,24 @@ dependencies = [ "walkdir", ] +[[package]] +name = "tauri-plugin-dialog" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1fa4150c95ae391946cc8b8f905ab14797427caba3a8a2f79628e956da91809" +dependencies = [ + "log", + "raw-window-handle", + "rfd", + "serde", + "serde_json", + "tauri", + "tauri-plugin", + "tauri-plugin-fs", + "thiserror 2.0.18", + "url", +] + [[package]] name = "tauri-plugin-discord-rpc" version = "0.1.0" @@ -4794,9 +4837,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.51.1" +version = "1.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f66bf9585cda4b724d3e78ab34b73fb2bbaba9011b9bfdf69dc836382ea13b8c" +checksum = "a91135f59b1cbf38c91e73cf3386fca9bb77915c45ce2771460c9d92f0f3d776" dependencies = [ "bytes", "libc", @@ -4977,7 +5020,7 @@ version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "bytes", "futures-util", "http", @@ -5372,7 +5415,7 @@ version = "0.244.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "hashbrown 0.15.5", "indexmap 2.14.0", "semver", @@ -6164,7 +6207,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" dependencies = [ "anyhow", - "bitflags 2.11.0", + "bitflags 2.11.1", "indexmap 2.14.0", "log", "serde", diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index baf4330..545b5bf 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -20,6 +20,7 @@ tauri-plugin-shell = "2" tauri-plugin-updater = "2" tauri-plugin-process = "2" tauri-plugin-http = "2" +tauri-plugin-dialog = "2" tauri-plugin-os = "2.3.2" tauri-plugin-discord-rpc = { git = "https://github.com/Youwes09/tauri-plugin-discord-rpc" } serde = { version = "1", features = ["derive"] } @@ -36,4 +37,4 @@ codegen-units = 1 lto = true opt-level = "s" panic = "abort" -strip = true +strip = true \ No newline at end of file diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index a97c817..0fc319b 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -272,7 +272,7 @@ fn suwayomi_data_dir() -> PathBuf { { dirs::data_dir() .unwrap_or_else(|| dirs::home_dir().unwrap_or_else(|| PathBuf::from("~"))) - .join("dev.moku.app/tachidesk") + .join("io.github.Youwes09.Moku.app/tachidesk") } #[cfg(not(any(target_os = "windows", target_os = "macos")))] { @@ -615,10 +615,21 @@ fn open_path(path: String) -> Result<(), String> { } +#[tauri::command] +async fn pick_downloads_folder(app: tauri::AppHandle) -> Option { + use tauri_plugin_dialog::DialogExt; + app.dialog() + .file() + .set_title("Choose Downloads Folder") + .blocking_pick_folder() + .map(|p| p.to_string()) +} + #[cfg_attr(mobile, tauri::mobile_entry_point)] pub fn run() { tauri::Builder::default() .plugin(tauri_plugin_discord_rpc::init()) + .plugin(tauri_plugin_dialog::init()) .plugin(tauri_plugin_os::init()) .plugin(tauri_plugin_shell::init()) .plugin(tauri_plugin_http::init()) @@ -638,6 +649,7 @@ pub fn run() { download_and_install_update, restart_app, open_path, + pick_downloads_folder, ]) .setup(|_app| Ok(())) .on_window_event(|window, event| { @@ -647,4 +659,4 @@ pub fn run() { }) .run(tauri::generate_context!()) .expect("error while running moku"); -} +} \ No newline at end of file diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 6270e40..cefc73e 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -2,7 +2,7 @@ "$schema": "https://schema.tauri.app/config/2", "productName": "Moku", "version": "0.8.0", - "identifier": "dev.moku.app", + "identifier": "io.github.Youwes09.Moku.app", "build": { "frontendDist": "../dist", "beforeBuildCommand": "pnpm build" diff --git a/src/components/settings/Settings.svelte b/src/components/settings/Settings.svelte index e32a602..81af0ff 100644 --- a/src/components/settings/Settings.svelte +++ b/src/components/settings/Settings.svelte @@ -272,6 +272,14 @@ migrateFrom = null; migrateTo = null; migrateError = null; migrateProgress = null; } + async function browseDownloadsFolder() { + const picked = await invoke("pick_downloads_folder"); + if (picked) { + downloadsPathInput = picked; + pathsFieldError = { ...pathsFieldError, dl: undefined }; + } + } + function addExtraScanDir() { const dir = newScanDir.trim(); if (!dir || extraScanDirs.includes(dir)) return; @@ -1633,6 +1641,11 @@ onkeydown={(e) => e.key === "Enter" && savePaths()} oninput={() => { pathsFieldError = { ...pathsFieldError, dl: undefined }; }} /> + {#if !isExternalServer} + + {/if}
{#if pathsFieldError.dl} {pathsFieldError.dl} @@ -3118,4 +3131,4 @@ .content-action-btn:hover { color: var(--text-muted); border-color: var(--border-strong); background: var(--bg-overlay); } .content-action-active-allow { color: var(--color-success) !important; border-color: color-mix(in srgb, var(--color-success) 40%, transparent) !important; background: color-mix(in srgb, var(--color-success) 10%, transparent) !important; } .content-action-active-block { color: var(--color-error) !important; border-color: color-mix(in srgb, var(--color-error) 40%, transparent) !important; background: color-mix(in srgb, var(--color-error) 10%, transparent) !important; } - + \ No newline at end of file