Compare commits

...

164 Commits

Author SHA1 Message Date
Jobobby04 301500dcef Release v1.9.2 2023-04-17 17:27:48 -04:00
Jobobby04 b1014f84f9 Don't optimize out serializers
(cherry picked from commit d94270ce32)
2023-04-17 17:12:28 -04:00
Jobobby04 caee9746a3 Release v1.9.1 2023-04-16 17:35:42 -04:00
Jobobby04 e6bb7ffa3d Directly use shortcuts and update google services and firebase
(cherry picked from commit b5fb64b70e)

# Conflicts:
#	app/src/main/java/eu/kanade/tachiyomi/App.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt
2023-04-16 17:14:59 -04:00
Jobobby04 eb52af9cd8 Should fix mangadex tracking crashes
(cherry picked from commit ed233a1a77)
2023-04-16 17:13:36 -04:00
Jobobby04 6942200d45 Get baseline profiles working 2023-04-16 16:15:26 -04:00
Jobobby04 e41688e5c8 Fixes for categories index
(cherry picked from commit af3a036e80)

# Conflicts:
#	app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryTab.kt
2023-04-16 15:17:51 -04:00
Jobobby04 6af47d03cb Improve history migration
(cherry picked from commit b26749d61c)
2023-04-16 15:17:07 -04:00
Jobobby04 ca423ba13e Improve migration copy and migrate functions
(cherry picked from commit 4212d155ce)

# Conflicts:
#	app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/advanced/process/MigrationListScreen.kt
2023-04-16 15:17:02 -04:00
Jobobby04 f890a68f35 Fixes to center margin option
(cherry picked from commit d8c2baa135)
2023-04-16 15:16:24 -04:00
Shamicen 212c1d3287 Bump xmlutil (#839)
Bump xmlutil to version 0.85.0

(cherry picked from commit 928c2a069e)
2023-04-16 12:43:18 -04:00
simakover 143489a80b fix to cryllic letter filtering (#837)
(cherry picked from commit 3d7b8cd551)
2023-04-16 12:43:04 -04:00
Dexroneum 69bd76f780 [RU] Translations (#822)
* [RU] Translations

* Return as before

(cherry picked from commit af9717686e)
2023-04-16 12:42:51 -04:00
Howard Wu c7df0fe01e Update zh-rCN translation (#831)
* Update zh-rCN translation

* Update strings_sy.xml

(cherry picked from commit 0e618db668)
2023-04-16 12:42:37 -04:00
Howard Wu eda81e5e30 Update zh-rCN translation (#821)
* Update zh-rCN translation

* Update strings_sy.xml

* Update strings_sy.xml

* Update strings_sy.xml

* Update strings_sy.xml

(cherry picked from commit c8c2d29f88)
2023-04-16 12:42:29 -04:00
Howard Wu 5ab038cbf4 Update zh-rCN translation (#809)
(cherry picked from commit e8f9550211)
2023-04-16 12:42:15 -04:00
Jobobby04 f40fb30af9 Refactor data saver
(cherry picked from commit 36381aca33)
2023-04-16 12:41:38 -04:00
Wisest_wizard ba0674c4a3 Use wsrv.nl service (#778)
* Add wsrv.nl datasaver service

* Add code comments

(cherry picked from commit ae712527f3)
2023-04-16 12:41:19 -04:00
Daniel 43b3abf43b Smooth Automatic Scrolling for Webtoon (#777)
(cherry picked from commit 82f0e5bc01)
2023-04-16 12:41:05 -04:00
Jobobby04 c7433287c6 Add Data saver to MangaPlus
(cherry picked from commit 7155b2be10)
2023-04-16 12:40:06 -04:00
Jobobby04 3698b23523 Fix manga plus chapters
(cherry picked from commit d013578fb5)
2023-04-16 12:40:01 -04:00
Jobobby04 787690c9bd Cleanup
(cherry picked from commit 81283dc5cf)

# Conflicts:
#	app/src/main/java/eu/kanade/tachiyomi/ui/browse/feed/FeedTab.kt
2023-04-16 12:39:30 -04:00
Jobobby04 5a48b3b375 Fix issues with feed reloading all the time
(cherry picked from commit 28fe7fec06)

# Conflicts:
#	app/src/main/java/eu/kanade/tachiyomi/ui/browse/feed/FeedTab.kt
2023-04-16 12:38:09 -04:00
Jobobby04 e1c0289bec Make statistics not required for MangaDex
(cherry picked from commit d81a01aa1d)
2023-04-16 12:37:34 -04:00
Jobobby04 06e4429b92 Use current filters and toolbar query for saved searches
(cherry picked from commit fea36ad138)
2023-04-16 12:37:20 -04:00
Jobobby04 82c2d06d3f Drop queries if they direct to latest or popular
(cherry picked from commit 8f97dd7fb8)
2023-04-16 12:36:13 -04:00
Jobobby04 37a4e2d72d Retry a few times if library or updates crash
(cherry picked from commit 5abab75d26)
2023-04-16 12:36:05 -04:00
Jobobby04 428fa17bfc Fix categories dialog showing group by categories
(cherry picked from commit afab9c236d)
2023-04-16 12:35:54 -04:00
Jobobby04 b6baac90dc Fix library sort not using tag sort
(cherry picked from commit 259a487dc0)
2023-04-16 12:35:46 -04:00
Jobobby04 f6a6dcb540 Make sure the navigator disposes after migration
(cherry picked from commit 9bde4b8b33)
2023-04-16 12:35:39 -04:00
Jobobby04 8ec0bb9c8f Fix smart search not allowing you to back-out
(cherry picked from commit 76d852313d)
2023-04-16 12:35:31 -04:00
Jobobby04 6ed4b79746 Guard from NaN crashes in batch add
(cherry picked from commit 28f3c4f4c6)
2023-04-16 12:35:25 -04:00
Jays2Kings 0f2462248e Fix double page progress when changing orientation (#799)
* Fix double page when changing orientation

* Fix requested page, when device config changes when app is in BG

* Cleanup on save reader logic

(cherry picked from commit 520846c75e)
2023-04-16 12:33:26 -04:00
arkon 6bcdaf9376 Avoid uncaught exceptions from OkHttp interceptors crashing entire app
(cherry picked from commit 26d422b0aeaee2d0a7957f0f8d955e045dde1a34)
(cherry picked from commit 3041200d7b)
2023-04-16 12:32:42 -04:00
Eshlender c683ca3ee7 Update track domain shikimori.me (#9333)
shikimori.me

(cherry picked from commit 564a0980b99183bb2b73999c17a4c6603c008f05)
(cherry picked from commit 99546688dc)
2023-04-16 12:32:32 -04:00
arkon b8eca65a02 Save current chapter progress when navigating to adjacent chapters
Fixes #9295

(cherry picked from commit 776d36caf11cf29287e4cb86a6e64574a296f89c)
(cherry picked from commit 4f984cef5f)
2023-04-16 12:32:11 -04:00
arkon 7a631de9e7 Fix Spanish (Latin America) being missing from in-app language selection
(cherry picked from commit 290efb0283145d81290972991047064c1d905c9c)
(cherry picked from commit e3a5860c1a)
2023-04-16 12:32:03 -04:00
arkon 6ab803fc99 Bump subsampling-scale-image-view
(cherry picked from commit e5e18c2030f26e89aedd5536d21ab915ccdbb26a)
(cherry picked from commit 53ff9a5cc8)
2023-04-16 12:31:56 -04:00
arkon 639a2a9c38 Show proper string in manga detail screen for SourceNotInstalledException
(cherry picked from commit 14d1bcacc9cba0e14cdf90a7972bf85660465c0b)

# Conflicts:
#	app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt
(cherry picked from commit 85af8ea517)
2023-04-16 12:31:46 -04:00
arkon 9d1b4bf2ec Set default automatic library updates to off
(cherry picked from commit abd23b68266a296c9698ba89f0cb665bbe9a799d)
(cherry picked from commit d91d53557a)
2023-04-16 12:31:39 -04:00
arkon 9fa825b156 Use queued last chapter read number when performing delayed tracker update
Fixes #8876

(cherry picked from commit f7f2072621bbcaf4ddbe07f746a5cf78490c95c9)
(cherry picked from commit 9baa52db00)
2023-04-16 12:31:28 -04:00
arkon c76084a2c5 Bump default user agent string and minimum WebView version
(cherry picked from commit c6e5f8abd9e0e2096d3a8ad17a370107e20cc288)
(cherry picked from commit c481d5c575)
2023-04-16 12:31:20 -04:00
arkon a28b54f1a1 Avoid crashing in SourcePreferencesScreen if source can't be loaded
(cherry picked from commit 4efca047658761e54cc7574a6e33ed681de3f40a)
(cherry picked from commit 897d019f0b)
2023-04-16 12:31:07 -04:00
arkon 7f9848db99 Avoid crash in DeleteLibraryMangaDialog
No clue why it ever gets a -1 index though.

(cherry picked from commit b12c7cf9633a9fc3a728a0ef44b5d50d621a7595)
(cherry picked from commit e9083fc571)
2023-04-16 12:30:59 -04:00
Two-Ai ea0483e4aa Fix download queue page count display bug (#9126)
When restarting a download, the page count would display as 0 until
the first page download completion, after all the existing pages were
rechecked.

To fix, calculate downloadedImages from pages instead of relying on
the downloader to reset and increment the count.

(cherry picked from commit 779df32e98f2a020ca6a4f79c0748dd9f5b16873)
(cherry picked from commit acef44f55c)
2023-04-16 12:30:46 -04:00
arkon feec105ebd Fix occasional crash when opening library settings sheet
See https://stackoverflow.com/questions/47648689/sealed-classs-objects-mysteriously-becoming-null-when-referenced-by-other-compa

(cherry picked from commit c0e2eb211daefe47803d93161f896c6d5011a0ff)
(cherry picked from commit 5077000f52)
2023-04-16 12:30:34 -04:00
arkon 699ccad088 Avoid crash when loading invalid extension package
(cherry picked from commit 3d7c136320da3b5842a51d7dbb9e82cf74144f3f)

# Conflicts:
#	app/src/main/java/eu/kanade/tachiyomi/extension/util/ExtensionLoader.kt
(cherry picked from commit 85224c368d)
2023-04-16 12:30:26 -04:00
arkon c2ec098cb1 Avoid crashing if getChapterUrl is not implemented
Fixes #9105

(cherry picked from commit ceaf579cb0b4b0ecdf2e56f245a2fad2b6ed2e85)
(cherry picked from commit 366219d7f5)
2023-04-16 12:30:17 -04:00
Ivan Iskandar 3455971fe8 MainActivity: Avoid navigator-related crash when handling onNewIntent (#9104)
(cherry picked from commit d3dadf71e8d7d029fdb87b44217e001f95f21c1a)
(cherry picked from commit a163223d83)

# Conflicts:
#	app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt
2023-04-16 12:30:08 -04:00
arkon 1e3f0ad9d3 Avoid crashing if opening browse with unavailable source
(cherry picked from commit 0ef7650c1a0ae7c4c6e17e458695191ce78944cb)

# Conflicts:
#	app/src/main/java/eu/kanade/presentation/browse/BrowseSourceScreen.kt
#	app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceToolbar.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceScreen.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceScreenModel.kt
(cherry picked from commit ab19d5c62a)
2023-04-16 12:29:00 -04:00
arkon 130ce513fd Move reader preloading to IO scope
Maybe fixes #8440

(cherry picked from commit e052bdef96c133b92dfad214c2b05ab03d4c5866)
(cherry picked from commit ab8c8db6ac)
2023-04-16 12:28:42 -04:00
arkon c93a0e8f93 Avoid preload download check if chapter is already loaded or loading
Maybe fixes #8953, #9060

(cherry picked from commit d522d6d545bfbd4e4f8f60975bddcd5f6bcc69ac)
(cherry picked from commit b42c5b58ea)
2023-04-16 12:28:34 -04:00
Ivan Iskandar ed73a1b818 MangaCoverDialog: Disable memory cache (#9066)
(cherry picked from commit 1671a56f42c4bb1de3482c2ff264593531e5d39d)
(cherry picked from commit 2023acf319)
2023-04-16 12:28:25 -04:00
arkon 9b32d12b3a Prioritize finding selected chapter when deduping reader chapters
Fixes #9054

(cherry picked from commit 23432e44050cd8638f070745edf77be75aeffe21)
(cherry picked from commit 255eda6d8e)
2023-04-16 12:28:15 -04:00
Ivan Iskandar 5384fd2d0f Scaffold: Fix snackbar bottom inset (#9052)
(cherry picked from commit 34a586ce48d6c10ac9eadb697b955ba336044bc2)
(cherry picked from commit b9a7a7388c)
2023-04-16 12:28:06 -04:00
Ivan Iskandar 40c819ffef Remove FAB extra padding in DownloadQueueScreen (#9053)
(cherry picked from commit ad762f8303f2cc37bd2b78fc366b01b80bbc012b)
(cherry picked from commit e925d7a603)
2023-04-16 12:27:57 -04:00
0x7673 39ee73edeb Fix crash in library when selected category is deleted (#9044)
(cherry picked from commit 13bb45b4bee6e31685d47a4157e10bcedf111bf0)
(cherry picked from commit f54e5515ac)
2023-04-16 12:27:46 -04:00
Jobobby04 637448eb65 Fix page progess for external mangadex handlers 2023-02-11 20:11:47 -05:00
Jobobby04 beb28b86ac Support getMangaUrl and getChapterUrl for delegated sources 2023-02-11 20:03:26 -05:00
arkon 304e3560fa Don't show SourceNotInstalledException name in error snackbar
(cherry picked from commit 3c1608263601ecd900ff3b0093f41df7c92c91f6)
2023-02-09 18:18:01 -05:00
arkon ff76335164 Bump desugaring libs
(cherry picked from commit 75e23299b45b4287933c67ef9947001f1384dc54)
2023-02-09 18:17:32 -05:00
Weblate (bot) a56ea18a31 Translations update from Hosted Weblate (#8960)
Weblate translations

Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/ar/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/de/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/es/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/fa/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/fr/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/gl/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/hr/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/id/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/ko/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/nl/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/pl/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/pt/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/th/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/uk/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/zh_Hans/
Translation: Tachiyomi/Tachiyomi 0.x

Co-authored-by: Abou <aboozar.gh.r@gmail.com>
Co-authored-by: Alba Paz <albapazpi@gmail.com>
Co-authored-by: Ali Aljishi <ahj696@hotmail.com>
Co-authored-by: Blue <bluestuffish@gmail.com>
Co-authored-by: Dan <denqwerta@gmail.com>
Co-authored-by: FTDaily <farrell05june2005@gmail.com>
Co-authored-by: Gabriel Lebis <gableb@hotmail.fr>
Co-authored-by: J. Lavoie <j.lavoie@net-c.ca>
Co-authored-by: Lyfja <yassinelaoud@gmail.com>
Co-authored-by: Milo Ivir <mail@milotype.de>
Co-authored-by: Shippo <Shipox@users.noreply.hosted.weblate.org>
Co-authored-by: Swyter <swyterzone@gmail.com>
Co-authored-by: The Ghost <marcc2018@gmail.com>
Co-authored-by: ZiomaleQ <r.partyka30@gmail.com>
Co-authored-by: altinat <altinat@duck.com>
Co-authored-by: jinu147 <nesqea20@gmail.com>
Co-authored-by: stevenlele <stevenlele@outlook.com>
(cherry picked from commit 935ff1ee98fb3d0e31adfecd4b9bc054bce22d28)
2023-02-09 18:17:23 -05:00
renovate[bot] b78b59712d Update dependency com.android.tools.build:gradle to v7.4.1 (#9024)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
(cherry picked from commit c672cb81ecb5a3d33a3af950393f2e12016fd516)
2023-02-09 18:17:14 -05:00
stevenyomi c3c52badca Call.await(): copy exception message when preserving error stack (#9013)
(cherry picked from commit 7559c133c05cff0a41d11757ec31c86da7bf5c74)
2023-02-09 18:17:06 -05:00
stevenyomi fb937d9ad6 Show exception class in snackbar message (#9006)
* Show exception class in snackbar message

* omit IOException too

(cherry picked from commit 589bdba0b1538266b7786591046f88a1159cbb8c)

# Conflicts:
#	app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt
2023-02-09 18:16:56 -05:00
Two-Ai 8ff51227bd Misc Service cleanup (#9005)
* Simplify DownloadService wake lock handling

_isRunning is only modified in onCreate/onDestroy, so the listener
job is redundant.

* Drop superclass calls to Service.onCreate/onDestroy

From https://developer.android.com/guide/components/services
> Note: Unlike the activity lifecycle callback methods, you are not
> required to call the superclass implementation of these callback
> methods.

(cherry picked from commit aca65f13bb94b6c0c4a77a9d426491d3667f4a7d)
2023-02-09 18:16:06 -05:00
renovate[bot] 6f32744cbe Update dependency androidx.compose.material:material to v1.4.0-alpha05 (#8997)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
(cherry picked from commit 7bf30a094aa9e9bfcbdba9d35a11303aa50e2b6e)
2023-02-09 18:15:55 -05:00
renovate[bot] c9fec75588 Update dependency com.google.android.material:material to v1.8.0 (#8999)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
(cherry picked from commit 5454279a8eb29892905ee98501a4b2fef5afc53e)
2023-02-09 18:15:46 -05:00
renovate[bot] 9224070026 Update dependency androidx.core:core-ktx to v1.10.0-alpha02 (#8998)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
(cherry picked from commit 006bcdf934292b38ea91caf0d096e8dbead6eb1a)
2023-02-09 18:15:38 -05:00
Andreas c5095b0995 Set InsertPage status to Ready (#9001)
Fixes insert page just loading

(cherry picked from commit b00f00730d93ae36cdbb690f3c33698b086d4407)
2023-02-09 18:15:29 -05:00
arkon 8146e1181a Move some interactors to domain module
(cherry picked from commit f2c48480b687d4e01350e580a5648ae52bd5d107)

# Conflicts:
#	app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsLibraryScreen.kt
#	app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadManager.kt
#	app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateService.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/search/MigrateDialog.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceScreenModel.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderViewModel.kt
2023-02-09 18:15:16 -05:00
arkon bd0eda0c65 Move more things around
(cherry picked from commit 1730dd6af1f5a9e6f8752a2350b1bd153262a751)

# Conflicts:
#	app/src/main/java/eu/kanade/data/source/SourcePagingSource.kt
#	app/src/main/java/eu/kanade/domain/chapter/interactor/SetReadStatus.kt
#	app/src/main/java/eu/kanade/domain/library/service/LibraryPreferences.kt
#	app/src/main/java/eu/kanade/domain/manga/interactor/GetManga.kt
#	app/src/main/java/eu/kanade/presentation/more/settings/PreferenceItem.kt
#	app/src/main/java/eu/kanade/presentation/more/settings/screen/AboutScreen.kt
#	app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsAdvancedScreen.kt
#	app/src/main/java/eu/kanade/tachiyomi/App.kt
#	app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupManager.kt
#	app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadManager.kt
#	app/src/main/java/eu/kanade/tachiyomi/data/download/Downloader.kt
#	app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateService.kt
#	app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateChecker.kt
#	app/src/main/java/eu/kanade/tachiyomi/extension/api/ExtensionGithubApi.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/search/MigrateDialog.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/SourcesScreenModel.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceScreenModel.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryScreenModel.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/library/LibrarySettingsSheet.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryTab.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreen.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/more/MoreTab.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderViewModel.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/ChapterLoader.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/HttpPageLoader.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerViewerAdapter.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/updates/UpdatesScreenModel.kt
#	app/src/main/java/eu/kanade/tachiyomi/util/CrashLogUtil.kt
#	data/src/main/java/tachiyomi/data/manga/MangaRepositoryImpl.kt
2023-02-09 18:08:07 -05:00
Jobobby04 a51c25bdcf Handle getImage for delegate sources 2023-02-09 17:44:21 -05:00
Andreas 83e23dedae Split UpdatesGridGlanceWidget into smaller bits (#8991)
- Renamed Composables
- Moved Constants to core module

(cherry picked from commit 2501fef9e4800e6a616b418d1cbec0ea2b9e282e)

# Conflicts:
#	app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/search/SourceSearchScreen.kt
2023-02-09 17:43:44 -05:00
Andreas d8a938374a Move Glance Widget to seperate module (#8989)
Move Widget to seperate module

- Create a core module for presentation. Widget and App will share some resources and hopefully composables

(cherry picked from commit 12e41b6e6f3b5d95d19e1caa6c9fbe5eb6c9749c)
2023-02-09 17:28:55 -05:00
beerpsi f2944c1fa3 [BackupRestorer] Handle uncompressed backups (#8988)
[Backups] Handle uncompressed backups

(cherry picked from commit c892c793a82c0349a3001954fd3a4fda9fece0dd)

# Conflicts:
#	app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupRestorer.kt
2023-02-09 17:28:44 -05:00
Two-Ai d08a3bd2d0 Don't crash on timeout in renewCache() (#8986)
Fixes #8962.

withTimeout throws a TimeoutCancellationException if the timeout
expires. To avoid crashing renewalJob when there are no extensions,
use withTimeoutOrNull which does not throw on timeout.

(cherry picked from commit 3a82b4d924ae7207f7d1c1b23d2a71a1e7d09258)
2023-02-09 17:27:44 -05:00
Two-Ai acc3e16230 Fixup HttpPageLoader _loadPage (#8984)
Fixup for e4bc8990 (#8955)

HttpSource.fetchImage() uses Call.asObservableSuccess(), which
cancels the call on unsubscribe. This causes the call to be cancelled
before it is used, leading to a "java.net.SocketException: Socket is
closed" when trying to use the response in putImageToCache().

To fix this, use Call.awaitSuccess() via a new HttpSource.getImage()
suspending function. This addition to source-api is only intended for
app use, so it will not be added to the extensions-api stubs.

(cherry picked from commit b4b3a4d2869fae7839b4b3111e289056e33cfea8)

# Conflicts:
#	app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/HttpPageLoader.kt
2023-02-09 17:27:31 -05:00
stevenyomi a0497d079d OkHttp Call: split await() and awaitSuccess() (#8980)
(cherry picked from commit 448702e5beedcd0918c504da34a0feda20ee2817)
2023-02-09 17:22:54 -05:00
Two-Ai 1948545983 Replace PageLoader.getPage() with PageLoader.loadPage() (#8976)
* Follow page status via StateFlow

Keep getPage subscription since it's needed to load the pages

* Replace PageLoader.getPage with PageLoader.loadPage

(cherry picked from commit 2ef1f07aaea0852c13a4eb4096ac96c8aa507c39)

# Conflicts:
#	app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/HttpPageLoader.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerPageHolder.kt
2023-02-09 17:13:29 -05:00
stevenyomi b5df879392 Fix extension search query cursor and debounce (#8972)
* Fix extension search query cursor

* debounce

* extract debounce constant

(cherry picked from commit 1a319601de03d91131a7ad3b39fe6a8bf75e6ebb)

# Conflicts:
#	app/src/main/java/eu/kanade/tachiyomi/ui/browse/BrowseTab.kt
2023-02-09 16:55:03 -05:00
Andreas 887757691c Move more to data and domain modules (#8973)
(cherry picked from commit cdf242e8c8e4b8142d9f4167b0187a32ea1a4d35)

# Conflicts:
#	app/src/main/java/eu/kanade/domain/chapter/interactor/SyncChaptersWithSource.kt
#	app/src/main/java/eu/kanade/domain/track/interactor/GetTracksPerManga.kt
#	app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateService.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt
2023-02-09 16:50:07 -05:00
Jobobby04 c0e9471608 Move more implementation to data module 2023-02-09 16:17:00 -05:00
Andreas 120ea4c768 Move more implementation to data module (#8971)
(cherry picked from commit aee785a8bbf95bd8b2ce975a25cf68dc302f363b)

# Conflicts:
#	app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupManager.kt
2023-02-09 16:00:35 -05:00
arkon 8d4e51d4fc Move more models to domain module
(cherry picked from commit d45fc1e245e025c8c5d6c380a73fd99d67bc8622)

# Conflicts:
#	app/src/main/java/eu/kanade/domain/source/model/Source.kt
2023-02-09 15:41:25 -05:00
Jobobby04 dd62337ad6 Move more repositories to domain module 2023-02-09 15:10:37 -05:00
Jobobby04 ab0995ab9f Make MergedMangaReference immutable 2023-02-09 14:54:52 -05:00
arkon eecf7fd1fb Move more repositories to domain module
(cherry picked from commit 14500ba4f8ecaa852ca121bcdd91a3da5cea5093)

# Conflicts:
#	app/src/main/java/eu/kanade/domain/history/interactor/GetNextChapters.kt
#	app/src/main/java/eu/kanade/domain/manga/interactor/GetManga.kt
#	app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsAdvancedScreen.kt
#	app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateService.kt
#	app/src/main/java/eu/kanade/tachiyomi/source/SourceManager.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryScreenModel.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryTab.kt
2023-02-09 13:54:12 -05:00
arkon ce67eb9de3 Move more models to domain module
(cherry picked from commit 345e9c2a9a61f1f3b814db52eddbb42681499854)

# Conflicts:
#	app/src/main/java/eu/kanade/data/manga/MangaMapper.kt
#	app/src/main/java/eu/kanade/domain/chapter/interactor/SyncChaptersWithSource.kt
#	app/src/main/java/eu/kanade/domain/chapter/model/ChapterFilter.kt
#	app/src/main/java/eu/kanade/domain/history/interactor/GetNextChapters.kt
#	app/src/main/java/eu/kanade/domain/library/service/LibraryPreferences.kt
#	app/src/main/java/eu/kanade/domain/manga/model/Manga.kt
#	app/src/main/java/eu/kanade/presentation/browse/MigrateSearchScreen.kt
#	app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceDialogs.kt
#	app/src/main/java/eu/kanade/presentation/manga/MangaScreen.kt
#	app/src/main/java/eu/kanade/tachiyomi/data/backup/models/BackupManga.kt
#	app/src/main/java/eu/kanade/tachiyomi/data/database/models/Manga.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/MigrationFlags.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/search/MigrateDialog.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/search/SourceSearchScreen.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceScreenModel.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/history/HistoryTab.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryScreenModel.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryTab.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreen.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderViewModel.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/ChapterLoader.kt
#	app/src/main/java/eu/kanade/tachiyomi/util/chapter/ChapterGetNextUnread.kt
2023-02-09 13:44:38 -05:00
arkon eb3e928e67 Move more models to domain module
(cherry picked from commit b53e24e0dbd4affd6066a03ce543c3ecc88bdb99)

# Conflicts:
#	app/src/main/java/eu/kanade/data/history/HistoryRepositoryImpl.kt
#	app/src/main/java/eu/kanade/data/updates/UpdatesMapper.kt
#	app/src/main/java/eu/kanade/domain/category/interactor/SetDisplayModeForCategory.kt
#	app/src/main/java/eu/kanade/domain/category/interactor/SetSortModeForCategory.kt
#	app/src/main/java/eu/kanade/domain/history/repository/HistoryRepository.kt
#	app/src/main/java/eu/kanade/domain/library/service/LibraryPreferences.kt
#	app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceToolbar.kt
#	app/src/main/java/eu/kanade/tachiyomi/extension/ExtensionManager.kt
#	app/src/main/java/eu/kanade/tachiyomi/source/SourceManager.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/search/MigrateDialog.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/library/LibrarySettingsSheet.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryTab.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderViewModel.kt
#	domain/src/main/java/tachiyomi/domain/history/model/HistoryWithRelations.kt
#	domain/src/main/java/tachiyomi/domain/updates/model/UpdatesWithRelations.kt
2023-02-09 13:00:07 -05:00
Andreas d68330c64e Move Category model and repository to domain and data layer (#8967)
To keep the commit from being 100+ files the interactors wasn't moved.

The domain module like the data module uses `tachiyomi` instead of `eu.kanade.tachiyomi` for package names

(cherry picked from commit d3a73fc22849a915483bea03fcd7c20834b1f4d8)

# Conflicts:
#	app/src/main/java/eu/kanade/domain/category/interactor/SetSortModeForCategory.kt
#	app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsLibraryScreen.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryScreenModel.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/library/LibrarySettingsSheet.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryTab.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt
2023-02-07 17:18:30 -05:00
renovate[bot] 72168a2882 Update sqldelight to v1.5.5 (#8966)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
(cherry picked from commit c2812fca240f78d7cd77f63ea1c4db1b4332298c)
2023-02-07 17:06:30 -05:00
renovate[bot] 3924379559 Update dependency io.github.fornewid:material-motion-compose-core to v0.10.4 (#8964)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
(cherry picked from commit 856847a60a54e318cfb734e5d6797147550b928d)
2023-02-07 17:06:23 -05:00
arkon 4ee66f6185 Save current page state on configuration change
Fixes #8881

The actual issue is that the ViewModel migration actually differs between what the current `init` block
and previous `onSave` methods did; where the `init` block does not get triggered on saving the
instance on config changes.

Not entirely sure why onSaveInstanceState was explicitly avoided for config changes before, but we
just do it all the time now and end up updating the requestedPage with the current page.

(cherry picked from commit 2ebc8d9ae51f84b0f69dee603a5448a72013f734)

# Conflicts:
#	app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt
2023-02-07 17:06:10 -05:00
zbue a53190f7c4 MangaScreenModel: Make download function follow reader preference (#8920)
* Make download function more clearer in manga screen

Maybe resolves #8879

* Minor cleanup

* Minor cleanup 2

(cherry picked from commit e28b0155801859f48a18bc1c5aacead54378c77f)

# Conflicts:
#	app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt
2023-02-07 17:05:13 -05:00
Two-Ai 4965da340b Replace RxJava in HttpPageLoader downloader (#8955)
* Convert downloader Observable to flow

Uses `runInterruptible` to turn the blocking call to `queue.take()`
into a cancellable call.

Flow collection is ended by cancelling the scope in `recycle`. This
means the `HttpPageLoader` can't be reused after calling `recycle`,
but this was true with the `Observable` as well.)

* Convert load Observables to suspending function

Inlining the Observables allows for some simplification of the error
handling. Behavior should be otherwise identical.

* Convert cleanup Completable to coroutine

Uses global `launchIO`, not ideal but similar to previous behavior.
Can't be scheduled on the local `scope` as this runs after `scope` is
cancelled.

(cherry picked from commit e4bc8990fbe2aa4bc31977f1061bac0c70d7a58f)

# Conflicts:
#	app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/HttpPageLoader.kt
2023-02-07 16:55:26 -05:00
Weblate (bot) 6acb796e0c Translations update from Hosted Weblate (#8855)
Weblate translations

Co-authored-by: Ajeje Brazorf <lmelonimamo@yahoo.it>
Co-authored-by: Alessandro Jean <alessandrojean@gmail.com>
Co-authored-by: Dan <denqwerta@gmail.com>
Co-authored-by: DarKCroX <DarKCroX@users.noreply.hosted.weblate.org>
Co-authored-by: Dexroneum <Rozhenkov69@gmail.com>
Co-authored-by: Eduard Ereza Martínez <eduard@ereza.cat>
Co-authored-by: FTDaily <farrell05june2005@gmail.com>
Co-authored-by: Giorgio Sanna <sannagiorgio1997@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: ID-86 <id86dev@gmail.com>
Co-authored-by: Kornelijus Tvarijanavičius <kornelijus@tvaria.com>
Co-authored-by: Lyfja <yassinelaoud@gmail.com>
Co-authored-by: Lzmxya <lzmxya@gmail.com>
Co-authored-by: Madddog1997 <madddog1997@gmail.com>
Co-authored-by: Marvash Magalli <antorunese96@gmail.com>
Co-authored-by: Milo Ivir <mail@milotype.de>
Co-authored-by: M͜͡edRAM <mohammad7ram@gmail.com>
Co-authored-by: Nepx <anandabaskara@outlook.com>
Co-authored-by: Osyx <ofalkman@gmail.com>
Co-authored-by: Oğuz Ersen <oguz@ersen.moe>
Co-authored-by: Pitpe11 <giorgos2550@gmail.com>
Co-authored-by: Ricardo <contatorms7@tutamail.com>
Co-authored-by: Rostyslav Haitkulov <info@ubilling.net.ua>
Co-authored-by: Shippo <Shipox@users.noreply.hosted.weblate.org>
Co-authored-by: Swyter <swyterzone@gmail.com>
Co-authored-by: Tahsin Gökalp <tahsinsaan@gmail.com>
Co-authored-by: TheKingTermux <achmadmaulana0233@gmail.com>
Co-authored-by: Uzuki Shimamura <hzy980512@126.com>
Co-authored-by: VespreSky <mp.draw.1@googlemail.com>
Co-authored-by: Vetle Ledaal <vetle.ledaal@gmail.com>
Co-authored-by: Yurical <yurical1@outlook.com>
Co-authored-by: adkxamov <adxoff@gmail.com>
Co-authored-by: ayaao <myrgdream@gmail.com>
Co-authored-by: jinu147 <nesqea20@gmail.com>
Co-authored-by: slundi <slundi@gmail.com>
Co-authored-by: ssantos <ssantos@web.de>
Co-authored-by: stevenlele <stevenlele@outlook.com>
Co-authored-by: torchlight <sima142222@gmail.com>
Co-authored-by: Олександр Котецький <saymon4145@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/ar/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/ca/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/cs/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/de/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/el/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/es/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/fr/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/hr/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/id/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/it/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/ja/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/kk/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/ko/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/lt/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/ms/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/nb_NO/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/pt/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/pt_BR/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/ru/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/sc/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/sk/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/sr/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/sv/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/tr/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/uk/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/uz/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/zh_Hans/
Translate-URL: https://hosted.weblate.org/projects/tachiyomi/strings/zh_Hant/
Translation: Tachiyomi/Tachiyomi 0.x

Co-authored-by: Ajeje Brazorf <lmelonimamo@yahoo.it>
Co-authored-by: Alessandro Jean <alessandrojean@gmail.com>
Co-authored-by: Dan <denqwerta@gmail.com>
Co-authored-by: DarKCroX <DarKCroX@users.noreply.hosted.weblate.org>
Co-authored-by: Dexroneum <Rozhenkov69@gmail.com>
Co-authored-by: Eduard Ereza Martínez <eduard@ereza.cat>
Co-authored-by: FTDaily <farrell05june2005@gmail.com>
Co-authored-by: Giorgio Sanna <sannagiorgio1997@gmail.com>
Co-authored-by: ID-86 <id86dev@gmail.com>
Co-authored-by: Kornelijus Tvarijanavičius <kornelijus@tvaria.com>
Co-authored-by: Lyfja <yassinelaoud@gmail.com>
Co-authored-by: Lzmxya <lzmxya@gmail.com>
Co-authored-by: Madddog1997 <madddog1997@gmail.com>
Co-authored-by: Marvash Magalli <antorunese96@gmail.com>
Co-authored-by: Milo Ivir <mail@milotype.de>
Co-authored-by: M͜͡edRAM <mohammad7ram@gmail.com>
Co-authored-by: Nepx <anandabaskara@outlook.com>
Co-authored-by: Osyx <ofalkman@gmail.com>
Co-authored-by: Oğuz Ersen <oguz@ersen.moe>
Co-authored-by: Pitpe11 <giorgos2550@gmail.com>
Co-authored-by: Ricardo <contatorms7@tutamail.com>
Co-authored-by: Rostyslav Haitkulov <info@ubilling.net.ua>
Co-authored-by: Shippo <Shipox@users.noreply.hosted.weblate.org>
Co-authored-by: Swyter <swyterzone@gmail.com>
Co-authored-by: Tahsin Gökalp <tahsinsaan@gmail.com>
Co-authored-by: TheKingTermux <achmadmaulana0233@gmail.com>
Co-authored-by: Uzuki Shimamura <hzy980512@126.com>
Co-authored-by: VespreSky <mp.draw.1@googlemail.com>
Co-authored-by: Vetle Ledaal <vetle.ledaal@gmail.com>
Co-authored-by: Yurical <yurical1@outlook.com>
Co-authored-by: adkxamov <adxoff@gmail.com>
Co-authored-by: ayaao <myrgdream@gmail.com>
Co-authored-by: jinu147 <nesqea20@gmail.com>
Co-authored-by: slundi <slundi@gmail.com>
Co-authored-by: ssantos <ssantos@web.de>
Co-authored-by: stevenlele <stevenlele@outlook.com>
Co-authored-by: torchlight <sima142222@gmail.com>
Co-authored-by: Олександр Котецький <saymon4145@gmail.com>
(cherry picked from commit a179327d9de9f98b907024d67401be1d4e4cfdcb)
2023-02-07 16:50:24 -05:00
Jobobby04 a9edf090c4 Lint 2023-02-07 16:50:09 -05:00
Andreas 64d829d304 Move SQLDelight to data module (#8954)
And use tachiyomi instead of eu.kanade.tachiyomi for package names in the module

(cherry picked from commit 823749fc1ed16dbf52d43839888a70de089d65b1)

# Conflicts:
#	app/build.gradle.kts
#	app/src/main/java/eu/kanade/data/history/HistoryRepositoryImpl.kt
#	app/src/main/java/eu/kanade/data/manga/MangaRepositoryImpl.kt
#	app/src/main/java/eu/kanade/data/updates/UpdatesRepositoryImpl.kt
#	app/src/main/java/eu/kanade/tachiyomi/App.kt
#	app/src/main/java/eu/kanade/tachiyomi/AppModule.kt
#	app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupManager.kt
#	app/src/main/java/eu/kanade/tachiyomi/source/model/SMangaExtensions.kt
#	data/src/main/java/tachiyomi/data/AndroidDatabaseHandler.kt
#	data/src/main/sqldelight/tachiyomi/data/eh.sq
#	data/src/main/sqldelight/tachiyomi/data/eh_favorites.sq
#	data/src/main/sqldelight/tachiyomi/data/feed_saved_search.sq
#	data/src/main/sqldelight/tachiyomi/data/merged.sq
#	data/src/main/sqldelight/tachiyomi/data/saved_search.sq
#	data/src/main/sqldelight/tachiyomi/data/search_metadata.sq
#	data/src/main/sqldelight/tachiyomi/data/search_tags.sq
#	data/src/main/sqldelight/tachiyomi/data/search_titles.sq
#	data/src/main/sqldelight/tachiyomi/migrations/16.sqm
#	data/src/main/sqldelight/tachiyomi/migrations/24.sqm
2023-02-07 16:49:49 -05:00
Andreas 888d1f0983 Move shared configuration to subprojects in root Gradle file (#8951)
* Move shared configuration to subprojects in root Gradle file

* Missed but not forgotten

* Review changes

(cherry picked from commit 2b5d9fd76b9b7b629921bc793553cd4a571eda00)

# Conflicts:
#	app/build.gradle.kts
#	i18n/build.gradle.kts
2023-02-07 16:12:31 -05:00
arkon 354bb2fd83 Don't use platform attributes for white/black reader backgrounds
Probably fixes #8946

(cherry picked from commit 7a972dfdb7cfb7578b3f9dd63ba0fdcb77b16b24)
2023-02-07 16:11:37 -05:00
Andreas 34b60a435e Create plugin for linting (#8942)
(cherry picked from commit c31e75f02f3021c52f6c24f655e2bded0c8b2b33)

# Conflicts:
#	.github/workflows/build_pull_request.yml
#	.github/workflows/build_push.yml
#	app/build.gradle.kts
#	build.gradle.kts
2023-02-07 16:11:25 -05:00
Jobobby04 50a758f05b Move versions plugin to sylibs 2023-02-07 16:01:22 -05:00
arkon 2e4b6e45d6 Upgrade to Kotlin 1.8.0
(cherry picked from commit b56b8b55b43a5071e6f8d0a58afb56beebf139f9)
2023-02-07 15:58:31 -05:00
arkon e2242fe00c Update local source icon and differentiate from fallback source icon
Closes #8934

(cherry picked from commit 2695a4d8c7fca617f513e0ac6fc92db230b0997a)
2023-02-07 15:58:20 -05:00
arkon 1fd8021e98 Hide WebView menu item in reader if local
Closes #8932

(cherry picked from commit 1a4dad72a9e7e5eb5326f5846c50698fe2bb6673)

# Conflicts:
#	app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt
2023-02-07 15:58:13 -05:00
beerpsi da58039cfb [MyAnimeList] Handle cases where my_list_status.status is not present (#8931)
(cherry picked from commit b7e6b4c28a2dc1a14aebfadf7c6aabb29f96d0dc)
2023-02-07 15:56:36 -05:00
stevenyomi fe303435c8 Fix installing extensions on MIUI (#8916)
* Fix installing extensions on MIUI

* isShizukuReady -> isShizukuInstalled

(cherry picked from commit 293b96785865d9cf8c62b3e12046347b32be9d4d)

# Conflicts:
#	app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsAdvancedScreen.kt
2023-02-07 15:56:25 -05:00
arkon dc661a252a Assign keys for global search rows based on source
Maybe fixes #8924

(cherry picked from commit e468554fd9fbe19bfe58b4c018bd8ee87388bed7)
2023-02-07 15:54:50 -05:00
arkon 767d1b3f20 Fix checking downloads banner showing up incorrectly
(cherry picked from commit 5b5eb9218483c53a260ad6f8cc97457fbf4872a8)
2023-02-07 15:54:40 -05:00
Two-Ai e4ab74d2e4 Convert PageLoader.getPages to suspending function (#8917)
(cherry picked from commit 58ebf146919694170af0d0044a9dde56668fa543)

# Conflicts:
#	app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadManager.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/HttpPageLoader.kt
2023-02-07 15:54:25 -05:00
Verzaukeks eff93b8e7c Prevent scrolling outside bounds in webtoon/vertical reading mode (#8821)
(cherry picked from commit 992bab4f7956740bafd8227b29958acebfaae64d)
2023-02-07 15:42:14 -05:00
zbue 740b3e4616 Allow partially read chapters to be marked as unread in updates screen (#8884)
* Allow partially read chapters to be marked as unread in updates screen

* Review changes

* Review changes 2

(cherry picked from commit f301dc64f00c2d8a19cb89610cf6fba7eb78917d)

# Conflicts:
#	app/src/main/java/eu/kanade/presentation/manga/MangaScreen.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/updates/UpdatesScreenModel.kt
#	app/src/main/sqldelight/migrations/23.sqm
2023-02-07 15:41:58 -05:00
zbue 7f7789792b Enable confirmButton only when needed to respond to user input (#8848)
* Enable `confirmButton` when appropriate

* Show error in dialog instead

* Follow M3 guidelines

(cherry picked from commit 33a221971692c1662dc883a7bac9fdcc7b843d35)

# Conflicts:
#	app/src/main/java/eu/kanade/domain/category/interactor/CreateCategoryWithName.kt
#	app/src/main/java/eu/kanade/presentation/category/components/CategoryDialogs.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/category/CategoryScreen.kt
2023-02-07 15:06:33 -05:00
Two-Ai 843c0a4588 Replace RxJava in ChapterLoader and ReaderViewModel (#8915)
* Replace RxJava in ChapterLoader

* Don't swallow CancellationException

* Simplify loadChapter behavior

* Add error handling to loadAdjacent

(cherry picked from commit 62480f090b3007487b7125c6a2cd63a6103486cc)

# Conflicts:
#	app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderViewModel.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/ChapterLoader.kt
2023-02-07 14:29:07 -05:00
zbue 886485a472 Make androidx.preference dialog match M3 dialog (#8909)
(cherry picked from commit e7937fe562f9b5e718b4353e20f28fbe82f0b8d7)
2023-02-07 14:04:39 -05:00
zbue a7fefb4c9c Show chapter scanlator on reader transition (#8910)
Closes #7131

(cherry picked from commit 287489d7d07881cdfcb0494c4c9d6163d63d2fce)
2023-02-07 14:04:28 -05:00
Aria Moradi 8fcfef87af Suwayomi Tracker: sync changes with Tachidesk v0.6.6 (#8902)
* Suwayomi Tracker: sync changes with Tachidesk v0.6.6

* replace var with val

(cherry picked from commit c54d77333f00419466a49aa227895756d2a3bd55)
2023-02-07 14:04:08 -05:00
Two-Ai 68609b38b0 Fix DownloadPageLoader resource leak (#8905)
The underlying ZipFile is leaking. To fix, store a reference to the
ZipPageLoader and recycle it on recycle.

(cherry picked from commit 8c494f314cf77e54675f8d9742d50ed0ef94df59)
2023-02-07 14:04:00 -05:00
Two-Ai 822fda4d2b Fix ChapterCache.isImageInCache() resource leak (#8907)
diskCache.get() returns a DiskLruCache.Snapshot which must be closed.

(cherry picked from commit 8cea78de83744ea955d4cfb7dcad3ca8abf43223)
2023-02-07 14:03:52 -05:00
arkon b30232ba9d Only how indexing downloads banner the first time
Closes #8903

(cherry picked from commit b6468c7e31728dcb888782d6cb11639833cfa037)
2023-02-07 14:03:44 -05:00
Jobobby04 a19be83f99 Parallelize feed properly 2023-02-07 14:03:27 -05:00
arkon f93cf29df4 Parallelize global search properly
Fixes #8906

(cherry picked from commit 91004ad514d25be610a1f8cd1390b74faf46830b)
2023-02-07 13:57:23 -05:00
arkon 864707d75b Minor cleanup
(cherry picked from commit a2ee4e63ae3bb2949c57d11a23bc56315579f891)
2023-02-07 13:57:15 -05:00
arkon 69acaa7829 Bump to latest Compose stable BOM
(cherry picked from commit 4d8289cd369ab7ed166523fdb93d6d34a19c57ba)
2023-02-07 13:56:52 -05:00
arkon 81a97f6f03 Bump AGP
Also enable configuration cache that Build Analyzer suggested

(cherry picked from commit 289264878ea4f0db7e90bc0197819de986c88922)

# Conflicts:
#	gradle.properties
2023-02-07 13:56:23 -05:00
zbue 9a7296aa3a Fix downloaded filter unmatched state in manga screen (#8897)
(cherry picked from commit 768bb7b503a478eecac7426da95d8e4cca8d1f4c)
2023-02-07 13:32:40 -05:00
zbue fe59b0e95d Tweak TriStateItem view to match in earlier app version (#8898)
* Tweak `TriStateItem` view to match in earlier app version

* Apply to disabled state too

(cherry picked from commit db4ae134aab2376fa110682e96798b32efd0d563)
2023-02-07 13:32:34 -05:00
Alessandro Jean 3a9a1c631d Show proper Exception message in MangaScreen (#8900)
Show proper Exception message in MangaScreen.

(cherry picked from commit 7329f03bc5e6fa63723d8b19ef8a351916af3631)
2023-02-07 13:32:14 -05:00
arkon a55e27c657 Don't prompt to add to library multiple times
Fixes #8842

(cherry picked from commit 82ea643c7d2ee75acc7fc17e2b9d492b57fb7a42)

# Conflicts:
#	app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt
2023-02-07 13:32:07 -05:00
arkon acf51f4d34 Reword set category dialog confirmation to "OK"
Closes #8878

(cherry picked from commit 741c10e0b939ec223ff0ce122a2ef9979291d325)
2023-02-07 13:31:38 -05:00
arkon 145adfaaa1 Update library sheet filter tab on open
Fixes #8885

(cherry picked from commit 34bb90f3c2d0cb3e8d3bb9564a702068dcb10b7e)
2023-02-07 13:31:27 -05:00
arkon f367dcd5f4 Bump core-ktx dependency
(cherry picked from commit f04cf72c0cb53fdbb37daa3440482b35ea5f8591)
2023-02-07 13:31:21 -05:00
arkon 88b5a5118c Minor dependency updates
(cherry picked from commit 157438e0c10cd5ac741ed7a70ff623ed756c3007)
2023-02-07 13:31:13 -05:00
arkon 0ae19297fc Refactor how extensions list is modelled
To better enable changing the UI in the future based on sections.

(cherry picked from commit 75b23c99ecd4eef46bc528d65c5307eb44f1a346)
2023-02-07 13:30:36 -05:00
arkon c1f87feb7e Show the tracker name when showing error toast
(cherry picked from commit 7df10b076c555e403b30f6db34f7b1d7c41aee77)
2023-02-07 13:29:39 -05:00
Two-Ai e099d1a313 Replace RxJava in DownloadQueueScreenModel (#8872)
(cherry picked from commit 2245658363823e5b3c29e9f28b45d95418f3e57e)
2023-02-07 13:29:30 -05:00
arkon 4c2e9aa509 Fix double tapping History not working consistently
Fixes #8875

(cherry picked from commit 46774771ec82328816d01918b5cb43cb807e23ea)

# Conflicts:
#	app/src/main/java/eu/kanade/tachiyomi/ui/history/HistoryTab.kt
2023-02-07 13:29:22 -05:00
arkon eaee8747a4 Avoid crash if multiple instances of ClearDatabaseScreen opened
Fixes #8851

I guess we might want to do this for all screens? Maybe?

(cherry picked from commit 6263817bb4ab7494143cbd901d829f805e71f0bd)
2023-02-07 13:29:01 -05:00
arkon a18ce256eb Fix crash in categories screen on config change
Fixes #8861

(cherry picked from commit 60456fe0e95966134c47f0f8401eef001690f8e0)
2023-02-07 13:28:40 -05:00
arkon 8087c25559 Don't exclude same source when checking for duplicate entries
Closes #8870

(cherry picked from commit a0f47d3f1b874c9b6d62dfc1679daa9398bf9b98)

# Conflicts:
#	app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceScreenModel.kt
2023-02-07 13:26:20 -05:00
arkon c9bc4646da Use Voyager for WebView in non-reader places
(cherry picked from commit 6efcb8ccfae0a19ae1c3c866620c8dd5222eb4b3)

# Conflicts:
#	app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreen.kt
2023-02-07 13:16:24 -05:00
arkon aea9f36eff Make MIUI extensions warning clearer that it's only a suggestion
(cherry picked from commit 0d128b75e27662488078f2cc1b0066bc9a4b5f84)
2023-02-07 13:08:57 -05:00
arkon 50c06de524 Use theme padding values in more places
(cherry picked from commit 0067d474c86d08011ebf3b1676c4db8c85e68125)
2023-02-07 13:08:48 -05:00
MCAxiaz 97f3148e4c Add Reader Setting to Skip Dupe Chapters (#8831)
Add reader setting to filter dupe chapters with same scanlator priority.

(cherry picked from commit cf393b217b7a03f4c543c1dac118ddedf5552823)
2023-02-07 13:05:29 -05:00
arkon 1a09fde22c Avoid crashes when fetching assist content URL in ReaderActivity
(cherry picked from commit e265b929a19d3258cbe305d5b4a2d2bdcf1eb9ec)
2023-02-07 13:05:22 -05:00
arkon 9bae13c0e6 Only show MIUI extension warning on MIUI >= 13
Related to #8834

(cherry picked from commit 4cd01428eda8aa6b1438e6f98474255afbe97d91)
2023-02-07 13:05:09 -05:00
Jobobby04 2b1809b2b7 Use global search UI for Feed 2023-02-07 13:04:41 -05:00
arkon 9d0560f48b Make global search results more compact
(cherry picked from commit 3be05fbf9b41478386026b3156f3947e7fb1643e)
2023-02-07 12:40:04 -05:00
arkon 2d9000d4bc Only show library continue reading button if there's unread chapters
Closes #8865

(cherry picked from commit 5d90ba8aa048f45bde662dfe4249f4d9fb45bb83)
2023-02-07 12:39:56 -05:00
arkon a22d4a2df5 Show available but not installed enhanced trackers
Closes #8859

(cherry picked from commit 48cab708ce28ead30c5ea500899c17e379eb3000)
2023-02-07 12:39:46 -05:00
arkon b9f39a559d Bump minimum ext-lib to 1.3
(cherry picked from commit 5d9753d6a72e020e2ee98af4dac4488e2d4068b9)
2023-02-07 12:39:37 -05:00
arkon f5b03a3a4b Avoid crashes when opening WebView from reader
Also ensure WebViewActivity has an Assistant URL when it first opens with a URL.

(cherry picked from commit 425e48bec6edf6ea30d13dc8d46b79899122c61b)
2023-02-07 12:39:27 -05:00
renovate[bot] 38f65a0fd6 Update dependency com.squareup.okio:okio to v3.3.0 (#8860)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
(cherry picked from commit a42be4a833e6b2232735dde45daf3aa3a1e79cbc)
2023-02-07 12:39:15 -05:00
arkon 3444ec234c Bump dependencies
(cherry picked from commit 30e030bb8efd806d0c134f153946ff61edab5c51)
2023-02-07 12:39:06 -05:00
stevenyomi 9f9cbecb49 Fix reader settings sheet's mode section not updated (#8857)
(cherry picked from commit 2a3c3d8d6afa12f6e022acba8692167e5fe1593a)

# Conflicts:
#	app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderViewModel.kt
2023-02-07 12:38:56 -05:00
stevenyomi 16093a6d6d Fix floating-point error in navigate pan (#8856)
(cherry picked from commit 7b026cec8d1e113f03c15642cba3d3c9601cd65e)
2023-02-07 12:38:26 -05:00
arkon e8ccb88a06 Remove repetition in enhanced tracker preference declarations
Also hides entries that aren't relevant (i.e. if you don't have the source installed).

(cherry picked from commit d8b528a4e0d1da00c653c0123ee01848db4b1b87)
2023-02-07 12:38:18 -05:00
arkon 08557aa5e6 Adjust bookmarked chapter styling in Updates
To match updated styling in manga screen.

(cherry picked from commit 0f459071445f712406892affb9a81e997706333a)
2023-02-07 12:38:07 -05:00
Aria Moradi 3f2136c56e add Suwayomi tracker (#8489)
* add Suwayomi Tracker

* fix compile

(cherry picked from commit c4c9931ae22c92429eb5afcef06ed2ea3a1cbb8f)

# Conflicts:
#	app/src/main/java/eu/kanade/tachiyomi/data/track/TrackManager.kt
2023-02-07 12:37:46 -05:00
arkon 193c311e15 Remove ability to hide unread chapter badges in library
(cherry picked from commit 68345e636efb7f616a91ef8f0accc17a818ebe5b)

# Conflicts:
#	app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryScreenModel.kt
2023-02-07 12:37:01 -05:00
stevenyomi 1800d00e04 Fix reader settings sheet not updated (#8854)
* Revert "Recreate reader settings when opening sheet (#8054)"

This reverts commit acb8ab15b2.

* Revert "Fix stacking of Settings menu in the reader on multiple taps (#8002)"

This reverts commit 30ac94181b.

* Fix reader settings sheet not updated

(cherry picked from commit 0861c5618c097f89bec75ffeed1359e345532d89)
2023-02-07 12:35:45 -05:00
Jobobby04 475fb82c66 Allow refreshing the feed tab 2023-02-07 12:09:44 -05:00
Jobobby04 59d307c6a1 Make migration screen unique in the stack 2023-02-04 19:44:15 -05:00
760 changed files with 20698 additions and 21199 deletions
+1 -1
View File
@@ -3,7 +3,7 @@
I acknowledge that:
- I have updated:
- To the latest version of the app (stable is v1.9.0)
- To the latest version of the app (stable is v1.9.2)
- All extensions
- I have tried the troubleshooting guide: https://tachiyomi.org/help/guides/troubleshooting-problems/
- If this is an issue with an extension, that I should be opening an issue in https://github.com/tachiyomiorg/tachiyomi-extensions
+2 -2
View File
@@ -53,7 +53,7 @@ body:
label: Tachiyomi version
description: You can find your Tachiyomi version in **More → About**.
placeholder: |
Example: "1.9.0"
Example: "1.9.2"
validations:
required: true
@@ -100,7 +100,7 @@ body:
required: true
- label: I have tried the [troubleshooting guide](https://tachiyomi.org/help/guides/troubleshooting/).
required: true
- label: I have updated the app to version **[1.9.0](https://github.com/jobobby04/tachiyomisy/releases/latest)**.
- label: I have updated the app to version **[1.9.2](https://github.com/jobobby04/tachiyomisy/releases/latest)**.
required: true
- label: I have updated all installed extensions.
required: true
+1 -1
View File
@@ -33,7 +33,7 @@ body:
required: true
- label: If this is an issue with an extension, I should be opening an issue in the [extensions repository](https://github.com/tachiyomiorg/tachiyomi-extensions/issues/new/choose).
required: true
- label: I have updated the app to version **[1.9.0](https://github.com/jobobby04/tachiyomisy/releases/latest)**.
- label: I have updated the app to version **[1.9.2](https://github.com/jobobby04/tachiyomisy/releases/latest)**.
required: true
- label: I will fill out all of the requested information in this form.
required: true
+1 -1
View File
@@ -38,7 +38,7 @@ jobs:
- name: Build app and run unit tests
uses: gradle/gradle-command-action@v2
with:
arguments: assembleStandardRelease testStandardReleaseUnitTest --stacktrace
arguments: lintKotlin assembleStandardRelease testStandardReleaseUnitTest --stacktrace
- name: Sign APK
uses: r0adkll/sign-android-release@v1
+9 -45
View File
@@ -1,4 +1,3 @@
import org.gradle.api.tasks.testing.logging.TestLogEvent
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import org.jmailen.gradle.kotlinter.tasks.LintTask
@@ -8,8 +7,8 @@ plugins {
kotlin("android")
kotlin("plugin.parcelize")
kotlin("plugin.serialization")
id("com.github.zellius.shortcut-helper")
id("com.squareup.sqldelight")
//id("com.github.zellius.shortcut-helper")
id("com.github.ben-manes.versions")
}
if (gradle.startParameter.taskRequests.toString().contains("Standard")) {
@@ -18,21 +17,17 @@ if (gradle.startParameter.taskRequests.toString().contains("Standard")) {
apply(plugin = "com.google.firebase.crashlytics")
}
shortcutHelper.setFilePath("./shortcuts.xml")
//shortcutHelper.setFilePath("./shortcuts.xml")
val SUPPORTED_ABIS = setOf("armeabi-v7a", "arm64-v8a", "x86", "x86_64")
android {
namespace = "eu.kanade.tachiyomi"
compileSdk = AndroidConfig.compileSdk
ndkVersion = AndroidConfig.ndk
defaultConfig {
applicationId = "eu.kanade.tachiyomi.sy"
minSdk = AndroidConfig.minSdk
targetSdk = AndroidConfig.targetSdk
versionCode = 46
versionName = "1.9.0"
versionCode = 49
versionName = "1.9.2"
buildConfigField("String", "COMMIT_COUNT", "\"${getCommitCount()}\"")
buildConfigField("String", "COMMIT_SHA", "\"${getGitSha()}\"")
@@ -138,32 +133,16 @@ android {
composeOptions {
kotlinCompilerExtensionVersion = compose.versions.compiler.get()
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
isCoreLibraryDesugaringEnabled = true
}
kotlinOptions {
jvmTarget = JavaVersion.VERSION_1_8.toString()
}
sqldelight {
database("Database") {
packageName = "eu.kanade.tachiyomi"
dialect = "sqlite:3.24"
}
}
}
dependencies {
implementation(project(":i18n"))
implementation(project(":core"))
implementation(project(":source-api"))
coreLibraryDesugaring(libs.desugar)
implementation(project(":data"))
implementation(project(":domain"))
implementation(project(":presentation-core"))
implementation(project(":presentation-widget"))
// Compose
implementation(platform(compose.bom))
@@ -186,9 +165,6 @@ dependencies {
implementation(androidx.paging.compose)
implementation(libs.bundles.sqlite)
implementation(libs.sqldelight.android.driver)
implementation(libs.sqldelight.coroutines)
implementation(libs.sqldelight.android.paging)
implementation(kotlinx.reflect)
@@ -205,7 +181,6 @@ dependencies {
implementation(androidx.splashscreen)
implementation(androidx.recyclerview)
implementation(androidx.viewpager)
implementation(androidx.glance)
implementation(androidx.profileinstaller)
implementation(androidx.bundles.lifecycle)
@@ -315,12 +290,6 @@ androidComponents {
}
tasks {
withType<Test> {
useJUnitPlatform()
testLogging {
events(TestLogEvent.PASSED, TestLogEvent.SKIPPED, TestLogEvent.FAILED)
}
}
withType<LintTask>().configureEach {
exclude { it.file.path.contains("generated[\\\\/]".toRegex()) }
@@ -358,11 +327,6 @@ tasks {
)
}
}
preBuild {
val ktlintTask = if (System.getenv("GITHUB_BASE_REF") == null) formatKotlin else lintKotlin
dependsOn(ktlintTask)
}
}
buildscript {
+8
View File
@@ -62,6 +62,14 @@
kotlinx.serialization.KSerializer serializer(...);
}
-keep,includedescriptorclasses class tachiyomi.**$$serializer { *; }
-keepclassmembers class tachiyomi.** {
*** Companion;
}
-keepclasseswithmembers class tachiyomi.** {
kotlinx.serialization.KSerializer serializer(...);
}
-keep,includedescriptorclasses class exh.**$$serializer { *; }
-keepclassmembers class exh.** {
*** Companion;
+1 -1
View File
@@ -194,7 +194,7 @@
android:exported="false" />
<receiver
android:name=".glance.UpdatesGridGlanceReceiver"
android:name="tachiyomi.presentation.widget.UpdatesGridGlanceReceiver"
android:enabled="@bool/glance_appwidget_available"
android:exported="false"
android:label="@string/label_recent_updates">
+13061 -15937
View File
File diff suppressed because it is too large Load Diff
@@ -2,10 +2,10 @@ package eu.kanade.core.prefs
import androidx.compose.runtime.MutableState
import androidx.compose.runtime.mutableStateOf
import eu.kanade.tachiyomi.core.preference.Preference
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import tachiyomi.core.preference.Preference
class PreferenceMutableState<T>(
private val preference: Preference<T>,
@@ -5,8 +5,8 @@ import eu.kanade.tachiyomi.source.model.MangasPage
import eu.kanade.tachiyomi.source.model.MetadataMangasPage
import eu.kanade.tachiyomi.source.model.SManga
import eu.kanade.tachiyomi.source.online.all.EHentai
import eu.kanade.tachiyomi.util.lang.awaitSingle
import exh.metadata.metadata.base.RaisedSearchMetadata
import tachiyomi.core.util.lang.awaitSingle
abstract class EHentaiPagingSource(override val source: EHentai) : SourcePagingSource(source) {
@@ -1,3 +0,0 @@
package eu.kanade.data.source
class NoResultsException : Exception()
@@ -1,9 +1,8 @@
package eu.kanade.data.source
import eu.kanade.domain.source.model.Source
import eu.kanade.domain.source.model.SourceData
import eu.kanade.tachiyomi.source.CatalogueSource
import eu.kanade.tachiyomi.source.SourceManager
import tachiyomi.domain.source.model.Source
val sourceMapper: (eu.kanade.tachiyomi.source.Source) -> Source = { source ->
Source(
@@ -18,7 +17,3 @@ val sourceMapper: (eu.kanade.tachiyomi.source.Source) -> Source = { source ->
val catalogueSourceMapper: (CatalogueSource) -> Source = { source ->
sourceMapper(source).copy(supportsLatest = source.supportsLatest)
}
val sourceDataMapper: (Long, String, String) -> SourceData = { id, lang, name ->
SourceData(id, lang, name)
}
@@ -7,9 +7,9 @@ import eu.kanade.tachiyomi.source.model.FilterList
import eu.kanade.tachiyomi.source.model.MangasPage
import eu.kanade.tachiyomi.source.model.MetadataMangasPage
import eu.kanade.tachiyomi.source.model.SManga
import eu.kanade.tachiyomi.util.lang.awaitSingle
import eu.kanade.tachiyomi.util.lang.withIOContext
import exh.metadata.metadata.base.RaisedSearchMetadata
import tachiyomi.core.util.lang.awaitSingle
import tachiyomi.core.util.lang.withIOContext
abstract class SourcePagingSource(
protected open val source: CatalogueSource,
@@ -83,3 +83,5 @@ class SourceLatestPagingSource(source: CatalogueSource) : SourcePagingSource(sou
return source.fetchLatestUpdates(currentPage).awaitSingle()
}
}
class NoResultsException : Exception()
@@ -1,9 +1,6 @@
package eu.kanade.data.source
import eu.kanade.data.DatabaseHandler
import eu.kanade.domain.source.model.Source
import eu.kanade.domain.source.model.SourcePagingSourceType
import eu.kanade.domain.source.model.SourceWithCount
import eu.kanade.domain.source.repository.SourceRepository
import eu.kanade.tachiyomi.source.CatalogueSource
import eu.kanade.tachiyomi.source.LocalSource
@@ -13,6 +10,9 @@ import eu.kanade.tachiyomi.source.online.all.EHentai
import exh.source.MERGED_SOURCE_ID
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map
import tachiyomi.data.DatabaseHandler
import tachiyomi.domain.source.model.Source
import tachiyomi.domain.source.model.SourceWithCount
class SourceRepositoryImpl(
private val sourceManager: SourceManager,
@@ -1,28 +0,0 @@
package eu.kanade.data.updates
import eu.kanade.domain.manga.model.MangaCover
import eu.kanade.domain.updates.model.UpdatesWithRelations
val updateWithRelationMapper: (Long, String, Long, String, String?, Boolean, Boolean, Long, Boolean, String?, Long, Long, Long) -> UpdatesWithRelations = {
mangaId, mangaTitle, chapterId, chapterName, scanlator, read, bookmark, sourceId, favorite, thumbnailUrl, coverLastModified, _, dateFetch ->
UpdatesWithRelations(
mangaId = mangaId,
// SY -->
ogMangaTitle = mangaTitle,
// SY <--
chapterId = chapterId,
chapterName = chapterName,
scanlator = scanlator,
read = read,
bookmark = bookmark,
sourceId = sourceId,
dateFetch = dateFetch,
coverData = MangaCover(
mangaId = mangaId,
sourceId = sourceId,
isMangaFavorite = favorite,
url = thumbnailUrl,
lastModified = coverLastModified,
),
)
}
@@ -1,16 +1,8 @@
package eu.kanade.domain
import eu.kanade.data.category.CategoryRepositoryImpl
import eu.kanade.data.chapter.ChapterRepositoryImpl
import eu.kanade.data.history.HistoryRepositoryImpl
import eu.kanade.data.manga.MangaRepositoryImpl
import eu.kanade.data.source.SourceDataRepositoryImpl
import eu.kanade.data.source.SourceRepositoryImpl
import eu.kanade.data.track.TrackRepositoryImpl
import eu.kanade.data.updates.UpdatesRepositoryImpl
import eu.kanade.domain.category.interactor.CreateCategoryWithName
import eu.kanade.domain.category.interactor.DeleteCategory
import eu.kanade.domain.category.interactor.GetCategories
import eu.kanade.domain.category.interactor.RenameCategory
import eu.kanade.domain.category.interactor.ReorderCategory
import eu.kanade.domain.category.interactor.ResetCategoryFlags
@@ -18,26 +10,18 @@ import eu.kanade.domain.category.interactor.SetDisplayModeForCategory
import eu.kanade.domain.category.interactor.SetMangaCategories
import eu.kanade.domain.category.interactor.SetSortModeForCategory
import eu.kanade.domain.category.interactor.UpdateCategory
import eu.kanade.domain.category.repository.CategoryRepository
import eu.kanade.domain.chapter.interactor.GetChapter
import eu.kanade.domain.chapter.interactor.GetChapterByMangaId
import eu.kanade.domain.chapter.interactor.SetMangaDefaultChapterFlags
import eu.kanade.domain.chapter.interactor.SetReadStatus
import eu.kanade.domain.chapter.interactor.ShouldUpdateDbChapter
import eu.kanade.domain.chapter.interactor.SyncChaptersWithSource
import eu.kanade.domain.chapter.interactor.SyncChaptersWithTrackServiceTwoWay
import eu.kanade.domain.chapter.interactor.UpdateChapter
import eu.kanade.domain.chapter.repository.ChapterRepository
import eu.kanade.domain.download.interactor.DeleteDownload
import eu.kanade.domain.extension.interactor.GetExtensionLanguages
import eu.kanade.domain.extension.interactor.GetExtensionSources
import eu.kanade.domain.extension.interactor.GetExtensionsByType
import eu.kanade.domain.history.interactor.GetHistory
import eu.kanade.domain.history.interactor.GetNextChapters
import eu.kanade.domain.history.interactor.GetTotalReadDuration
import eu.kanade.domain.history.interactor.RemoveHistory
import eu.kanade.domain.history.interactor.UpsertHistory
import eu.kanade.domain.history.repository.HistoryRepository
import eu.kanade.domain.manga.interactor.GetDuplicateLibraryManga
import eu.kanade.domain.manga.interactor.GetFavorites
import eu.kanade.domain.manga.interactor.GetLibraryManga
@@ -48,7 +32,6 @@ import eu.kanade.domain.manga.interactor.ResetViewerFlags
import eu.kanade.domain.manga.interactor.SetMangaChapterFlags
import eu.kanade.domain.manga.interactor.SetMangaViewerFlags
import eu.kanade.domain.manga.interactor.UpdateManga
import eu.kanade.domain.manga.repository.MangaRepository
import eu.kanade.domain.source.interactor.GetEnabledSources
import eu.kanade.domain.source.interactor.GetLanguagesWithSources
import eu.kanade.domain.source.interactor.GetRemoteManga
@@ -58,15 +41,32 @@ import eu.kanade.domain.source.interactor.SetMigrateSorting
import eu.kanade.domain.source.interactor.ToggleLanguage
import eu.kanade.domain.source.interactor.ToggleSource
import eu.kanade.domain.source.interactor.ToggleSourcePin
import eu.kanade.domain.source.repository.SourceDataRepository
import eu.kanade.domain.source.repository.SourceRepository
import eu.kanade.domain.track.interactor.DeleteTrack
import eu.kanade.domain.track.interactor.GetTracks
import eu.kanade.domain.track.interactor.GetTracksPerManga
import eu.kanade.domain.track.interactor.InsertTrack
import eu.kanade.domain.track.repository.TrackRepository
import eu.kanade.domain.updates.interactor.GetUpdates
import eu.kanade.domain.updates.repository.UpdatesRepository
import tachiyomi.data.category.CategoryRepositoryImpl
import tachiyomi.data.chapter.ChapterRepositoryImpl
import tachiyomi.data.history.HistoryRepositoryImpl
import tachiyomi.data.manga.MangaRepositoryImpl
import tachiyomi.data.source.SourceDataRepositoryImpl
import tachiyomi.data.track.TrackRepositoryImpl
import tachiyomi.data.updates.UpdatesRepositoryImpl
import tachiyomi.domain.category.interactor.GetCategories
import tachiyomi.domain.category.repository.CategoryRepository
import tachiyomi.domain.chapter.interactor.ShouldUpdateDbChapter
import tachiyomi.domain.chapter.repository.ChapterRepository
import tachiyomi.domain.history.interactor.GetHistory
import tachiyomi.domain.history.interactor.GetTotalReadDuration
import tachiyomi.domain.history.interactor.RemoveHistory
import tachiyomi.domain.history.interactor.UpsertHistory
import tachiyomi.domain.history.repository.HistoryRepository
import tachiyomi.domain.manga.repository.MangaRepository
import tachiyomi.domain.source.repository.SourceDataRepository
import tachiyomi.domain.track.repository.TrackRepository
import tachiyomi.domain.updates.interactor.GetUpdates
import tachiyomi.domain.updates.repository.UpdatesRepository
import uy.kohesive.injekt.api.InjektModule
import uy.kohesive.injekt.api.InjektRegistrar
import uy.kohesive.injekt.api.addFactory
@@ -1,10 +1,6 @@
package eu.kanade.domain
import eu.kanade.data.manga.FavoritesEntryRepositoryImpl
import eu.kanade.data.manga.MangaMergeRepositoryImpl
import eu.kanade.data.manga.MangaMetadataRepositoryImpl
import eu.kanade.data.source.FeedSavedSearchRepositoryImpl
import eu.kanade.data.source.SavedSearchRepositoryImpl
import android.app.Application
import eu.kanade.domain.chapter.interactor.DeleteChapters
import eu.kanade.domain.chapter.interactor.GetChapterByUrl
import eu.kanade.domain.chapter.interactor.GetMergedChapterByMangaId
@@ -37,9 +33,6 @@ import eu.kanade.domain.manga.interactor.InsertMergedReference
import eu.kanade.domain.manga.interactor.ReorderSortTag
import eu.kanade.domain.manga.interactor.SetMangaFilteredScanlators
import eu.kanade.domain.manga.interactor.UpdateMergedSettings
import eu.kanade.domain.manga.repository.FavoritesEntryRepository
import eu.kanade.domain.manga.repository.MangaMergeRepository
import eu.kanade.domain.manga.repository.MangaMetadataRepository
import eu.kanade.domain.source.interactor.CountFeedSavedSearchBySourceId
import eu.kanade.domain.source.interactor.CountFeedSavedSearchGlobal
import eu.kanade.domain.source.interactor.CreateSourceCategory
@@ -63,10 +56,22 @@ import eu.kanade.domain.source.interactor.InsertSavedSearch
import eu.kanade.domain.source.interactor.RenameSourceCategory
import eu.kanade.domain.source.interactor.SetSourceCategories
import eu.kanade.domain.source.interactor.ToggleExcludeFromDataSaver
import eu.kanade.domain.source.repository.FeedSavedSearchRepository
import eu.kanade.domain.source.repository.SavedSearchRepository
import eu.kanade.tachiyomi.source.online.MetadataSource
import exh.search.SearchEngine
import tachiyomi.data.manga.CustomMangaRepositoryImpl
import tachiyomi.data.manga.FavoritesEntryRepositoryImpl
import tachiyomi.data.manga.MangaMergeRepositoryImpl
import tachiyomi.data.manga.MangaMetadataRepositoryImpl
import tachiyomi.data.source.FeedSavedSearchRepositoryImpl
import tachiyomi.data.source.SavedSearchRepositoryImpl
import tachiyomi.domain.manga.interactor.GetCustomMangaInfo
import tachiyomi.domain.manga.interactor.SetCustomMangaInfo
import tachiyomi.domain.manga.repository.CustomMangaRepository
import tachiyomi.domain.manga.repository.FavoritesEntryRepository
import tachiyomi.domain.manga.repository.MangaMergeRepository
import tachiyomi.domain.manga.repository.MangaMetadataRepository
import tachiyomi.domain.source.repository.FeedSavedSearchRepository
import tachiyomi.domain.source.repository.SavedSearchRepository
import uy.kohesive.injekt.api.InjektModule
import uy.kohesive.injekt.api.InjektRegistrar
import uy.kohesive.injekt.api.addFactory
@@ -148,5 +153,9 @@ class SYDomainModule : InjektModule {
addFactory { CountFeedSavedSearchBySourceId(get()) }
addFactory { GetSavedSearchGlobalFeed(get()) }
addFactory { GetSavedSearchBySourceIdFeed(get()) }
addSingletonFactory<CustomMangaRepository> { CustomMangaRepositoryImpl(get<Application>()) }
addFactory { GetCustomMangaInfo(get()) }
addFactory { SetCustomMangaInfo(get()) }
}
}
@@ -1,6 +1,6 @@
package eu.kanade.domain
import eu.kanade.tachiyomi.core.preference.PreferenceStore
import tachiyomi.core.preference.PreferenceStore
class UnsortedPreferences(
private val preferenceStore: PreferenceStore,
@@ -1,7 +1,7 @@
package eu.kanade.domain.backup.service
import eu.kanade.tachiyomi.core.preference.PreferenceStore
import eu.kanade.tachiyomi.core.provider.FolderProvider
import tachiyomi.core.preference.PreferenceStore
import tachiyomi.core.provider.FolderProvider
class BackupPreferences(
private val folderProvider: FolderProvider,
@@ -1,12 +1,9 @@
package eu.kanade.domain.base
import android.content.Context
import eu.kanade.tachiyomi.core.preference.PreferenceStore
import eu.kanade.tachiyomi.core.preference.getEnum
import eu.kanade.tachiyomi.data.preference.PreferenceValues
import eu.kanade.tachiyomi.util.system.DeviceUtil
import eu.kanade.tachiyomi.util.system.isPreviewBuildType
import eu.kanade.tachiyomi.util.system.isReleaseBuildType
import tachiyomi.core.preference.PreferenceStore
class BasePreferences(
val context: Context,
@@ -21,10 +18,7 @@ class BasePreferences(
fun automaticExtUpdates() = preferenceStore.getBoolean("automatic_ext_updates", true)
fun extensionInstaller() = preferenceStore.getEnum(
"extension_installer",
if (DeviceUtil.isMiui) PreferenceValues.ExtensionInstaller.LEGACY else PreferenceValues.ExtensionInstaller.PACKAGEINSTALLER,
)
fun extensionInstaller() = ExtensionInstallerPreference(context, preferenceStore)
fun acraEnabled() = preferenceStore.getBoolean("acra.enable", isPreviewBuildType || isReleaseBuildType)
}
@@ -0,0 +1,68 @@
package eu.kanade.domain.base
import android.content.Context
import eu.kanade.tachiyomi.data.preference.PreferenceValues.ExtensionInstaller
import eu.kanade.tachiyomi.util.system.hasMiuiPackageInstaller
import eu.kanade.tachiyomi.util.system.isShizukuInstalled
import kotlinx.coroutines.CoroutineScope
import tachiyomi.core.preference.Preference
import tachiyomi.core.preference.PreferenceStore
import tachiyomi.core.preference.getEnum
class ExtensionInstallerPreference(
private val context: Context,
preferenceStore: PreferenceStore,
) : Preference<ExtensionInstaller> {
private val basePref = preferenceStore.getEnum(key(), defaultValue())
override fun key() = "extension_installer"
val entries get() = ExtensionInstaller.values().run {
if (context.hasMiuiPackageInstaller) {
filter { it != ExtensionInstaller.PACKAGEINSTALLER }
} else {
toList()
}
}
override fun defaultValue() = if (context.hasMiuiPackageInstaller) {
ExtensionInstaller.LEGACY
} else {
ExtensionInstaller.PACKAGEINSTALLER
}
private fun check(value: ExtensionInstaller): ExtensionInstaller {
when (value) {
ExtensionInstaller.PACKAGEINSTALLER -> {
if (context.hasMiuiPackageInstaller) return ExtensionInstaller.LEGACY
}
ExtensionInstaller.SHIZUKU -> {
if (!context.isShizukuInstalled) return defaultValue()
}
else -> {}
}
return value
}
override fun get(): ExtensionInstaller {
val value = basePref.get()
val checkedValue = check(value)
if (value != checkedValue) {
basePref.set(checkedValue)
}
return checkedValue
}
override fun set(value: ExtensionInstaller) {
basePref.set(check(value))
}
override fun isSet() = basePref.isSet()
override fun delete() = basePref.delete()
override fun changes() = basePref.changes()
override fun stateIn(scope: CoroutineScope) = basePref.stateIn(scope)
}
@@ -1,12 +1,11 @@
package eu.kanade.domain.category.interactor
import eu.kanade.domain.category.model.Category
import eu.kanade.domain.category.model.anyWithName
import eu.kanade.domain.category.repository.CategoryRepository
import eu.kanade.domain.library.service.LibraryPreferences
import eu.kanade.tachiyomi.util.lang.withNonCancellableContext
import eu.kanade.tachiyomi.util.system.logcat
import logcat.LogPriority
import tachiyomi.core.util.lang.withNonCancellableContext
import tachiyomi.core.util.system.logcat
import tachiyomi.domain.category.model.Category
import tachiyomi.domain.category.repository.CategoryRepository
class CreateCategoryWithName(
private val categoryRepository: CategoryRepository,
@@ -23,10 +22,6 @@ class CreateCategoryWithName(
suspend fun await(name: String): Result = withNonCancellableContext {
val categories = categoryRepository.getAll()
if (categories.anyWithName(name)) {
return@withNonCancellableContext Result.NameAlreadyExistsError
}
val nextOrder = categories.maxOfOrNull { it.order }?.plus(1) ?: 0
val newCategory = Category(
id = 0,
@@ -49,7 +44,6 @@ class CreateCategoryWithName(
data class Success(val category: Category) : Result()
// SY <--
object NameAlreadyExistsError : Result()
data class InternalError(val error: Throwable) : Result()
}
}
@@ -1,10 +1,10 @@
package eu.kanade.domain.category.interactor
import eu.kanade.domain.category.model.CategoryUpdate
import eu.kanade.domain.category.repository.CategoryRepository
import eu.kanade.tachiyomi.util.lang.withNonCancellableContext
import eu.kanade.tachiyomi.util.system.logcat
import logcat.LogPriority
import tachiyomi.core.util.lang.withNonCancellableContext
import tachiyomi.core.util.system.logcat
import tachiyomi.domain.category.model.CategoryUpdate
import tachiyomi.domain.category.repository.CategoryRepository
class DeleteCategory(
private val categoryRepository: CategoryRepository,
@@ -1,23 +1,17 @@
package eu.kanade.domain.category.interactor
import eu.kanade.domain.category.model.Category
import eu.kanade.domain.category.model.CategoryUpdate
import eu.kanade.domain.category.model.anyWithName
import eu.kanade.domain.category.repository.CategoryRepository
import eu.kanade.tachiyomi.util.lang.withNonCancellableContext
import eu.kanade.tachiyomi.util.system.logcat
import logcat.LogPriority
import tachiyomi.core.util.lang.withNonCancellableContext
import tachiyomi.core.util.system.logcat
import tachiyomi.domain.category.model.Category
import tachiyomi.domain.category.model.CategoryUpdate
import tachiyomi.domain.category.repository.CategoryRepository
class RenameCategory(
private val categoryRepository: CategoryRepository,
) {
suspend fun await(categoryId: Long, name: String) = withNonCancellableContext {
val categories = categoryRepository.getAll()
if (categories.anyWithName(name)) {
return@withNonCancellableContext Result.NameAlreadyExistsError
}
val update = CategoryUpdate(
id = categoryId,
name = name,
@@ -36,7 +30,6 @@ class RenameCategory(
sealed class Result {
object Success : Result()
object NameAlreadyExistsError : Result()
data class InternalError(val error: Throwable) : Result()
}
}
@@ -1,13 +1,13 @@
package eu.kanade.domain.category.interactor
import eu.kanade.domain.category.model.Category
import eu.kanade.domain.category.model.CategoryUpdate
import eu.kanade.domain.category.repository.CategoryRepository
import eu.kanade.tachiyomi.util.lang.withNonCancellableContext
import eu.kanade.tachiyomi.util.system.logcat
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock
import logcat.LogPriority
import tachiyomi.core.util.lang.withNonCancellableContext
import tachiyomi.core.util.system.logcat
import tachiyomi.domain.category.model.Category
import tachiyomi.domain.category.model.CategoryUpdate
import tachiyomi.domain.category.repository.CategoryRepository
import java.util.Collections
class ReorderCategory(
@@ -1,8 +1,8 @@
package eu.kanade.domain.category.interactor
import eu.kanade.domain.category.repository.CategoryRepository
import eu.kanade.domain.library.model.plus
import eu.kanade.domain.library.service.LibraryPreferences
import tachiyomi.domain.category.repository.CategoryRepository
import tachiyomi.domain.library.model.plus
class ResetCategoryFlags(
private val preferences: LibraryPreferences,
@@ -1,12 +1,12 @@
package eu.kanade.domain.category.interactor
import eu.kanade.domain.category.model.Category
import eu.kanade.domain.category.model.CategoryUpdate
import eu.kanade.domain.category.repository.CategoryRepository
import eu.kanade.domain.library.model.LibraryDisplayMode
import eu.kanade.domain.library.model.LibraryGroup
import eu.kanade.domain.library.model.plus
import eu.kanade.domain.library.service.LibraryPreferences
import tachiyomi.domain.category.model.Category
import tachiyomi.domain.category.model.CategoryUpdate
import tachiyomi.domain.category.repository.CategoryRepository
import tachiyomi.domain.library.model.LibraryDisplayMode
import tachiyomi.domain.library.model.plus
class SetDisplayModeForCategory(
private val preferences: LibraryPreferences,
@@ -1,8 +1,8 @@
package eu.kanade.domain.category.interactor
import eu.kanade.domain.manga.repository.MangaRepository
import eu.kanade.tachiyomi.util.system.logcat
import logcat.LogPriority
import tachiyomi.core.util.system.logcat
import tachiyomi.domain.manga.repository.MangaRepository
class SetMangaCategories(
private val mangaRepository: MangaRepository,
@@ -1,12 +1,12 @@
package eu.kanade.domain.category.interactor
import eu.kanade.domain.category.model.Category
import eu.kanade.domain.category.model.CategoryUpdate
import eu.kanade.domain.category.repository.CategoryRepository
import eu.kanade.domain.library.model.LibraryGroup
import eu.kanade.domain.library.model.LibrarySort
import eu.kanade.domain.library.model.plus
import eu.kanade.domain.library.service.LibraryPreferences
import tachiyomi.domain.category.model.Category
import tachiyomi.domain.category.model.CategoryUpdate
import tachiyomi.domain.category.repository.CategoryRepository
import tachiyomi.domain.library.model.LibrarySort
import tachiyomi.domain.library.model.plus
class SetSortModeForCategory(
private val preferences: LibraryPreferences,
@@ -1,8 +1,8 @@
package eu.kanade.domain.category.interactor
import eu.kanade.domain.category.model.CategoryUpdate
import eu.kanade.domain.category.repository.CategoryRepository
import eu.kanade.tachiyomi.util.lang.withNonCancellableContext
import tachiyomi.core.util.lang.withNonCancellableContext
import tachiyomi.domain.category.model.CategoryUpdate
import tachiyomi.domain.category.repository.CategoryRepository
class UpdateCategory(
private val categoryRepository: CategoryRepository,
@@ -1,6 +1,6 @@
package eu.kanade.domain.chapter.interactor
import eu.kanade.domain.chapter.repository.ChapterRepository
import tachiyomi.domain.chapter.repository.ChapterRepository
class DeleteChapters(
private val chapterRepository: ChapterRepository,
@@ -1,9 +1,9 @@
package eu.kanade.domain.chapter.interactor
import eu.kanade.domain.chapter.model.Chapter
import eu.kanade.domain.chapter.repository.ChapterRepository
import eu.kanade.tachiyomi.util.system.logcat
import logcat.LogPriority
import tachiyomi.core.util.system.logcat
import tachiyomi.domain.chapter.model.Chapter
import tachiyomi.domain.chapter.repository.ChapterRepository
class GetChapter(
private val chapterRepository: ChapterRepository,
@@ -1,9 +1,9 @@
package eu.kanade.domain.chapter.interactor
import eu.kanade.domain.chapter.model.Chapter
import eu.kanade.domain.chapter.repository.ChapterRepository
import eu.kanade.tachiyomi.util.system.logcat
import logcat.LogPriority
import tachiyomi.core.util.system.logcat
import tachiyomi.domain.chapter.model.Chapter
import tachiyomi.domain.chapter.repository.ChapterRepository
class GetChapterByMangaId(
private val chapterRepository: ChapterRepository,
@@ -1,9 +1,9 @@
package eu.kanade.domain.chapter.interactor
import eu.kanade.domain.chapter.model.Chapter
import eu.kanade.domain.chapter.repository.ChapterRepository
import eu.kanade.tachiyomi.util.system.logcat
import logcat.LogPriority
import tachiyomi.core.util.system.logcat
import tachiyomi.domain.chapter.model.Chapter
import tachiyomi.domain.chapter.repository.ChapterRepository
class GetChapterByUrl(
private val chapterRepository: ChapterRepository,
@@ -1,15 +1,15 @@
package eu.kanade.domain.chapter.interactor
import eu.kanade.domain.chapter.model.Chapter
import eu.kanade.domain.chapter.repository.ChapterRepository
import eu.kanade.domain.manga.interactor.GetMergedReferencesById
import eu.kanade.tachiyomi.util.system.logcat
import exh.merged.sql.models.MergedMangaReference
import exh.source.MERGED_SOURCE_ID
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.flowOf
import logcat.LogPriority
import tachiyomi.core.util.system.logcat
import tachiyomi.domain.chapter.model.Chapter
import tachiyomi.domain.chapter.repository.ChapterRepository
import tachiyomi.domain.manga.model.MergedMangaReference
class GetMergedChapterByMangaId(
private val chapterRepository: ChapterRepository,
@@ -3,8 +3,8 @@ package eu.kanade.domain.chapter.interactor
import eu.kanade.domain.library.service.LibraryPreferences
import eu.kanade.domain.manga.interactor.GetFavorites
import eu.kanade.domain.manga.interactor.SetMangaChapterFlags
import eu.kanade.domain.manga.model.Manga
import eu.kanade.tachiyomi.util.lang.withNonCancellableContext
import tachiyomi.core.util.lang.withNonCancellableContext
import tachiyomi.domain.manga.model.Manga
class SetMangaDefaultChapterFlags(
private val libraryPreferences: LibraryPreferences,
@@ -1,16 +1,16 @@
package eu.kanade.domain.chapter.interactor
import eu.kanade.domain.chapter.model.Chapter
import eu.kanade.domain.chapter.model.ChapterUpdate
import eu.kanade.domain.chapter.repository.ChapterRepository
import eu.kanade.domain.download.interactor.DeleteDownload
import eu.kanade.domain.download.service.DownloadPreferences
import eu.kanade.domain.manga.model.Manga
import eu.kanade.domain.manga.repository.MangaRepository
import eu.kanade.tachiyomi.util.lang.withNonCancellableContext
import eu.kanade.tachiyomi.util.system.logcat
import exh.source.MERGED_SOURCE_ID
import logcat.LogPriority
import tachiyomi.core.util.lang.withNonCancellableContext
import tachiyomi.core.util.system.logcat
import tachiyomi.domain.chapter.model.Chapter
import tachiyomi.domain.chapter.model.ChapterUpdate
import tachiyomi.domain.chapter.repository.ChapterRepository
import tachiyomi.domain.manga.model.Manga
import tachiyomi.domain.manga.repository.MangaRepository
class SetReadStatus(
private val downloadPreferences: DownloadPreferences,
@@ -1,12 +1,9 @@
package eu.kanade.domain.chapter.interactor
import eu.kanade.data.chapter.CleanupChapterName
import eu.kanade.data.chapter.NoChaptersException
import eu.kanade.domain.chapter.model.Chapter
import eu.kanade.domain.chapter.model.toChapterUpdate
import eu.kanade.domain.chapter.repository.ChapterRepository
import eu.kanade.domain.chapter.model.copyFromSChapter
import eu.kanade.domain.chapter.model.toSChapter
import eu.kanade.domain.manga.interactor.UpdateManga
import eu.kanade.domain.manga.model.Manga
import eu.kanade.domain.manga.model.toSManga
import eu.kanade.tachiyomi.data.download.DownloadManager
import eu.kanade.tachiyomi.data.download.DownloadProvider
import eu.kanade.tachiyomi.source.Source
@@ -15,6 +12,13 @@ import eu.kanade.tachiyomi.source.model.SChapter
import eu.kanade.tachiyomi.source.online.HttpSource
import eu.kanade.tachiyomi.util.chapter.ChapterRecognition
import exh.source.isEhBasedManga
import tachiyomi.data.chapter.ChapterSanitizer
import tachiyomi.domain.chapter.interactor.ShouldUpdateDbChapter
import tachiyomi.domain.chapter.model.Chapter
import tachiyomi.domain.chapter.model.NoChaptersException
import tachiyomi.domain.chapter.model.toChapterUpdate
import tachiyomi.domain.chapter.repository.ChapterRepository
import tachiyomi.domain.manga.model.Manga
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get
import java.lang.Long.max
@@ -53,7 +57,7 @@ class SyncChaptersWithSource(
.mapIndexed { i, sChapter ->
Chapter.create()
.copyFromSChapter(sChapter)
.copy(name = CleanupChapterName.await(sChapter.name, manga.title))
.copy(name = with(ChapterSanitizer) { sChapter.name.sanitize(manga.title) })
.copy(mangaId = manga.id, sourceOrder = i.toLong())
}
@@ -1,13 +1,13 @@
package eu.kanade.domain.chapter.interactor
import eu.kanade.domain.chapter.model.Chapter
import eu.kanade.domain.chapter.model.toChapterUpdate
import eu.kanade.domain.track.interactor.InsertTrack
import eu.kanade.domain.track.model.Track
import eu.kanade.domain.track.model.toDbTrack
import eu.kanade.tachiyomi.data.track.TrackService
import eu.kanade.tachiyomi.util.system.logcat
import logcat.LogPriority
import tachiyomi.core.util.system.logcat
import tachiyomi.domain.chapter.model.Chapter
import tachiyomi.domain.chapter.model.toChapterUpdate
import tachiyomi.domain.track.model.Track
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get
@@ -1,9 +1,9 @@
package eu.kanade.domain.chapter.interactor
import eu.kanade.domain.chapter.model.ChapterUpdate
import eu.kanade.domain.chapter.repository.ChapterRepository
import eu.kanade.tachiyomi.util.system.logcat
import logcat.LogPriority
import tachiyomi.core.util.system.logcat
import tachiyomi.domain.chapter.model.ChapterUpdate
import tachiyomi.domain.chapter.repository.ChapterRepository
class UpdateChapter(
private val chapterRepository: ChapterRepository,
@@ -2,64 +2,30 @@ package eu.kanade.domain.chapter.model
import eu.kanade.tachiyomi.data.database.models.ChapterImpl
import eu.kanade.tachiyomi.source.model.SChapter
import tachiyomi.domain.chapter.model.Chapter
import eu.kanade.tachiyomi.data.database.models.Chapter as DbChapter
data class Chapter(
val id: Long,
val mangaId: Long,
val read: Boolean,
val bookmark: Boolean,
val lastPageRead: Long,
val dateFetch: Long,
val sourceOrder: Long,
val url: String,
val name: String,
val dateUpload: Long,
val chapterNumber: Float,
val scanlator: String?,
) {
val isRecognizedNumber: Boolean
get() = chapterNumber >= 0f
fun toSChapter(): SChapter {
return SChapter.create().also {
it.url = url
it.name = name
it.date_upload = dateUpload
it.chapter_number = chapterNumber
it.scanlator = scanlator
}
}
fun copyFromSChapter(sChapter: SChapter): Chapter {
return this.copy(
name = sChapter.name,
url = sChapter.url,
dateUpload = sChapter.date_upload,
chapterNumber = sChapter.chapter_number,
scanlator = sChapter.scanlator?.ifBlank { null },
)
}
companion object {
fun create() = Chapter(
id = -1,
mangaId = -1,
read = false,
bookmark = false,
lastPageRead = 0,
dateFetch = 0,
sourceOrder = 0,
url = "",
name = "",
dateUpload = -1,
chapterNumber = -1f,
scanlator = null,
)
// TODO: Remove when all deps are migrated
fun Chapter.toSChapter(): SChapter {
return SChapter.create().also {
it.url = url
it.name = name
it.date_upload = dateUpload
it.chapter_number = chapterNumber
it.scanlator = scanlator
}
}
// TODO: Remove when all deps are migrated
fun Chapter.copyFromSChapter(sChapter: SChapter): Chapter {
return this.copy(
name = sChapter.name,
url = sChapter.url,
dateUpload = sChapter.date_upload,
chapterNumber = sChapter.chapter_number,
scanlator = sChapter.scanlator?.ifBlank { null },
)
}
fun Chapter.toDbChapter(): DbChapter = ChapterImpl().also {
it.id = id
it.manga_id = mangaId
@@ -1,13 +1,15 @@
package eu.kanade.domain.chapter.model
import eu.kanade.domain.manga.model.Manga
import eu.kanade.domain.manga.model.TriStateFilter
import eu.kanade.domain.manga.model.downloadedFilter
import eu.kanade.domain.manga.model.isLocal
import eu.kanade.tachiyomi.data.download.DownloadManager
import eu.kanade.tachiyomi.data.download.model.Download
import eu.kanade.tachiyomi.ui.manga.ChapterItem
import eu.kanade.tachiyomi.util.chapter.getChapterSort
import exh.md.utils.MdUtil
import tachiyomi.domain.chapter.model.Chapter
import tachiyomi.domain.manga.model.Manga
import tachiyomi.domain.manga.model.TriStateFilter
/**
* Applies the view filters to the list of chapters obtained from the database.
@@ -47,7 +49,7 @@ fun List<Chapter>.applyFilters(manga: Manga, downloadManager: DownloadManager):
}
// SY -->
.filter { chapter ->
manga.filteredScanlators.isNullOrEmpty() || MdUtil.getScanlators(chapter.scanlator).any { group -> manga.filteredScanlators.contains(group) }
manga.filteredScanlators.isNullOrEmpty() || MdUtil.getScanlators(chapter.scanlator).any { group -> manga.filteredScanlators!!.contains(group) }
}
// SY <--
.sortedWith(getChapterSort(manga))
@@ -86,7 +88,7 @@ fun List<ChapterItem>.applyFilters(manga: Manga): Sequence<ChapterItem> {
}
// SY -->
.filter { chapter ->
manga.filteredScanlators.isNullOrEmpty() || MdUtil.getScanlators(chapter.chapter.scanlator).any { group -> manga.filteredScanlators.contains(group) }
manga.filteredScanlators.isNullOrEmpty() || MdUtil.getScanlators(chapter.chapter.scanlator).any { group -> manga.filteredScanlators!!.contains(group) }
}
// SY <--
.sortedWith { (chapter1), (chapter2) -> getChapterSort(manga).invoke(chapter1, chapter2) }
@@ -1,10 +1,10 @@
package eu.kanade.domain.download.interactor
import eu.kanade.domain.chapter.model.Chapter
import eu.kanade.domain.manga.model.Manga
import eu.kanade.tachiyomi.data.download.DownloadManager
import eu.kanade.tachiyomi.source.SourceManager
import eu.kanade.tachiyomi.util.lang.withNonCancellableContext
import tachiyomi.core.util.lang.withNonCancellableContext
import tachiyomi.domain.chapter.model.Chapter
import tachiyomi.domain.manga.model.Manga
class DeleteDownload(
private val sourceManager: SourceManager,
@@ -1,7 +1,7 @@
package eu.kanade.domain.download.service
import eu.kanade.tachiyomi.core.preference.PreferenceStore
import eu.kanade.tachiyomi.core.provider.FolderProvider
import tachiyomi.core.preference.PreferenceStore
import tachiyomi.core.provider.FolderProvider
class DownloadPreferences(
private val folderProvider: FolderProvider,
@@ -1,7 +1,7 @@
package eu.kanade.domain.history.interactor
import eu.kanade.domain.history.model.History
import eu.kanade.domain.history.repository.HistoryRepository
import tachiyomi.domain.history.model.History
import tachiyomi.domain.history.repository.HistoryRepository
class GetHistoryByMangaId(
private val repository: HistoryRepository,
@@ -2,12 +2,12 @@ package eu.kanade.domain.history.interactor
import eu.kanade.domain.chapter.interactor.GetChapterByMangaId
import eu.kanade.domain.chapter.interactor.GetMergedChapterByMangaId
import eu.kanade.domain.chapter.model.Chapter
import eu.kanade.domain.history.repository.HistoryRepository
import eu.kanade.domain.manga.interactor.GetManga
import eu.kanade.tachiyomi.util.chapter.getChapterSort
import exh.source.MERGED_SOURCE_ID
import exh.source.isEhBasedManga
import tachiyomi.domain.chapter.model.Chapter
import tachiyomi.domain.history.repository.HistoryRepository
import kotlin.math.max
class GetNextChapters(
@@ -1,13 +0,0 @@
package eu.kanade.domain.history.interactor
import eu.kanade.domain.history.model.HistoryUpdate
import eu.kanade.domain.history.repository.HistoryRepository
class UpsertHistory(
private val historyRepository: HistoryRepository,
) {
suspend fun await(historyUpdate: HistoryUpdate) {
historyRepository.upsertHistory(historyUpdate)
}
}
@@ -1,17 +1,17 @@
package eu.kanade.domain.library.service
import eu.kanade.domain.library.model.GroupLibraryMode
import eu.kanade.domain.library.model.LibraryDisplayMode
import eu.kanade.domain.library.model.LibraryGroup
import eu.kanade.domain.library.model.LibrarySort
import eu.kanade.domain.manga.model.Manga
import eu.kanade.tachiyomi.core.preference.PreferenceStore
import eu.kanade.tachiyomi.core.preference.getEnum
import eu.kanade.tachiyomi.data.preference.DEVICE_ONLY_ON_WIFI
import eu.kanade.tachiyomi.data.preference.MANGA_HAS_UNREAD
import eu.kanade.tachiyomi.data.preference.MANGA_NON_COMPLETED
import eu.kanade.tachiyomi.data.preference.MANGA_NON_READ
import eu.kanade.tachiyomi.widget.ExtendedNavigationView
import tachiyomi.core.preference.PreferenceStore
import tachiyomi.core.preference.getEnum
import tachiyomi.domain.library.model.LibraryDisplayMode
import tachiyomi.domain.library.model.LibrarySort
import tachiyomi.domain.manga.model.Manga
class LibraryPreferences(
private val preferenceStore: PreferenceStore,
@@ -25,7 +25,7 @@ class LibraryPreferences(
fun landscapeColumns() = preferenceStore.getInt("pref_library_columns_landscape_key", 0)
fun libraryUpdateInterval() = preferenceStore.getInt("pref_library_update_interval_key", 24)
fun libraryUpdateInterval() = preferenceStore.getInt("pref_library_update_interval_key", 0)
fun libraryUpdateLastTimestamp() = preferenceStore.getLong("library_update_last_timestamp", 0L)
fun libraryUpdateDeviceRestriction() = preferenceStore.getStringSet("library_update_restriction", setOf(DEVICE_ONLY_ON_WIFI))
@@ -63,8 +63,6 @@ class LibraryPreferences(
fun localBadge() = preferenceStore.getBoolean("display_local_badge", true)
fun unreadBadge() = preferenceStore.getBoolean("display_unread_badge", true)
fun languageBadge() = preferenceStore.getBoolean("display_language_badge", false)
fun newShowUpdatesCount() = preferenceStore.getBoolean("library_show_updates_count", true)
@@ -1,6 +1,6 @@
package eu.kanade.domain.manga.interactor
import eu.kanade.domain.manga.repository.MangaMergeRepository
import tachiyomi.domain.manga.repository.MangaMergeRepository
class DeleteByMergeId(
private val mangaMergeRepository: MangaMergeRepository,
@@ -1,6 +1,6 @@
package eu.kanade.domain.manga.interactor
import eu.kanade.domain.manga.repository.FavoritesEntryRepository
import tachiyomi.domain.manga.repository.FavoritesEntryRepository
class DeleteFavoriteEntries(
private val favoriteEntryRepository: FavoritesEntryRepository,
@@ -1,6 +1,6 @@
package eu.kanade.domain.manga.interactor
import eu.kanade.domain.manga.repository.MangaRepository
import tachiyomi.domain.manga.repository.MangaRepository
class DeleteMangaById(
private val mangaRepository: MangaRepository,
@@ -1,6 +1,6 @@
package eu.kanade.domain.manga.interactor
import eu.kanade.domain.manga.repository.MangaMergeRepository
import tachiyomi.domain.manga.repository.MangaMergeRepository
class DeleteMergeById(
private val mangaMergeRepository: MangaMergeRepository,
@@ -1,7 +1,7 @@
package eu.kanade.domain.manga.interactor
import eu.kanade.domain.manga.model.Manga
import eu.kanade.domain.manga.repository.MangaRepository
import tachiyomi.domain.manga.model.Manga
import tachiyomi.domain.manga.repository.MangaRepository
class GetAllManga(
private val mangaRepository: MangaRepository,
@@ -1,13 +1,13 @@
package eu.kanade.domain.manga.interactor
import eu.kanade.domain.manga.model.Manga
import eu.kanade.domain.manga.repository.MangaRepository
import tachiyomi.domain.manga.model.Manga
import tachiyomi.domain.manga.repository.MangaRepository
class GetDuplicateLibraryManga(
private val mangaRepository: MangaRepository,
) {
suspend fun await(title: String, sourceId: Long): Manga? {
return mangaRepository.getDuplicateLibraryManga(title.lowercase(), sourceId)
suspend fun await(title: String): Manga? {
return mangaRepository.getDuplicateLibraryManga(title.lowercase())
}
}
@@ -1,7 +1,7 @@
package eu.kanade.domain.manga.interactor
import eu.kanade.domain.manga.model.Manga
import eu.kanade.domain.manga.repository.MangaMetadataRepository
import tachiyomi.domain.manga.model.Manga
import tachiyomi.domain.manga.repository.MangaMetadataRepository
class GetExhFavoriteMangaWithMetadata(
private val mangaMetadataRepository: MangaMetadataRepository,
@@ -1,7 +1,7 @@
package eu.kanade.domain.manga.interactor
import eu.kanade.domain.manga.repository.FavoritesEntryRepository
import exh.favorites.sql.models.FavoriteEntry
import tachiyomi.domain.manga.model.FavoriteEntry
import tachiyomi.domain.manga.repository.FavoritesEntryRepository
class GetFavoriteEntries(
private val favoriteEntryRepository: FavoritesEntryRepository,
@@ -1,8 +1,8 @@
package eu.kanade.domain.manga.interactor
import eu.kanade.domain.manga.model.Manga
import eu.kanade.domain.manga.repository.MangaRepository
import kotlinx.coroutines.flow.Flow
import tachiyomi.domain.manga.model.Manga
import tachiyomi.domain.manga.repository.MangaRepository
class GetFavorites(
private val mangaRepository: MangaRepository,
@@ -1,12 +1,12 @@
package eu.kanade.domain.manga.interactor
import eu.kanade.domain.manga.repository.MangaMetadataRepository
import eu.kanade.tachiyomi.source.online.MetadataSource
import eu.kanade.tachiyomi.util.system.logcat
import exh.metadata.metadata.base.FlatMetadata
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.combine
import logcat.LogPriority
import tachiyomi.core.util.system.logcat
import tachiyomi.domain.manga.repository.MangaMetadataRepository
class GetFlatMetadataById(
private val mangaMetadataRepository: MangaMetadataRepository,
@@ -1,6 +1,6 @@
package eu.kanade.domain.manga.interactor
import eu.kanade.domain.manga.repository.MangaMetadataRepository
import tachiyomi.domain.manga.repository.MangaMetadataRepository
class GetIdsOfFavoriteMangaWithMetadata(
private val mangaMetadataRepository: MangaMetadataRepository,
@@ -1,8 +1,10 @@
package eu.kanade.domain.manga.interactor
import eu.kanade.domain.library.model.LibraryManga
import eu.kanade.domain.manga.repository.MangaRepository
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.flow.retry
import tachiyomi.domain.library.model.LibraryManga
import tachiyomi.domain.manga.repository.MangaRepository
class GetLibraryManga(
private val mangaRepository: MangaRepository,
@@ -14,5 +16,15 @@ class GetLibraryManga(
fun subscribe(): Flow<List<LibraryManga>> {
return mangaRepository.getLibraryMangaAsFlow()
// SY -->
.let {
var retries = 0
it.retry {
(retries++ < 3) && it is NullPointerException
}.onEach {
retries = 0
}
}
// SY <--
}
}
@@ -1,11 +1,11 @@
package eu.kanade.domain.manga.interactor
import eu.kanade.domain.manga.model.Manga
import eu.kanade.domain.manga.repository.MangaRepository
import eu.kanade.tachiyomi.source.online.MetadataSource
import eu.kanade.tachiyomi.util.system.logcat
import kotlinx.coroutines.flow.Flow
import logcat.LogPriority
import tachiyomi.core.util.system.logcat
import tachiyomi.domain.manga.model.Manga
import tachiyomi.domain.manga.repository.MangaRepository
class GetManga(
private val mangaRepository: MangaRepository,
@@ -1,7 +1,7 @@
package eu.kanade.domain.manga.interactor
import eu.kanade.domain.manga.model.Manga
import eu.kanade.domain.manga.repository.MangaRepository
import tachiyomi.domain.manga.model.Manga
import tachiyomi.domain.manga.repository.MangaRepository
class GetMangaBySource(
private val mangaRepository: MangaRepository,
@@ -1,11 +1,11 @@
package eu.kanade.domain.manga.interactor
import eu.kanade.domain.chapter.model.Chapter
import eu.kanade.domain.chapter.repository.ChapterRepository
import eu.kanade.domain.manga.model.Manga
import eu.kanade.domain.manga.repository.MangaRepository
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.combine
import tachiyomi.domain.chapter.model.Chapter
import tachiyomi.domain.chapter.repository.ChapterRepository
import tachiyomi.domain.manga.model.Manga
import tachiyomi.domain.manga.repository.MangaRepository
class GetMangaWithChapters(
private val mangaRepository: MangaRepository,
@@ -1,10 +1,10 @@
package eu.kanade.domain.manga.interactor
import eu.kanade.domain.manga.model.Manga
import eu.kanade.domain.manga.repository.MangaMergeRepository
import eu.kanade.tachiyomi.util.system.logcat
import kotlinx.coroutines.flow.Flow
import logcat.LogPriority
import tachiyomi.core.util.system.logcat
import tachiyomi.domain.manga.model.Manga
import tachiyomi.domain.manga.repository.MangaMergeRepository
class GetMergedManga(
private val mangaMergeRepository: MangaMergeRepository,
@@ -1,10 +1,10 @@
package eu.kanade.domain.manga.interactor
import eu.kanade.domain.manga.model.Manga
import eu.kanade.domain.manga.repository.MangaMergeRepository
import eu.kanade.tachiyomi.util.system.logcat
import kotlinx.coroutines.flow.Flow
import logcat.LogPriority
import tachiyomi.core.util.system.logcat
import tachiyomi.domain.manga.model.Manga
import tachiyomi.domain.manga.repository.MangaMergeRepository
class GetMergedMangaById(
private val mangaMergeRepository: MangaMergeRepository,
@@ -1,7 +1,7 @@
package eu.kanade.domain.manga.interactor
import eu.kanade.domain.manga.model.Manga
import eu.kanade.domain.manga.repository.MangaMergeRepository
import tachiyomi.domain.manga.model.Manga
import tachiyomi.domain.manga.repository.MangaMergeRepository
class GetMergedMangaForDownloading(
private val mangaMergeRepository: MangaMergeRepository,
@@ -1,10 +1,10 @@
package eu.kanade.domain.manga.interactor
import eu.kanade.domain.manga.repository.MangaMergeRepository
import eu.kanade.tachiyomi.util.system.logcat
import exh.merged.sql.models.MergedMangaReference
import kotlinx.coroutines.flow.Flow
import logcat.LogPriority
import tachiyomi.core.util.system.logcat
import tachiyomi.domain.manga.model.MergedMangaReference
import tachiyomi.domain.manga.repository.MangaMergeRepository
class GetMergedReferencesById(
private val mangaMergeRepository: MangaMergeRepository,
@@ -1,12 +1,14 @@
package eu.kanade.domain.manga.interactor
import eu.kanade.domain.chapter.interactor.GetChapterByMangaId
import eu.kanade.domain.manga.model.Manga
import eu.kanade.domain.chapter.model.toSChapter
import eu.kanade.domain.manga.model.PagePreview
import eu.kanade.domain.manga.model.toSManga
import eu.kanade.tachiyomi.data.cache.PagePreviewCache
import eu.kanade.tachiyomi.source.PagePreviewSource
import eu.kanade.tachiyomi.source.Source
import exh.source.getMainSource
import tachiyomi.domain.manga.model.Manga
class GetPagePreviews(
private val pagePreviewCache: PagePreviewCache,
@@ -1,7 +1,7 @@
package eu.kanade.domain.manga.interactor
import eu.kanade.domain.manga.repository.MangaMetadataRepository
import exh.metadata.sql.models.SearchMetadata
import tachiyomi.domain.manga.repository.MangaMetadataRepository
class GetSearchMetadata(
private val mangaMetadataRepository: MangaMetadataRepository,
@@ -1,7 +1,7 @@
package eu.kanade.domain.manga.interactor
import eu.kanade.domain.manga.repository.MangaMetadataRepository
import exh.metadata.sql.models.SearchTag
import tachiyomi.domain.manga.repository.MangaMetadataRepository
class GetSearchTags(
private val mangaMetadataRepository: MangaMetadataRepository,
@@ -1,7 +1,7 @@
package eu.kanade.domain.manga.interactor
import eu.kanade.domain.manga.repository.MangaMetadataRepository
import exh.metadata.sql.models.SearchTitle
import tachiyomi.domain.manga.repository.MangaMetadataRepository
class GetSearchTitles(
private val mangaMetadataRepository: MangaMetadataRepository,
@@ -1,7 +1,7 @@
package eu.kanade.domain.manga.interactor
import eu.kanade.domain.manga.repository.FavoritesEntryRepository
import exh.favorites.sql.models.FavoriteEntry
import tachiyomi.domain.manga.model.FavoriteEntry
import tachiyomi.domain.manga.repository.FavoritesEntryRepository
class InsertFavoriteEntries(
private val favoriteEntryRepository: FavoritesEntryRepository,
@@ -1,11 +1,11 @@
package eu.kanade.domain.manga.interactor
import eu.kanade.domain.manga.repository.MangaMetadataRepository
import eu.kanade.tachiyomi.source.online.MetadataSource
import eu.kanade.tachiyomi.util.system.logcat
import exh.metadata.metadata.base.FlatMetadata
import exh.metadata.metadata.base.RaisedSearchMetadata
import logcat.LogPriority
import tachiyomi.core.util.system.logcat
import tachiyomi.domain.manga.repository.MangaMetadataRepository
class InsertFlatMetadata(
private val mangaMetadataRepository: MangaMetadataRepository,
@@ -1,7 +1,7 @@
package eu.kanade.domain.manga.interactor
import eu.kanade.domain.manga.repository.MangaMergeRepository
import exh.merged.sql.models.MergedMangaReference
import tachiyomi.domain.manga.model.MergedMangaReference
import tachiyomi.domain.manga.repository.MangaMergeRepository
class InsertMergedReference(
private val mangaMergedRepository: MangaMergeRepository,
@@ -1,7 +1,7 @@
package eu.kanade.domain.manga.interactor
import eu.kanade.domain.manga.model.Manga
import eu.kanade.domain.manga.repository.MangaRepository
import tachiyomi.domain.manga.model.Manga
import tachiyomi.domain.manga.repository.MangaRepository
class NetworkToLocalManga(
private val mangaRepository: MangaRepository,
@@ -1,6 +1,6 @@
package eu.kanade.domain.manga.interactor
import eu.kanade.domain.manga.repository.MangaRepository
import tachiyomi.domain.manga.repository.MangaRepository
class ResetViewerFlags(
private val mangaRepository: MangaRepository,
@@ -1,8 +1,8 @@
package eu.kanade.domain.manga.interactor
import eu.kanade.domain.manga.model.Manga
import eu.kanade.domain.manga.model.MangaUpdate
import eu.kanade.domain.manga.repository.MangaRepository
import tachiyomi.domain.manga.model.Manga
import tachiyomi.domain.manga.model.MangaUpdate
import tachiyomi.domain.manga.repository.MangaRepository
class SetMangaChapterFlags(
private val mangaRepository: MangaRepository,
@@ -1,8 +1,8 @@
package eu.kanade.domain.manga.interactor
import eu.kanade.domain.manga.model.Manga
import eu.kanade.domain.manga.model.MangaUpdate
import eu.kanade.domain.manga.repository.MangaRepository
import tachiyomi.domain.manga.model.Manga
import tachiyomi.domain.manga.model.MangaUpdate
import tachiyomi.domain.manga.repository.MangaRepository
class SetMangaFilteredScanlators(private val mangaRepository: MangaRepository) {
@@ -1,9 +1,9 @@
package eu.kanade.domain.manga.interactor
import eu.kanade.domain.manga.model.MangaUpdate
import eu.kanade.domain.manga.repository.MangaRepository
import eu.kanade.tachiyomi.ui.reader.setting.OrientationType
import eu.kanade.tachiyomi.ui.reader.setting.ReadingModeType
import tachiyomi.domain.manga.model.MangaUpdate
import tachiyomi.domain.manga.repository.MangaRepository
class SetMangaViewerFlags(
private val mangaRepository: MangaRepository,
@@ -1,13 +1,13 @@
package eu.kanade.domain.manga.interactor
import eu.kanade.domain.manga.model.Manga
import eu.kanade.domain.manga.model.MangaUpdate
import eu.kanade.domain.manga.model.hasCustomCover
import eu.kanade.domain.manga.model.isLocal
import eu.kanade.domain.manga.repository.MangaRepository
import eu.kanade.tachiyomi.data.cache.CoverCache
import eu.kanade.tachiyomi.data.download.DownloadManager
import eu.kanade.tachiyomi.source.model.SManga
import tachiyomi.domain.manga.model.Manga
import tachiyomi.domain.manga.model.MangaUpdate
import tachiyomi.domain.manga.repository.MangaRepository
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get
import java.util.Date
@@ -1,7 +1,7 @@
package eu.kanade.domain.manga.interactor
import eu.kanade.domain.manga.model.MergeMangaSettingsUpdate
import eu.kanade.domain.manga.repository.MangaMergeRepository
import tachiyomi.domain.manga.model.MergeMangaSettingsUpdate
import tachiyomi.domain.manga.repository.MangaMergeRepository
class UpdateMergedSettings(
private val mangaMergeRepository: MangaMergeRepository,
@@ -1,11 +1,12 @@
package eu.kanade.domain.manga.model
import eu.kanade.domain.chapter.model.Chapter
import eu.kanade.tachiyomi.source.model.SManga
import kotlinx.serialization.Serializable
import nl.adaptivity.xmlutil.serialization.XmlElement
import nl.adaptivity.xmlutil.serialization.XmlSerialName
import nl.adaptivity.xmlutil.serialization.XmlValue
import tachiyomi.domain.chapter.model.Chapter
import tachiyomi.domain.manga.model.Manga
const val COMIC_INFO_FILE = "ComicInfo.xml"
@@ -2,273 +2,77 @@ package eu.kanade.domain.manga.model
import eu.kanade.domain.base.BasePreferences
import eu.kanade.tachiyomi.data.cache.CoverCache
import eu.kanade.tachiyomi.data.library.CustomMangaManager
import eu.kanade.tachiyomi.source.LocalSource
import eu.kanade.tachiyomi.source.model.SManga
import eu.kanade.tachiyomi.source.model.UpdateStrategy
import eu.kanade.tachiyomi.ui.reader.setting.OrientationType
import eu.kanade.tachiyomi.ui.reader.setting.ReadingModeType
import eu.kanade.tachiyomi.widget.ExtendedNavigationView
import tachiyomi.domain.manga.model.Manga
import tachiyomi.domain.manga.model.TriStateFilter
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get
import uy.kohesive.injekt.injectLazy
import java.io.Serializable
data class Manga(
val id: Long,
val source: Long,
val favorite: Boolean,
val lastUpdate: Long,
val dateAdded: Long,
val viewerFlags: Long,
val chapterFlags: Long,
val coverLastModified: Long,
val url: String,
// SY -->
val ogTitle: String,
val ogArtist: String?,
val ogAuthor: String?,
val ogDescription: String?,
val ogGenre: List<String>?,
val ogStatus: Long,
// SY <--
val thumbnailUrl: String?,
val updateStrategy: UpdateStrategy,
val initialized: Boolean,
// SY -->
val filteredScanlators: List<String>?,
// SY <--
) : Serializable {
// TODO: move these into the domain model
val Manga.readingModeType: Long
get() = viewerFlags and ReadingModeType.MASK.toLong()
val Manga.orientationType: Long
get() = viewerFlags and OrientationType.MASK.toLong()
val Manga.downloadedFilter: TriStateFilter
get() {
if (forceDownloaded()) return TriStateFilter.ENABLED_IS
return when (downloadedFilterRaw) {
Manga.CHAPTER_SHOW_DOWNLOADED -> TriStateFilter.ENABLED_IS
Manga.CHAPTER_SHOW_NOT_DOWNLOADED -> TriStateFilter.ENABLED_NOT
else -> TriStateFilter.DISABLED
}
}
fun Manga.chaptersFiltered(): Boolean {
return unreadFilter != TriStateFilter.DISABLED ||
downloadedFilter != TriStateFilter.DISABLED ||
bookmarkedFilter != TriStateFilter.DISABLED
}
fun Manga.forceDownloaded(): Boolean {
return favorite && Injekt.get<BasePreferences>().downloadedOnly().get()
}
fun Manga.toSManga(): SManga = SManga.create().also {
it.url = url
it.title = title
it.artist = artist
it.author = author
it.description = description
it.genre = genre.orEmpty().joinToString()
it.status = status.toInt()
it.thumbnail_url = thumbnailUrl
it.initialized = initialized
}
fun Manga.copyFrom(other: SManga): Manga {
// SY -->
private val customMangaInfo = if (favorite) {
customMangaManager.getManga(this)
val author = other.author ?: ogAuthor
val artist = other.artist ?: ogArtist
val description = other.description ?: ogDescription
val genres = if (other.genre != null) {
other.getGenres()
} else {
null
ogGenre
}
val title: String
get() = customMangaInfo?.title ?: ogTitle
val author: String?
get() = customMangaInfo?.author ?: ogAuthor
val artist: String?
get() = customMangaInfo?.artist ?: ogArtist
val description: String?
get() = customMangaInfo?.description ?: ogDescription
val genre: List<String>?
get() = customMangaInfo?.genre ?: ogGenre
val status: Long
get() = customMangaInfo?.status ?: ogStatus
// SY <--
val sorting: Long
get() = chapterFlags and CHAPTER_SORTING_MASK
val displayMode: Long
get() = chapterFlags and CHAPTER_DISPLAY_MASK
val unreadFilterRaw: Long
get() = chapterFlags and CHAPTER_UNREAD_MASK
val downloadedFilterRaw: Long
get() = chapterFlags and CHAPTER_DOWNLOADED_MASK
val bookmarkedFilterRaw: Long
get() = chapterFlags and CHAPTER_BOOKMARKED_MASK
val readingModeType: Long
get() = viewerFlags and ReadingModeType.MASK.toLong()
val orientationType: Long
get() = viewerFlags and OrientationType.MASK.toLong()
val unreadFilter: TriStateFilter
get() = when (unreadFilterRaw) {
CHAPTER_SHOW_UNREAD -> TriStateFilter.ENABLED_IS
CHAPTER_SHOW_READ -> TriStateFilter.ENABLED_NOT
else -> TriStateFilter.DISABLED
}
val downloadedFilter: TriStateFilter
get() {
if (forceDownloaded()) return TriStateFilter.ENABLED_IS
return when (downloadedFilterRaw) {
CHAPTER_SHOW_DOWNLOADED -> TriStateFilter.ENABLED_IS
CHAPTER_SHOW_NOT_DOWNLOADED -> TriStateFilter.ENABLED_NOT
else -> TriStateFilter.DISABLED
}
}
val bookmarkedFilter: TriStateFilter
get() = when (bookmarkedFilterRaw) {
CHAPTER_SHOW_BOOKMARKED -> TriStateFilter.ENABLED_IS
CHAPTER_SHOW_NOT_BOOKMARKED -> TriStateFilter.ENABLED_NOT
else -> TriStateFilter.DISABLED
}
fun chaptersFiltered(): Boolean {
return unreadFilter != TriStateFilter.DISABLED ||
downloadedFilter != TriStateFilter.DISABLED ||
bookmarkedFilter != TriStateFilter.DISABLED
}
fun forceDownloaded(): Boolean {
return favorite && Injekt.get<BasePreferences>().downloadedOnly().get()
}
fun sortDescending(): Boolean {
return chapterFlags and CHAPTER_SORT_DIR_MASK == CHAPTER_SORT_DESC
}
fun toSManga(): SManga = SManga.create().also {
it.url = url
val thumbnailUrl = other.thumbnail_url ?: thumbnailUrl
return this.copy(
// SY -->
it.title = ogTitle
it.artist = ogArtist
it.author = ogAuthor
it.description = ogDescription
it.genre = ogGenre.orEmpty().joinToString()
it.status = ogStatus.toInt()
// SY <--
it.thumbnail_url = thumbnailUrl
it.initialized = initialized
}
fun copyFrom(other: SManga): Manga {
// SY -->
val author = other.author ?: ogAuthor
val artist = other.artist ?: ogArtist
val description = other.description ?: ogDescription
val genres = if (other.genre != null) {
other.getGenres()
} else {
ogGenre
}
// SY <--
val thumbnailUrl = other.thumbnail_url ?: thumbnailUrl
return this.copy(
// SY -->
ogAuthor = author,
ogArtist = artist,
ogDescription = description,
ogGenre = genres,
// SY <--
thumbnailUrl = thumbnailUrl,
// SY -->
ogStatus = other.status.toLong(),
// SY <--
updateStrategy = other.update_strategy,
initialized = other.initialized && initialized,
)
}
companion object {
// Generic filter that does not filter anything
const val SHOW_ALL = 0x00000000L
const val CHAPTER_SORT_DESC = 0x00000000L
const val CHAPTER_SORT_ASC = 0x00000001L
const val CHAPTER_SORT_DIR_MASK = 0x00000001L
const val CHAPTER_SHOW_UNREAD = 0x00000002L
const val CHAPTER_SHOW_READ = 0x00000004L
const val CHAPTER_UNREAD_MASK = 0x00000006L
const val CHAPTER_SHOW_DOWNLOADED = 0x00000008L
const val CHAPTER_SHOW_NOT_DOWNLOADED = 0x00000010L
const val CHAPTER_DOWNLOADED_MASK = 0x00000018L
const val CHAPTER_SHOW_BOOKMARKED = 0x00000020L
const val CHAPTER_SHOW_NOT_BOOKMARKED = 0x00000040L
const val CHAPTER_BOOKMARKED_MASK = 0x00000060L
const val CHAPTER_SORTING_SOURCE = 0x00000000L
const val CHAPTER_SORTING_NUMBER = 0x00000100L
const val CHAPTER_SORTING_UPLOAD_DATE = 0x00000200L
const val CHAPTER_SORTING_MASK = 0x00000300L
const val CHAPTER_DISPLAY_NAME = 0x00000000L
const val CHAPTER_DISPLAY_NUMBER = 0x00100000L
const val CHAPTER_DISPLAY_MASK = 0x00100000L
fun create() = Manga(
id = -1L,
url = "",
// Sy -->
ogTitle = "",
// SY <--
source = -1L,
favorite = false,
lastUpdate = 0L,
dateAdded = 0L,
viewerFlags = 0L,
chapterFlags = 0L,
coverLastModified = 0L,
// SY -->
ogArtist = null,
ogAuthor = null,
ogDescription = null,
ogGenre = null,
ogStatus = 0L,
// SY <--
thumbnailUrl = null,
updateStrategy = UpdateStrategy.ALWAYS_UPDATE,
initialized = false,
// SY -->
filteredScanlators = null,
// SY <--
)
// SY -->
private val customMangaManager: CustomMangaManager by injectLazy()
// SY <--
}
}
enum class TriStateFilter {
DISABLED, // Disable filter
ENABLED_IS, // Enabled with "is" filter
ENABLED_NOT, // Enabled with "not" filter
}
fun TriStateFilter.toTriStateGroupState(): ExtendedNavigationView.Item.TriStateGroup.State {
return when (this) {
TriStateFilter.DISABLED -> ExtendedNavigationView.Item.TriStateGroup.State.IGNORE
TriStateFilter.ENABLED_IS -> ExtendedNavigationView.Item.TriStateGroup.State.INCLUDE
TriStateFilter.ENABLED_NOT -> ExtendedNavigationView.Item.TriStateGroup.State.EXCLUDE
}
}
fun Manga.toMangaUpdate(): MangaUpdate {
return MangaUpdate(
id = id,
source = source,
favorite = favorite,
lastUpdate = lastUpdate,
dateAdded = dateAdded,
viewerFlags = viewerFlags,
chapterFlags = chapterFlags,
coverLastModified = coverLastModified,
url = url,
// SY -->
title = ogTitle,
artist = ogArtist,
author = ogAuthor,
description = ogDescription,
genre = ogGenre,
status = ogStatus,
ogAuthor = author,
ogArtist = artist,
ogDescription = description,
ogGenre = genres,
// SY <--
thumbnailUrl = thumbnailUrl,
updateStrategy = updateStrategy,
initialized = initialized,
// SY -->
filteredScanlators = filteredScanlators,
ogStatus = other.status.toLong(),
// SY <--
updateStrategy = other.update_strategy,
initialized = other.initialized && initialized,
)
}
@@ -1,27 +0,0 @@
package eu.kanade.domain.manga.model
import eu.kanade.tachiyomi.source.model.UpdateStrategy
data class MangaUpdate(
val id: Long,
val source: Long? = null,
val favorite: Boolean? = null,
val lastUpdate: Long? = null,
val dateAdded: Long? = null,
val viewerFlags: Long? = null,
val chapterFlags: Long? = null,
val coverLastModified: Long? = null,
val url: String? = null,
val title: String? = null,
val artist: String? = null,
val author: String? = null,
val description: String? = null,
val genre: List<String>? = null,
val status: Long? = null,
val thumbnailUrl: String? = null,
val updateStrategy: UpdateStrategy? = null,
val initialized: Boolean? = null,
// SY -->
val filteredScanlators: List<String>? = null,
// SY <--
)
@@ -1,6 +1,6 @@
package eu.kanade.domain.source.interactor
import eu.kanade.domain.source.repository.FeedSavedSearchRepository
import tachiyomi.domain.source.repository.FeedSavedSearchRepository
class CountFeedSavedSearchBySourceId(
private val feedSavedSearchRepository: FeedSavedSearchRepository,
@@ -1,6 +1,6 @@
package eu.kanade.domain.source.interactor
import eu.kanade.domain.source.repository.FeedSavedSearchRepository
import tachiyomi.domain.source.repository.FeedSavedSearchRepository
class CountFeedSavedSearchGlobal(
private val feedSavedSearchRepository: FeedSavedSearchRepository,
@@ -6,11 +6,6 @@ import eu.kanade.tachiyomi.util.preference.plusAssign
class CreateSourceCategory(private val preferences: SourcePreferences) {
fun await(category: String): Result {
// Do not allow duplicate categories.
if (categoryExists(category)) {
return Result.CategoryExists
}
if (category.contains("|")) {
return Result.InvalidName
}
@@ -22,15 +17,7 @@ class CreateSourceCategory(private val preferences: SourcePreferences) {
}
sealed class Result {
object CategoryExists : Result()
object InvalidName : Result()
object Success : Result()
}
/**
* Returns true if a repo with the given name already exists.
*/
private fun categoryExists(name: String): Boolean {
return preferences.sourcesTabCategories().get().any { it.equals(name, true) }
}
}
@@ -6,11 +6,6 @@ import eu.kanade.tachiyomi.util.preference.plusAssign
class CreateSourceRepo(private val preferences: UnsortedPreferences) {
fun await(name: String): Result {
// Do not allow duplicate repos.
if (repoExists(name)) {
return Result.RepoExists
}
// Do not allow invalid formats
if (!name.matches(repoRegex)) {
return Result.InvalidName
@@ -22,7 +17,6 @@ class CreateSourceRepo(private val preferences: UnsortedPreferences) {
}
sealed class Result {
object RepoExists : Result()
object InvalidName : Result()
object Success : Result()
}
@@ -1,6 +1,6 @@
package eu.kanade.domain.source.interactor
import eu.kanade.domain.source.repository.FeedSavedSearchRepository
import tachiyomi.domain.source.repository.FeedSavedSearchRepository
class DeleteFeedSavedSearchById(
private val feedSavedSearchRepository: FeedSavedSearchRepository,
@@ -1,6 +1,6 @@
package eu.kanade.domain.source.interactor
import eu.kanade.domain.source.repository.SavedSearchRepository
import tachiyomi.domain.source.repository.SavedSearchRepository
class DeleteSavedSearchById(
private val savedSearchRepository: SavedSearchRepository,
@@ -1,8 +1,8 @@
package eu.kanade.domain.source.interactor
import eu.kanade.domain.source.service.SourcePreferences
import eu.kanade.tachiyomi.core.preference.getAndSet
import eu.kanade.tachiyomi.util.preference.minusAssign
import tachiyomi.core.preference.getAndSet
class DeleteSourceCategory(private val preferences: SourcePreferences) {
@@ -1,8 +1,5 @@
package eu.kanade.domain.source.interactor
import eu.kanade.domain.source.model.Pin
import eu.kanade.domain.source.model.Pins
import eu.kanade.domain.source.model.Source
import eu.kanade.domain.source.repository.SourceRepository
import eu.kanade.domain.source.service.SourcePreferences
import eu.kanade.tachiyomi.source.LocalSource
@@ -10,6 +7,9 @@ import exh.source.BlacklistedSources
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.distinctUntilChanged
import tachiyomi.domain.source.model.Pin
import tachiyomi.domain.source.model.Pins
import tachiyomi.domain.source.model.Source
class GetEnabledSources(
private val repository: SourceRepository,
@@ -1,10 +1,7 @@
package eu.kanade.domain.source.interactor
import eu.kanade.tachiyomi.source.model.FilterList
import eu.kanade.tachiyomi.util.lang.withIOContext
import exh.log.xLogE
import exh.savedsearches.EXHSavedSearch
import exh.savedsearches.models.SavedSearch
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.flowOn
@@ -12,6 +9,9 @@ import kotlinx.coroutines.flow.map
import kotlinx.serialization.decodeFromString
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.JsonArray
import tachiyomi.core.util.lang.withIOContext
import tachiyomi.domain.source.model.EXHSavedSearch
import tachiyomi.domain.source.model.SavedSearch
import xyz.nulldev.ts.api.http.serializer.FilterSerializer
class GetExhSavedSearch(
@@ -1,8 +1,8 @@
package eu.kanade.domain.source.interactor
import eu.kanade.domain.source.repository.FeedSavedSearchRepository
import exh.savedsearches.models.FeedSavedSearch
import kotlinx.coroutines.flow.Flow
import tachiyomi.domain.source.model.FeedSavedSearch
import tachiyomi.domain.source.repository.FeedSavedSearchRepository
class GetFeedSavedSearchBySourceId(
private val feedSavedSearchRepository: FeedSavedSearchRepository,
@@ -1,8 +1,8 @@
package eu.kanade.domain.source.interactor
import eu.kanade.domain.source.repository.FeedSavedSearchRepository
import exh.savedsearches.models.FeedSavedSearch
import kotlinx.coroutines.flow.Flow
import tachiyomi.domain.source.model.FeedSavedSearch
import tachiyomi.domain.source.repository.FeedSavedSearchRepository
class GetFeedSavedSearchGlobal(
private val feedSavedSearchRepository: FeedSavedSearchRepository,
@@ -1,12 +1,12 @@
package eu.kanade.domain.source.interactor
import eu.kanade.domain.source.model.Source
import eu.kanade.domain.source.repository.SourceRepository
import eu.kanade.domain.source.service.SourcePreferences
import eu.kanade.tachiyomi.util.system.LocaleHelper
import exh.source.BlacklistedSources
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.combine
import tachiyomi.domain.source.model.Source
class GetLanguagesWithSources(
private val repository: SourceRepository,
@@ -1,7 +1,7 @@
package eu.kanade.domain.source.interactor
import eu.kanade.domain.source.repository.SavedSearchRepository
import exh.savedsearches.models.SavedSearch
import tachiyomi.domain.source.model.SavedSearch
import tachiyomi.domain.source.repository.SavedSearchRepository
class GetSavedSearchById(
private val savedSearchRepository: SavedSearchRepository,
@@ -1,8 +1,8 @@
package eu.kanade.domain.source.interactor
import eu.kanade.domain.source.repository.SavedSearchRepository
import exh.savedsearches.models.SavedSearch
import kotlinx.coroutines.flow.Flow
import tachiyomi.domain.source.model.SavedSearch
import tachiyomi.domain.source.repository.SavedSearchRepository
class GetSavedSearchBySourceId(
private val savedSearchRepository: SavedSearchRepository,
@@ -1,7 +1,7 @@
package eu.kanade.domain.source.interactor
import eu.kanade.domain.source.repository.FeedSavedSearchRepository
import exh.savedsearches.models.SavedSearch
import tachiyomi.domain.source.model.SavedSearch
import tachiyomi.domain.source.repository.FeedSavedSearchRepository
class GetSavedSearchBySourceIdFeed(
private val feedSavedSearchRepository: FeedSavedSearchRepository,
@@ -1,7 +1,7 @@
package eu.kanade.domain.source.interactor
import eu.kanade.domain.source.repository.FeedSavedSearchRepository
import exh.savedsearches.models.SavedSearch
import tachiyomi.domain.source.model.SavedSearch
import tachiyomi.domain.source.repository.FeedSavedSearchRepository
class GetSavedSearchGlobalFeed(
private val feedSavedSearchRepository: FeedSavedSearchRepository,

Some files were not shown because too many files have changed in this diff Show More