More domain model usage
(cherry picked from commit b3dd8b735581ee7ea1ef0ee6dde99507f329e346) # Conflicts: # app/src/main/java/eu/kanade/domain/manga/model/Manga.kt # app/src/main/java/eu/kanade/tachiyomi/data/database/models/Manga.kt # app/src/main/java/eu/kanade/tachiyomi/data/database/models/MangaCategory.kt # app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/MigrationFlags.kt # app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/search/SearchController.kt # app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt # app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderPresenter.kt
This commit is contained in:
parent
0ad6e00bca
commit
268911a7c9
@ -2,6 +2,7 @@ package eu.kanade.domain.manga.model
|
|||||||
|
|
||||||
import eu.kanade.data.listOfStringsAdapter
|
import eu.kanade.data.listOfStringsAdapter
|
||||||
import eu.kanade.tachiyomi.data.cache.CoverCache
|
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.library.CustomMangaManager
|
||||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||||
import eu.kanade.tachiyomi.source.LocalSource
|
import eu.kanade.tachiyomi.source.LocalSource
|
||||||
@ -180,8 +181,9 @@ fun TriStateFilter.toTriStateGroupState(): ExtendedNavigationView.Item.TriStateG
|
|||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Remove when all deps are migrated
|
// 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.id = id
|
||||||
|
it.source = source
|
||||||
it.favorite = favorite
|
it.favorite = favorite
|
||||||
it.last_update = lastUpdate
|
it.last_update = lastUpdate
|
||||||
it.date_added = dateAdded
|
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.domain.manga.model.hasCustomCover
|
||||||
import eu.kanade.tachiyomi.data.cache.CoverCache
|
import eu.kanade.tachiyomi.data.cache.CoverCache
|
||||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
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.Injekt
|
||||||
import uy.kohesive.injekt.api.get
|
import uy.kohesive.injekt.api.get
|
||||||
import eu.kanade.domain.manga.model.Manga as DomainManga
|
import eu.kanade.domain.manga.model.Manga as DomainManga
|
||||||
|
|
||||||
class MangaKeyer : Keyer<Manga> {
|
class MangaKeyer : Keyer<Manga> {
|
||||||
override fun key(data: Manga, options: Options): String {
|
override fun key(data: Manga, options: Options): String {
|
||||||
return if (data.hasCustomCover()) {
|
return if (data.toDomainManga()!!.hasCustomCover()) {
|
||||||
"${data.id};${data.cover_last_modified}"
|
"${data.id};${data.cover_last_modified}"
|
||||||
} else {
|
} else {
|
||||||
"${data.thumbnail_url};${data.cover_last_modified}"
|
"${data.thumbnail_url};${data.cover_last_modified}"
|
||||||
|
@ -28,12 +28,8 @@ interface Manga : SManga {
|
|||||||
|
|
||||||
var filtered_scanlators: String?
|
var filtered_scanlators: String?
|
||||||
|
|
||||||
fun setChapterOrder(order: Int) {
|
|
||||||
setChapterFlags(order, CHAPTER_SORT_MASK)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun sortDescending(): Boolean {
|
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>? {
|
fun getGenres(): List<String>? {
|
||||||
@ -57,24 +53,24 @@ interface Manga : SManga {
|
|||||||
|
|
||||||
// Used to display the chapter's title one way or another
|
// Used to display the chapter's title one way or another
|
||||||
var displayMode: Int
|
var displayMode: Int
|
||||||
get() = chapter_flags and CHAPTER_DISPLAY_MASK
|
get() = chapter_flags and DomainManga.CHAPTER_DISPLAY_MASK.toInt()
|
||||||
set(mode) = setChapterFlags(mode, CHAPTER_DISPLAY_MASK)
|
set(mode) = setChapterFlags(mode, DomainManga.CHAPTER_DISPLAY_MASK.toInt())
|
||||||
|
|
||||||
var readFilter: Int
|
var readFilter: Int
|
||||||
get() = chapter_flags and CHAPTER_READ_MASK
|
get() = chapter_flags and DomainManga.CHAPTER_UNREAD_MASK.toInt()
|
||||||
set(filter) = setChapterFlags(filter, CHAPTER_READ_MASK)
|
set(filter) = setChapterFlags(filter, DomainManga.CHAPTER_UNREAD_MASK.toInt())
|
||||||
|
|
||||||
var downloadedFilter: Int
|
var downloadedFilter: Int
|
||||||
get() = chapter_flags and CHAPTER_DOWNLOADED_MASK
|
get() = chapter_flags and DomainManga.CHAPTER_DOWNLOADED_MASK.toInt()
|
||||||
set(filter) = setChapterFlags(filter, CHAPTER_DOWNLOADED_MASK)
|
set(filter) = setChapterFlags(filter, DomainManga.CHAPTER_DOWNLOADED_MASK.toInt())
|
||||||
|
|
||||||
var bookmarkedFilter: Int
|
var bookmarkedFilter: Int
|
||||||
get() = chapter_flags and CHAPTER_BOOKMARKED_MASK
|
get() = chapter_flags and DomainManga.CHAPTER_BOOKMARKED_MASK.toInt()
|
||||||
set(filter) = setChapterFlags(filter, CHAPTER_BOOKMARKED_MASK)
|
set(filter) = setChapterFlags(filter, DomainManga.CHAPTER_BOOKMARKED_MASK.toInt())
|
||||||
|
|
||||||
var sorting: Int
|
var sorting: Int
|
||||||
get() = chapter_flags and CHAPTER_SORTING_MASK
|
get() = chapter_flags and DomainManga.CHAPTER_SORTING_MASK.toInt()
|
||||||
set(sort) = setChapterFlags(sort, CHAPTER_SORTING_MASK)
|
set(sort) = setChapterFlags(sort, DomainManga.CHAPTER_SORTING_MASK.toInt())
|
||||||
|
|
||||||
var readingModeType: Int
|
var readingModeType: Int
|
||||||
get() = viewer_flags and ReadingModeType.MASK
|
get() = viewer_flags and ReadingModeType.MASK
|
||||||
@ -85,39 +81,6 @@ interface Manga : SManga {
|
|||||||
set(rotationType) = setViewerFlags(rotationType, OrientationType.MASK)
|
set(rotationType) = setViewerFlags(rotationType, OrientationType.MASK)
|
||||||
|
|
||||||
companion object {
|
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 {
|
fun create(pathUrl: String, title: String, source: Long = 0): Manga = MangaImpl().apply {
|
||||||
url = pathUrl
|
url = pathUrl
|
||||||
this.title = title
|
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
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -27,6 +27,7 @@ import java.io.File
|
|||||||
import java.text.DateFormat
|
import java.text.DateFormat
|
||||||
import java.text.SimpleDateFormat
|
import java.text.SimpleDateFormat
|
||||||
import java.util.Locale
|
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.PreferenceKeys as Keys
|
||||||
import eu.kanade.tachiyomi.data.preference.PreferenceValues as Values
|
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 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)
|
fun incognitoMode() = flowPrefs.getBoolean("incognito_mode", false)
|
||||||
|
|
||||||
@ -340,7 +341,7 @@ class PreferencesHelper(val context: Context) {
|
|||||||
putInt(Keys.defaultChapterFilterByBookmarked, manga.bookmarkedFilter)
|
putInt(Keys.defaultChapterFilterByBookmarked, manga.bookmarkedFilter)
|
||||||
putInt(Keys.defaultChapterSortBySourceOrNumber, manga.sorting)
|
putInt(Keys.defaultChapterSortBySourceOrNumber, manga.sorting)
|
||||||
putInt(Keys.defaultChapterDisplayByNameOrNumber, manga.displayMode)
|
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 -->
|
// SY -->
|
||||||
|
@ -5,6 +5,7 @@ import android.net.Uri
|
|||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.core.net.toUri
|
import androidx.core.net.toUri
|
||||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
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.data.preference.PreferencesHelper
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.network.asObservableSuccess
|
import eu.kanade.tachiyomi.network.asObservableSuccess
|
||||||
@ -137,8 +138,9 @@ class EHentai(
|
|||||||
fav = FAVORITES_BORDER_HEX_COLORS.indexOf(
|
fav = FAVORITES_BORDER_HEX_COLORS.indexOf(
|
||||||
favElement?.attr("style")?.substring(14, 17),
|
favElement?.attr("style")?.substring(14, 17),
|
||||||
),
|
),
|
||||||
manga = Manga.create(id).apply {
|
manga = MangaImpl().apply {
|
||||||
// Get title
|
// Get title
|
||||||
|
source = this@EHentai.id
|
||||||
title = thumbnailElement.attr("title")
|
title = thumbnailElement.attr("title")
|
||||||
url = EHentaiSearchMetadata.normalizeUrl(linkElement.attr("href"))
|
url = EHentaiSearchMetadata.normalizeUrl(linkElement.attr("href"))
|
||||||
// Get image
|
// Get image
|
||||||
|
@ -10,7 +10,7 @@ import eu.kanade.domain.manga.interactor.InsertManga
|
|||||||
import eu.kanade.domain.manga.model.toDbManga
|
import eu.kanade.domain.manga.model.toDbManga
|
||||||
import eu.kanade.domain.manga.model.toMangaInfo
|
import eu.kanade.domain.manga.model.toMangaInfo
|
||||||
import eu.kanade.tachiyomi.data.database.models.Chapter
|
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.toDomainManga
|
||||||
import eu.kanade.tachiyomi.data.database.models.toMangaInfo
|
import eu.kanade.tachiyomi.data.database.models.toMangaInfo
|
||||||
import eu.kanade.tachiyomi.data.download.DownloadManager
|
import eu.kanade.tachiyomi.data.download.DownloadManager
|
||||||
@ -230,8 +230,9 @@ class MergedSource : HttpSource() {
|
|||||||
var manga = getManga.await(mangaUrl, mangaSourceId)
|
var manga = getManga.await(mangaUrl, mangaSourceId)
|
||||||
val source = sourceManager.getOrStub(manga?.source ?: mangaSourceId)
|
val source = sourceManager.getOrStub(manga?.source ?: mangaSourceId)
|
||||||
if (manga == null) {
|
if (manga == null) {
|
||||||
val newManga = Manga.create(mangaSourceId).apply {
|
val newManga = MangaImpl().apply {
|
||||||
url = mangaUrl
|
this.source = mangaSourceId
|
||||||
|
this.url = mangaUrl
|
||||||
}
|
}
|
||||||
newManga.copyFrom(source.getMangaDetails(newManga.toMangaInfo()).toSManga())
|
newManga.copyFrom(source.getMangaDetails(newManga.toMangaInfo()).toSManga())
|
||||||
newManga.id = -1
|
newManga.id = -1
|
||||||
|
@ -4,10 +4,10 @@ import android.app.Dialog
|
|||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import com.bluelinelabs.conductor.Controller
|
import com.bluelinelabs.conductor.Controller
|
||||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
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.R
|
||||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
|
||||||
import eu.kanade.tachiyomi.ui.base.controller.DialogController
|
import eu.kanade.tachiyomi.ui.base.controller.DialogController
|
||||||
import eu.kanade.tachiyomi.util.isLocal
|
|
||||||
|
|
||||||
class DeleteLibraryMangasDialog<T>(bundle: Bundle? = null) :
|
class DeleteLibraryMangasDialog<T>(bundle: Bundle? = null) :
|
||||||
DialogController(bundle) where T : Controller, T : DeleteLibraryMangasDialog.Listener {
|
DialogController(bundle) where T : Controller, T : DeleteLibraryMangasDialog.Listener {
|
||||||
|
@ -679,7 +679,7 @@ class LibraryController(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun showDeleteMangaDialog() {
|
private fun showDeleteMangaDialog() {
|
||||||
DeleteLibraryMangasDialog(this, selectedMangas.toList()).showDialog(router)
|
DeleteLibraryMangasDialog(this, selectedMangas.toList().map { it.toDomainManga()!! }).showDialog(router)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SY -->
|
// SY -->
|
||||||
@ -707,8 +707,8 @@ class LibraryController(
|
|||||||
destroyActionModeIfNeeded()
|
destroyActionModeIfNeeded()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun deleteMangas(mangas: List<DbManga>, deleteFromLibrary: Boolean, deleteChapters: Boolean) {
|
override fun deleteMangas(mangas: List<Manga>, deleteFromLibrary: Boolean, deleteChapters: Boolean) {
|
||||||
presenter.removeMangas(mangas, deleteFromLibrary, deleteChapters)
|
presenter.removeMangas(mangas.map { it.toDbManga() }, deleteFromLibrary, deleteChapters)
|
||||||
destroyActionModeIfNeeded()
|
destroyActionModeIfNeeded()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -17,11 +17,13 @@ import eu.kanade.domain.manga.interactor.GetMergedMangaById
|
|||||||
import eu.kanade.domain.manga.interactor.UpdateManga
|
import eu.kanade.domain.manga.interactor.UpdateManga
|
||||||
import eu.kanade.domain.manga.model.Manga
|
import eu.kanade.domain.manga.model.Manga
|
||||||
import eu.kanade.domain.manga.model.MangaUpdate
|
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.manga.model.toDbManga
|
||||||
import eu.kanade.domain.track.interactor.GetTracks
|
import eu.kanade.domain.track.interactor.GetTracks
|
||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.R
|
||||||
import eu.kanade.tachiyomi.data.cache.CoverCache
|
import eu.kanade.tachiyomi.data.cache.CoverCache
|
||||||
import eu.kanade.tachiyomi.data.database.models.Chapter
|
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.download.DownloadManager
|
||||||
import eu.kanade.tachiyomi.data.library.CustomMangaManager
|
import eu.kanade.tachiyomi.data.library.CustomMangaManager
|
||||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
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.base.presenter.BasePresenter
|
||||||
import eu.kanade.tachiyomi.ui.library.setting.SortDirectionSetting
|
import eu.kanade.tachiyomi.ui.library.setting.SortDirectionSetting
|
||||||
import eu.kanade.tachiyomi.ui.library.setting.SortModeSetting
|
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.combineLatest
|
||||||
import eu.kanade.tachiyomi.util.lang.isNullOrUnsubscribed
|
import eu.kanade.tachiyomi.util.lang.isNullOrUnsubscribed
|
||||||
import eu.kanade.tachiyomi.util.lang.launchIO
|
import eu.kanade.tachiyomi.util.lang.launchIO
|
||||||
@ -202,7 +203,7 @@ class LibraryPresenter(
|
|||||||
val filterFnDownloaded: (LibraryItem) -> Boolean = downloaded@{ item ->
|
val filterFnDownloaded: (LibraryItem) -> Boolean = downloaded@{ item ->
|
||||||
if (!downloadedOnly && filterDownloaded == State.IGNORE.value) return@downloaded true
|
if (!downloadedOnly && filterDownloaded == State.IGNORE.value) return@downloaded true
|
||||||
val isDownloaded = when {
|
val isDownloaded = when {
|
||||||
item.manga.isLocal() -> true
|
item.manga.toDomainManga()!!.isLocal() -> true
|
||||||
item.downloadCount != -1 -> item.downloadCount > 0
|
item.downloadCount != -1 -> item.downloadCount > 0
|
||||||
else -> downloadManager.getDownloadCount(item.manga) > 0
|
else -> downloadManager.getDownloadCount(item.manga) > 0
|
||||||
}
|
}
|
||||||
@ -337,7 +338,7 @@ class LibraryPresenter(
|
|||||||
}
|
}
|
||||||
|
|
||||||
item.isLocal = if (showLocalBadges) {
|
item.isLocal = if (showLocalBadges) {
|
||||||
item.manga.isLocal()
|
item.manga.toDomainManga()!!.isLocal()
|
||||||
} else {
|
} else {
|
||||||
// Hide / Unset local badge if not enabled
|
// Hide / Unset local badge if not enabled
|
||||||
false
|
false
|
||||||
|
@ -492,7 +492,7 @@ class MangaPresenter(
|
|||||||
last_update = originalManga.lastUpdate
|
last_update = originalManga.lastUpdate
|
||||||
viewer_flags = originalManga.viewerFlags.toInt()
|
viewer_flags = originalManga.viewerFlags.toInt()
|
||||||
chapter_flags = originalManga.chapterFlags.toInt()
|
chapter_flags = originalManga.chapterFlags.toInt()
|
||||||
sorting = DbManga.CHAPTER_SORTING_NUMBER
|
sorting = DomainManga.CHAPTER_SORTING_NUMBER.toInt()
|
||||||
date_added = System.currentTimeMillis()
|
date_added = System.currentTimeMillis()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,8 +22,8 @@ import eu.kanade.domain.manga.model.toDbManga
|
|||||||
import eu.kanade.domain.track.interactor.GetTracks
|
import eu.kanade.domain.track.interactor.GetTracks
|
||||||
import eu.kanade.domain.track.interactor.InsertTrack
|
import eu.kanade.domain.track.interactor.InsertTrack
|
||||||
import eu.kanade.domain.track.model.toDbTrack
|
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.Manga
|
||||||
|
import eu.kanade.tachiyomi.data.database.models.toDomainChapter
|
||||||
import eu.kanade.tachiyomi.data.database.models.toDomainManga
|
import eu.kanade.tachiyomi.data.database.models.toDomainManga
|
||||||
import eu.kanade.tachiyomi.data.download.DownloadManager
|
import eu.kanade.tachiyomi.data.download.DownloadManager
|
||||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||||
@ -83,6 +83,8 @@ import java.text.DecimalFormat
|
|||||||
import java.text.DecimalFormatSymbols
|
import java.text.DecimalFormatSymbols
|
||||||
import java.util.Date
|
import java.util.Date
|
||||||
import java.util.concurrent.TimeUnit
|
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.
|
* Presenter used by the activity to perform background operations.
|
||||||
@ -177,11 +179,12 @@ class ReaderPresenter(
|
|||||||
when {
|
when {
|
||||||
preferences.skipRead() && it.read -> true
|
preferences.skipRead() && it.read -> true
|
||||||
preferences.skipFiltered() -> {
|
preferences.skipFiltered() -> {
|
||||||
(manga.readFilter == Manga.CHAPTER_SHOW_READ && !it.read) ||
|
(manga.readFilter == DomainManga.CHAPTER_SHOW_READ.toInt() && !it.read) ||
|
||||||
(manga.readFilter == Manga.CHAPTER_SHOW_UNREAD && it.read) ||
|
(manga.readFilter == DomainManga.CHAPTER_SHOW_UNREAD.toInt() && it.read) ||
|
||||||
(manga.downloadedFilter == Manga.CHAPTER_SHOW_DOWNLOADED && !downloadManager.isChapterDownloaded(it.name, it.scanlator, /* SY --> */ manga.originalTitle /* SY <-- */, manga.source)) ||
|
(manga.downloadedFilter == DomainManga.CHAPTER_SHOW_DOWNLOADED.toInt() && !downloadManager.isChapterDownloaded(it.name, it.scanlator, manga.title, manga.source)) ||
|
||||||
(manga.downloadedFilter == Manga.CHAPTER_SHOW_NOT_DOWNLOADED && downloadManager.isChapterDownloaded(it.name, it.scanlator, /* SY --> */ manga.originalTitle /* SY <-- */, manga.source)) ||
|
(manga.downloadedFilter == DomainManga.CHAPTER_SHOW_NOT_DOWNLOADED.toInt() && downloadManager.isChapterDownloaded(it.name, it.scanlator, manga.title, manga.source)) ||
|
||||||
(manga.bookmarkedFilter == Manga.CHAPTER_SHOW_BOOKMARKED && !it.bookmark) ||
|
(manga.bookmarkedFilter == DomainManga.CHAPTER_SHOW_BOOKMARKED.toInt() && !it.bookmark) ||
|
||||||
|
(manga.bookmarkedFilter == DomainManga.CHAPTER_SHOW_NOT_BOOKMARKED.toInt() && it.bookmark) ||
|
||||||
// SY -->
|
// SY -->
|
||||||
(filteredScanlators != null && MdUtil.getScanlators(it.scanlator).none { group -> filteredScanlators.contains(group) })
|
(filteredScanlators != null && MdUtil.getScanlators(it.scanlator).none { group -> filteredScanlators.contains(group) })
|
||||||
// SY <--
|
// SY <--
|
||||||
@ -200,14 +203,14 @@ class ReaderPresenter(
|
|||||||
}
|
}
|
||||||
|
|
||||||
chaptersForReader
|
chaptersForReader
|
||||||
|
.sortedWith(getChapterSort(manga.toDomainManga()!!, sortDescending = false))
|
||||||
.map { it.toDbChapter() }
|
.map { it.toDbChapter() }
|
||||||
.sortedWith(getChapterSort(manga, sortDescending = false))
|
|
||||||
.map(::ReaderChapter)
|
.map(::ReaderChapter)
|
||||||
}
|
}
|
||||||
|
|
||||||
private var hasTrackers: Boolean = false
|
private var hasTrackers: Boolean = false
|
||||||
private val checkTrackers: (Manga) -> Unit = { manga ->
|
private val checkTrackers: (DomainManga) -> Unit = { manga ->
|
||||||
val tracks = runBlocking { getTracks.await(manga.id!!) }
|
val tracks = runBlocking { getTracks.await(manga.id) }
|
||||||
hasTrackers = tracks.isNotEmpty()
|
hasTrackers = tracks.isNotEmpty()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -314,7 +317,7 @@ class ReaderPresenter(
|
|||||||
// SY <--
|
// SY <--
|
||||||
if (chapterId == -1L) chapterId = initialChapterId
|
if (chapterId == -1L) chapterId = initialChapterId
|
||||||
|
|
||||||
checkTrackers(manga)
|
checkTrackers(manga.toDomainManga()!!)
|
||||||
|
|
||||||
val context = Injekt.get<Application>()
|
val context = Injekt.get<Application>()
|
||||||
val source = sourceManager.getOrStub(manga.source)
|
val source = sourceManager.getOrStub(manga.source)
|
||||||
@ -352,8 +355,8 @@ class ReaderPresenter(
|
|||||||
|
|
||||||
return chapterList.map {
|
return chapterList.map {
|
||||||
ReaderChapterItem(
|
ReaderChapterItem(
|
||||||
it.chapter,
|
it.chapter.toDomainChapter()!!,
|
||||||
manga!!,
|
manga!!.toDomainManga()!!,
|
||||||
it.chapter.id == currentChapter?.chapter?.id,
|
it.chapter.id == currentChapter?.chapter?.id,
|
||||||
context,
|
context,
|
||||||
preferences.dateFormat(),
|
preferences.dateFormat(),
|
||||||
@ -415,7 +418,7 @@ class ReaderPresenter(
|
|||||||
.also(::add)
|
.also(::add)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun loadNewChapterFromDialog(chapter: Chapter) {
|
fun loadNewChapterFromDialog(chapter: DomainChapter) {
|
||||||
val newChapter = chapterList.firstOrNull { it.chapter.id == chapter.id } ?: return
|
val newChapter = chapterList.firstOrNull { it.chapter.id == chapter.id } ?: return
|
||||||
loadAdjacent(newChapter)
|
loadAdjacent(newChapter)
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package eu.kanade.tachiyomi.ui.reader.chapter
|
package eu.kanade.tachiyomi.ui.reader.chapter
|
||||||
|
|
||||||
import eu.davidea.flexibleadapter.FlexibleAdapter
|
import eu.davidea.flexibleadapter.FlexibleAdapter
|
||||||
import eu.kanade.tachiyomi.data.database.models.Chapter
|
import eu.kanade.domain.chapter.model.Chapter
|
||||||
|
|
||||||
class ReaderChapterAdapter(
|
class ReaderChapterAdapter(
|
||||||
dialog: OnBookmarkClickListener,
|
dialog: OnBookmarkClickListener,
|
||||||
|
@ -5,8 +5,9 @@ import androidx.lifecycle.lifecycleScope
|
|||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||||
import eu.davidea.flexibleadapter.FlexibleAdapter
|
import eu.davidea.flexibleadapter.FlexibleAdapter
|
||||||
|
import eu.kanade.domain.chapter.model.Chapter
|
||||||
import eu.kanade.tachiyomi.R
|
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.databinding.ReaderChaptersDialogBinding
|
||||||
import eu.kanade.tachiyomi.ui.reader.ReaderActivity
|
import eu.kanade.tachiyomi.ui.reader.ReaderActivity
|
||||||
import eu.kanade.tachiyomi.ui.reader.ReaderPresenter
|
import eu.kanade.tachiyomi.ui.reader.ReaderPresenter
|
||||||
@ -34,9 +35,9 @@ class ReaderChapterDialog(private val activity: ReaderActivity) : ReaderChapterA
|
|||||||
|
|
||||||
adapter?.mItemClickListener = FlexibleAdapter.OnItemClickListener { _, position ->
|
adapter?.mItemClickListener = FlexibleAdapter.OnItemClickListener { _, position ->
|
||||||
val item = adapter?.getItem(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()
|
dialog.dismiss()
|
||||||
presenter.loadNewChapterFromDialog(item)
|
presenter.loadNewChapterFromDialog(item.chapter)
|
||||||
}
|
}
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
@ -50,8 +51,11 @@ class ReaderChapterDialog(private val activity: ReaderActivity) : ReaderChapterA
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun refreshList(scroll: Boolean = true) {
|
private fun refreshList(scroll: Boolean = true) {
|
||||||
|
val chapterSort = getChapterSort(presenter.manga!!.toDomainManga()!!)
|
||||||
val chapters = presenter.getChapters(activity)
|
val chapters = presenter.getChapters(activity)
|
||||||
.sortedWith(getChapterSort(presenter.manga!!))
|
.sortedWith { a, b ->
|
||||||
|
chapterSort(a.chapter, b.chapter)
|
||||||
|
}
|
||||||
|
|
||||||
adapter?.clear()
|
adapter?.clear()
|
||||||
adapter?.updateDataSet(chapters)
|
adapter?.updateDataSet(chapters)
|
||||||
@ -69,7 +73,7 @@ class ReaderChapterDialog(private val activity: ReaderActivity) : ReaderChapterA
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun bookmarkChapter(chapter: Chapter) {
|
override fun bookmarkChapter(chapter: Chapter) {
|
||||||
presenter.toggleBookmark(chapter.id!!, !chapter.bookmark)
|
presenter.toggleBookmark(chapter.id, !chapter.bookmark)
|
||||||
refreshList(scroll = false)
|
refreshList(scroll = false)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,19 +9,19 @@ import eu.davidea.flexibleadapter.FlexibleAdapter
|
|||||||
import eu.davidea.flexibleadapter.items.AbstractFlexibleItem
|
import eu.davidea.flexibleadapter.items.AbstractFlexibleItem
|
||||||
import eu.davidea.flexibleadapter.items.IFlexible
|
import eu.davidea.flexibleadapter.items.IFlexible
|
||||||
import eu.davidea.viewholders.FlexibleViewHolder
|
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.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.databinding.ReaderChapterItemBinding
|
||||||
import eu.kanade.tachiyomi.util.system.getResourceColor
|
import eu.kanade.tachiyomi.util.system.getResourceColor
|
||||||
import eu.kanade.tachiyomi.util.view.setVectorCompat
|
import eu.kanade.tachiyomi.util.view.setVectorCompat
|
||||||
import java.text.DateFormat
|
import java.text.DateFormat
|
||||||
import java.text.DecimalFormat
|
import java.text.DecimalFormat
|
||||||
import java.util.Date
|
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) :
|
class ReaderChapterItem(val chapter: Chapter, val manga: Manga, val isCurrent: Boolean, context: Context, val dateFormat: DateFormat, val decimalFormat: DecimalFormat) :
|
||||||
AbstractFlexibleItem<ReaderChapterItem.ViewHolder>(),
|
AbstractFlexibleItem<ReaderChapterItem.ViewHolder>() {
|
||||||
Chapter by chapter {
|
|
||||||
|
|
||||||
val readColor = context.getResourceColor(R.attr.colorOnSurface, 0.38f)
|
val readColor = context.getResourceColor(R.attr.colorOnSurface, 0.38f)
|
||||||
val unreadColor = context.getResourceColor(R.attr.colorOnSurface)
|
val unreadColor = context.getResourceColor(R.attr.colorOnSurface)
|
||||||
@ -50,13 +50,13 @@ class ReaderChapterItem(chapter: Chapter, val manga: Manga, val isCurrent: Boole
|
|||||||
|
|
||||||
other as ReaderChapterItem
|
other as ReaderChapterItem
|
||||||
|
|
||||||
if (id != other.id) return false
|
if (chapter.id != other.chapter.id) return false
|
||||||
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun hashCode(): Int {
|
override fun hashCode(): Int {
|
||||||
return id.hashCode()
|
return chapter.id.hashCode()
|
||||||
}
|
}
|
||||||
|
|
||||||
inner class ViewHolder(view: View, private val adapter: ReaderChapterAdapter) : FlexibleViewHolder(view, adapter) {
|
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) {
|
fun bind(item: ReaderChapterItem) {
|
||||||
val manga = item.manga
|
val manga = item.manga
|
||||||
|
val chapter = item.chapter
|
||||||
|
|
||||||
binding.chapterTitle.text = when (manga.displayMode) {
|
binding.chapterTitle.text = when (manga.displayMode) {
|
||||||
Manga.CHAPTER_DISPLAY_NUMBER -> {
|
DomainManga.CHAPTER_DISPLAY_NUMBER -> {
|
||||||
val number = item.decimalFormat.format(item.chapter_number.toDouble())
|
val number = item.decimalFormat.format(chapter.chapterNumber.toDouble())
|
||||||
itemView.context.getString(R.string.display_mode_chapter, number)
|
itemView.context.getString(R.string.display_mode_chapter, number)
|
||||||
}
|
}
|
||||||
else -> item.name
|
else -> chapter.name
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set correct text color
|
// Set correct text color
|
||||||
val chapterColor = when {
|
val chapterColor = when {
|
||||||
item.read -> item.readColor
|
chapter.read -> item.readColor
|
||||||
item.bookmark -> item.bookmarkedColor
|
chapter.bookmark -> item.bookmarkedColor
|
||||||
else -> item.unreadColor
|
else -> item.unreadColor
|
||||||
}
|
}
|
||||||
binding.chapterTitle.setTextColor(chapterColor)
|
binding.chapterTitle.setTextColor(chapterColor)
|
||||||
@ -86,11 +87,11 @@ class ReaderChapterItem(chapter: Chapter, val manga: Manga, val isCurrent: Boole
|
|||||||
|
|
||||||
val descriptions = mutableListOf<CharSequence>()
|
val descriptions = mutableListOf<CharSequence>()
|
||||||
|
|
||||||
if (item.date_upload > 0) {
|
if (chapter.dateUpload > 0) {
|
||||||
descriptions.add(item.dateFormat.format(Date(item.date_upload)))
|
descriptions.add(item.dateFormat.format(Date(chapter.dateUpload)))
|
||||||
}
|
}
|
||||||
if (!item.scanlator.isNullOrBlank()) {
|
if (!chapter.scanlator.isNullOrBlank()) {
|
||||||
descriptions.add(item.scanlator!!)
|
descriptions.add(chapter.scanlator)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (descriptions.isNotEmpty()) {
|
if (descriptions.isNotEmpty()) {
|
||||||
@ -99,7 +100,7 @@ class ReaderChapterItem(chapter: Chapter, val manga: Manga, val isCurrent: Boole
|
|||||||
binding.chapterScanlator.text = ""
|
binding.chapterScanlator.text = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
if (item.bookmark) {
|
if (chapter.bookmark) {
|
||||||
binding.bookmarkImage.setVectorCompat(R.drawable.ic_bookmark_24dp, R.attr.colorAccent)
|
binding.bookmarkImage.setVectorCompat(R.drawable.ic_bookmark_24dp, R.attr.colorAccent)
|
||||||
} else {
|
} else {
|
||||||
binding.bookmarkImage.setVectorCompat(R.drawable.ic_bookmark_border_24dp, R.attr.colorOnSurface)
|
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.chapterScanlator.setTypeface(null, Typeface.NORMAL)
|
||||||
}
|
}
|
||||||
binding.bookmarkLayout.setOnClickListener {
|
binding.bookmarkLayout.setOnClickListener {
|
||||||
adapter.clickListener.bookmarkChapter(item)
|
adapter.clickListener.bookmarkChapter(chapter)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,10 +2,12 @@ package eu.kanade.tachiyomi.util
|
|||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import eu.kanade.domain.manga.interactor.UpdateManga
|
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.isLocal
|
||||||
import eu.kanade.domain.manga.model.toDbManga
|
import eu.kanade.domain.manga.model.toDbManga
|
||||||
import eu.kanade.tachiyomi.data.cache.CoverCache
|
import eu.kanade.tachiyomi.data.cache.CoverCache
|
||||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
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.data.preference.PreferencesHelper
|
||||||
import eu.kanade.tachiyomi.source.LocalSource
|
import eu.kanade.tachiyomi.source.LocalSource
|
||||||
import eu.kanade.tachiyomi.source.model.SManga
|
import eu.kanade.tachiyomi.source.model.SManga
|
||||||
@ -15,8 +17,6 @@ import java.io.InputStream
|
|||||||
import java.util.Date
|
import java.util.Date
|
||||||
import eu.kanade.domain.manga.model.Manga as DomainManga
|
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
|
* 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
|
if (!refreshSameUrl && thumbnail_url == newUrl) return
|
||||||
|
|
||||||
when {
|
when {
|
||||||
isLocal() -> {
|
toDomainManga()!!.isLocal() -> {
|
||||||
cover_last_modified = Date().time
|
cover_last_modified = Date().time
|
||||||
}
|
}
|
||||||
hasCustomCover(coverCache) -> {
|
toDomainManga()!!.hasCustomCover(coverCache) -> {
|
||||||
coverCache.deleteFromCache(this, false)
|
coverCache.deleteFromCache(this, false)
|
||||||
}
|
}
|
||||||
else -> {
|
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 {
|
fun Manga.removeCovers(coverCache: CoverCache = Injekt.get()): Int {
|
||||||
if (isLocal()) return 0
|
if (toDomainManga()!!.isLocal()) return 0
|
||||||
|
|
||||||
cover_last_modified = Date().time
|
cover_last_modified = Date().time
|
||||||
return coverCache.deleteFromCache(this, true)
|
return coverCache.deleteFromCache(this, true)
|
||||||
|
@ -1,50 +1,22 @@
|
|||||||
package eu.kanade.tachiyomi.util.chapter
|
package eu.kanade.tachiyomi.util.chapter
|
||||||
|
|
||||||
import eu.kanade.tachiyomi.data.database.models.Chapter
|
import eu.kanade.domain.chapter.model.Chapter
|
||||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
import eu.kanade.domain.manga.model.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
|
|
||||||
|
|
||||||
fun getChapterSort(manga: Manga, sortDescending: Boolean = manga.sortDescending()): (Chapter, Chapter) -> Int {
|
fun getChapterSort(manga: Manga, sortDescending: Boolean = manga.sortDescending()): (Chapter, Chapter) -> Int {
|
||||||
return when (manga.sorting) {
|
return when (manga.sorting) {
|
||||||
Manga.CHAPTER_SORTING_SOURCE -> when (sortDescending) {
|
Manga.CHAPTER_SORTING_SOURCE -> when (sortDescending) {
|
||||||
true -> { c1, c2 -> c1.source_order.compareTo(c2.source_order) }
|
true -> { c1, c2 -> c1.sourceOrder.compareTo(c2.sourceOrder) }
|
||||||
false -> { c1, c2 -> c2.source_order.compareTo(c1.source_order) }
|
false -> { c1, c2 -> c2.sourceOrder.compareTo(c1.sourceOrder) }
|
||||||
}
|
}
|
||||||
Manga.CHAPTER_SORTING_NUMBER -> when (sortDescending) {
|
Manga.CHAPTER_SORTING_NUMBER -> when (sortDescending) {
|
||||||
true -> { c1, c2 -> c2.chapter_number.compareTo(c1.chapter_number) }
|
true -> { c1, c2 -> c2.chapterNumber.compareTo(c1.chapterNumber) }
|
||||||
false -> { c1, c2 -> c1.chapter_number.compareTo(c2.chapter_number) }
|
false -> { c1, c2 -> c1.chapterNumber.compareTo(c2.chapterNumber) }
|
||||||
}
|
}
|
||||||
Manga.CHAPTER_SORTING_UPLOAD_DATE -> when (sortDescending) {
|
Manga.CHAPTER_SORTING_UPLOAD_DATE -> when (sortDescending) {
|
||||||
true -> { c1, c2 -> c2.date_upload.compareTo(c1.date_upload) }
|
true -> { c1, c2 -> c2.dateUpload.compareTo(c1.dateUpload) }
|
||||||
false -> { c1, c2 -> c1.date_upload.compareTo(c2.date_upload) }
|
false -> { c1, c2 -> c1.dateUpload.compareTo(c2.dateUpload) }
|
||||||
}
|
}
|
||||||
else -> throw NotImplementedError("Invalid chapter sorting method: ${manga.sorting}")
|
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")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
@ -11,7 +11,6 @@ import androidx.work.WorkManager
|
|||||||
import androidx.work.WorkerParameters
|
import androidx.work.WorkerParameters
|
||||||
import com.elvishew.xlog.Logger
|
import com.elvishew.xlog.Logger
|
||||||
import com.elvishew.xlog.XLog
|
import com.elvishew.xlog.XLog
|
||||||
import eu.kanade.data.DatabaseHandler
|
|
||||||
import eu.kanade.domain.chapter.interactor.GetChapterByMangaId
|
import eu.kanade.domain.chapter.interactor.GetChapterByMangaId
|
||||||
import eu.kanade.domain.chapter.interactor.SyncChaptersWithSource
|
import eu.kanade.domain.chapter.interactor.SyncChaptersWithSource
|
||||||
import eu.kanade.domain.chapter.model.Chapter
|
import eu.kanade.domain.chapter.model.Chapter
|
||||||
|
Loading…
x
Reference in New Issue
Block a user