diff --git a/app/src/main/java/eu/kanade/domain/manga/model/Manga.kt b/app/src/main/java/eu/kanade/domain/manga/model/Manga.kt index b05d132a3..9c9d3d12a 100644 --- a/app/src/main/java/eu/kanade/domain/manga/model/Manga.kt +++ b/app/src/main/java/eu/kanade/domain/manga/model/Manga.kt @@ -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.library.CustomMangaManager import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.source.LocalSource @@ -180,8 +181,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 diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/coil/MangaCoverKeyer.kt b/app/src/main/java/eu/kanade/tachiyomi/data/coil/MangaCoverKeyer.kt index 8a0ce702e..43298c200 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/coil/MangaCoverKeyer.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/coil/MangaCoverKeyer.kt @@ -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 { 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}" diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/database/models/Manga.kt b/app/src/main/java/eu/kanade/tachiyomi/data/database/models/Manga.kt index fbb7c46a5..4dfe8965a 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/data/database/models/Manga.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/database/models/Manga.kt @@ -28,12 +28,8 @@ interface Manga : SManga { var filtered_scanlators: String? - 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? { @@ -57,24 +53,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 @@ -85,39 +81,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 diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/database/models/MangaCategory.kt b/app/src/main/java/eu/kanade/tachiyomi/data/database/models/MangaCategory.kt deleted file mode 100755 index 85e91d1d6..000000000 --- a/app/src/main/java/eu/kanade/tachiyomi/data/database/models/MangaCategory.kt +++ /dev/null @@ -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 - } - } -} diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt b/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt index 27ee27855..99318ecd5 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt @@ -27,6 +27,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 @@ -306,17 +307,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) @@ -340,7 +341,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()) } } // SY --> diff --git a/app/src/main/java/eu/kanade/tachiyomi/source/online/all/EHentai.kt b/app/src/main/java/eu/kanade/tachiyomi/source/online/all/EHentai.kt index 2d7947dbd..50e12dbb2 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/source/online/all/EHentai.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/source/online/all/EHentai.kt @@ -5,6 +5,7 @@ import android.net.Uri import androidx.compose.runtime.Composable import androidx.core.net.toUri import eu.kanade.tachiyomi.data.database.models.Manga +import eu.kanade.tachiyomi.data.database.models.MangaImpl import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.network.asObservableSuccess @@ -137,8 +138,9 @@ class EHentai( fav = FAVORITES_BORDER_HEX_COLORS.indexOf( favElement?.attr("style")?.substring(14, 17), ), - manga = Manga.create(id).apply { + manga = MangaImpl().apply { // Get title + source = this@EHentai.id title = thumbnailElement.attr("title") url = EHentaiSearchMetadata.normalizeUrl(linkElement.attr("href")) // Get image diff --git a/app/src/main/java/eu/kanade/tachiyomi/source/online/all/MergedSource.kt b/app/src/main/java/eu/kanade/tachiyomi/source/online/all/MergedSource.kt index cc94ef820..27f5188af 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/source/online/all/MergedSource.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/source/online/all/MergedSource.kt @@ -10,7 +10,7 @@ import eu.kanade.domain.manga.interactor.InsertManga import eu.kanade.domain.manga.model.toDbManga import eu.kanade.domain.manga.model.toMangaInfo import eu.kanade.tachiyomi.data.database.models.Chapter -import eu.kanade.tachiyomi.data.database.models.Manga +import eu.kanade.tachiyomi.data.database.models.MangaImpl import eu.kanade.tachiyomi.data.database.models.toDomainManga import eu.kanade.tachiyomi.data.database.models.toMangaInfo import eu.kanade.tachiyomi.data.download.DownloadManager @@ -230,8 +230,9 @@ class MergedSource : HttpSource() { var manga = getManga.await(mangaUrl, mangaSourceId) val source = sourceManager.getOrStub(manga?.source ?: mangaSourceId) if (manga == null) { - val newManga = Manga.create(mangaSourceId).apply { - url = mangaUrl + val newManga = MangaImpl().apply { + this.source = mangaSourceId + this.url = mangaUrl } newManga.copyFrom(source.getMangaDetails(newManga.toMangaInfo()).toSManga()) newManga.id = -1 diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/DeleteLibraryMangasDialog.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/DeleteLibraryMangasDialog.kt index 45a6dfbda..253add2da 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/DeleteLibraryMangasDialog.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/DeleteLibraryMangasDialog.kt @@ -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(bundle: Bundle? = null) : DialogController(bundle) where T : Controller, T : DeleteLibraryMangasDialog.Listener { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryController.kt index 76bdac3a7..ea1845641 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryController.kt @@ -679,7 +679,7 @@ class LibraryController( } private fun showDeleteMangaDialog() { - DeleteLibraryMangasDialog(this, selectedMangas.toList()).showDialog(router) + DeleteLibraryMangasDialog(this, selectedMangas.toList().map { it.toDomainManga()!! }).showDialog(router) } // SY --> @@ -707,8 +707,8 @@ class LibraryController( destroyActionModeIfNeeded() } - override fun deleteMangas(mangas: List, deleteFromLibrary: Boolean, deleteChapters: Boolean) { - presenter.removeMangas(mangas, deleteFromLibrary, deleteChapters) + override fun deleteMangas(mangas: List, deleteFromLibrary: Boolean, deleteChapters: Boolean) { + presenter.removeMangas(mangas.map { it.toDbManga() }, deleteFromLibrary, deleteChapters) destroyActionModeIfNeeded() } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt index a9099a988..cfcde0aea 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt @@ -17,11 +17,13 @@ import eu.kanade.domain.manga.interactor.GetMergedMangaById 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.manga.model.toDbManga 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.Chapter +import eu.kanade.tachiyomi.data.database.models.toDomainManga import eu.kanade.tachiyomi.data.download.DownloadManager import eu.kanade.tachiyomi.data.library.CustomMangaManager import eu.kanade.tachiyomi.data.preference.PreferencesHelper @@ -34,7 +36,6 @@ import eu.kanade.tachiyomi.source.online.all.MergedSource 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 @@ -202,7 +203,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 } @@ -337,7 +338,7 @@ class LibraryPresenter( } item.isLocal = if (showLocalBadges) { - item.manga.isLocal() + item.manga.toDomainManga()!!.isLocal() } else { // Hide / Unset local badge if not enabled false diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaPresenter.kt index e30b35938..bbe4a0e8f 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaPresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaPresenter.kt @@ -492,7 +492,7 @@ class MangaPresenter( last_update = originalManga.lastUpdate viewer_flags = originalManga.viewerFlags.toInt() chapter_flags = originalManga.chapterFlags.toInt() - sorting = DbManga.CHAPTER_SORTING_NUMBER + sorting = DomainManga.CHAPTER_SORTING_NUMBER.toInt() date_added = System.currentTimeMillis() } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderPresenter.kt index 72b59e591..997a829f6 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderPresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderPresenter.kt @@ -22,8 +22,8 @@ import eu.kanade.domain.manga.model.toDbManga import eu.kanade.domain.track.interactor.GetTracks import eu.kanade.domain.track.interactor.InsertTrack import eu.kanade.domain.track.model.toDbTrack -import eu.kanade.tachiyomi.data.database.models.Chapter import eu.kanade.tachiyomi.data.database.models.Manga +import eu.kanade.tachiyomi.data.database.models.toDomainChapter import eu.kanade.tachiyomi.data.database.models.toDomainManga import eu.kanade.tachiyomi.data.download.DownloadManager import eu.kanade.tachiyomi.data.preference.PreferencesHelper @@ -83,6 +83,8 @@ import java.text.DecimalFormat import java.text.DecimalFormatSymbols import java.util.Date import java.util.concurrent.TimeUnit +import eu.kanade.domain.chapter.model.Chapter as DomainChapter +import eu.kanade.domain.manga.model.Manga as DomainManga /** * Presenter used by the activity to perform background operations. @@ -177,11 +179,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, /* SY --> */ manga.originalTitle /* SY <-- */, manga.source)) || - (manga.downloadedFilter == Manga.CHAPTER_SHOW_NOT_DOWNLOADED && downloadManager.isChapterDownloaded(it.name, it.scanlator, /* SY --> */ manga.originalTitle /* SY <-- */, manga.source)) || - (manga.bookmarkedFilter == Manga.CHAPTER_SHOW_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) || // SY --> (filteredScanlators != null && MdUtil.getScanlators(it.scanlator).none { group -> filteredScanlators.contains(group) }) // SY <-- @@ -200,14 +203,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() } @@ -314,7 +317,7 @@ class ReaderPresenter( // SY <-- if (chapterId == -1L) chapterId = initialChapterId - checkTrackers(manga) + checkTrackers(manga.toDomainManga()!!) val context = Injekt.get() val source = sourceManager.getOrStub(manga.source) @@ -352,8 +355,8 @@ class ReaderPresenter( return chapterList.map { ReaderChapterItem( - it.chapter, - manga!!, + it.chapter.toDomainChapter()!!, + manga!!.toDomainManga()!!, it.chapter.id == currentChapter?.chapter?.id, context, preferences.dateFormat(), @@ -415,7 +418,7 @@ class ReaderPresenter( .also(::add) } - fun loadNewChapterFromDialog(chapter: Chapter) { + fun loadNewChapterFromDialog(chapter: DomainChapter) { val newChapter = chapterList.firstOrNull { it.chapter.id == chapter.id } ?: return loadAdjacent(newChapter) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/chapter/ReaderChapterAdapter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/chapter/ReaderChapterAdapter.kt index 21d6bad66..36bc0a8b4 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/chapter/ReaderChapterAdapter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/chapter/ReaderChapterAdapter.kt @@ -1,7 +1,7 @@ package eu.kanade.tachiyomi.ui.reader.chapter import eu.davidea.flexibleadapter.FlexibleAdapter -import eu.kanade.tachiyomi.data.database.models.Chapter +import eu.kanade.domain.chapter.model.Chapter class ReaderChapterAdapter( dialog: OnBookmarkClickListener, diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/chapter/ReaderChapterDialog.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/chapter/ReaderChapterDialog.kt index 76dd79dee..d61cb5c7b 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/chapter/ReaderChapterDialog.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/chapter/ReaderChapterDialog.kt @@ -5,8 +5,9 @@ import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.LinearLayoutManager import com.google.android.material.dialog.MaterialAlertDialogBuilder import eu.davidea.flexibleadapter.FlexibleAdapter +import eu.kanade.domain.chapter.model.Chapter import eu.kanade.tachiyomi.R -import eu.kanade.tachiyomi.data.database.models.Chapter +import eu.kanade.tachiyomi.data.database.models.toDomainManga import eu.kanade.tachiyomi.databinding.ReaderChaptersDialogBinding import eu.kanade.tachiyomi.ui.reader.ReaderActivity import eu.kanade.tachiyomi.ui.reader.ReaderPresenter @@ -34,9 +35,9 @@ class ReaderChapterDialog(private val activity: ReaderActivity) : ReaderChapterA adapter?.mItemClickListener = FlexibleAdapter.OnItemClickListener { _, position -> val item = adapter?.getItem(position) - if (item != null && item.id != presenter.getCurrentChapter()?.chapter?.id) { + if (item != null && item.chapter.id != presenter.getCurrentChapter()?.chapter?.id) { dialog.dismiss() - presenter.loadNewChapterFromDialog(item) + presenter.loadNewChapterFromDialog(item.chapter) } true } @@ -50,8 +51,11 @@ class ReaderChapterDialog(private val activity: ReaderActivity) : ReaderChapterA } private fun refreshList(scroll: Boolean = true) { + val chapterSort = getChapterSort(presenter.manga!!.toDomainManga()!!) val chapters = presenter.getChapters(activity) - .sortedWith(getChapterSort(presenter.manga!!)) + .sortedWith { a, b -> + chapterSort(a.chapter, b.chapter) + } adapter?.clear() adapter?.updateDataSet(chapters) @@ -69,7 +73,7 @@ class ReaderChapterDialog(private val activity: ReaderActivity) : ReaderChapterA } override fun bookmarkChapter(chapter: Chapter) { - presenter.toggleBookmark(chapter.id!!, !chapter.bookmark) + presenter.toggleBookmark(chapter.id, !chapter.bookmark) refreshList(scroll = false) } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/chapter/ReaderChapterItem.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/chapter/ReaderChapterItem.kt index a24fd2148..d6caae20c 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/chapter/ReaderChapterItem.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/chapter/ReaderChapterItem.kt @@ -9,19 +9,19 @@ import eu.davidea.flexibleadapter.FlexibleAdapter import eu.davidea.flexibleadapter.items.AbstractFlexibleItem import eu.davidea.flexibleadapter.items.IFlexible import eu.davidea.viewholders.FlexibleViewHolder +import eu.kanade.domain.chapter.model.Chapter +import eu.kanade.domain.manga.model.Manga import eu.kanade.tachiyomi.R -import eu.kanade.tachiyomi.data.database.models.Chapter -import eu.kanade.tachiyomi.data.database.models.Manga import eu.kanade.tachiyomi.databinding.ReaderChapterItemBinding import eu.kanade.tachiyomi.util.system.getResourceColor import eu.kanade.tachiyomi.util.view.setVectorCompat import java.text.DateFormat import java.text.DecimalFormat import java.util.Date +import eu.kanade.domain.manga.model.Manga.Companion as DomainManga -class ReaderChapterItem(chapter: Chapter, val manga: Manga, val isCurrent: Boolean, context: Context, val dateFormat: DateFormat, val decimalFormat: DecimalFormat) : - AbstractFlexibleItem(), - Chapter by chapter { +class ReaderChapterItem(val chapter: Chapter, val manga: Manga, val isCurrent: Boolean, context: Context, val dateFormat: DateFormat, val decimalFormat: DecimalFormat) : + AbstractFlexibleItem() { val readColor = context.getResourceColor(R.attr.colorOnSurface, 0.38f) val unreadColor = context.getResourceColor(R.attr.colorOnSurface) @@ -50,13 +50,13 @@ class ReaderChapterItem(chapter: Chapter, val manga: Manga, val isCurrent: Boole other as ReaderChapterItem - if (id != other.id) return false + if (chapter.id != other.chapter.id) return false return true } override fun hashCode(): Int { - return id.hashCode() + return chapter.id.hashCode() } inner class ViewHolder(view: View, private val adapter: ReaderChapterAdapter) : FlexibleViewHolder(view, adapter) { @@ -64,19 +64,20 @@ class ReaderChapterItem(chapter: Chapter, val manga: Manga, val isCurrent: Boole fun bind(item: ReaderChapterItem) { val manga = item.manga + val chapter = item.chapter binding.chapterTitle.text = when (manga.displayMode) { - Manga.CHAPTER_DISPLAY_NUMBER -> { - val number = item.decimalFormat.format(item.chapter_number.toDouble()) + DomainManga.CHAPTER_DISPLAY_NUMBER -> { + val number = item.decimalFormat.format(chapter.chapterNumber.toDouble()) itemView.context.getString(R.string.display_mode_chapter, number) } - else -> item.name + else -> chapter.name } // Set correct text color val chapterColor = when { - item.read -> item.readColor - item.bookmark -> item.bookmarkedColor + chapter.read -> item.readColor + chapter.bookmark -> item.bookmarkedColor else -> item.unreadColor } binding.chapterTitle.setTextColor(chapterColor) @@ -86,11 +87,11 @@ class ReaderChapterItem(chapter: Chapter, val manga: Manga, val isCurrent: Boole val descriptions = mutableListOf() - if (item.date_upload > 0) { - descriptions.add(item.dateFormat.format(Date(item.date_upload))) + if (chapter.dateUpload > 0) { + descriptions.add(item.dateFormat.format(Date(chapter.dateUpload))) } - if (!item.scanlator.isNullOrBlank()) { - descriptions.add(item.scanlator!!) + if (!chapter.scanlator.isNullOrBlank()) { + descriptions.add(chapter.scanlator) } if (descriptions.isNotEmpty()) { @@ -99,7 +100,7 @@ class ReaderChapterItem(chapter: Chapter, val manga: Manga, val isCurrent: Boole binding.chapterScanlator.text = "" } - if (item.bookmark) { + if (chapter.bookmark) { binding.bookmarkImage.setVectorCompat(R.drawable.ic_bookmark_24dp, R.attr.colorAccent) } else { binding.bookmarkImage.setVectorCompat(R.drawable.ic_bookmark_border_24dp, R.attr.colorOnSurface) @@ -113,7 +114,7 @@ class ReaderChapterItem(chapter: Chapter, val manga: Manga, val isCurrent: Boole binding.chapterScanlator.setTypeface(null, Typeface.NORMAL) } binding.bookmarkLayout.setOnClickListener { - adapter.clickListener.bookmarkChapter(item) + adapter.clickListener.bookmarkChapter(chapter) } } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/MangaExtensions.kt b/app/src/main/java/eu/kanade/tachiyomi/util/MangaExtensions.kt index b9d76ebfd..3ea103f20 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/util/MangaExtensions.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/util/MangaExtensions.kt @@ -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) diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/chapter/ChapterSorter.kt b/app/src/main/java/eu/kanade/tachiyomi/util/chapter/ChapterSorter.kt index 81f498833..43c4e949d 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/util/chapter/ChapterSorter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/util/chapter/ChapterSorter.kt @@ -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") - } -} diff --git a/app/src/main/java/exh/eh/EHentaiUpdateWorker.kt b/app/src/main/java/exh/eh/EHentaiUpdateWorker.kt index 4d92c12dd..ac9efae5d 100644 --- a/app/src/main/java/exh/eh/EHentaiUpdateWorker.kt +++ b/app/src/main/java/exh/eh/EHentaiUpdateWorker.kt @@ -11,7 +11,6 @@ import androidx.work.WorkManager import androidx.work.WorkerParameters import com.elvishew.xlog.Logger import com.elvishew.xlog.XLog -import eu.kanade.data.DatabaseHandler import eu.kanade.domain.chapter.interactor.GetChapterByMangaId import eu.kanade.domain.chapter.interactor.SyncChaptersWithSource import eu.kanade.domain.chapter.model.Chapter