From 38552a0c2e37f6289f7cce9311cf58ea1b6cb6ca Mon Sep 17 00:00:00 2001 From: scinac <125657254+scinac@users.noreply.github.com> Date: Tue, 3 Mar 2026 17:10:13 +0100 Subject: [PATCH] feat(reader): adding current Time and Battery to Footer (#3306) (#3402) * added current time to desktop bar * added time prototype to footer, needs code cleanup and settings toggle * fixed settings toggle, added translations and code cleanup * added battery support and moved Statusbar to own Component * #3306 added 24 hour clock support * refactored code styling and getting rid of any type in battery hook * Add battery info for Tauri Apps --------- Co-authored-by: Huang Xin --- Cargo.lock | 636 +++++++++++++++++- apps/readest-app/package.json | 1 + .../public/locales/ar/translation.json | 6 +- .../public/locales/bn/translation.json | 6 +- .../public/locales/bo/translation.json | 6 +- .../public/locales/de/translation.json | 6 +- .../public/locales/el/translation.json | 6 +- .../public/locales/es/translation.json | 6 +- .../public/locales/fa/translation.json | 6 +- .../public/locales/fr/translation.json | 6 +- .../public/locales/he/translation.json | 6 +- .../public/locales/hi/translation.json | 6 +- .../public/locales/id/translation.json | 6 +- .../public/locales/it/translation.json | 6 +- .../public/locales/ja/translation.json | 6 +- .../public/locales/ko/translation.json | 6 +- .../public/locales/ms/translation.json | 6 +- .../public/locales/nl/translation.json | 6 +- .../public/locales/pl/translation.json | 6 +- .../public/locales/pt/translation.json | 6 +- .../public/locales/ru/translation.json | 6 +- .../public/locales/si/translation.json | 6 +- .../public/locales/sl/translation.json | 6 +- .../public/locales/sv/translation.json | 6 +- .../public/locales/ta/translation.json | 6 +- .../public/locales/th/translation.json | 6 +- .../public/locales/tr/translation.json | 6 +- .../public/locales/uk/translation.json | 6 +- .../public/locales/vi/translation.json | 6 +- .../public/locales/zh-CN/translation.json | 6 +- .../public/locales/zh-TW/translation.json | 6 +- apps/readest-app/src-tauri/Cargo.toml | 1 + .../src-tauri/capabilities/default.json | 1 + apps/readest-app/src-tauri/src/lib.rs | 1 + .../src/app/reader/components/BooksGrid.tsx | 4 +- .../{ProgressInfo.tsx => ProgressBar.tsx} | 156 +++-- .../src/app/reader/components/StatusInfo.tsx | 81 +++ .../src/app/reader/hooks/useCurrentBattery.ts | 66 ++ .../src/app/reader/hooks/useCurrentTime.ts | 25 + .../src/components/settings/LayoutPanel.tsx | 88 +++ apps/readest-app/src/services/constants.ts | 4 + apps/readest-app/src/types/book.ts | 7 +- package.json | 2 +- pnpm-lock.yaml | 10 + 44 files changed, 1140 insertions(+), 117 deletions(-) rename apps/readest-app/src/app/reader/components/{ProgressInfo.tsx => ProgressBar.tsx} (50%) create mode 100644 apps/readest-app/src/app/reader/components/StatusInfo.tsx create mode 100644 apps/readest-app/src/app/reader/hooks/useCurrentBattery.ts create mode 100644 apps/readest-app/src/app/reader/hooks/useCurrentTime.ts diff --git a/Cargo.lock b/Cargo.lock index 41913216..c7aac10f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -33,6 +33,7 @@ dependencies = [ "tauri-build", "tauri-plugin-cli", "tauri-plugin-deep-link", + "tauri-plugin-device-info", "tauri-plugin-dialog", "tauri-plugin-fs", "tauri-plugin-haptics", @@ -409,6 +410,23 @@ version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" +[[package]] +name = "battery" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4b624268937c0e0a3edb7c27843f9e547c320d730c610d3b8e6e8e95b2026e4" +dependencies = [ + "cfg-if", + "core-foundation 0.7.0", + "lazycell", + "libc", + "mach", + "nix 0.19.1", + "num-traits", + "uom", + "winapi", +] + [[package]] name = "bincode" version = "1.3.3" @@ -901,13 +919,23 @@ dependencies = [ "url", ] +[[package]] +name = "core-foundation" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57d24c7a13c43e870e37c1556b74555437870a04514f7685f5b354e090567171" +dependencies = [ + "core-foundation-sys 0.7.0", + "libc", +] + [[package]] name = "core-foundation" version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" dependencies = [ - "core-foundation-sys", + "core-foundation-sys 0.8.7", "libc", ] @@ -917,10 +945,16 @@ version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" dependencies = [ - "core-foundation-sys", + "core-foundation-sys 0.8.7", "libc", ] +[[package]] +name = "core-foundation-sys" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac" + [[package]] name = "core-foundation-sys" version = "0.8.7" @@ -953,6 +987,19 @@ dependencies = [ "libc", ] +[[package]] +name = "core-graphics" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "064badf302c3194842cf2c5d61f56cc88e54a759313879cdf03abdd27d0c3b97" +dependencies = [ + "bitflags 2.10.0", + "core-foundation 0.10.1", + "core-graphics-types 0.2.0", + "foreign-types 0.5.0", + "libc", +] + [[package]] name = "core-graphics-types" version = "0.1.3" @@ -1083,14 +1130,38 @@ dependencies = [ "cipher", ] +[[package]] +name = "darling" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" +dependencies = [ + "darling_core 0.20.11", + "darling_macro 0.20.11", +] + [[package]] name = "darling" version = "0.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" dependencies = [ - "darling_core", - "darling_macro", + "darling_core 0.21.3", + "darling_macro 0.21.3", +] + +[[package]] +name = "darling_core" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.114", ] [[package]] @@ -1107,13 +1178,24 @@ dependencies = [ "syn 2.0.114", ] +[[package]] +name = "darling_macro" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" +dependencies = [ + "darling_core 0.20.11", + "quote", + "syn 2.0.114", +] + [[package]] name = "darling_macro" version = "0.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" dependencies = [ - "darling_core", + "darling_core 0.21.3", "quote", "syn 2.0.114", ] @@ -1130,6 +1212,23 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "be1e0bca6c3637f992fc1cc7cbc52a78c1ef6db076dbf1059c4323d6a2048376" +[[package]] +name = "default-net" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c5a6569a908354d49b10db3c516d69aca1eccd97562fd31c98b13f00b73ca66" +dependencies = [ + "dlopen2 0.5.0", + "libc", + "memalloc", + "netlink-packet-core", + "netlink-packet-route", + "netlink-sys", + "once_cell", + "system-configuration 0.5.1", + "windows 0.48.0", +] + [[package]] name = "deranged" version = "0.5.5" @@ -1151,6 +1250,37 @@ dependencies = [ "syn 2.0.114", ] +[[package]] +name = "derive_builder" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "507dfb09ea8b7fa618fcf76e953f4f5e192547945816d5358edffe39f6f94947" +dependencies = [ + "derive_builder_macro", +] + +[[package]] +name = "derive_builder_core" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d5bcf7b024d6835cfb3d473887cd966994907effbe9227e8c8219824d06c4e8" +dependencies = [ + "darling 0.20.11", + "proc-macro2", + "quote", + "syn 2.0.114", +] + +[[package]] +name = "derive_builder_macro" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" +dependencies = [ + "derive_builder_core", + "syn 2.0.114", +] + [[package]] name = "derive_more" version = "0.99.20" @@ -1248,6 +1378,17 @@ dependencies = [ "libloading 0.8.9", ] +[[package]] +name = "dlopen2" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09b4f5f101177ff01b8ec4ecc81eead416a8aa42819a2869311b3420fa114ffa" +dependencies = [ + "libc", + "once_cell", + "winapi", +] + [[package]] name = "dlopen2" version = "0.8.2" @@ -1339,6 +1480,12 @@ version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" +[[package]] +name = "either" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" + [[package]] name = "embed-resource" version = "3.0.6" @@ -1888,6 +2035,18 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "getset" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cf0fc11e47561d47397154977bc219f4cf809b2974facc3ccb3b89e2436f912" +dependencies = [ + "proc-macro-error2", + "proc-macro2", + "quote", + "syn 2.0.114", +] + [[package]] name = "ghash" version = "0.5.1" @@ -2241,7 +2400,7 @@ dependencies = [ "percent-encoding", "pin-project-lite", "socket2", - "system-configuration", + "system-configuration 0.6.1", "tokio", "tower-service", "tracing", @@ -2255,7 +2414,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" dependencies = [ "android_system_properties", - "core-foundation-sys", + "core-foundation-sys 0.8.7", "iana-time-zone-haiku", "js-sys", "log", @@ -2608,6 +2767,12 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +[[package]] +name = "lazycell" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" + [[package]] name = "libappindicator" version = "0.9.0" @@ -2706,6 +2871,17 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092" +[[package]] +name = "local-ip-address" +version = "0.6.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79ef8c257c92ade496781a32a581d43e3d512cf8ce714ecf04ea80f93ed0ff4a" +dependencies = [ + "libc", + "neli", + "windows-sys 0.61.2", +] + [[package]] name = "lock_api" version = "0.4.14" @@ -2736,6 +2912,15 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" +[[package]] +name = "mach" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa" +dependencies = [ + "libc", +] + [[package]] name = "malloc_buf" version = "0.0.6" @@ -2776,6 +2961,12 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" +[[package]] +name = "memalloc" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df39d232f5c40b0891c10216992c2f250c054105cb1e56f0fc9032db6203ecc1" + [[package]] name = "memchr" version = "2.7.6" @@ -2903,12 +3094,101 @@ dependencies = [ "jni-sys", ] +[[package]] +name = "neli" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22f9786d56d972959e1408b6a93be6af13b9c1392036c5c1fafa08a1b0c6ee87" +dependencies = [ + "bitflags 2.10.0", + "byteorder", + "derive_builder", + "getset", + "libc", + "log", + "neli-proc-macros", + "parking_lot", +] + +[[package]] +name = "neli-proc-macros" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05d8d08c6e98f20a62417478ebf7be8e1425ec9acecc6f63e22da633f6b71609" +dependencies = [ + "either", + "proc-macro2", + "quote", + "serde", + "syn 2.0.114", +] + +[[package]] +name = "netlink-packet-core" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72724faf704479d67b388da142b186f916188505e7e0b26719019c525882eda4" +dependencies = [ + "anyhow", + "byteorder", + "netlink-packet-utils", +] + +[[package]] +name = "netlink-packet-route" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053998cea5a306971f88580d0829e90f270f940befd7cf928da179d4187a5a66" +dependencies = [ + "anyhow", + "bitflags 1.3.2", + "byteorder", + "libc", + "netlink-packet-core", + "netlink-packet-utils", +] + +[[package]] +name = "netlink-packet-utils" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ede8a08c71ad5a95cdd0e4e52facd37190977039a4704eb82a283f713747d34" +dependencies = [ + "anyhow", + "byteorder", + "paste", + "thiserror 1.0.69", +] + +[[package]] +name = "netlink-sys" +version = "0.8.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd6c30ed10fa69cc491d491b85cc971f6bdeb8e7367b7cde2ee6cc878d583fae" +dependencies = [ + "bytes", + "libc", + "log", +] + [[package]] name = "new_debug_unreachable" version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" +[[package]] +name = "nix" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2ccba0cfe4fdf15982d1674c69b1fd80bad427d293849982668dfe454bd61f2" +dependencies = [ + "bitflags 1.3.2", + "cc", + "cfg-if", + "libc", +] + [[package]] name = "nix" version = "0.30.1" @@ -2927,6 +3207,15 @@ version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" +[[package]] +name = "ntapi" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3b335231dfd352ffb0f8017f3b6027a4917f7df785ea2143d8af2adc66980ae" +dependencies = [ + "winapi", +] + [[package]] name = "num-conv" version = "0.1.0" @@ -3396,7 +3685,7 @@ checksum = "e4022a17595a00d6a369236fdae483f0de7f0a339960a53118b818238e132224" dependencies = [ "android_system_properties", "log", - "nix", + "nix 0.30.1", "objc2", "objc2-foundation", "objc2-ui-kit", @@ -3854,6 +4143,28 @@ dependencies = [ "version_check", ] +[[package]] +name = "proc-macro-error-attr2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" +dependencies = [ + "proc-macro2", + "quote", +] + +[[package]] +name = "proc-macro-error2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" +dependencies = [ + "proc-macro-error-attr2", + "proc-macro2", + "quote", + "syn 2.0.114", +] + [[package]] name = "proc-macro-hack" version = "0.5.20+deprecated" @@ -4521,7 +4832,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d99feebc72bae7ab76ba994bb5e121b8d83d910ca40b36e0921f53becc41784" dependencies = [ "core-foundation 0.10.1", - "core-foundation-sys", + "core-foundation-sys 0.8.7", "jni", "log", "once_cell", @@ -4680,7 +4991,7 @@ checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ "bitflags 2.10.0", "core-foundation 0.9.4", - "core-foundation-sys", + "core-foundation-sys 0.8.7", "libc", "security-framework-sys", ] @@ -4693,7 +5004,7 @@ checksum = "b3297343eaf830f66ede390ea39da1d462b6b0c1b000f420d0a83f898bbbe6ef" dependencies = [ "bitflags 2.10.0", "core-foundation 0.10.1", - "core-foundation-sys", + "core-foundation-sys 0.8.7", "libc", "security-framework-sys", ] @@ -4704,7 +5015,7 @@ version = "2.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0" dependencies = [ - "core-foundation-sys", + "core-foundation-sys 0.8.7", "libc", ] @@ -4868,7 +5179,7 @@ version = "3.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52a8e3ca0ca629121f70ab50f95249e5a6f925cc0f6ffe8256c45b728875706c" dependencies = [ - "darling", + "darling 0.21.3", "proc-macro2", "quote", "syn 2.0.114", @@ -5224,6 +5535,30 @@ dependencies = [ "libc", ] +[[package]] +name = "sysinfo" +version = "0.34.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4b93974b3d3aeaa036504b8eefd4c039dced109171c1ae973f1dc63b2c7e4b2" +dependencies = [ + "libc", + "memchr", + "ntapi", + "objc2-core-foundation", + "windows 0.57.0", +] + +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation 0.9.4", + "system-configuration-sys 0.5.0", +] + [[package]] name = "system-configuration" version = "0.6.1" @@ -5232,7 +5567,17 @@ checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ "bitflags 2.10.0", "core-foundation 0.9.4", - "system-configuration-sys", + "system-configuration-sys 0.6.0", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys 0.8.7", + "libc", ] [[package]] @@ -5241,7 +5586,7 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" dependencies = [ - "core-foundation-sys", + "core-foundation-sys 0.8.7", "libc", ] @@ -5270,7 +5615,7 @@ dependencies = [ "core-graphics 0.24.0", "crossbeam-channel", "dispatch", - "dlopen2", + "dlopen2 0.8.2", "dpi", "gdkwayland-sys", "gdkx11-sys", @@ -5292,7 +5637,7 @@ dependencies = [ "tao-macros", "unicode-segmentation", "url", - "windows", + "windows 0.61.3", "windows-core 0.61.2", "windows-version", "x11-dl", @@ -5390,7 +5735,7 @@ dependencies = [ "webkit2gtk", "webview2-com", "window-vibrancy", - "windows", + "windows 0.61.3", ] [[package]] @@ -5503,6 +5848,27 @@ dependencies = [ "windows-result 0.3.4", ] +[[package]] +name = "tauri-plugin-device-info" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4c8d9a6d11719b36ea2af6c94e4d8bcc50b6ebe1b7064ad17ec02dd0b23aae9" +dependencies = [ + "battery", + "core-graphics 0.25.0", + "default-net", + "libc", + "local-ip-address", + "serde", + "serde_json", + "sysinfo", + "tauri", + "tauri-plugin", + "thiserror 2.0.17", + "winapi", + "wmi", +] + [[package]] name = "tauri-plugin-dialog" version = "2.6.0" @@ -5659,7 +6025,7 @@ dependencies = [ "tauri-plugin", "thiserror 2.0.17", "url", - "windows", + "windows 0.61.3", "zbus", ] @@ -5724,7 +6090,7 @@ dependencies = [ "tauri", "tauri-plugin", "thiserror 2.0.17", - "windows", + "windows 0.61.3", "windows-collections", ] @@ -5863,7 +6229,7 @@ dependencies = [ "url", "webkit2gtk", "webview2-com", - "windows", + "windows 0.61.3", ] [[package]] @@ -5888,7 +6254,7 @@ dependencies = [ "url", "webkit2gtk", "webview2-com", - "windows", + "windows 0.61.3", "wry", ] @@ -6476,6 +6842,16 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" +[[package]] +name = "uom" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e76503e636584f1e10b9b3b9498538279561adcef5412927ba00c2b32c4ce5ed" +dependencies = [ + "num-traits", + "typenum", +] + [[package]] name = "url" version = "2.5.8" @@ -6810,10 +7186,10 @@ checksum = "7130243a7a5b33c54a444e54842e6a9e133de08b5ad7b5861cd8ed9a6a5bc96a" dependencies = [ "webview2-com-macros", "webview2-com-sys", - "windows", + "windows 0.61.3", "windows-core 0.61.2", - "windows-implement", - "windows-interface", + "windows-implement 0.60.2", + "windows-interface 0.59.3", ] [[package]] @@ -6834,7 +7210,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "381336cfffd772377d291702245447a5251a2ffa5bad679c99e61bc48bacbf9c" dependencies = [ "thiserror 2.0.17", - "windows", + "windows 0.61.3", "windows-core 0.61.2", ] @@ -6884,6 +7260,35 @@ dependencies = [ "windows-version", ] +[[package]] +name = "windows" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows" +version = "0.57.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12342cb4d8e3b046f3d80effd474a7a02447231330ef77d71daa6fbc40681143" +dependencies = [ + "windows-core 0.57.0", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" +dependencies = [ + "windows-core 0.58.0", + "windows-targets 0.52.6", +] + [[package]] name = "windows" version = "0.61.3" @@ -6906,14 +7311,39 @@ dependencies = [ "windows-core 0.61.2", ] +[[package]] +name = "windows-core" +version = "0.57.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2ed2439a290666cd67ecce2b0ffaad89c2a56b976b736e6ece670297897832d" +dependencies = [ + "windows-implement 0.57.0", + "windows-interface 0.57.0", + "windows-result 0.1.2", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-core" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" +dependencies = [ + "windows-implement 0.58.0", + "windows-interface 0.58.0", + "windows-result 0.2.0", + "windows-strings 0.1.0", + "windows-targets 0.52.6", +] + [[package]] name = "windows-core" version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" dependencies = [ - "windows-implement", - "windows-interface", + "windows-implement 0.60.2", + "windows-interface 0.59.3", "windows-link 0.1.3", "windows-result 0.3.4", "windows-strings 0.4.2", @@ -6925,8 +7355,8 @@ version = "0.62.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" dependencies = [ - "windows-implement", - "windows-interface", + "windows-implement 0.60.2", + "windows-interface 0.59.3", "windows-link 0.2.1", "windows-result 0.4.1", "windows-strings 0.5.1", @@ -6943,6 +7373,28 @@ dependencies = [ "windows-threading", ] +[[package]] +name = "windows-implement" +version = "0.57.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9107ddc059d5b6fbfbffdfa7a7fe3e22a226def0b2608f72e9d552763d3e1ad7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.114", +] + +[[package]] +name = "windows-implement" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.114", +] + [[package]] name = "windows-implement" version = "0.60.2" @@ -6954,6 +7406,28 @@ dependencies = [ "syn 2.0.114", ] +[[package]] +name = "windows-interface" +version = "0.57.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29bee4b38ea3cde66011baa44dba677c432a78593e202392d1e9070cf2a7fca7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.114", +] + +[[package]] +name = "windows-interface" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.114", +] + [[package]] name = "windows-interface" version = "0.59.3" @@ -7009,6 +7483,24 @@ dependencies = [ "windows-strings 0.5.1", ] +[[package]] +name = "windows-result" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e383302e8ec8515204254685643de10811af0ed97ea37210dc26fb0032647f8" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-result" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" +dependencies = [ + "windows-targets 0.52.6", +] + [[package]] name = "windows-result" version = "0.3.4" @@ -7027,6 +7519,16 @@ dependencies = [ "windows-link 0.2.1", ] +[[package]] +name = "windows-strings" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" +dependencies = [ + "windows-result 0.2.0", + "windows-targets 0.52.6", +] + [[package]] name = "windows-strings" version = "0.4.2" @@ -7105,6 +7607,21 @@ dependencies = [ "windows_x86_64_msvc 0.42.2", ] +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + [[package]] name = "windows-targets" version = "0.52.6" @@ -7162,6 +7679,12 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + [[package]] name = "windows_aarch64_gnullvm" version = "0.52.6" @@ -7180,6 +7703,12 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + [[package]] name = "windows_aarch64_msvc" version = "0.52.6" @@ -7198,6 +7727,12 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + [[package]] name = "windows_i686_gnu" version = "0.52.6" @@ -7228,6 +7763,12 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + [[package]] name = "windows_i686_msvc" version = "0.52.6" @@ -7246,6 +7787,12 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + [[package]] name = "windows_x86_64_gnu" version = "0.52.6" @@ -7264,6 +7811,12 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + [[package]] name = "windows_x86_64_gnullvm" version = "0.52.6" @@ -7282,6 +7835,12 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + [[package]] name = "windows_x86_64_msvc" version = "0.52.6" @@ -7337,6 +7896,21 @@ version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" +[[package]] +name = "wmi" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff00ac1309d4c462be86f03a55e409509e8bf4323ec296aeb4b381dd9aabe6ec" +dependencies = [ + "chrono", + "futures", + "log", + "serde", + "thiserror 1.0.69", + "windows 0.58.0", + "windows-core 0.58.0", +] + [[package]] name = "writeable" version = "0.6.2" @@ -7383,7 +7957,7 @@ dependencies = [ "webkit2gtk", "webkit2gtk-sys", "webview2-com", - "windows", + "windows 0.61.3", "windows-core 0.61.2", "windows-version", "x11-dl", diff --git a/apps/readest-app/package.json b/apps/readest-app/package.json index 888c1f2e..787d807d 100644 --- a/apps/readest-app/package.json +++ b/apps/readest-app/package.json @@ -146,6 +146,7 @@ "stripe": "^18.2.1", "styled-jsx": "^5.1.7", "tailwind-merge": "^3.4.0", + "tauri-plugin-device-info-api": "^1.0.1", "tinycolor2": "^1.6.0", "uuid": "^11.1.0", "ws": "^8.18.3", diff --git a/apps/readest-app/public/locales/ar/translation.json b/apps/readest-app/public/locales/ar/translation.json index a8055eb2..1146b1da 100644 --- a/apps/readest-app/public/locales/ar/translation.json +++ b/apps/readest-app/public/locales/ar/translation.json @@ -872,6 +872,9 @@ "Clear search": "مسح البحث", "Clear search history": "مسح سجل البحث", "Tap to Toggle Footer": "انقر لتبديل التذييل", + "Show Current Time": "عرض الوقت الحالي", + "Use 24 Hour Clock": "استخدام نظام 24 ساعة", + "Show Current Battery Status": "عرض حالة البطارية الحالية", "Exported successfully": "تم التصدير بنجاح", "Book exported successfully.": "تم تصدير الكتاب بنجاح.", "Failed to export the book.": "فشل تصدير الكتاب.", @@ -1108,5 +1111,6 @@ "Page:": "صفحة:", "Page: {{number}}": "صفحة: {{number}}", "Annotation page number": "رقم صفحة التعליق", - "Translating...": "جارٍ الترجمة..." + "Translating...": "جارٍ الترجمة...", + "Show Battery Percentage": "عرض نسبة البطارية" } diff --git a/apps/readest-app/public/locales/bn/translation.json b/apps/readest-app/public/locales/bn/translation.json index 91215968..fbf86dc1 100644 --- a/apps/readest-app/public/locales/bn/translation.json +++ b/apps/readest-app/public/locales/bn/translation.json @@ -832,6 +832,9 @@ "Clear search": "অনুসন্ধান সাফ করুন", "Clear search history": "অনুসন্ধান ইতিহাস সাফ করুন", "Tap to Toggle Footer": "ফুটার টগল করতে আলতো চাপুন", + "Show Current Time": "বর্তমান সময় দেখান", + "Use 24 Hour Clock": "২৪ ঘণ্টার ঘড়ি ব্যবহার করুন", + "Show Current Battery Status": "বর্তমান ব্যাটারি অবস্থা দেখান", "Exported successfully": "সফলভাবে রপ্তানি হয়েছে", "Book exported successfully.": "বইটি সফলভাবে রপ্তানি হয়েছে।", "Failed to export the book.": "বই রপ্তানি করতে ব্যর্থ।", @@ -1060,5 +1063,6 @@ "Page:": "পৃষ্ঠা:", "Page: {{number}}": "পৃষ্ঠা: {{number}}", "Annotation page number": "টীকা পৃষ্ঠা নম্বর", - "Translating...": "অনুবাদ করা হচ্ছে..." + "Translating...": "অনুবাদ করা হচ্ছে...", + "Show Battery Percentage": "ব্যাটারি শতাংশ দেখান" } diff --git a/apps/readest-app/public/locales/bo/translation.json b/apps/readest-app/public/locales/bo/translation.json index e1db69f4..0f9b05b8 100644 --- a/apps/readest-app/public/locales/bo/translation.json +++ b/apps/readest-app/public/locales/bo/translation.json @@ -822,6 +822,9 @@ "Clear search": "འཚོལ་བཤེར་གཙང་སེལ།", "Clear search history": "འཚོལ་བཤེར་ལོ་རྒྱུས་གཙང་སེལ།", "Tap to Toggle Footer": "ཞབས་མཇུག་སྒོ་འབྱེད་བྱེད་པར་གནོན།", + "Show Current Time": "ད་ལྟའི་དུས་ཚོད་སྟོན་པ།", + "Use 24 Hour Clock": "ཆུ་ཚོད་ ༢༤ ཅན་གྱི་ཟློས་འཁོར་བཀོལ་བ།", + "Show Current Battery Status": "ད་ལྟའི་གློག་རྫས་གནས་བབ་སྟོན་པ།", "Exported successfully": "ཕྱིར་འདོན་ལེགས་གྲུབ་བྱུང་།", "Book exported successfully.": "དཔེ་དེབ་ཕྱིར་འདོན་ལེགས་གྲུབ་བྱུང་།", "Failed to export the book.": "དཔེ་དེབ་ཕྱིར་འདོན་མི་ཐུབ།", @@ -1048,5 +1051,6 @@ "Page:": "ཤོག་ལྷེ།:", "Page: {{number}}": "ཤོག་ལྷེ།: {{number}}", "Annotation page number": "མཆན་འགྲེལ་ཤོག་ཨང་།", - "Translating...": "ཡིག་བསྒྱུར་བྱེད་བཞིན་པ།..." + "Translating...": "ཡིག་བསྒྱུར་བྱེད་བཞིན་པ།...", + "Show Battery Percentage": "གློག་རྫས་བརྒྱ་ཆ་སྟོན།" } diff --git a/apps/readest-app/public/locales/de/translation.json b/apps/readest-app/public/locales/de/translation.json index eb183512..4010cf9a 100644 --- a/apps/readest-app/public/locales/de/translation.json +++ b/apps/readest-app/public/locales/de/translation.json @@ -832,6 +832,9 @@ "Clear search": "Suche löschen", "Clear search history": "Suchverlauf löschen", "Tap to Toggle Footer": "Tippen, um Fußzeile umzuschalten", + "Show Current Time": "Aktuelle Uhrzeit anzeigen", + "Use 24 Hour Clock": "24-Stunden-Format verwenden", + "Show Current Battery Status": "Aktuellen Akkustand anzeigen", "Exported successfully": "Erfolgreich exportiert", "Book exported successfully.": "Buch erfolgreich exportiert.", "Failed to export the book.": "Buch konnte nicht exportiert werden.", @@ -1060,5 +1063,6 @@ "Page:": "Seite:", "Page: {{number}}": "Seite: {{number}}", "Annotation page number": "Seitenzahl der Anmerkung", - "Translating...": "Übersetzen..." + "Translating...": "Übersetzen...", + "Show Battery Percentage": "Akkustand in Prozent anzeigen" } diff --git a/apps/readest-app/public/locales/el/translation.json b/apps/readest-app/public/locales/el/translation.json index a720dbcf..7b751283 100644 --- a/apps/readest-app/public/locales/el/translation.json +++ b/apps/readest-app/public/locales/el/translation.json @@ -832,6 +832,9 @@ "Clear search": "Εκκαθάριση αναζήτησης", "Clear search history": "Εκκαθάριση ιστορικού αναζήτησης", "Tap to Toggle Footer": "Πατήστε για εναλλαγή υποσέλιδου", + "Show Current Time": "Εμφάνιση τρέχουσας ώρας", + "Use 24 Hour Clock": "Χρήση 24ωρης μορφής ώρας", + "Show Current Battery Status": "Εμφάνιση τρέχουσας κατάστασης μπαταρίας", "Exported successfully": "Εξαγωγή επιτυχής", "Book exported successfully.": "Το βιβλίο εξήχθη επιτυχώς.", "Failed to export the book.": "Αποτυχία εξαγωγής του βιβλίου.", @@ -1060,5 +1063,6 @@ "Page:": "Σελίδα:", "Page: {{number}}": "Σελίδα: {{number}}", "Annotation page number": "Αριθμός σελίδας σχολίου", - "Translating...": "Μετάφραση..." + "Translating...": "Μετάφραση...", + "Show Battery Percentage": "Εμφάνιση ποσοστού μπαταρίας" } diff --git a/apps/readest-app/public/locales/es/translation.json b/apps/readest-app/public/locales/es/translation.json index d9241f0f..6f49d5b7 100644 --- a/apps/readest-app/public/locales/es/translation.json +++ b/apps/readest-app/public/locales/es/translation.json @@ -842,6 +842,9 @@ "Clear search": "Borrar búsqueda", "Clear search history": "Borrar historial de búsqueda", "Tap to Toggle Footer": "Toca para alternar pie de página", + "Show Current Time": "Mostrar hora actual", + "Use 24 Hour Clock": "Usar formato de 24 horas", + "Show Current Battery Status": "Mostrar el estado actual de la batería", "Exported successfully": "Exportado con éxito", "Book exported successfully.": "Libro exportado con éxito.", "Failed to export the book.": "Error al exportar el libro.", @@ -1072,5 +1075,6 @@ "Page:": "Página:", "Page: {{number}}": "Página: {{number}}", "Annotation page number": "Número de página de la anotación", - "Translating...": "Traduciendo..." + "Translating...": "Traduciendo...", + "Show Battery Percentage": "Mostrar porcentaje de batería" } diff --git a/apps/readest-app/public/locales/fa/translation.json b/apps/readest-app/public/locales/fa/translation.json index 32996be4..a6a1a2f9 100644 --- a/apps/readest-app/public/locales/fa/translation.json +++ b/apps/readest-app/public/locales/fa/translation.json @@ -832,6 +832,9 @@ "Clear search": "پاک کردن جستجو", "Clear search history": "پاک کردن تاریخچه جستجو", "Tap to Toggle Footer": "برای تغییر پاورقی ضربه بزنید", + "Show Current Time": "نمایش زمان فعلی", + "Use 24 Hour Clock": "استفاده از ساعت ۲۴ ساعته", + "Show Current Battery Status": "نمایش وضعیت فعلی باتری", "Exported successfully": "صادرات موفق", "Book exported successfully.": "کتاب با موفقیت صادر شد.", "Failed to export the book.": "صادر کردن کتاب ناموفق بود.", @@ -1060,5 +1063,6 @@ "Page:": "صفحه:", "Page: {{number}}": "صفحه: {{number}}", "Annotation page number": "شماره صفحه یادداشت", - "Translating...": "در حال ترجمه..." + "Translating...": "در حال ترجمه...", + "Show Battery Percentage": "نمایش درصد باتری" } diff --git a/apps/readest-app/public/locales/fr/translation.json b/apps/readest-app/public/locales/fr/translation.json index 2970cc3f..03e49f69 100644 --- a/apps/readest-app/public/locales/fr/translation.json +++ b/apps/readest-app/public/locales/fr/translation.json @@ -842,6 +842,9 @@ "Clear search": "Effacer la recherche", "Clear search history": "Effacer l'historique de recherche", "Tap to Toggle Footer": "Appuyez pour afficher/masquer le pied de page", + "Show Current Time": "Afficher l'heure actuelle", + "Use 24 Hour Clock": "Utiliser le format 24 heures", + "Show Current Battery Status": "Afficher l'état actuel de la batterie", "Exported successfully": "Exporté avec succès", "Book exported successfully.": "Livre exporté avec succès.", "Failed to export the book.": "Échec de l'exportation du livre.", @@ -1072,5 +1075,6 @@ "Page:": "Page :", "Page: {{number}}": "Page : {{number}}", "Annotation page number": "Numéro de page de l'annotation", - "Translating...": "Traduction en cours..." + "Translating...": "Traduction en cours...", + "Show Battery Percentage": "Afficher le pourcentage de batterie" } diff --git a/apps/readest-app/public/locales/he/translation.json b/apps/readest-app/public/locales/he/translation.json index c2c16753..fe051515 100644 --- a/apps/readest-app/public/locales/he/translation.json +++ b/apps/readest-app/public/locales/he/translation.json @@ -966,6 +966,9 @@ "Page Number": "מספר דף", "Percentage": "אחוזים", "Tap to Toggle Footer": "הקש להצגת/הסתרת כותרת תחתונה", + "Show Current Time": "הצגת השעה הנוכחית", + "Use 24 Hour Clock": "השתמש בשעון 24 שעות", + "Show Current Battery Status": "הצג מצב סוללה נוכחי", "Screen": "מסך", "Orientation": "כיוון מסך (Orientation)", "Portrait": "לאורך (Portrait)", @@ -1072,5 +1075,6 @@ "Page:": "עמוד:", "Page: {{number}}": "עמוד: {{number}}", "Annotation page number": "מספר עמוד הערה", - "Translating...": "מתרגם..." + "Translating...": "מתרגם...", + "Show Battery Percentage": "הצג אחוזי סוללה" } diff --git a/apps/readest-app/public/locales/hi/translation.json b/apps/readest-app/public/locales/hi/translation.json index f007bdcf..c91ebc76 100644 --- a/apps/readest-app/public/locales/hi/translation.json +++ b/apps/readest-app/public/locales/hi/translation.json @@ -832,6 +832,9 @@ "Clear search": "खोज साफ़ करें", "Clear search history": "खोज इतिहास साफ़ करें", "Tap to Toggle Footer": "फुटर टॉगल करने के लिए टैप करें", + "Show Current Time": "वर्तमान समय दिखाएं", + "Use 24 Hour Clock": "24 घंटे की घड़ी का उपयोग करें", + "Show Current Battery Status": "वर्तमान बैटरी स्थिति दिखाएं", "Exported successfully": "सफलतापूर्वक निर्यात किया गया", "Book exported successfully.": "पुस्तक सफलतापूर्वक निर्यात की गई।", "Failed to export the book.": "पुस्तक निर्यात करने में विफल।", @@ -1060,5 +1063,6 @@ "Page:": "पृष्ठ:", "Page: {{number}}": "पृष्ठ: {{number}}", "Annotation page number": "व्याख्या पृष्ठ संख्या", - "Translating...": "अनुवाद हो रहा है..." + "Translating...": "अनुवाद हो रहा है...", + "Show Battery Percentage": "बैटरी प्रतिशत दिखाएं" } diff --git a/apps/readest-app/public/locales/id/translation.json b/apps/readest-app/public/locales/id/translation.json index 351a0c24..6939a8e4 100644 --- a/apps/readest-app/public/locales/id/translation.json +++ b/apps/readest-app/public/locales/id/translation.json @@ -822,6 +822,9 @@ "Clear search": "Hapus pencarian", "Clear search history": "Hapus riwayat pencarian", "Tap to Toggle Footer": "Ketuk untuk beralih footer", + "Show Current Time": "Tampilkan Waktu Sekarang", + "Use 24 Hour Clock": "Gunakan Format 24 Jam", + "Show Current Battery Status": "Tampilkan Status Baterai Saat Ini", "Exported successfully": "Berhasil diekspor", "Book exported successfully.": "Buku berhasil diekspor.", "Failed to export the book.": "Gagal mengekspor buku.", @@ -1048,5 +1051,6 @@ "Page:": "Halaman:", "Page: {{number}}": "Halaman: {{number}}", "Annotation page number": "Nomor halaman anotasi", - "Translating...": "Menerjemahkan..." + "Translating...": "Menerjemahkan...", + "Show Battery Percentage": "Tampilkan Persentase Baterai" } diff --git a/apps/readest-app/public/locales/it/translation.json b/apps/readest-app/public/locales/it/translation.json index 59b1b017..4d50eabe 100644 --- a/apps/readest-app/public/locales/it/translation.json +++ b/apps/readest-app/public/locales/it/translation.json @@ -842,6 +842,9 @@ "Clear search": "Cancella ricerca", "Clear search history": "Cancella cronologia ricerche", "Tap to Toggle Footer": "Tocca per mostrare/nascondere il piè di pagina", + "Show Current Time": "Mostra ora attuale", + "Use 24 Hour Clock": "Usa formato 24 ore", + "Show Current Battery Status": "Mostra lo stato attuale della batteria", "Exported successfully": "Esportato con successo", "Book exported successfully.": "Libro esportato con successo.", "Failed to export the book.": "Impossibile esportare il libro.", @@ -1072,5 +1075,6 @@ "Page:": "Pagina:", "Page: {{number}}": "Pagina: {{number}}", "Annotation page number": "Numero di pagina dell'annotazione", - "Translating...": "Traduzione..." + "Translating...": "Traduzione...", + "Show Battery Percentage": "Mostra percentuale batteria" } diff --git a/apps/readest-app/public/locales/ja/translation.json b/apps/readest-app/public/locales/ja/translation.json index 20195cda..babf18cf 100644 --- a/apps/readest-app/public/locales/ja/translation.json +++ b/apps/readest-app/public/locales/ja/translation.json @@ -822,6 +822,9 @@ "Clear search": "検索をクリア", "Clear search history": "検索履歴をクリア", "Tap to Toggle Footer": "タップでフッターを切り替え", + "Show Current Time": "現在時刻を表示", + "Use 24 Hour Clock": "24時間表示を使用", + "Show Current Battery Status": "バッテリー残量を表示", "Exported successfully": "エクスポート成功", "Book exported successfully.": "書籍のエクスポートに成功しました。", "Failed to export the book.": "書籍のエクスポートに失敗しました。", @@ -1048,5 +1051,6 @@ "Page:": "ページ:", "Page: {{number}}": "ページ: {{number}}", "Annotation page number": "注釈のページ番号", - "Translating...": "翻訳中..." + "Translating...": "翻訳中...", + "Show Battery Percentage": "バッテリー残量を表示" } diff --git a/apps/readest-app/public/locales/ko/translation.json b/apps/readest-app/public/locales/ko/translation.json index 22d7d72a..65af9e8a 100644 --- a/apps/readest-app/public/locales/ko/translation.json +++ b/apps/readest-app/public/locales/ko/translation.json @@ -822,6 +822,9 @@ "Clear search": "검색 지우기", "Clear search history": "검색 기록 지우기", "Tap to Toggle Footer": "탭하여 바닥글 전환", + "Show Current Time": "현재 시간 표시", + "Use 24 Hour Clock": "24시간제 사용", + "Show Current Battery Status": "현재 배터리 상태 표시", "Exported successfully": "내보내기 성공", "Book exported successfully.": "책을 성공적으로 내보냈습니다.", "Failed to export the book.": "책 내보내기에 실패했습니다.", @@ -1048,5 +1051,6 @@ "Page:": "페이지:", "Page: {{number}}": "페이지: {{number}}", "Annotation page number": "주석 페이지 번호", - "Translating...": "번역 중..." + "Translating...": "번역 중...", + "Show Battery Percentage": "배터리 백분율 표시" } diff --git a/apps/readest-app/public/locales/ms/translation.json b/apps/readest-app/public/locales/ms/translation.json index d59d7d10..056d7231 100644 --- a/apps/readest-app/public/locales/ms/translation.json +++ b/apps/readest-app/public/locales/ms/translation.json @@ -822,6 +822,9 @@ "Clear search": "Kosongkan carian", "Clear search history": "Kosongkan sejarah carian", "Tap to Toggle Footer": "Ketik untuk togol pengaki", + "Show Current Time": "Tunjukkan Waktu Sekarang", + "Use 24 Hour Clock": "Gunakan Format 24 Jam", + "Show Current Battery Status": "Paparkan Status Bateri Semasa", "Exported successfully": "Berjaya dieksport", "Book exported successfully.": "Buku berjaya dieksport.", "Failed to export the book.": "Gagal mengeksport buku.", @@ -1048,5 +1051,6 @@ "Page:": "Halaman:", "Page: {{number}}": "Halaman: {{number}}", "Annotation page number": "Nombor halaman anotasi", - "Translating...": "Menterjemah..." + "Translating...": "Menterjemah...", + "Show Battery Percentage": "Tunjukkan Peratusan Bateri" } diff --git a/apps/readest-app/public/locales/nl/translation.json b/apps/readest-app/public/locales/nl/translation.json index 8e9407e8..81127224 100644 --- a/apps/readest-app/public/locales/nl/translation.json +++ b/apps/readest-app/public/locales/nl/translation.json @@ -832,6 +832,9 @@ "Clear search": "Zoekopdracht wissen", "Clear search history": "Zoekgeschiedenis wissen", "Tap to Toggle Footer": "Tik om voettekst te wisselen", + "Show Current Time": "Huidige tijd weergeven", + "Use 24 Hour Clock": "24-uurs klok gebruike", + "Show Current Battery Status": "Toon huidige batterijstatus", "Exported successfully": "Succesvol geëxporteerd", "Book exported successfully.": "Boek succesvol geëxporteerd.", "Failed to export the book.": "Exporteren van het boek mislukt.", @@ -1060,5 +1063,6 @@ "Page:": "Pagina:", "Page: {{number}}": "Pagina: {{number}}", "Annotation page number": "Annotatiepaginanummer", - "Translating...": "Vertalen..." + "Translating...": "Vertalen...", + "Show Battery Percentage": "Batterijpercentage weergeven" } diff --git a/apps/readest-app/public/locales/pl/translation.json b/apps/readest-app/public/locales/pl/translation.json index 9f82bc42..dfb73414 100644 --- a/apps/readest-app/public/locales/pl/translation.json +++ b/apps/readest-app/public/locales/pl/translation.json @@ -852,6 +852,9 @@ "Clear search": "Wyczyść wyszukiwanie", "Clear search history": "Wyczyść historię wyszukiwania", "Tap to Toggle Footer": "Dotknij, aby przełączyć stopkę", + "Show Current Time": "Pokaż aktualny czas", + "Use 24 Hour Clock": "Używaj formatu 24-godzinnego", + "Show Current Battery Status": "Pokaż aktualny stan baterii", "Exported successfully": "Wyeksportowano pomyślnie", "Book exported successfully.": "Książka została wyeksportowana pomyślnie.", "Failed to export the book.": "Nie udało się wyeksportować książki.", @@ -1084,5 +1087,6 @@ "Page:": "Strona:", "Page: {{number}}": "Strona: {{number}}", "Annotation page number": "Numer strony adnotacji", - "Translating...": "Tłumaczenie..." + "Translating...": "Tłumaczenie...", + "Show Battery Percentage": "Pokaż procent baterii" } diff --git a/apps/readest-app/public/locales/pt/translation.json b/apps/readest-app/public/locales/pt/translation.json index b5c44399..411b0a14 100644 --- a/apps/readest-app/public/locales/pt/translation.json +++ b/apps/readest-app/public/locales/pt/translation.json @@ -842,6 +842,9 @@ "Clear search": "Limpar pesquisa", "Clear search history": "Limpar histórico de pesquisa", "Tap to Toggle Footer": "Toque para alternar rodapé", + "Show Current Time": "Mostrar hora atual", + "Use 24 Hour Clock": "Usar formato de 24 horas", + "Show Current Battery Status": "Mostrar o estado atual da bateria", "Exported successfully": "Exportado com sucesso", "Book exported successfully.": "Livro exportado com sucesso.", "Failed to export the book.": "Falha ao exportar o livro.", @@ -1072,5 +1075,6 @@ "Page:": "Página:", "Page: {{number}}": "Página: {{number}}", "Annotation page number": "Número de página da anotação", - "Translating...": "Traduzindo..." + "Translating...": "Traduzindo...", + "Show Battery Percentage": "Mostrar porcentagem da bateria" } diff --git a/apps/readest-app/public/locales/ru/translation.json b/apps/readest-app/public/locales/ru/translation.json index a70092c2..236eea5f 100644 --- a/apps/readest-app/public/locales/ru/translation.json +++ b/apps/readest-app/public/locales/ru/translation.json @@ -852,6 +852,9 @@ "Clear search": "Очистить поиск", "Clear search history": "Очистить историю поиска", "Tap to Toggle Footer": "Нажмите для переключения нижнего колонтитула", + "Show Current Time": "Показать текущее время", + "Use 24 Hour Clock": "Использовать 24-часовой формат", + "Show Current Battery Status": "Показать текущее состояние батареи", "Exported successfully": "Успешно экспортировано", "Book exported successfully.": "Книга успешно экспортирована.", "Failed to export the book.": "Не удалось экспортировать книгу.", @@ -1084,5 +1087,6 @@ "Page:": "Страница:", "Page: {{number}}": "Страница: {{number}}", "Annotation page number": "Номер страницы аннотации", - "Translating...": "Перевод..." + "Translating...": "Перевод...", + "Show Battery Percentage": "Показывать процент заряда батареи" } diff --git a/apps/readest-app/public/locales/si/translation.json b/apps/readest-app/public/locales/si/translation.json index aca2d93e..129461c9 100644 --- a/apps/readest-app/public/locales/si/translation.json +++ b/apps/readest-app/public/locales/si/translation.json @@ -832,6 +832,9 @@ "Clear search": "සෙවුම හිස් කරන්න", "Clear search history": "සෙවුම් ඉතිහාසය හිස් කරන්න", "Tap to Toggle Footer": "පාදකය ටොගල් කිරීමට තට්ටු කරන්න", + "Show Current Time": "වත්මන් වේලාව පෙන්වන්න", + "Use 24 Hour Clock": "පැය 24 ඔරලෝසුව භාවිතා කරන්න", + "Show Current Battery Status": "වත්මන් බැටරි තත්ත්වය පෙන්වන්න", "Exported successfully": "සාර්ථකව අපනයනය කරන ලදී", "Book exported successfully.": "පොත සාර්ථකව අපනයනය කරන ලදී.", "Failed to export the book.": "පොත අපනයනය කිරීමට අසමත් විය.", @@ -1060,5 +1063,6 @@ "Page:": "පිටුව:", "Page: {{number}}": "පිටුව: {{number}}", "Annotation page number": "විවරණ පිටු අංකය", - "Translating...": "පරිවර්තනය වෙමින් පවතී..." + "Translating...": "පරිවර්තනය වෙමින් පවතී...", + "Show Battery Percentage": "බැටරි ප්‍රතිශතය පෙන්වන්න" } diff --git a/apps/readest-app/public/locales/sl/translation.json b/apps/readest-app/public/locales/sl/translation.json index 6174136f..72f119cd 100644 --- a/apps/readest-app/public/locales/sl/translation.json +++ b/apps/readest-app/public/locales/sl/translation.json @@ -1084,5 +1084,9 @@ "Sunset": "Sončni zahod", "Reveal in Finder": "Prikaži v Finderju", "Reveal in File Explorer": "Prikaži v File Explorerju", - "Reveal in Folder": "Prikaži v mapi" + "Reveal in Folder": "Prikaži v mapi", + "Show Current Time": "Prikaži trenutni čas", + "Use 24 Hour Clock": "Uporabi 24-urni zapis časa", + "Show Current Battery Status": "Prikaži trenutno stanje baterije", + "Show Battery Percentage": "Prikaži odstotek baterije" } diff --git a/apps/readest-app/public/locales/sv/translation.json b/apps/readest-app/public/locales/sv/translation.json index 7dd2354e..d677d98b 100644 --- a/apps/readest-app/public/locales/sv/translation.json +++ b/apps/readest-app/public/locales/sv/translation.json @@ -832,6 +832,9 @@ "Clear search": "Rensa sökning", "Clear search history": "Rensa sökhistorik", "Tap to Toggle Footer": "Tryck för att växla sidfot", + "Show Current Time": "Visa aktuell tid", + "Use 24 Hour Clock": "Använd 24-timmarsklocka", + "Show Current Battery Status": "Visa aktuell batteristatus", "Exported successfully": "Exporterad", "Book exported successfully.": "Boken har exporterats.", "Failed to export the book.": "Det gick inte att exportera boken.", @@ -1060,5 +1063,6 @@ "Page:": "Sida:", "Page: {{number}}": "Sida: {{number}}", "Annotation page number": "Annoteringssidnummer", - "Translating...": "Översätter..." + "Translating...": "Översätter...", + "Show Battery Percentage": "Visa batteriprocent" } diff --git a/apps/readest-app/public/locales/ta/translation.json b/apps/readest-app/public/locales/ta/translation.json index 09eb1793..83a755a7 100644 --- a/apps/readest-app/public/locales/ta/translation.json +++ b/apps/readest-app/public/locales/ta/translation.json @@ -832,6 +832,9 @@ "Clear search": "தேடலை அழி", "Clear search history": "தேடல் வரலாற்றை அழி", "Tap to Toggle Footer": "அடிக்குறிப்பை மாற்ற தட்டவும்", + "Show Current Time": "தற்போதைய நேரத்தைக் காண்பி", + "Use 24 Hour Clock": "24 மணிநேர கடிகாரத்தைப் பயன்படுத்து", + "Show Current Battery Status": "தற்போதைய பேட்டரி நிலையைக் காண்பி", "Exported successfully": "ஏற்றுமதி வெற்றி", "Book exported successfully.": "புத்தகம் வெற்றிகரமாக ஏற்றுமதி செய்யப்பட்டது.", "Failed to export the book.": "புத்தகத்தை ஏற்றுமதி செய்ய இயலவில்லை.", @@ -1060,5 +1063,6 @@ "Page:": "பக்கம்:", "Page: {{number}}": "பக்கம்: {{number}}", "Annotation page number": "சிறுகுறிப்புப் பக்க எண்", - "Translating...": "மொழிபெயர்க்கிறது..." + "Translating...": "மொழிபெயர்க்கிறது...", + "Show Battery Percentage": "பேட்டரி சதவீதத்தைக் காண்பி" } diff --git a/apps/readest-app/public/locales/th/translation.json b/apps/readest-app/public/locales/th/translation.json index 8f326210..65e90d27 100644 --- a/apps/readest-app/public/locales/th/translation.json +++ b/apps/readest-app/public/locales/th/translation.json @@ -822,6 +822,9 @@ "Clear search": "ล้างการค้นหา", "Clear search history": "ล้างประวัติการค้นหา", "Tap to Toggle Footer": "แตะเพื่อสลับส่วนท้าย", + "Show Current Time": "แสดงเวลาปัจจุบัน", + "Use 24 Hour Clock": "ใช้รูปแบบเวลา 24 ชั่วโมง", + "Show Current Battery Status": "แสดงสถานะแบตเตอรี่ปัจจุบัน", "Exported successfully": "ส่งออกสำเร็จ", "Book exported successfully.": "ส่งออกหนังสือสำเร็จ", "Failed to export the book.": "ส่งออกหนังสือล้มเหลว", @@ -1048,5 +1051,6 @@ "Page:": "หน้า:", "Page: {{number}}": "หน้า: {{number}}", "Annotation page number": "หมายเลขหน้าคำอธิบายประกอบ", - "Translating...": "กำลังแปล..." + "Translating...": "กำลังแปล...", + "Show Battery Percentage": "แสดงเปอร์เซ็นต์แบตเตอรี่" } diff --git a/apps/readest-app/public/locales/tr/translation.json b/apps/readest-app/public/locales/tr/translation.json index 7a6b334c..671ea783 100644 --- a/apps/readest-app/public/locales/tr/translation.json +++ b/apps/readest-app/public/locales/tr/translation.json @@ -832,6 +832,9 @@ "Clear search": "Aramayı temizle", "Clear search history": "Arama geçmişini temizle", "Tap to Toggle Footer": "Altbilgiyi değiştirmek için dokunun", + "Show Current Time": "Şu anki saati göster", + "Use 24 Hour Clock": "24 Saatlik Saati Kullan", + "Show Current Battery Status": "Mevcut Pil Durumunu Göster", "Exported successfully": "Başarıyla dışa aktarıldı", "Book exported successfully.": "Kitap başarıyla dışa aktarıldı.", "Failed to export the book.": "Kitap dışa aktarılamadı.", @@ -1060,5 +1063,6 @@ "Page:": "Sayfa:", "Page: {{number}}": "Sayfa: {{number}}", "Annotation page number": "Açıklama sayfa numarası", - "Translating...": "Çevriliyor..." + "Translating...": "Çevriliyor...", + "Show Battery Percentage": "Pil Yüzdesini Göster" } diff --git a/apps/readest-app/public/locales/uk/translation.json b/apps/readest-app/public/locales/uk/translation.json index 797a5fd3..d76b5c35 100644 --- a/apps/readest-app/public/locales/uk/translation.json +++ b/apps/readest-app/public/locales/uk/translation.json @@ -852,6 +852,9 @@ "Clear search": "Очистити пошук", "Clear search history": "Очистити історію пошуку", "Tap to Toggle Footer": "Нижній колонтитул", + "Show Current Time": "Показати поточний час", + "Use 24 Hour Clock": "Використовувати 24-годинний формат", + "Show Current Battery Status": "Показати поточний стан батареї", "Exported successfully": "Успішно експортовано", "Book exported successfully.": "Книгу успішно експортовано.", "Failed to export the book.": "Не вдалося експортувати книгу.", @@ -1084,5 +1087,6 @@ "Page:": "Сторінка:", "Page: {{number}}": "Сторінка: {{number}}", "Annotation page number": "Номер сторінки анотації", - "Translating...": "Переклад..." + "Translating...": "Переклад...", + "Show Battery Percentage": "Показувати відсоток заряду батареї" } diff --git a/apps/readest-app/public/locales/vi/translation.json b/apps/readest-app/public/locales/vi/translation.json index 4869960d..690652b9 100644 --- a/apps/readest-app/public/locales/vi/translation.json +++ b/apps/readest-app/public/locales/vi/translation.json @@ -822,6 +822,9 @@ "Clear search": "Xóa tìm kiếm", "Clear search history": "Xóa lịch sử tìm kiếm", "Tap to Toggle Footer": "Nhấn để bật/tắt chân trang", + "Show Current Time": "Hiển thị thời gian hiện tại", + "Use 24 Hour Clock": "Sử dụng định dạng 24 giờ", + "Show Current Battery Status": "Hiển thị trạng thái pin hiện tại", "Exported successfully": "Xuất thành công", "Book exported successfully.": "Sách đã được xuất thành công.", "Failed to export the book.": "Xuất sách thất bại.", @@ -1048,5 +1051,6 @@ "Page:": "Trang:", "Page: {{number}}": "Trang: {{number}}", "Annotation page number": "Số trang chú thích", - "Translating...": "Đang dịch..." + "Translating...": "Đang dịch...", + "Show Battery Percentage": "Hiển thị phần trăm pin" } diff --git a/apps/readest-app/public/locales/zh-CN/translation.json b/apps/readest-app/public/locales/zh-CN/translation.json index b129a5e0..6f05b27f 100644 --- a/apps/readest-app/public/locales/zh-CN/translation.json +++ b/apps/readest-app/public/locales/zh-CN/translation.json @@ -822,6 +822,9 @@ "Clear search": "清除搜索", "Clear search history": "清除搜索历史", "Tap to Toggle Footer": "点击切换页脚", + "Show Current Time": "显示当前时间", + "Use 24 Hour Clock": "使用 24 小时制", + "Show Current Battery Status": "显示当前电量", "Exported successfully": "导出成功", "Book exported successfully.": "书籍导出成功。", "Failed to export the book.": "书籍导出失败。", @@ -1048,5 +1051,6 @@ "Page:": "页面:", "Page: {{number}}": "页面: {{number}}", "Annotation page number": "批注页码", - "Translating...": "翻译中..." + "Translating...": "翻译中...", + "Show Battery Percentage": "显示电量百分比" } diff --git a/apps/readest-app/public/locales/zh-TW/translation.json b/apps/readest-app/public/locales/zh-TW/translation.json index 9897d74d..a68e7322 100644 --- a/apps/readest-app/public/locales/zh-TW/translation.json +++ b/apps/readest-app/public/locales/zh-TW/translation.json @@ -822,6 +822,9 @@ "Clear search": "清除搜尋", "Clear search history": "清除搜尋歷史", "Tap to Toggle Footer": "點擊切換頁尾", + "Show Current Time": "顯示目前時間", + "Use 24 Hour Clock": "使用 24 小時制", + "Show Current Battery Status": "顯示當前電池狀態", "Exported successfully": "匯出成功", "Book exported successfully.": "書籍匯出成功。", "Failed to export the book.": "書籍匯出失敗。", @@ -1048,5 +1051,6 @@ "Page:": "頁面:", "Page: {{number}}": "頁面: {{number}}", "Annotation page number": "註解頁碼", - "Translating...": "翻譯中..." + "Translating...": "翻譯中...", + "Show Battery Percentage": "顯示電池百分比" } diff --git a/apps/readest-app/src-tauri/Cargo.toml b/apps/readest-app/src-tauri/Cargo.toml index e6373c31..917b724c 100644 --- a/apps/readest-app/src-tauri/Cargo.toml +++ b/apps/readest-app/src-tauri/Cargo.toml @@ -55,6 +55,7 @@ tauri-plugin-native-bridge = { path = "./plugins/tauri-plugin-native-bridge" } tauri-plugin-native-tts = { path = "./plugins/tauri-plugin-native-tts" } tauri-plugin-websocket = "2" tauri-plugin-sharekit = "0.3" +tauri-plugin-device-info = "1.0.1" [target."cfg(target_os = \"macos\")".dependencies] rand = "0.8" diff --git a/apps/readest-app/src-tauri/capabilities/default.json b/apps/readest-app/src-tauri/capabilities/default.json index 7d687da6..b61de883 100644 --- a/apps/readest-app/src-tauri/capabilities/default.json +++ b/apps/readest-app/src-tauri/capabilities/default.json @@ -178,6 +178,7 @@ "haptics:allow-selection-feedback", "deep-link:default", "sharekit:default", + "device-info:default", "native-tts:default", "native-bridge:default" ] diff --git a/apps/readest-app/src-tauri/src/lib.rs b/apps/readest-app/src-tauri/src/lib.rs index 8b3f8554..9f6f891a 100644 --- a/apps/readest-app/src-tauri/src/lib.rs +++ b/apps/readest-app/src-tauri/src/lib.rs @@ -184,6 +184,7 @@ pub fn run() { .plugin(tauri_plugin_os::init()) .plugin(tauri_plugin_dialog::init()) .plugin(tauri_plugin_sharekit::init()) + .plugin(tauri_plugin_device_info::init()) .plugin(tauri_plugin_native_bridge::init()) .plugin(tauri_plugin_native_tts::init()); diff --git a/apps/readest-app/src/app/reader/components/BooksGrid.tsx b/apps/readest-app/src/app/reader/components/BooksGrid.tsx index c7d41340..0dfb6359 100644 --- a/apps/readest-app/src/app/reader/components/BooksGrid.tsx +++ b/apps/readest-app/src/app/reader/components/BooksGrid.tsx @@ -16,7 +16,7 @@ import SectionInfo from './SectionInfo'; import HeaderBar from './HeaderBar'; import PageNavigationButtons from './PageNavigationButtons'; import FooterBar from './footerbar/FooterBar'; -import ProgressInfoView from './ProgressInfo'; +import ProgressBar from './ProgressBar'; import Ribbon from './Ribbon'; import Annotator from './annotator/Annotator'; import FootnotePopup from './FootnotePopup'; @@ -210,7 +210,7 @@ const BooksGrid: React.FC = ({ bookKeys, onCloseBook, onGoToLibr /> )} {showFooter && ( - = ({ +const ProgressBar: React.FC = ({ bookKey, horizontalGap, contentInsets, @@ -78,49 +80,73 @@ const ProgressInfoView: React.FC = ({ const showPagesLeft = total - 1 > current; - const [progressInfoMode, setProgressInfoMode] = useState(viewSettings.progressInfoMode); + const [progressBarMode, setProgressBarMode] = useState(viewSettings.progressInfoMode); + const hasRemainingInfo = viewSettings.showRemainingTime || viewSettings.showRemainingPages; + const hasProgressInfo = viewSettings.showProgressInfo; + const hasTimeInfo = viewSettings.showCurrentTime; + const hasBatteryInfo = viewSettings.showCurrentBatteryStatus; const cycleProgressInfoModes = () => { if (!viewSettings.tapToToggleFooter) return; - const hasRemainingInfo = viewSettings.showRemainingTime || viewSettings.showRemainingPages; - const hasProgressInfo = viewSettings.showProgressInfo; - const modeSequence: (typeof progressInfoMode)[] = ['all', 'remaining', 'progress', 'none']; - const currentIndex = modeSequence.indexOf(progressInfoMode); + const modeSequence: string[] = [ + 'all', + `${hasRemainingInfo ? 'remaining+' : ''}${hasProgressInfo ? 'progress' : ''}`, + `${hasRemainingInfo ? 'remaining' : ''}`, + `${hasProgressInfo ? 'progress' : ''}`, + `${hasBatteryInfo ? 'battery+' : ''}${hasTimeInfo ? 'time' : ''}`, + `${hasBatteryInfo ? 'battery' : ''}`, + `${hasTimeInfo ? 'time' : ''}`, + 'none', + ] + .map((mode) => mode.replace(/^\+|\+$/g, '')) + .filter((mode) => mode !== '') + .filter((mode, index, self) => self.indexOf(mode) === index); + + const currentMode = progressBarMode; + const currentIndex = modeSequence.indexOf(currentMode); for (let i = 1; i <= modeSequence.length; i++) { const nextIndex = (currentIndex + i) % modeSequence.length; const nextMode = modeSequence[nextIndex]!; const currentRenders = { remaining: - progressInfoMode === 'all' || progressInfoMode === 'remaining' ? hasRemainingInfo : false, + currentMode === 'all' || currentMode.includes('remaining') ? hasRemainingInfo : false, progress: - progressInfoMode === 'all' || progressInfoMode === 'progress' ? hasProgressInfo : false, + currentMode === 'all' || currentMode.includes('progress') ? hasProgressInfo : false, + battery: currentMode === 'all' || currentMode.includes('battery') ? hasBatteryInfo : false, + time: currentMode === 'all' || currentMode.includes('time') ? hasTimeInfo : false, + none: currentMode === 'none', }; const nextRenders = { - remaining: nextMode === 'all' || nextMode === 'remaining' ? hasRemainingInfo : false, - progress: nextMode === 'all' || nextMode === 'progress' ? hasProgressInfo : false, + remaining: nextMode === 'all' || nextMode.includes('remaining') ? hasRemainingInfo : false, + progress: nextMode === 'all' || nextMode.includes('progress') ? hasProgressInfo : false, + battery: nextMode === 'all' || nextMode.includes('battery') ? hasBatteryInfo : false, + time: nextMode === 'all' || nextMode.includes('time') ? hasTimeInfo : false, + none: nextMode === 'none', }; const isDifferent = currentRenders.remaining !== nextRenders.remaining || - currentRenders.progress !== nextRenders.progress; - + currentRenders.progress !== nextRenders.progress || + currentRenders.battery !== nextRenders.battery || + currentRenders.time !== nextRenders.time || + currentRenders.none !== nextRenders.none; if (isDifferent) { - setProgressInfoMode(nextMode); + setProgressBarMode(nextMode); return; } } const nextIndex = (currentIndex + 1) % modeSequence.length; - setProgressInfoMode(modeSequence[nextIndex]!); + setProgressBarMode(modeSequence[nextIndex]!); }; useEffect(() => { - saveViewSettings(envConfig, bookKey, 'progressInfoMode', progressInfoMode); + saveViewSettings(envConfig, bookKey, 'progressInfoMode', progressBarMode as ProgressBarMode); // eslint-disable-next-line react-hooks/exhaustive-deps - }, [progressInfoMode]); + }, [progressBarMode]); const isMobile = appService?.isMobile || window.innerWidth < 640; @@ -171,45 +197,69 @@ const ProgressInfoView: React.FC = ({ isVertical ? 'h-full' : 'h-[52px] w-full', )} > - {(progressInfoMode === 'all' || progressInfoMode === 'remaining') && ( - <> - {viewSettings.showRemainingTime ? ( - {timeLeftStr} - ) : viewSettings.showRemainingPages && showPagesLeft ? ( - - {localize ? ( - - {'{{number}}'} - {' pages left in chapter'} - - ) : ( - - {'{{count}}'} - {' pages left in chapter'} - - )} - - ) : null} - - )} + {(progressBarMode === 'all' || progressBarMode.includes('remaining')) && + hasRemainingInfo && ( +
+ {viewSettings.showRemainingTime ? ( + {timeLeftStr} + ) : viewSettings.showRemainingPages && showPagesLeft ? ( + + {localize ? ( + + {'{{number}}'} + {' pages left in chapter'} + + ) : ( + + {'{{count}}'} + {' pages left in chapter'} + + )} + + ) : null} +
+ )} - {(progressInfoMode === 'all' || progressInfoMode === 'progress') && ( - <> - {viewSettings.showProgressInfo && ( - - {progressInfo} - - )} - - )} + {(progressBarMode === 'all' || + progressBarMode.includes('battery') || + progressBarMode.includes('time')) && + progressInfo && ( + + )} + +
+ {(progressBarMode === 'all' || progressBarMode.includes('progress')) && ( + <> + {viewSettings.showProgressInfo && ( + + {progressInfo} + + )} + + )} +
); }; -export default ProgressInfoView; +export default ProgressBar; diff --git a/apps/readest-app/src/app/reader/components/StatusInfo.tsx b/apps/readest-app/src/app/reader/components/StatusInfo.tsx new file mode 100644 index 00000000..c35329aa --- /dev/null +++ b/apps/readest-app/src/app/reader/components/StatusInfo.tsx @@ -0,0 +1,81 @@ +import React from 'react'; +import clsx from 'clsx'; +import { useCurrentTime } from '../hooks/useCurrentTime'; +import { useCurrentBatteryStatus } from '../hooks/useCurrentBattery'; + +interface StatusInfoProps { + showTime: boolean; + showBattery: boolean; + showBatteryPercentage: boolean; + use24Hour?: boolean; + isVertical?: boolean; + isEink?: boolean; +} + +const StatusInfo: React.FC = ({ + showTime, + use24Hour = true, + showBattery, + showBatteryPercentage, + isVertical, + isEink, +}) => { + const formattedTime = useCurrentTime(showTime, use24Hour); + const batteryLevel = useCurrentBatteryStatus(showBattery); + + if (!showTime && !showBattery) return null; + + return ( +
+ {showTime && {formattedTime}} + {showBattery && batteryLevel !== null && ( + + + + + + + {showBatteryPercentage && batteryLevel !== null && ( + + {batteryLevel} + + )} + + )} +
+ ); +}; + +export default StatusInfo; diff --git a/apps/readest-app/src/app/reader/hooks/useCurrentBattery.ts b/apps/readest-app/src/app/reader/hooks/useCurrentBattery.ts new file mode 100644 index 00000000..bc0716c7 --- /dev/null +++ b/apps/readest-app/src/app/reader/hooks/useCurrentBattery.ts @@ -0,0 +1,66 @@ +import { useEffect, useState } from 'react'; +import { useEnv } from '@/context/EnvContext'; +import { getBatteryInfo } from 'tauri-plugin-device-info-api'; +import { isTauriAppPlatform } from '@/services/environment'; + +interface BatteryManager extends EventTarget { + level: number; + charging: boolean; + chargingTime: number; + dischargingTime: number; +} +export function useCurrentBatteryStatus(enabled: boolean) { + const { appService } = useEnv(); + const [batteryLevel, setBatteryLevel] = useState(null); + + useEffect(() => { + if (!enabled || typeof navigator === 'undefined' || !('getBattery' in navigator)) { + return; + } + + let battery: BatteryManager | null = null; + + const updateBatteryInfo = (batt: BatteryManager) => { + const level = Math.round(batt.level * 100); + setBatteryLevel(level); + }; + + const handleLevelChange = (event: Event) => { + updateBatteryInfo(event.currentTarget as BatteryManager); + }; + + (navigator as unknown as { getBattery: () => Promise }) + .getBattery() + .then((batt) => { + battery = batt; + updateBatteryInfo(batt); + batt.addEventListener('levelchange', handleLevelChange); + }); + + return () => { + if (battery) { + battery.removeEventListener('levelchange', handleLevelChange); + } + }; + }, [enabled]); + + useEffect(() => { + if (!enabled || !appService || !isTauriAppPlatform()) return; + + const fetchBatteryInfo = async () => { + try { + const info = await getBatteryInfo(); + if (info.level !== undefined) { + setBatteryLevel(Math.round(info.level)); + } + } catch (error) { + console.error('Failed to fetch battery info:', error); + } + }; + fetchBatteryInfo(); + const interval = setInterval(fetchBatteryInfo, 60_000); + return () => clearInterval(interval); + }, [appService, enabled]); + + return batteryLevel; +} diff --git a/apps/readest-app/src/app/reader/hooks/useCurrentTime.ts b/apps/readest-app/src/app/reader/hooks/useCurrentTime.ts new file mode 100644 index 00000000..016f3c36 --- /dev/null +++ b/apps/readest-app/src/app/reader/hooks/useCurrentTime.ts @@ -0,0 +1,25 @@ +import { useEffect, useState, useMemo } from 'react'; + +export function useCurrentTime(enabled: boolean, use24Hour = true, intervalMs = 10000) { + const [currentTime, setCurrentTime] = useState(() => new Date()); + + useEffect(() => { + if (!enabled) return; + + const timer = setInterval(() => { + setCurrentTime(new Date()); + }, intervalMs); + + return () => clearInterval(timer); + }, [enabled, intervalMs]); + + return useMemo(() => { + if (!enabled) return ''; + + return currentTime.toLocaleTimeString([], { + hour: '2-digit', + minute: '2-digit', + hour12: !use24Hour, + }); + }, [currentTime, enabled, use24Hour]); +} diff --git a/apps/readest-app/src/components/settings/LayoutPanel.tsx b/apps/readest-app/src/components/settings/LayoutPanel.tsx index f01cc93c..7a135e47 100644 --- a/apps/readest-app/src/components/settings/LayoutPanel.tsx +++ b/apps/readest-app/src/components/settings/LayoutPanel.tsx @@ -70,6 +70,14 @@ const LayoutPanel: React.FC = ({ bookKey, onRegisterRese const [showRemainingTime, setShowRemainingTime] = useState(viewSettings.showRemainingTime); const [showRemainingPages, setShowRemainingPages] = useState(viewSettings.showRemainingPages); const [showProgressInfo, setShowProgressInfo] = useState(viewSettings.showProgressInfo); + const [showCurrentTime, setShowCurrentTime] = useState(viewSettings.showCurrentTime); + const [use24HourClock, setUse24HourClock] = useState(viewSettings.use24HourClock); + const [showCurrentBatteryStatus, setShowCurrentBatteryStatus] = useState( + viewSettings.showCurrentBatteryStatus, + ); + const [showBatteryPercentage, setShowBatteryPercentage] = useState( + viewSettings.showBatteryPercentage, + ); const [tapToToggleFooter, setTapToToggleFooter] = useState(viewSettings.tapToToggleFooter); const [progressStyle, setProgressStyle] = useState(viewSettings.progressStyle); const [screenOrientation, setScreenOrientation] = useState(viewSettings.screenOrientation); @@ -106,6 +114,10 @@ const LayoutPanel: React.FC = ({ bookKey, onRegisterRese showRemainingTime: setShowRemainingTime, showRemainingPages: setShowRemainingPages, showProgressInfo: setShowProgressInfo, + showCurrentTime: setShowCurrentTime, + use24HourClock: setUse24HourClock, + showCurrentBatteryStatus: setShowCurrentBatteryStatus, + showBatteryPercentage: setShowBatteryPercentage, tapToToggleFooter: setTapToToggleFooter, showMarginsOnScroll: setShowMarginsOnScroll, }); @@ -339,6 +351,40 @@ const LayoutPanel: React.FC = ({ bookKey, onRegisterRese // eslint-disable-next-line react-hooks/exhaustive-deps }, [showProgressInfo]); + useEffect(() => { + saveViewSettings(envConfig, bookKey, 'showCurrentTime', showCurrentTime, false, false); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [showCurrentTime]); + + useEffect(() => { + saveViewSettings(envConfig, bookKey, 'use24HourClock', use24HourClock, false, false); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [use24HourClock]); + + useEffect(() => { + saveViewSettings( + envConfig, + bookKey, + 'showCurrentBatteryStatus', + showCurrentBatteryStatus, + false, + false, + ); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [showCurrentBatteryStatus]); + + useEffect(() => { + saveViewSettings( + envConfig, + bookKey, + 'showBatteryPercentage', + showBatteryPercentage, + false, + false, + ); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [showBatteryPercentage]); + useEffect(() => { saveViewSettings(envConfig, bookKey, 'progressStyle', progressStyle, false, false); // eslint-disable-next-line react-hooks/exhaustive-deps @@ -721,6 +767,48 @@ const LayoutPanel: React.FC = ({ bookKey, onRegisterRese disabled={!showProgressInfo} /> +
+ {_('Show Current Time')} + setShowCurrentTime(!showCurrentTime)} + /> +
+ {showCurrentTime && ( +
+ {_('Use 24 Hour Clock')} + setUse24HourClock(!use24HourClock)} + /> +
+ )} +
+ {_('Show Current Battery Status')} + setShowCurrentBatteryStatus(!showCurrentBatteryStatus)} + /> +
+
+ {_('Show Battery Percentage')} + setShowBatteryPercentage(!showBatteryPercentage)} + /> +
{_('Tap to Toggle Footer')} =6'} + tauri-plugin-device-info-api@1.0.1: + resolution: {integrity: sha512-d2QoatWeQ6X09fdEDdWSKzBVSZv9x8LpksJP/gfv4WeRmZwJRsLLMf1++qOw7PdOmQlNoKHFcKXPZlr2n4irdg==} + teex@1.0.1: resolution: {integrity: sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==} @@ -17353,6 +17359,10 @@ snapshots: tapable@2.3.0: {} + tauri-plugin-device-info-api@1.0.1: + dependencies: + '@tauri-apps/api': 2.9.1 + teex@1.0.1: dependencies: streamx: 2.23.0