Commit graph

10628 commits

Author SHA1 Message Date
Cuong-Tran
c1806e13b3
Agent.md (#1658)
* Generate `AGENTS.md` using CoPilot

* Re-generate by Cursor & manual merge

* Review again with Cursor
2026-05-22 23:49:37 +07:00
Cuong-Tran
266947b0d7
Bump version 2026-05-19 18:41:03 +07:00
Itsmechinmoy
ca26501aef
feat(Anilist): Parse GraphQL error responses for downtime and token expiry (#1591)
* Create ALError.kt

* Update AnilistApi.kt

* Update AnilistApi.kt

* Update AnilistApi.kt

* Add error handling for AniList API responses

* Update AnilistApi.kt

* Update ALError.kt

* Update AnilistApi.kt

* fix: improve error handling and resource management in AniList API calls

* Fix interpolation sign & add comment

---------

Co-authored-by: Cuong-Tran <16017808+cuong-tran@users.noreply.github.com>
2026-05-19 18:27:36 +07:00
Cuong-Tran
9a7d1b6143
Fix ANR while installing extensions (#1652)
Update foreground service type for ExtensionInstallService to dataSync
2026-05-19 15:58:12 +07:00
Cuong-Tran
94eac94ce7
ExtensionInstaller: Fix mistakenly canceling unrelated waitingInstall & avoid adding duplicate entry to installing queue (#1649)
* ExtensionInstaller: Fix mistakenly canceling unrelated `waitingInstall` & avoid adding duplicate entry to installing `queue`

- Changes the installer queue from a synchronized list to a synchronized set to prevent duplicate entries.
- Updates queue removal logic to remove specific entries instead of using index-based removal.
- Refines `cancelQueue` logic to ensure the active installation is only cancelled if its download ID matches the requested ID.

* Ensure thread-safe access to the installation queue when canceling downloads
2026-05-19 15:44:58 +07:00
Cuong-Tran
dc7dd8045e Ensure extension installer's download IDs are non-negative (#1648) 2026-05-18 20:44:17 +07:00
AntsyLich
0b285f83b1 Fix occasional crash when mass installing/uninstalling extension using PackageManager
(cherry picked from commit 42daa3f432292be5fdfb3ecae07592cb94324164)
2026-05-18 20:44:17 +07:00
Leodyver Semilla
768c3dcec5 Fix extension actions disappearing after installing and uninstalling in same session (mihonapp/mihon#3049)
Co-authored-by: AntsyLich <59261191+AntsyLich@users.noreply.github.com>
(cherry picked from commit 2f9edb551fb2255c11ccd8452a080e87b9c963eb)
2026-05-18 20:44:17 +07:00
littlecodedragon
f178a79195 feat(reading-eta): unify library and reader limits; make caps tunable
All checks were successful
Forgejo Release Builder / release (push) Successful in 5m17s
Introduce ReadingEtaPreferences and ReadingEtaLimits so library badges, reader series ETA, cross-manga history mining, and page-rate estimation share one configuration. Add reader settings sliders (EN/DE strings). Register preferences in PreferenceModule and wire GetCrossMangaPageRateHistorySamples.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-14 01:36:28 +02:00
Cuong-Tran
19f8fa203d
Add haptic feedback before actions (#1636)
* perform haptic before doing action

* Perform haptic feedback call in UI/main thread instead of IO

* Haptic feedback on both cases of long press action
2026-05-13 14:22:35 +07:00
Cuong-Tran
21cb1921a3
Refactor AppBarActions and clean up code (#1635)
* remove parentheses

* Refactor AppBarActions to improve readability and maintainability

* Refactor callback parameters in AppBar actions for clarity
2026-05-13 13:56:39 +07:00
Cuong-Tran
dc3d034109
Remove HBrowse and Tsumino sources from delegated sources (#1622) 2026-05-13 12:55:15 +07:00
Weblate (bot)
0293507d1a
Translations update from Hosted Weblate (#1567)
* Translated using Weblate (Turkish)

Currently translated at 70.4% (148 of 210 strings)

Translation: Komikku-App/Komikku
Translate-URL: https://hosted.weblate.org/projects/komikku-app/komikku/tr/

* Translated using Weblate (Turkish)

Currently translated at 70.4% (148 of 210 strings)

Translation: Komikku-App/Komikku
Translate-URL: https://hosted.weblate.org/projects/komikku-app/komikku/tr/

* Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 84.2% (177 of 210 strings)

Translation: Komikku-App/Komikku
Translate-URL: https://hosted.weblate.org/projects/komikku-app/komikku/zh_Hans/

* Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 84.2% (177 of 210 strings)

Translation: Komikku-App/Komikku
Translate-URL: https://hosted.weblate.org/projects/komikku-app/komikku/zh_Hans/

* Translated using Weblate (Bengali)

Currently translated at 22.3% (47 of 210 strings)

Translation: Komikku-App/Komikku
Translate-URL: https://hosted.weblate.org/projects/komikku-app/komikku/bn/

* Translated using Weblate (French)

Currently translated at 92.8% (195 of 210 strings)

Translation: Komikku-App/Komikku
Translate-URL: https://hosted.weblate.org/projects/komikku-app/komikku/fr/

* Translated using Weblate (Thai)

Currently translated at 27.1% (57 of 210 strings)

Translation: Komikku-App/Komikku
Translate-URL: https://hosted.weblate.org/projects/komikku-app/komikku/th/

* Translated using Weblate (Thai)

Currently translated at 27.1% (57 of 210 strings)

Translation: Komikku-App/Komikku
Translate-URL: https://hosted.weblate.org/projects/komikku-app/komikku/th/

* Translated using Weblate (Danish)

Currently translated at 79.0% (166 of 210 strings)

Translation: Komikku-App/Komikku
Translate-URL: https://hosted.weblate.org/projects/komikku-app/komikku/da/

* Translated using Weblate (Danish)

Currently translated at 79.0% (166 of 210 strings)

Translation: Komikku-App/Komikku
Translate-URL: https://hosted.weblate.org/projects/komikku-app/komikku/da/

* Translated using Weblate (Czech)

Currently translated at 80.9% (170 of 210 strings)

Translation: Komikku-App/Komikku
Translate-URL: https://hosted.weblate.org/projects/komikku-app/komikku/cs/

* Translated using Weblate (Czech)

Currently translated at 80.9% (170 of 210 strings)

Translation: Komikku-App/Komikku
Translate-URL: https://hosted.weblate.org/projects/komikku-app/komikku/cs/

* Translated using Weblate (Malay)

Currently translated at 20.4% (43 of 210 strings)

Translation: Komikku-App/Komikku
Translate-URL: https://hosted.weblate.org/projects/komikku-app/komikku/ms/

* Translated using Weblate (Ukrainian)

Currently translated at 86.1% (181 of 210 strings)

Translation: Komikku-App/Komikku
Translate-URL: https://hosted.weblate.org/projects/komikku-app/komikku/uk/

* Translated using Weblate (Ukrainian)

Currently translated at 86.1% (181 of 210 strings)

Translation: Komikku-App/Komikku
Translate-URL: https://hosted.weblate.org/projects/komikku-app/komikku/uk/

* Translated using Weblate (Spanish)

Currently translated at 85.7% (180 of 210 strings)

Translation: Komikku-App/Komikku
Translate-URL: https://hosted.weblate.org/projects/komikku-app/komikku/es/

* Translated using Weblate (Spanish)

Currently translated at 85.7% (180 of 210 strings)

Translation: Komikku-App/Komikku
Translate-URL: https://hosted.weblate.org/projects/komikku-app/komikku/es/

* Translated using Weblate (Swedish)

Currently translated at 79.5% (167 of 210 strings)

Translation: Komikku-App/Komikku
Translate-URL: https://hosted.weblate.org/projects/komikku-app/komikku/sv/

* Translated using Weblate (Swedish)

Currently translated at 79.5% (167 of 210 strings)

Translation: Komikku-App/Komikku
Translate-URL: https://hosted.weblate.org/projects/komikku-app/komikku/sv/

* Translated using Weblate (Korean)

Currently translated at 76.1% (160 of 210 strings)

Translation: Komikku-App/Komikku
Translate-URL: https://hosted.weblate.org/projects/komikku-app/komikku/ko/

* Translated using Weblate (Korean)

Currently translated at 76.1% (160 of 210 strings)

Translation: Komikku-App/Komikku
Translate-URL: https://hosted.weblate.org/projects/komikku-app/komikku/ko/

* Translated using Weblate (Italian)

Currently translated at 97.1% (204 of 210 strings)

Translation: Komikku-App/Komikku
Translate-URL: https://hosted.weblate.org/projects/komikku-app/komikku/it/

* Translated using Weblate (Italian)

Currently translated at 97.1% (204 of 210 strings)

Translation: Komikku-App/Komikku
Translate-URL: https://hosted.weblate.org/projects/komikku-app/komikku/it/

* Translated using Weblate (Assamese)

Currently translated at 82.8% (174 of 210 strings)

Translation: Komikku-App/Komikku
Translate-URL: https://hosted.weblate.org/projects/komikku-app/komikku/as/

* Translated using Weblate (Assamese)

Currently translated at 82.8% (174 of 210 strings)

Translation: Komikku-App/Komikku
Translate-URL: https://hosted.weblate.org/projects/komikku-app/komikku/as/

* Translated using Weblate (Vietnamese)

Currently translated at 75.2% (158 of 210 strings)

Translation: Komikku-App/Komikku
Translate-URL: https://hosted.weblate.org/projects/komikku-app/komikku/vi/

* Translated using Weblate (Portuguese (Brazil))

Currently translated at 89.0% (187 of 210 strings)

Translation: Komikku-App/Komikku
Translate-URL: https://hosted.weblate.org/projects/komikku-app/komikku/pt_BR/

* Translated using Weblate (Portuguese (Brazil))

Currently translated at 89.0% (187 of 210 strings)

Translation: Komikku-App/Komikku
Translate-URL: https://hosted.weblate.org/projects/komikku-app/komikku/pt_BR/

* Translated using Weblate (Romanian)

Currently translated at 78.5% (165 of 210 strings)

Translation: Komikku-App/Komikku
Translate-URL: https://hosted.weblate.org/projects/komikku-app/komikku/ro/

* Translated using Weblate (Romanian)

Currently translated at 78.5% (165 of 210 strings)

Translation: Komikku-App/Komikku
Translate-URL: https://hosted.weblate.org/projects/komikku-app/komikku/ro/

* Translated using Weblate (Filipino)

Currently translated at 95.7% (201 of 210 strings)

Translation: Komikku-App/Komikku
Translate-URL: https://hosted.weblate.org/projects/komikku-app/komikku/fil/

* Translated using Weblate (Filipino)

Currently translated at 95.7% (201 of 210 strings)

Translation: Komikku-App/Komikku
Translate-URL: https://hosted.weblate.org/projects/komikku-app/komikku/fil/

* Translated using Weblate (German)

Currently translated at 92.8% (195 of 210 strings)

Translation: Komikku-App/Komikku
Translate-URL: https://hosted.weblate.org/projects/komikku-app/komikku/de/

* Translated using Weblate (German)

Currently translated at 92.8% (195 of 210 strings)

Translation: Komikku-App/Komikku
Translate-URL: https://hosted.weblate.org/projects/komikku-app/komikku/de/

* Translated using Weblate (Greek)

Currently translated at 79.0% (166 of 210 strings)

Translation: Komikku-App/Komikku
Translate-URL: https://hosted.weblate.org/projects/komikku-app/komikku/el/

* Translated using Weblate (Greek)

Currently translated at 79.0% (166 of 210 strings)

Translation: Komikku-App/Komikku
Translate-URL: https://hosted.weblate.org/projects/komikku-app/komikku/el/

* Translated using Weblate (Croatian)

Currently translated at 30.4% (64 of 210 strings)

Translation: Komikku-App/Komikku
Translate-URL: https://hosted.weblate.org/projects/komikku-app/komikku/hr/

* Translated using Weblate (Croatian)

Currently translated at 30.4% (64 of 210 strings)

Translation: Komikku-App/Komikku
Translate-URL: https://hosted.weblate.org/projects/komikku-app/komikku/hr/

* Translated using Weblate (Arabic)

Currently translated at 92.3% (194 of 210 strings)

Translation: Komikku-App/Komikku
Translate-URL: https://hosted.weblate.org/projects/komikku-app/komikku/ar/

* Translated using Weblate (Arabic)

Currently translated at 92.3% (194 of 210 strings)

Translation: Komikku-App/Komikku
Translate-URL: https://hosted.weblate.org/projects/komikku-app/komikku/ar/

* Translated using Weblate (Dutch)

Currently translated at 79.5% (167 of 210 strings)

Translation: Komikku-App/Komikku
Translate-URL: https://hosted.weblate.org/projects/komikku-app/komikku/nl/

* Translated using Weblate (Dutch)

Currently translated at 79.5% (167 of 210 strings)

Translation: Komikku-App/Komikku
Translate-URL: https://hosted.weblate.org/projects/komikku-app/komikku/nl/

* Translated using Weblate (Japanese)

Currently translated at 84.7% (178 of 210 strings)

Translation: Komikku-App/Komikku
Translate-URL: https://hosted.weblate.org/projects/komikku-app/komikku/ja/

* Translated using Weblate (Japanese)

Currently translated at 84.7% (178 of 210 strings)

Translation: Komikku-App/Komikku
Translate-URL: https://hosted.weblate.org/projects/komikku-app/komikku/ja/

* Translated using Weblate (Finnish)

Currently translated at 79.0% (166 of 210 strings)

Translation: Komikku-App/Komikku
Translate-URL: https://hosted.weblate.org/projects/komikku-app/komikku/fi/

* Translated using Weblate (Finnish)

Currently translated at 79.0% (166 of 210 strings)

Translation: Komikku-App/Komikku
Translate-URL: https://hosted.weblate.org/projects/komikku-app/komikku/fi/

* Translated using Weblate (Hindi)

Currently translated at 27.1% (57 of 210 strings)

Translation: Komikku-App/Komikku
Translate-URL: https://hosted.weblate.org/projects/komikku-app/komikku/hi/

* Translated using Weblate (Portuguese)

Currently translated at 87.1% (183 of 210 strings)

Translation: Komikku-App/Komikku
Translate-URL: https://hosted.weblate.org/projects/komikku-app/komikku/pt/

* Translated using Weblate (Indonesian)

Currently translated at 92.8% (195 of 210 strings)

Translation: Komikku-App/Komikku
Translate-URL: https://hosted.weblate.org/projects/komikku-app/komikku/id/

* Translated using Weblate (Tamil)

Currently translated at 35.2% (74 of 210 strings)

Translation: Komikku-App/Komikku
Translate-URL: https://hosted.weblate.org/projects/komikku-app/komikku/ta/

* Translated using Weblate (Polish)

Currently translated at 80.9% (170 of 210 strings)

Translation: Komikku-App/Komikku
Translate-URL: https://hosted.weblate.org/projects/komikku-app/komikku/pl/

* Translated using Weblate (Polish)

Currently translated at 80.9% (170 of 210 strings)

Translation: Komikku-App/Komikku
Translate-URL: https://hosted.weblate.org/projects/komikku-app/komikku/pl/

* Translated using Weblate (Catalan)

Currently translated at 74.7% (157 of 210 strings)

Translation: Komikku-App/Komikku
Translate-URL: https://hosted.weblate.org/projects/komikku-app/komikku/ca/

* Translated using Weblate (Catalan)

Currently translated at 74.7% (157 of 210 strings)

Translation: Komikku-App/Komikku
Translate-URL: https://hosted.weblate.org/projects/komikku-app/komikku/ca/

* Translated using Weblate (Korean)

Currently translated at 76.1% (160 of 210 strings)

Translation: Komikku-App/Komikku
Translate-URL: https://hosted.weblate.org/projects/komikku-app/komikku/ko/

* Translated using Weblate (Filipino)

Currently translated at 96.6% (203 of 210 strings)

Translation: Komikku-App/Komikku
Translate-URL: https://hosted.weblate.org/projects/komikku-app/komikku/fil/

* Translated using Weblate (Filipino)

Currently translated at 97.1% (204 of 210 strings)

Translation: Komikku-App/Komikku
Translate-URL: https://hosted.weblate.org/projects/komikku-app/komikku/fil/

* Translated using Weblate (Assamese)

Currently translated at 100.0% (210 of 210 strings)

Translation: Komikku-App/Komikku
Translate-URL: https://hosted.weblate.org/projects/komikku-app/komikku/as/

* Translated using Weblate (Assamese)

Currently translated at 100.0% (210 of 210 strings)

Translation: Komikku-App/Komikku
Translate-URL: https://hosted.weblate.org/projects/komikku-app/komikku/as/

* [ar] `connections_discord_info`: placeholder for app name

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* [ar] `pref_discord_idle`: don't use emoji tag

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* [ro] `pref_discord_idle`: don't use emoji tag

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* [zh-rCN] `connections_discord_info`: placeholder for app name

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* [ro] `connections_discord_info`: placeholder for app name

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* [pt-rBR] `discord_status_description`: placeholder

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* [bn] `action_scroll_to_top`: remove quote sign

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* [ca] `pref_discord_show_download_button`: translate

Co-authored-by: sourcery-ai[bot] <58596630+sourcery-ai[bot]@users.noreply.github.com>

* [da] `connections_discord`: correct Discord name

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* [es] `connections_discord`: correct Discord name

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* [fi] `connections_discord_info`: placeholder for app name

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* [hi] `pref_discord_idle`: correct use of word

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* [hi] `pref_theme_cover_based_style_fruitsalad`: type

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* [hr] `action_open_folder`: use folder instead of file

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* [it] `pref_fetch_manga_chapters_on_add_description`: correct translation

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* [ja] `pref_discord_idle`: translate

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* [ko] `pref_discord_show_timestamp`: correct use of words

Co-authored-by: sourcery-ai[bot] <58596630+sourcery-ai[bot]@users.noreply.github.com>

* [ms] `download_cache_renew_interval_12hour`: remove AM/PM

Co-authored-by: sourcery-ai[bot] <58596630+sourcery-ai[bot]@users.noreply.github.com>

* [nl] `connections_discord`: correct Discord

Co-authored-by: sourcery-ai[bot] <58596630+sourcery-ai[bot]@users.noreply.github.com>

* [ta] `scale_type_16_9`: remove space

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* [tr] `updating`: grammar

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* [tr] `pref_auto_sync_progress_from_trackers`: translate

* [uk] `pref_discord_custom_message`: correct translation

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* [zh-rCN] `discord_status_description`: add space

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

---------

Co-authored-by: Weblate Translation Memory <noreply-mt-weblate-translation-memory@weblate.org>
Co-authored-by: Weblate <noreply-mt-weblate@weblate.org>
Co-authored-by: 안세훈 <on9686@gmail.com>
Co-authored-by: Infy's Tagalog Translations <ced.paltep10@gmail.com>
Co-authored-by: Itsmechinmoy <167056923+itsmechinmoy@users.noreply.github.com>
Co-authored-by: Cuong-Tran <16017808+cuong-tran@users.noreply.github.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: sourcery-ai[bot] <58596630+sourcery-ai[bot]@users.noreply.github.com>
2026-05-13 10:55:28 +07:00
Jobobby04
3344fd0755 Fix blank page on cloudflare guard
(cherry picked from commit 07599ade3aeb127f643b45e84a6b9ccdb1d0ba6d)

Co-authored-by: Cuong-Tran <16017808+cuong-tran@users.noreply.github.com>
2026-05-13 09:30:39 +07:00
Jobobby04
f5e1c1e5ce Copy last page read in migrate
(cherry picked from commit 3a3b719b8bdc3c9ec95120ddca3a87183b40cd4d)
2026-05-12 18:52:35 +07:00
Jobobby04
5c0ca305a9 Add recommended proguard rules
(cherry picked from commit 5c26bb3a52c1f209facfda0b4e99d0a1feba9d76)
2026-05-12 18:52:35 +07:00
Cuong-Tran
1f904815fa Clean up some build warnings 2026-05-12 18:52:35 +07:00
KaiserBh
38acd6f110 feat: Add sync events to SyncYomi (jobobby04/TachiyomiSY#1558)
* feat: Add sync events to SyncYomi

Now it will send the events back to `SyncYomi` server and then forward those to the notifications services that are enabled, such as discord, telegram, and etc.

* chore: fix build error.

(cherry picked from commit 2776e411272499eba2f91acfea3cb40dc0d4c622)

* Improve client management and response handling

---------

Co-authored-by: Cuong-Tran <16017808+cuong-tran@users.noreply.github.com>
2026-05-12 18:49:10 +07:00
AntsyLich
bad1dd264d Fix extension install/update stuck at pending (#1630)
* Fix extension install/update stuck at pending (mihonapp/mihon#3000)

Co-authored-by: p
(cherry picked from commit 84265febf3ce24d71994ced2b81215f858430d4e)

* Fix lint

* Throw exception when Shizuku shell interface is unavailable during installation instead of silently doing nothing

* Properly close OkHttp response and streams

* Delete temporary extension file if failed to install

* Use ConcurrentHashMap for active jobs and steps to ensure thread safety when managing extension installation states across multiple coroutines.

* Use SupervisorJob to ensure that a failure in one installation job doesn't cancel the entire scope

* Don't use `:` in package name for safer filename

* Throw exception if asset file descriptor fails to open during extension installation

---------

Co-authored-by: Cuong-Tran <16017808+cuong-tran@users.noreply.github.com>
2026-05-12 15:27:49 +07:00
Weblate (bot)
6124efa164 Translations update from Hosted Weblate (mihonapp/mihon#2980)
Translate-URL: https://hosted.weblate.org/projects/mihon/mihon/
Translate-URL: https://hosted.weblate.org/projects/mihon/mihon/de/
Translate-URL: https://hosted.weblate.org/projects/mihon/mihon/el/
Translate-URL: https://hosted.weblate.org/projects/mihon/mihon/eo/
Translate-URL: https://hosted.weblate.org/projects/mihon/mihon/es/
Translate-URL: https://hosted.weblate.org/projects/mihon/mihon/hr/
Translate-URL: https://hosted.weblate.org/projects/mihon/mihon/ru/
Translate-URL: https://hosted.weblate.org/projects/mihon/mihon/sk/
Translate-URL: https://hosted.weblate.org/projects/mihon/mihon/tr/
Translate-URL: https://hosted.weblate.org/projects/mihon/mihon/zh_Hans/
Translation: Mihon/Mihon

Co-authored-by: Dexroneum <Rozhenkov69@gmail.com>
Co-authored-by: Frosted <frosted@users.noreply.hosted.weblate.org>
Co-authored-by: Jakub Szafranek13 Fabijan <jakubfabijan@tuta.io>
Co-authored-by: KraXen <dpelech1@gmail.com>
Co-authored-by: Lyfja <45209212+lyfja@users.noreply.github.com>
Co-authored-by: Milo Ivir <mail@milotype.de>
Co-authored-by: Pitpe11 <giorgos2550@gmail.com>
Co-authored-by: Swyter <swyterzone@gmail.com>
Co-authored-by: ZerOriSama <godarms2010@live.com>
(cherry picked from commit 565379779f82ee7dfdad45e251d82ff73dc3b7b2)
2026-05-12 09:52:53 +07:00
Weblate (bot)
0830cd32b5 Translations update from Hosted Weblate (jobobby04/TachiyomiSY#1536)
Translate-URL: https://hosted.weblate.org/projects/mihon/tachiyomisy-plurals/ar/
Translate-URL: https://hosted.weblate.org/projects/mihon/tachiyomisy-plurals/ko/
Translate-URL: https://hosted.weblate.org/projects/mihon/tachiyomisy/ar/
Translate-URL: https://hosted.weblate.org/projects/mihon/tachiyomisy/es/
Translate-URL: https://hosted.weblate.org/projects/mihon/tachiyomisy/fil/
Translate-URL: https://hosted.weblate.org/projects/mihon/tachiyomisy/fr/
Translate-URL: https://hosted.weblate.org/projects/mihon/tachiyomisy/hr/
Translate-URL: https://hosted.weblate.org/projects/mihon/tachiyomisy/it/
Translate-URL: https://hosted.weblate.org/projects/mihon/tachiyomisy/ko/
Translate-URL: https://hosted.weblate.org/projects/mihon/tachiyomisy/pt_BR/
Translate-URL: https://hosted.weblate.org/projects/mihon/tachiyomisy/ru/
Translate-URL: https://hosted.weblate.org/projects/mihon/tachiyomisy/tr/
Translate-URL: https://hosted.weblate.org/projects/mihon/tachiyomisy/zh_Hans/
Translate-URL: https://hosted.weblate.org/projects/mihon/tachiyomisy/zh_Hant/
Translation: Mihon/TachiyomiSY
Translation: Mihon/TachiyomiSY Plurals

Co-authored-by: Champ0999 <champ0999@users.noreply.hosted.weblate.org>
Co-authored-by: Dexroneum <Rozhenkov69@gmail.com>
Co-authored-by: Erick Alejandro <erickux@gmail.com>
Co-authored-by: Frosted <frosted@users.noreply.hosted.weblate.org>
Co-authored-by: Infy's Tagalog Translations <ced.paltep10@gmail.com>
Co-authored-by: Luis Antonio <getcyonic+zaorinu@gmail.com>
Co-authored-by: Metin <durmus38metin@gmail.com>
Co-authored-by: Milo Ivir <mail@milotype.de>
Co-authored-by: NormalRandomPeople <normal.scribe833@silomails.com>
Co-authored-by: Swyter <swyterzone@gmail.com>
Co-authored-by: ZerOriSama <godarms2010@live.com>
Co-authored-by: momoehab <momoehab@gmail.com>
Co-authored-by: 안세훈 <on9686@gmail.com>
(cherry picked from commit 724a61f51310b297296aab3c5c5d6d3a47b92491)

---------

Co-authored-by: Cuong-Tran <16017808+cuong-tran@users.noreply.github.com>
2026-05-11 23:56:02 +07:00
Weblate (bot)
2b4caa9f97 Translations update from Hosted Weblate (mihonapp/mihon#2997)
Translate-URL: https://hosted.weblate.org/projects/mihon/mihon/cs/
Translate-URL: https://hosted.weblate.org/projects/mihon/mihon/vi/
Translate-URL: https://hosted.weblate.org/projects/mihon/mihon/zh_Hant/
Translation: Mihon/Mihon

Co-authored-by: Filip Jaruška <filip.jaruska@gmail.com>
Co-authored-by: Nguyễn Trung Đức <vaicato16@gmail.com>
Co-authored-by: ɴᴇᴋᴏ <s99095lkjjim@gmail.com>
(cherry picked from commit cc3f640faa7df9f2a64976d2639e6dfd60ebe213)
2026-05-11 23:56:02 +07:00
AntsyLich
0f815ba662 Run automatic library updates even when connected to a VPN (mihonapp/mihon#2996)
Co-authored-by: jeremiejig <3978761+jeremiejig@users.noreply.github.com>
(cherry picked from commit 039471427448347a1c12c39a488a1127a3ea1497)

---------

Co-authored-by: Cuong-Tran <16017808+cuong-tran@users.noreply.github.com>
2026-05-11 20:14:28 +07:00
AntsyLich
1c9c35156d Add all pages of adjacent chapters in the UI instead of only the first or last three (mihonapp/mihon#2995)
(cherry picked from commit 0cc724108b4f29a3d1d33ac4666a14873460a657)
2026-05-11 19:53:26 +07:00
AntsyLich
7c5fe16b52 Fix migration dialog not showing for consecutive prompts from the same screen (mihonapp/mihon#2994)
(cherry picked from commit 8b2d35f3068a3f9c5e1bba77ed825ae51531c91c)
2026-05-11 19:23:39 +07:00
AntsyLich
e04565bc46 Fix migration's selected sources order not preserved (mihonapp/mihon#2993)
* Fix migration's selected sources order not preserved

(cherry picked from commit 47816d4b218e6a62ef9fcd3097b6b0b8f2f95b17)

* Use indexed map for improved sorting performance

---------

Co-authored-by: Cuong-Tran <16017808+cuong-tran@users.noreply.github.com>
2026-05-11 15:56:01 +07:00
littlecodedragon
e0f4262407 ci(forgejo): verify signed APKs with unzip + aapt before upload
All checks were successful
Forgejo Release Builder / release (push) Successful in 4m48s
Fails the job if an artifact is not a valid zip or manifest (same class
of errors as Android 'package could not be parsed' after download).

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-11 07:06:23 +02:00
littlecodedragon
6316b85a09 fix(release): tolerate Forgejo null body/assets in release JSON
Gitea may emit null for empty release notes or assets; enable
Json.coerceInputValues and defaults so update checks do not fail
deserialization (unrelated to release-note workflow length).

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-11 07:04:04 +02:00
littlecodedragon
f91af6fc72 ci(forgejo): shorten release notes to since-last-tag + cap
- Build What's Changed from previous v* tag..HEAD only (not upstream..HEAD).
- List at most 50 newest commits with pointer to Full Changelog compare.
- Drop fork-delta footer block to reduce scrolling.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-11 06:57:58 +02:00
littlecodedragon
c15d280cb4 feat(eta): cross-manga page-rate priors for reading time left
All checks were successful
Forgejo Release Builder / release (push) Successful in 5m53s
Blend series-local ms/page with samples from completed chapters in other
titles (similar page counts via ±15%/±30% bands). Removes fixed ms/page
floors; adds SQL query + estimator + DI wiring.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-11 02:59:22 +02:00
littlecodedragon
07019175d1 fix(eta): tame reading-time estimates (idle + cumulative history)
- Cap per-chapter samples used for averages at 45m (stats only).
- Prefer session ms/page extrapolation for current chapter so cumulative
  DB read time over revisits no longer blows up duration/progress.
- Floor uncertain page rates using conservative ms/page until enough samples.
- Shared defaults in ReadingEtaDefaults for reader + library badge.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-11 02:28:28 +02:00
littlecodedragon
9ce3f0ba29 ci(forgejo): group release notes by prefix and fork vs merges
Bucket commits into New/Fix/Improve/Other from conventional-style
subjects. When upstream main is available, split direct fork commits
from merge commits under separate headings.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-09 22:17:56 +02:00
littlecodedragon
7fab10c8ef CI: build release JSON with jq --rawfile (avoid ARG_MAX on large bodies
All checks were successful
Forgejo Release Builder / release (push) Successful in 3m30s
Huge changelog strings passed as jq --arg exceeded Linux exec argument limit.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-09 21:28:58 +02:00
littlecodedragon
e89f342881 CI: fix release step env — multiline COMMIT_LOGS broke act_runner
Some checks failed
Forgejo Release Builder / release (push) Failing after 3m41s
Pass commit messages via tmp file + COMMIT_LOG_FILE in GITHUB_ENV instead
of injecting COMMIT_LOGS into step env (Forgejo runner could fail before
bash ran, producing no logs).

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-09 21:09:30 +02:00
littlecodedragon
7bca00964e CI: persistent Gradle cache, safer release API logs, faster SDK step
Some checks failed
Forgejo Release Builder / release (push) Failing after 16m20s
- Use $HOME/.cache/komikku-ci-gradle (override KOMIKKU_GRADLE_CACHE on runner)
  instead of per-job .gradle-ci under the checkout so dependencies survive runs.
- Skip sdkmanager when build-tools 35.0.0 already installed.
- Enable kotlin.incremental for assembleRelease to shorten Kotlin compile.
- Replace curl -f release/asset calls with explicit HTTP status checks and
  always print JSON error bodies on failure (Forgejo UI often hid stderr).

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-09 20:32:26 +02:00
littlecodedragon
06bc3a6a0c Fix: restore build_release.yml asset naming after draft toggle
Accidentally reverted version_core naming and release notes when switching
draft to false. Restore stable Komikku-v<semver>-<abi> artifacts and
alias logic; keep draft: false for Obtainium/public API visibility.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-09 20:12:27 +02:00
littlecodedragon
940a669936 CI: publish releases as non-draft for Obtainium and public API
Draft releases are not visible to unauthenticated API clients, so
Obtainium could not list or match a suitable version. Use draft: false
when creating or updating Forgejo releases.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-09 20:12:02 +02:00
littlecodedragon
b81d3eb198 CI: resolve merge conflict markers in build_release.yml
Some checks failed
Forgejo Release Builder / release (push) Failing after 17m24s
Invalid YAML from leftover <<<<<<< / ======= / >>>>>>> markers broke
Forgejo Actions parsing. Keep fork delta, full changelog link, and tip block.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-09 20:05:53 +02:00
littlecodedragon
fe43d3ef2c Reader: track per-page history metrics for ETA and backups
Persist per-session pages read in history, include it in backup/restore, and prefer a page-based ETA model so chapter-length variance (especially webtoons) is reflected more accurately.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-09 18:35:41 +02:00
littlecodedragon
384aee7372 Release: use fork update source and upstream-based changelog delta
Point in-app release checks/changelog links to the Forgejo fork and generate release notes against upstream komikku-app baseline commits for clearer fork-specific change visibility.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-09 18:29:15 +02:00
littlecodedragon
de5e0a32d3 Improve release asset naming and notes for Obtainium.
Normalize APK filenames to stable ABI/version patterns and add clearer release notes with a download guide so clients like Obtainium can reliably match assets.
2026-05-09 12:40:01 +02:00
littlecodedragon
b26a537d55 Fix DI registration for read-duration history interactor
All checks were successful
Forgejo Release Builder / release (push) Successful in 17m1s
Register GetReadDurationEntriesByMangaIds in DomainModule so LibraryScreenModel can resolve it and the app no longer crashes on startup.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-09 12:20:27 +02:00
littlecodedragon
a2f9003008 CI: publish only signed release APKs
All checks were successful
Forgejo Release Builder / release (push) Successful in 17m24s
Prevent unsigned artifacts from being published as Obtainium aliases and fail fast when signing secrets are missing so releases remain installable.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-09 07:55:21 +02:00
NarwhalHorns
e50767709a Utilize tracker for library duplicate detection (mihonapp/mihon#2978)
* Utilize tracker for library duplicate detection (#2978)

Co-authored-by: AntsyLich <59261191+AntsyLich@users.noreply.github.com>
(cherry picked from commit 89bbdb17fb4ed1cbe99c14f389940e0f91093a10)

* Avoid crash due to duplicate manga ID when there are more than 1 trackers

* Add index for duplicate library manga detection in manga_sync

---------

Co-authored-by: Cuong-Tran <16017808+cuong-tran@users.noreply.github.com>
2026-05-08 19:27:41 +07:00
NarwhalHorns
c290472012 Add option for bookmarked chapters to download dropdown (mihonapp/mihon#2891)
Co-authored-by: Cuong-Tran <16017808+cuong-tran@users.noreply.github.com>

(cherry picked from commit 3c6f0f1697ccab055ee7af47da84b2161d406f0c)

(cherry picked from commit 185cd923c0bf838d55b38ce0ebfb5c010760b880)
2026-05-08 14:52:04 +07:00
littlecodedragon
7e3738551b CI: allow insecure curl for self-signed Forgejo API
All checks were successful
Forgejo Release Builder / release (push) Successful in 15m48s
2026-05-08 08:34:29 +02:00
NarwhalHorns
aa7198f082 Optimize tracked library filter (mihonapp-mihon#2977)
Co-authored-by: NarwhalHorns <onefailedgamer@gamil.com>
Co-authored-by: AntsyLich <59261191+AntsyLich@users.noreply.github.com>
Co-authored-by: Cuong-Tran <16017808+cuong-tran@users.noreply.github.com>

(cherry picked from commit ab214526c6f24466a0432b5c5c7d254a244cd958)
2026-05-08 13:24:41 +07:00
Cuong-Tran
a52609b549 Remove redundant userSelected from selection methods (mihonapp-mihon#2976)
(cherry picked from commit 9867c160f781b52cd297f7b1202cc6963b375df0)
2026-05-08 12:52:53 +07:00
Cuong-Tran
4c21f019c0
chore: Refactor selection state management and improve performance across various screens (#1607)
* chore: Refactor selection state management and improve performance across various screens

*   **MigrateMangaScreen**: Refactor state management to use a `Set<Long>` of IDs for selection instead of a list of wrapper items.
*   **LibraryUpdateErrorScreen**: Simplify `onErrorSelected` signature by removing the unused `userSelected` parameter and clean up related UI components.
*   **Performance**: Use `remember(state.selection)` in `MigrateMangaScreen` for efficient selection status lookups.
*   **Code Quality**: Fix minor typos (e.g., `inbetweenItem` to `inBetweenItem`) and optimize imports.

* Refactor selection logic to prevent redundant state updates

* Move early exit checks for item selection status outside or to the beginning of state update blocks to avoid unnecessary recompositions.
* Improve safety and correctness of item selection by returning early from state updates when an item index is not found.
* Standardize selection checks across `HistoryScreenModel`, `LibraryUpdateErrorScreenModel`, `MigrateMangaScreenModel`, `UpdatesScreenModel`, and `MangaScreenModel`.

* update selection when migration list got updated

* Update state management to reset selection and loading status on fetch failure
2026-05-08 12:41:46 +07:00
littlecodedragon
0d6a348578 CI: ensure curl is available in Forgejo release steps
Some checks failed
Forgejo Release Builder / release (push) Failing after 16m51s
2026-05-08 07:11:00 +02:00