mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-30 22:07:57 +01:00 
			
		
		
		
	More domain model usage
This commit is contained in:
		| @@ -2,6 +2,7 @@ package eu.kanade.domain.manga.model | ||||
|  | ||||
| import eu.kanade.data.listOfStringsAdapter | ||||
| import eu.kanade.tachiyomi.data.cache.CoverCache | ||||
| import eu.kanade.tachiyomi.data.database.models.MangaImpl | ||||
| import eu.kanade.tachiyomi.data.preference.PreferencesHelper | ||||
| import eu.kanade.tachiyomi.source.LocalSource | ||||
| import eu.kanade.tachiyomi.source.model.SManga | ||||
| @@ -145,8 +146,9 @@ fun TriStateFilter.toTriStateGroupState(): ExtendedNavigationView.Item.TriStateG | ||||
| } | ||||
|  | ||||
| // TODO: Remove when all deps are migrated | ||||
| fun Manga.toDbManga(): DbManga = DbManga.create(source).also { | ||||
| fun Manga.toDbManga(): DbManga = MangaImpl().also { | ||||
|     it.id = id | ||||
|     it.source = source | ||||
|     it.favorite = favorite | ||||
|     it.last_update = lastUpdate | ||||
|     it.date_added = dateAdded | ||||
|   | ||||
| @@ -6,14 +6,14 @@ import eu.kanade.domain.manga.model.MangaCover | ||||
| import eu.kanade.domain.manga.model.hasCustomCover | ||||
| import eu.kanade.tachiyomi.data.cache.CoverCache | ||||
| import eu.kanade.tachiyomi.data.database.models.Manga | ||||
| import eu.kanade.tachiyomi.util.hasCustomCover | ||||
| import eu.kanade.tachiyomi.data.database.models.toDomainManga | ||||
| import uy.kohesive.injekt.Injekt | ||||
| import uy.kohesive.injekt.api.get | ||||
| import eu.kanade.domain.manga.model.Manga as DomainManga | ||||
|  | ||||
| class MangaKeyer : Keyer<Manga> { | ||||
|     override fun key(data: Manga, options: Options): String { | ||||
|         return if (data.hasCustomCover()) { | ||||
|         return if (data.toDomainManga()!!.hasCustomCover()) { | ||||
|             "${data.id};${data.cover_last_modified}" | ||||
|         } else { | ||||
|             "${data.thumbnail_url};${data.cover_last_modified}" | ||||
|   | ||||
| @@ -25,12 +25,8 @@ interface Manga : SManga { | ||||
|  | ||||
|     var cover_last_modified: Long | ||||
|  | ||||
|     fun setChapterOrder(order: Int) { | ||||
|         setChapterFlags(order, CHAPTER_SORT_MASK) | ||||
|     } | ||||
|  | ||||
|     fun sortDescending(): Boolean { | ||||
|         return chapter_flags and CHAPTER_SORT_MASK == CHAPTER_SORT_DESC | ||||
|         return chapter_flags and DomainManga.CHAPTER_SORT_DIR_MASK.toInt() == DomainManga.CHAPTER_SORT_DESC.toInt() | ||||
|     } | ||||
|  | ||||
|     fun getGenres(): List<String>? { | ||||
| @@ -48,24 +44,24 @@ interface Manga : SManga { | ||||
|  | ||||
|     // Used to display the chapter's title one way or another | ||||
|     var displayMode: Int | ||||
|         get() = chapter_flags and CHAPTER_DISPLAY_MASK | ||||
|         set(mode) = setChapterFlags(mode, CHAPTER_DISPLAY_MASK) | ||||
|         get() = chapter_flags and DomainManga.CHAPTER_DISPLAY_MASK.toInt() | ||||
|         set(mode) = setChapterFlags(mode, DomainManga.CHAPTER_DISPLAY_MASK.toInt()) | ||||
|  | ||||
|     var readFilter: Int | ||||
|         get() = chapter_flags and CHAPTER_READ_MASK | ||||
|         set(filter) = setChapterFlags(filter, CHAPTER_READ_MASK) | ||||
|         get() = chapter_flags and DomainManga.CHAPTER_UNREAD_MASK.toInt() | ||||
|         set(filter) = setChapterFlags(filter, DomainManga.CHAPTER_UNREAD_MASK.toInt()) | ||||
|  | ||||
|     var downloadedFilter: Int | ||||
|         get() = chapter_flags and CHAPTER_DOWNLOADED_MASK | ||||
|         set(filter) = setChapterFlags(filter, CHAPTER_DOWNLOADED_MASK) | ||||
|         get() = chapter_flags and DomainManga.CHAPTER_DOWNLOADED_MASK.toInt() | ||||
|         set(filter) = setChapterFlags(filter, DomainManga.CHAPTER_DOWNLOADED_MASK.toInt()) | ||||
|  | ||||
|     var bookmarkedFilter: Int | ||||
|         get() = chapter_flags and CHAPTER_BOOKMARKED_MASK | ||||
|         set(filter) = setChapterFlags(filter, CHAPTER_BOOKMARKED_MASK) | ||||
|         get() = chapter_flags and DomainManga.CHAPTER_BOOKMARKED_MASK.toInt() | ||||
|         set(filter) = setChapterFlags(filter, DomainManga.CHAPTER_BOOKMARKED_MASK.toInt()) | ||||
|  | ||||
|     var sorting: Int | ||||
|         get() = chapter_flags and CHAPTER_SORTING_MASK | ||||
|         set(sort) = setChapterFlags(sort, CHAPTER_SORTING_MASK) | ||||
|         get() = chapter_flags and DomainManga.CHAPTER_SORTING_MASK.toInt() | ||||
|         set(sort) = setChapterFlags(sort, DomainManga.CHAPTER_SORTING_MASK.toInt()) | ||||
|  | ||||
|     var readingModeType: Int | ||||
|         get() = viewer_flags and ReadingModeType.MASK | ||||
| @@ -76,39 +72,6 @@ interface Manga : SManga { | ||||
|         set(rotationType) = setViewerFlags(rotationType, OrientationType.MASK) | ||||
|  | ||||
|     companion object { | ||||
|  | ||||
|         // Generic filter that does not filter anything | ||||
|         const val SHOW_ALL = 0x00000000 | ||||
|  | ||||
|         const val CHAPTER_SORT_DESC = 0x00000000 | ||||
|         const val CHAPTER_SORT_ASC = 0x00000001 | ||||
|         const val CHAPTER_SORT_MASK = 0x00000001 | ||||
|  | ||||
|         const val CHAPTER_SHOW_UNREAD = 0x00000002 | ||||
|         const val CHAPTER_SHOW_READ = 0x00000004 | ||||
|         const val CHAPTER_READ_MASK = 0x00000006 | ||||
|  | ||||
|         const val CHAPTER_SHOW_DOWNLOADED = 0x00000008 | ||||
|         const val CHAPTER_SHOW_NOT_DOWNLOADED = 0x00000010 | ||||
|         const val CHAPTER_DOWNLOADED_MASK = 0x00000018 | ||||
|  | ||||
|         const val CHAPTER_SHOW_BOOKMARKED = 0x00000020 | ||||
|         const val CHAPTER_SHOW_NOT_BOOKMARKED = 0x00000040 | ||||
|         const val CHAPTER_BOOKMARKED_MASK = 0x00000060 | ||||
|  | ||||
|         const val CHAPTER_SORTING_SOURCE = 0x00000000 | ||||
|         const val CHAPTER_SORTING_NUMBER = 0x00000100 | ||||
|         const val CHAPTER_SORTING_UPLOAD_DATE = 0x00000200 | ||||
|         const val CHAPTER_SORTING_MASK = 0x00000300 | ||||
|  | ||||
|         const val CHAPTER_DISPLAY_NAME = 0x00000000 | ||||
|         const val CHAPTER_DISPLAY_NUMBER = 0x00100000 | ||||
|         const val CHAPTER_DISPLAY_MASK = 0x00100000 | ||||
|  | ||||
|         fun create(source: Long): Manga = MangaImpl().apply { | ||||
|             this.source = source | ||||
|         } | ||||
|  | ||||
|         fun create(pathUrl: String, title: String, source: Long = 0): Manga = MangaImpl().apply { | ||||
|             url = pathUrl | ||||
|             this.title = title | ||||
|   | ||||
| @@ -1,30 +0,0 @@ | ||||
| package eu.kanade.tachiyomi.data.database.models | ||||
|  | ||||
| import eu.kanade.domain.category.model.Category as DomainCategory | ||||
| import eu.kanade.domain.manga.model.Manga as DomainManga | ||||
|  | ||||
| class MangaCategory { | ||||
|  | ||||
|     var id: Long? = null | ||||
|  | ||||
|     var manga_id: Long = 0 | ||||
|  | ||||
|     var category_id: Int = 0 | ||||
|  | ||||
|     companion object { | ||||
|  | ||||
|         fun create(manga: DomainManga, category: DomainCategory): MangaCategory { | ||||
|             val mc = MangaCategory() | ||||
|             mc.manga_id = manga.id | ||||
|             mc.category_id = category.id.toInt() | ||||
|             return mc | ||||
|         } | ||||
|  | ||||
|         fun create(manga: Manga, category: Category): MangaCategory { | ||||
|             val mc = MangaCategory() | ||||
|             mc.manga_id = manga.id!! | ||||
|             mc.category_id = category.id!! | ||||
|             return mc | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -24,6 +24,7 @@ import java.io.File | ||||
| import java.text.DateFormat | ||||
| import java.text.SimpleDateFormat | ||||
| import java.util.Locale | ||||
| import eu.kanade.domain.manga.model.Manga as DomainManga | ||||
| import eu.kanade.tachiyomi.data.preference.PreferenceKeys as Keys | ||||
| import eu.kanade.tachiyomi.data.preference.PreferenceValues as Values | ||||
|  | ||||
| @@ -295,17 +296,17 @@ class PreferencesHelper(val context: Context) { | ||||
|  | ||||
|     fun lastSearchQuerySearchSettings() = flowPrefs.getString("last_search_query", "") | ||||
|  | ||||
|     fun filterChapterByRead() = prefs.getInt(Keys.defaultChapterFilterByRead, Manga.SHOW_ALL) | ||||
|     fun filterChapterByRead() = prefs.getInt(Keys.defaultChapterFilterByRead, DomainManga.SHOW_ALL.toInt()) | ||||
|  | ||||
|     fun filterChapterByDownloaded() = prefs.getInt(Keys.defaultChapterFilterByDownloaded, Manga.SHOW_ALL) | ||||
|     fun filterChapterByDownloaded() = prefs.getInt(Keys.defaultChapterFilterByDownloaded, DomainManga.SHOW_ALL.toInt()) | ||||
|  | ||||
|     fun filterChapterByBookmarked() = prefs.getInt(Keys.defaultChapterFilterByBookmarked, Manga.SHOW_ALL) | ||||
|     fun filterChapterByBookmarked() = prefs.getInt(Keys.defaultChapterFilterByBookmarked, DomainManga.SHOW_ALL.toInt()) | ||||
|  | ||||
|     fun sortChapterBySourceOrNumber() = prefs.getInt(Keys.defaultChapterSortBySourceOrNumber, Manga.CHAPTER_SORTING_SOURCE) | ||||
|     fun sortChapterBySourceOrNumber() = prefs.getInt(Keys.defaultChapterSortBySourceOrNumber, DomainManga.CHAPTER_SORTING_SOURCE.toInt()) | ||||
|  | ||||
|     fun displayChapterByNameOrNumber() = prefs.getInt(Keys.defaultChapterDisplayByNameOrNumber, Manga.CHAPTER_DISPLAY_NAME) | ||||
|     fun displayChapterByNameOrNumber() = prefs.getInt(Keys.defaultChapterDisplayByNameOrNumber, DomainManga.CHAPTER_DISPLAY_NAME.toInt()) | ||||
|  | ||||
|     fun sortChapterByAscendingOrDescending() = prefs.getInt(Keys.defaultChapterSortByAscendingOrDescending, Manga.CHAPTER_SORT_DESC) | ||||
|     fun sortChapterByAscendingOrDescending() = prefs.getInt(Keys.defaultChapterSortByAscendingOrDescending, DomainManga.CHAPTER_SORT_DESC.toInt()) | ||||
|  | ||||
|     fun incognitoMode() = flowPrefs.getBoolean("incognito_mode", false) | ||||
|  | ||||
| @@ -329,7 +330,7 @@ class PreferencesHelper(val context: Context) { | ||||
|             putInt(Keys.defaultChapterFilterByBookmarked, manga.bookmarkedFilter) | ||||
|             putInt(Keys.defaultChapterSortBySourceOrNumber, manga.sorting) | ||||
|             putInt(Keys.defaultChapterDisplayByNameOrNumber, manga.displayMode) | ||||
|             putInt(Keys.defaultChapterSortByAscendingOrDescending, if (manga.sortDescending()) Manga.CHAPTER_SORT_DESC else Manga.CHAPTER_SORT_ASC) | ||||
|             putInt(Keys.defaultChapterSortByAscendingOrDescending, if (manga.sortDescending()) DomainManga.CHAPTER_SORT_DESC.toInt() else DomainManga.CHAPTER_SORT_ASC.toInt()) | ||||
|         } | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -1,10 +1,10 @@ | ||||
| package eu.kanade.tachiyomi.ui.browse.migration | ||||
|  | ||||
| import eu.kanade.domain.manga.model.Manga | ||||
| import eu.kanade.domain.manga.model.hasCustomCover | ||||
| import eu.kanade.domain.track.interactor.GetTracks | ||||
| import eu.kanade.tachiyomi.R | ||||
| import eu.kanade.tachiyomi.data.cache.CoverCache | ||||
| import eu.kanade.tachiyomi.data.database.models.Manga | ||||
| import eu.kanade.tachiyomi.util.hasCustomCover | ||||
| import kotlinx.coroutines.runBlocking | ||||
| import uy.kohesive.injekt.Injekt | ||||
| import uy.kohesive.injekt.api.get | ||||
| @@ -49,7 +49,7 @@ object MigrationFlags { | ||||
|     fun titles(manga: Manga?): Array<Int> { | ||||
|         val titles = arrayOf(R.string.chapters, R.string.categories).toMutableList() | ||||
|         if (manga != null) { | ||||
|             if (runBlocking { getTracks.await(manga.id!!) }.isNotEmpty()) { | ||||
|             if (runBlocking { getTracks.await(manga.id) }.isNotEmpty()) { | ||||
|                 titles.add(R.string.track) | ||||
|             } | ||||
|  | ||||
|   | ||||
| @@ -109,7 +109,7 @@ class SearchController( | ||||
|         override fun onCreateDialog(savedViewState: Bundle?): Dialog { | ||||
|             val prefValue = preferences.migrateFlags().get() | ||||
|             val enabledFlagsPositions = MigrationFlags.getEnabledFlagsPositions(prefValue) | ||||
|             val items = MigrationFlags.titles(manga) | ||||
|             val items = MigrationFlags.titles(manga?.toDomainManga()) | ||||
|                 .map { resources?.getString(it) } | ||||
|                 .toTypedArray() | ||||
|             val selected = items | ||||
|   | ||||
| @@ -4,10 +4,10 @@ import android.app.Dialog | ||||
| import android.os.Bundle | ||||
| import com.bluelinelabs.conductor.Controller | ||||
| import com.google.android.material.dialog.MaterialAlertDialogBuilder | ||||
| import eu.kanade.domain.manga.model.Manga | ||||
| import eu.kanade.domain.manga.model.isLocal | ||||
| import eu.kanade.tachiyomi.R | ||||
| import eu.kanade.tachiyomi.data.database.models.Manga | ||||
| import eu.kanade.tachiyomi.ui.base.controller.DialogController | ||||
| import eu.kanade.tachiyomi.util.isLocal | ||||
|  | ||||
| class DeleteLibraryMangasDialog<T>(bundle: Bundle? = null) : | ||||
|     DialogController(bundle) where T : Controller, T : DeleteLibraryMangasDialog.Listener { | ||||
|   | ||||
| @@ -18,6 +18,7 @@ import com.jakewharton.rxrelay.PublishRelay | ||||
| import eu.kanade.domain.category.model.Category | ||||
| import eu.kanade.domain.category.model.toDbCategory | ||||
| import eu.kanade.domain.manga.model.Manga | ||||
| import eu.kanade.domain.manga.model.toDbManga | ||||
| import eu.kanade.tachiyomi.R | ||||
| import eu.kanade.tachiyomi.data.database.models.toDomainManga | ||||
| import eu.kanade.tachiyomi.data.library.LibraryUpdateService | ||||
| @@ -586,7 +587,7 @@ class LibraryController( | ||||
|     } | ||||
|  | ||||
|     private fun showDeleteMangaDialog() { | ||||
|         DeleteLibraryMangasDialog(this, selectedMangas.toList()).showDialog(router) | ||||
|         DeleteLibraryMangasDialog(this, selectedMangas.toList().map { it.toDomainManga()!! }).showDialog(router) | ||||
|     } | ||||
|  | ||||
|     override fun updateCategoriesForMangas(mangas: List<Manga>, addCategories: List<Category>, removeCategories: List<Category>) { | ||||
| @@ -594,8 +595,8 @@ class LibraryController( | ||||
|         destroyActionModeIfNeeded() | ||||
|     } | ||||
|  | ||||
|     override fun deleteMangas(mangas: List<DbManga>, deleteFromLibrary: Boolean, deleteChapters: Boolean) { | ||||
|         presenter.removeMangas(mangas, deleteFromLibrary, deleteChapters) | ||||
|     override fun deleteMangas(mangas: List<Manga>, deleteFromLibrary: Boolean, deleteChapters: Boolean) { | ||||
|         presenter.removeMangas(mangas.map { it.toDbManga() }, deleteFromLibrary, deleteChapters) | ||||
|         destroyActionModeIfNeeded() | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -15,9 +15,11 @@ import eu.kanade.domain.manga.interactor.GetLibraryManga | ||||
| import eu.kanade.domain.manga.interactor.UpdateManga | ||||
| import eu.kanade.domain.manga.model.Manga | ||||
| import eu.kanade.domain.manga.model.MangaUpdate | ||||
| import eu.kanade.domain.manga.model.isLocal | ||||
| import eu.kanade.domain.track.interactor.GetTracks | ||||
| import eu.kanade.tachiyomi.data.cache.CoverCache | ||||
| import eu.kanade.tachiyomi.data.database.models.Chapter | ||||
| import eu.kanade.tachiyomi.data.database.models.toDomainManga | ||||
| import eu.kanade.tachiyomi.data.download.DownloadManager | ||||
| import eu.kanade.tachiyomi.data.preference.PreferencesHelper | ||||
| import eu.kanade.tachiyomi.data.track.TrackManager | ||||
| @@ -27,7 +29,6 @@ import eu.kanade.tachiyomi.source.online.HttpSource | ||||
| import eu.kanade.tachiyomi.ui.base.presenter.BasePresenter | ||||
| import eu.kanade.tachiyomi.ui.library.setting.SortDirectionSetting | ||||
| import eu.kanade.tachiyomi.ui.library.setting.SortModeSetting | ||||
| import eu.kanade.tachiyomi.util.isLocal | ||||
| import eu.kanade.tachiyomi.util.lang.combineLatest | ||||
| import eu.kanade.tachiyomi.util.lang.isNullOrUnsubscribed | ||||
| import eu.kanade.tachiyomi.util.lang.launchIO | ||||
| @@ -150,7 +151,7 @@ class LibraryPresenter( | ||||
|         val filterFnDownloaded: (LibraryItem) -> Boolean = downloaded@{ item -> | ||||
|             if (!downloadedOnly && filterDownloaded == State.IGNORE.value) return@downloaded true | ||||
|             val isDownloaded = when { | ||||
|                 item.manga.isLocal() -> true | ||||
|                 item.manga.toDomainManga()!!.isLocal() -> true | ||||
|                 item.downloadCount != -1 -> item.downloadCount > 0 | ||||
|                 else -> downloadManager.getDownloadCount(item.manga) > 0 | ||||
|             } | ||||
| @@ -248,7 +249,7 @@ class LibraryPresenter( | ||||
|                 } | ||||
|  | ||||
|                 item.isLocal = if (showLocalBadges) { | ||||
|                     item.manga.isLocal() | ||||
|                     item.manga.toDomainManga()!!.isLocal() | ||||
|                 } else { | ||||
|                     // Hide / Unset local badge if not enabled | ||||
|                     false | ||||
|   | ||||
| @@ -63,6 +63,7 @@ import uy.kohesive.injekt.api.get | ||||
| import uy.kohesive.injekt.injectLazy | ||||
| import java.util.Date | ||||
| import java.util.concurrent.TimeUnit | ||||
| import eu.kanade.domain.manga.model.Manga as DomainManga | ||||
|  | ||||
| /** | ||||
|  * Presenter used by the activity to perform background operations. | ||||
| @@ -136,12 +137,12 @@ class ReaderPresenter( | ||||
|                     when { | ||||
|                         preferences.skipRead() && it.read -> true | ||||
|                         preferences.skipFiltered() -> { | ||||
|                             (manga.readFilter == Manga.CHAPTER_SHOW_READ && !it.read) || | ||||
|                                 (manga.readFilter == Manga.CHAPTER_SHOW_UNREAD && it.read) || | ||||
|                                 (manga.downloadedFilter == Manga.CHAPTER_SHOW_DOWNLOADED && !downloadManager.isChapterDownloaded(it.name, it.scanlator, manga.title, manga.source)) || | ||||
|                                 (manga.downloadedFilter == Manga.CHAPTER_SHOW_NOT_DOWNLOADED && downloadManager.isChapterDownloaded(it.name, it.scanlator, manga.title, manga.source)) || | ||||
|                                 (manga.bookmarkedFilter == Manga.CHAPTER_SHOW_BOOKMARKED && !it.bookmark) || | ||||
|                                 (manga.bookmarkedFilter == Manga.CHAPTER_SHOW_NOT_BOOKMARKED && it.bookmark) | ||||
|                             (manga.readFilter == DomainManga.CHAPTER_SHOW_READ.toInt() && !it.read) || | ||||
|                                 (manga.readFilter == DomainManga.CHAPTER_SHOW_UNREAD.toInt() && it.read) || | ||||
|                                 (manga.downloadedFilter == DomainManga.CHAPTER_SHOW_DOWNLOADED.toInt() && !downloadManager.isChapterDownloaded(it.name, it.scanlator, manga.title, manga.source)) || | ||||
|                                 (manga.downloadedFilter == DomainManga.CHAPTER_SHOW_NOT_DOWNLOADED.toInt() && downloadManager.isChapterDownloaded(it.name, it.scanlator, manga.title, manga.source)) || | ||||
|                                 (manga.bookmarkedFilter == DomainManga.CHAPTER_SHOW_BOOKMARKED.toInt() && !it.bookmark) || | ||||
|                                 (manga.bookmarkedFilter == DomainManga.CHAPTER_SHOW_NOT_BOOKMARKED.toInt() && it.bookmark) | ||||
|                         } | ||||
|                         else -> false | ||||
|                     } | ||||
| @@ -157,14 +158,14 @@ class ReaderPresenter( | ||||
|         } | ||||
|  | ||||
|         chaptersForReader | ||||
|             .sortedWith(getChapterSort(manga.toDomainManga()!!, sortDescending = false)) | ||||
|             .map { it.toDbChapter() } | ||||
|             .sortedWith(getChapterSort(manga, sortDescending = false)) | ||||
|             .map(::ReaderChapter) | ||||
|     } | ||||
|  | ||||
|     private var hasTrackers: Boolean = false | ||||
|     private val checkTrackers: (Manga) -> Unit = { manga -> | ||||
|         val tracks = runBlocking { getTracks.await(manga.id!!) } | ||||
|     private val checkTrackers: (DomainManga) -> Unit = { manga -> | ||||
|         val tracks = runBlocking { getTracks.await(manga.id) } | ||||
|         hasTrackers = tracks.isNotEmpty() | ||||
|     } | ||||
|  | ||||
| @@ -262,7 +263,7 @@ class ReaderPresenter( | ||||
|         this.manga = manga | ||||
|         if (chapterId == -1L) chapterId = initialChapterId | ||||
|  | ||||
|         checkTrackers(manga) | ||||
|         checkTrackers(manga.toDomainManga()!!) | ||||
|  | ||||
|         val context = Injekt.get<Application>() | ||||
|         val source = sourceManager.getOrStub(manga.source) | ||||
|   | ||||
| @@ -2,10 +2,12 @@ package eu.kanade.tachiyomi.util | ||||
|  | ||||
| import android.content.Context | ||||
| import eu.kanade.domain.manga.interactor.UpdateManga | ||||
| import eu.kanade.domain.manga.model.hasCustomCover | ||||
| import eu.kanade.domain.manga.model.isLocal | ||||
| import eu.kanade.domain.manga.model.toDbManga | ||||
| import eu.kanade.tachiyomi.data.cache.CoverCache | ||||
| import eu.kanade.tachiyomi.data.database.models.Manga | ||||
| import eu.kanade.tachiyomi.data.database.models.toDomainManga | ||||
| import eu.kanade.tachiyomi.data.preference.PreferencesHelper | ||||
| import eu.kanade.tachiyomi.source.LocalSource | ||||
| import eu.kanade.tachiyomi.source.model.SManga | ||||
| @@ -15,8 +17,6 @@ import java.io.InputStream | ||||
| import java.util.Date | ||||
| import eu.kanade.domain.manga.model.Manga as DomainManga | ||||
|  | ||||
| fun Manga.isLocal() = source == LocalSource.ID | ||||
|  | ||||
| /** | ||||
|  * Call before updating [Manga.thumbnail_url] to ensure old cover can be cleared from cache | ||||
|  */ | ||||
| @@ -30,10 +30,10 @@ fun Manga.prepUpdateCover(coverCache: CoverCache, remoteManga: SManga, refreshSa | ||||
|     if (!refreshSameUrl && thumbnail_url == newUrl) return | ||||
|  | ||||
|     when { | ||||
|         isLocal() -> { | ||||
|         toDomainManga()!!.isLocal() -> { | ||||
|             cover_last_modified = Date().time | ||||
|         } | ||||
|         hasCustomCover(coverCache) -> { | ||||
|         toDomainManga()!!.hasCustomCover(coverCache) -> { | ||||
|             coverCache.deleteFromCache(this, false) | ||||
|         } | ||||
|         else -> { | ||||
| @@ -43,12 +43,8 @@ fun Manga.prepUpdateCover(coverCache: CoverCache, remoteManga: SManga, refreshSa | ||||
|     } | ||||
| } | ||||
|  | ||||
| fun Manga.hasCustomCover(coverCache: CoverCache = Injekt.get()): Boolean { | ||||
|     return coverCache.getCustomCoverFile(id).exists() | ||||
| } | ||||
|  | ||||
| fun Manga.removeCovers(coverCache: CoverCache = Injekt.get()): Int { | ||||
|     if (isLocal()) return 0 | ||||
|     if (toDomainManga()!!.isLocal()) return 0 | ||||
|  | ||||
|     cover_last_modified = Date().time | ||||
|     return coverCache.deleteFromCache(this, true) | ||||
|   | ||||
| @@ -1,50 +1,22 @@ | ||||
| package eu.kanade.tachiyomi.util.chapter | ||||
|  | ||||
| import eu.kanade.tachiyomi.data.database.models.Chapter | ||||
| import eu.kanade.tachiyomi.data.database.models.Manga | ||||
| import eu.kanade.tachiyomi.util.lang.compareToCaseInsensitiveNaturalOrder | ||||
| import eu.kanade.domain.chapter.model.Chapter as DomainChapter | ||||
| import eu.kanade.domain.manga.model.Manga as DomainManga | ||||
| import eu.kanade.domain.chapter.model.Chapter | ||||
| import eu.kanade.domain.manga.model.Manga | ||||
|  | ||||
| fun getChapterSort(manga: Manga, sortDescending: Boolean = manga.sortDescending()): (Chapter, Chapter) -> Int { | ||||
|     return when (manga.sorting) { | ||||
|         Manga.CHAPTER_SORTING_SOURCE -> when (sortDescending) { | ||||
|             true -> { c1, c2 -> c1.source_order.compareTo(c2.source_order) } | ||||
|             false -> { c1, c2 -> c2.source_order.compareTo(c1.source_order) } | ||||
|             true -> { c1, c2 -> c1.sourceOrder.compareTo(c2.sourceOrder) } | ||||
|             false -> { c1, c2 -> c2.sourceOrder.compareTo(c1.sourceOrder) } | ||||
|         } | ||||
|         Manga.CHAPTER_SORTING_NUMBER -> when (sortDescending) { | ||||
|             true -> { c1, c2 -> c2.chapter_number.compareTo(c1.chapter_number) } | ||||
|             false -> { c1, c2 -> c1.chapter_number.compareTo(c2.chapter_number) } | ||||
|             true -> { c1, c2 -> c2.chapterNumber.compareTo(c1.chapterNumber) } | ||||
|             false -> { c1, c2 -> c1.chapterNumber.compareTo(c2.chapterNumber) } | ||||
|         } | ||||
|         Manga.CHAPTER_SORTING_UPLOAD_DATE -> when (sortDescending) { | ||||
|             true -> { c1, c2 -> c2.date_upload.compareTo(c1.date_upload) } | ||||
|             false -> { c1, c2 -> c1.date_upload.compareTo(c2.date_upload) } | ||||
|             true -> { c1, c2 -> c2.dateUpload.compareTo(c1.dateUpload) } | ||||
|             false -> { c1, c2 -> c1.dateUpload.compareTo(c2.dateUpload) } | ||||
|         } | ||||
|         else -> throw NotImplementedError("Invalid chapter sorting method: ${manga.sorting}") | ||||
|     } | ||||
| } | ||||
|  | ||||
| fun getChapterSort( | ||||
|     manga: DomainManga, | ||||
|     sortDescending: Boolean = manga.sortDescending(), | ||||
| ): (DomainChapter, DomainChapter) -> Int { | ||||
|     return when (manga.sorting) { | ||||
|         DomainManga.CHAPTER_SORTING_SOURCE -> when (sortDescending) { | ||||
|             true -> { c1, c2 -> c1.sourceOrder.compareTo(c2.sourceOrder) } | ||||
|             false -> { c1, c2 -> c2.sourceOrder.compareTo(c1.sourceOrder) } | ||||
|         } | ||||
|         DomainManga.CHAPTER_SORTING_NUMBER -> when (sortDescending) { | ||||
|             true -> { c1, c2 -> | ||||
|                 c2.chapterNumber.toString().compareToCaseInsensitiveNaturalOrder(c1.chapterNumber.toString()) | ||||
|             } | ||||
|             false -> { c1, c2 -> | ||||
|                 c1.chapterNumber.toString().compareToCaseInsensitiveNaturalOrder(c2.chapterNumber.toString()) | ||||
|             } | ||||
|         } | ||||
|         DomainManga.CHAPTER_SORTING_UPLOAD_DATE -> when (sortDescending) { | ||||
|             true -> { c1, c2 -> c2.dateUpload.compareTo(c1.dateUpload) } | ||||
|             false -> { c1, c2 -> c1.dateUpload.compareTo(c2.dateUpload) } | ||||
|         } | ||||
|         else -> throw NotImplementedError("Unimplemented sorting method") | ||||
|     } | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user