Move history object outside of the chapter object

a bit of refactoring if you will
This commit is contained in:
Jays2Kings 2023-03-09 19:46:30 -05:00
parent d3cb32af38
commit 9ffde130b9
7 changed files with 27 additions and 30 deletions

View file

@ -21,9 +21,6 @@ interface Chapter : SChapter, Serializable {
var source_order: Int var source_order: Int
var dateRead: Long?
var history: History?
val isRecognizedNumber: Boolean val isRecognizedNumber: Boolean
get() = chapter_number >= 0f get() = chapter_number >= 0f

View file

@ -24,13 +24,6 @@ class ChapterImpl : Chapter {
override var date_upload: Long = 0 override var date_upload: Long = 0
override var dateRead: Long? = null
override var history: History? = null
set(value) {
field = value
dateRead = history?.last_read
}
override var chapter_number: Float = 0f override var chapter_number: Float = 0f
override var source_order: Int = 0 override var source_order: Int = 0

View file

@ -7,9 +7,11 @@ package eu.kanade.tachiyomi.data.database.models
* @param chapter object containing chater * @param chapter object containing chater
* @param history object containing history * @param history object containing history
*/ */
data class MangaChapterHistory(val manga: Manga, val chapter: Chapter, val history: History, var extraChapters: List<Chapter> = emptyList()) { data class MangaChapterHistory(val manga: Manga, val chapter: Chapter, val history: History, var extraChapters: List<ChapterHistory> = emptyList()) {
companion object { companion object {
fun createBlank() = MangaChapterHistory(MangaImpl(), ChapterImpl(), HistoryImpl()) fun createBlank() = MangaChapterHistory(MangaImpl(), ChapterImpl(), HistoryImpl())
} }
} }
data class ChapterHistory(val chapter: Chapter, var history: History? = null) : Chapter by chapter

View file

@ -5,6 +5,7 @@ import androidx.recyclerview.widget.ItemTouchHelper
import com.fredporciuncula.flow.preferences.Preference import com.fredporciuncula.flow.preferences.Preference
import eu.davidea.flexibleadapter.items.IFlexible import eu.davidea.flexibleadapter.items.IFlexible
import eu.kanade.tachiyomi.data.database.models.Chapter import eu.kanade.tachiyomi.data.database.models.Chapter
import eu.kanade.tachiyomi.data.database.models.ChapterHistory
import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.data.preference.asImmediateFlowIn import eu.kanade.tachiyomi.data.preference.asImmediateFlowIn
import eu.kanade.tachiyomi.ui.manga.chapter.BaseChapterAdapter import eu.kanade.tachiyomi.ui.manga.chapter.BaseChapterAdapter
@ -96,7 +97,7 @@ class RecentMangaAdapter(val delegate: RecentsInterface) :
fun alwaysExpanded(): Boolean fun alwaysExpanded(): Boolean
fun scope(): CoroutineScope fun scope(): CoroutineScope
fun getViewType(): RecentsViewType fun getViewType(): RecentsViewType
fun onItemLongClick(position: Int, chapter: Chapter): Boolean fun onItemLongClick(position: Int, chapter: ChapterHistory): Boolean
} }
override fun onItemSwiped(position: Int, direction: Int) { override fun onItemSwiped(position: Int, direction: Int) {

View file

@ -17,6 +17,7 @@ import androidx.transition.TransitionManager
import androidx.transition.TransitionSet import androidx.transition.TransitionSet
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.Chapter
import eu.kanade.tachiyomi.data.database.models.ChapterHistory
import eu.kanade.tachiyomi.data.download.model.Download import eu.kanade.tachiyomi.data.download.model.Download
import eu.kanade.tachiyomi.data.image.coil.loadManga import eu.kanade.tachiyomi.data.image.coil.loadManga
import eu.kanade.tachiyomi.databinding.RecentMangaItemBinding import eu.kanade.tachiyomi.databinding.RecentMangaItemBinding
@ -335,16 +336,16 @@ class RecentMangaHolder(
} }
@SuppressLint("ClickableViewAccessibility") @SuppressLint("ClickableViewAccessibility")
private fun RecentSubChapterItemBinding.configureView(chapter: Chapter, item: RecentMangaItem) { private fun RecentSubChapterItemBinding.configureView(chapter: ChapterHistory, item: RecentMangaItem) {
val context = itemView.context val context = itemView.context
val showDLs = adapter.showDownloads val showDLs = adapter.showDownloads
title.text = chapter.preferredChapterName(context, item.mch.manga, adapter.preferences) title.text = chapter.preferredChapterName(context, item.mch.manga, adapter.preferences)
title.setTextColor(ChapterUtil.readColor(context, chapter)) title.setTextColor(ChapterUtil.readColor(context, chapter))
val notReadYet = item.chapter.id != item.mch.chapter.id && item.mch.history.id != null val notReadYet = item.chapter.id != item.mch.chapter.id && item.mch.history.id != null
subtitle.text = chapter.dateRead?.let { dateRead -> subtitle.text = chapter.history?.let { history ->
context.timeSpanFromNow(R.string.read_, dateRead) context.timeSpanFromNow(R.string.read_, history.last_read)
.takeIf { .takeIf {
Date().time - dateRead < TimeUnit.DAYS.toMillis(1) || notReadYet Date().time - history.last_read < TimeUnit.DAYS.toMillis(1) || notReadYet
} }
} ?: "" } ?: ""
if (isUpdates && chapter.isRecognizedNumber && if (isUpdates && chapter.isRecognizedNumber &&

View file

@ -31,6 +31,7 @@ import eu.davidea.flexibleadapter.FlexibleAdapter
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.backup.BackupRestoreService import eu.kanade.tachiyomi.data.backup.BackupRestoreService
import eu.kanade.tachiyomi.data.database.models.Chapter import eu.kanade.tachiyomi.data.database.models.Chapter
import eu.kanade.tachiyomi.data.database.models.ChapterHistory
import eu.kanade.tachiyomi.data.database.models.History import eu.kanade.tachiyomi.data.database.models.History
import eu.kanade.tachiyomi.data.database.models.Manga import eu.kanade.tachiyomi.data.database.models.Manga
import eu.kanade.tachiyomi.data.download.DownloadService import eu.kanade.tachiyomi.data.download.DownloadService
@ -653,7 +654,7 @@ class RecentsController(bundle: Bundle? = null) :
override fun areExtraChaptersExpanded(position: Int): Boolean { override fun areExtraChaptersExpanded(position: Int): Boolean {
if (alwaysExpanded()) return true if (alwaysExpanded()) return true
val item = (adapter.getItem(position) as? RecentMangaItem) ?: return false val item = (adapter.getItem(position) as? RecentMangaItem) ?: return false
val date = presenter.dateFormat.format(item.chapter.dateRead ?: item.chapter.date_fetch) val date = presenter.dateFormat.format(item.mch.history.last_read)
val invertDefault = !adapter.collapseGrouped val invertDefault = !adapter.collapseGrouped
return presenter.expandedSectionsMap["${item.mch.manga} - $date"]?.xor(invertDefault) return presenter.expandedSectionsMap["${item.mch.manga} - $date"]?.xor(invertDefault)
?: invertDefault ?: invertDefault
@ -662,7 +663,7 @@ class RecentsController(bundle: Bundle? = null) :
override fun updateExpandedExtraChapters(position: Int, expanded: Boolean) { override fun updateExpandedExtraChapters(position: Int, expanded: Boolean) {
if (alwaysExpanded()) return if (alwaysExpanded()) return
val item = (adapter.getItem(position) as? RecentMangaItem) ?: return val item = (adapter.getItem(position) as? RecentMangaItem) ?: return
val date = presenter.dateFormat.format(item.chapter.dateRead ?: item.chapter.date_fetch) val date = presenter.dateFormat.format(item.mch.history.last_read)
val invertDefault = !adapter.collapseGrouped val invertDefault = !adapter.collapseGrouped
presenter.expandedSectionsMap["${item.mch.manga} - $date"] = expanded.xor(invertDefault) presenter.expandedSectionsMap["${item.mch.manga} - $date"] = expanded.xor(invertDefault)
} }
@ -729,7 +730,7 @@ class RecentsController(bundle: Bundle? = null) :
} }
} }
override fun onItemLongClick(position: Int, chapter: Chapter): Boolean { override fun onItemLongClick(position: Int, chapter: ChapterHistory): Boolean {
val history = chapter.history ?: return false val history = chapter.history ?: return false
val item = adapter.getItem(position) as? RecentMangaItem ?: return false val item = adapter.getItem(position) as? RecentMangaItem ?: return false
val manga = item.mch.manga val manga = item.mch.manga

View file

@ -3,6 +3,7 @@ package eu.kanade.tachiyomi.ui.recents
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.database.DatabaseHelper import eu.kanade.tachiyomi.data.database.DatabaseHelper
import eu.kanade.tachiyomi.data.database.models.Chapter import eu.kanade.tachiyomi.data.database.models.Chapter
import eu.kanade.tachiyomi.data.database.models.ChapterHistory
import eu.kanade.tachiyomi.data.database.models.History import eu.kanade.tachiyomi.data.database.models.History
import eu.kanade.tachiyomi.data.database.models.HistoryImpl import eu.kanade.tachiyomi.data.database.models.HistoryImpl
import eu.kanade.tachiyomi.data.database.models.Manga import eu.kanade.tachiyomi.data.database.models.Manga
@ -185,7 +186,7 @@ class RecentsPresenter(
.mapNotNull { (key, mchs) -> .mapNotNull { (key, mchs) ->
val manga = mchs.first().manga val manga = mchs.first().manga
val chapters = mchs.map { mch -> val chapters = mchs.map { mch ->
mch.chapter.also { it.history = mch.history } ChapterHistory(mch.chapter, mch.history)
}.filterChaptersByScanlators(manga) }.filterChaptersByScanlators(manga)
extraCount += mchs.size - chapters.size extraCount += mchs.size - chapters.size
if (chapters.isEmpty()) return@mapNotNull null if (chapters.isEmpty()) return@mapNotNull null
@ -193,8 +194,8 @@ class RecentsPresenter(
val date = Date(it.mch.history.last_read) val date = Date(it.mch.history.last_read)
key == it.manga_id to dateFormat.format(date) key == it.manga_id to dateFormat.format(date)
}?.takeIf { updatePageCount } }?.takeIf { updatePageCount }
val sort = Comparator<Chapter> { c1, c2 -> val sort = Comparator<ChapterHistory> { c1, c2 ->
c2.dateRead!!.compareTo(c1.dateRead!!) c2.history!!.last_read.compareTo(c1.history!!.last_read)
} }
val (sortedChapters, firstChapter, subCount) = val (sortedChapters, firstChapter, subCount) =
setupExtraChapters(existingItem, chapters, sort) setupExtraChapters(existingItem, chapters, sort)
@ -219,14 +220,15 @@ class RecentsPresenter(
} }
.mapNotNull { (key, mcs) -> .mapNotNull { (key, mcs) ->
val manga = mcs.first().manga val manga = mcs.first().manga
val chapters = mcs.map { it.chapter }.filterChaptersByScanlators(manga) val chapters = mcs.map { ChapterHistory(it.chapter) }
.filterChaptersByScanlators(manga)
extraCount += mcs.size - chapters.size extraCount += mcs.size - chapters.size
if (chapters.isEmpty()) return@mapNotNull null if (chapters.isEmpty()) return@mapNotNull null
val existingItem = recentItems.takeLast(ENDLESS_LIMIT).find { val existingItem = recentItems.takeLast(ENDLESS_LIMIT).find {
val date = Date(it.chapter.date_fetch) val date = Date(it.chapter.date_fetch)
key == it.manga_id to dateFormat.format(date) key == it.manga_id to dateFormat.format(date)
}?.takeIf { updatePageCount } }?.takeIf { updatePageCount }
val sort: Comparator<Chapter> = val sort: Comparator<ChapterHistory> =
ChapterSort(manga, chapterFilter, preferences) ChapterSort(manga, chapterFilter, preferences)
.sortComparator(true) .sortComparator(true)
val (sortedChapters, firstChapter, subCount) = val (sortedChapters, firstChapter, subCount) =
@ -283,8 +285,8 @@ class RecentsPresenter(
if (viewType.isHistory && nextChapter?.id != null && if (viewType.isHistory && nextChapter?.id != null &&
nextChapter.id != it.chapter.id nextChapter.id != it.chapter.id
) { ) {
nextChapter.dateRead = it.chapter.dateRead it.extraChapters = listOf(ChapterHistory(it.chapter, it.history)) +
it.extraChapters = listOf(it.chapter) + it.extraChapters it.extraChapters
} }
nextChapter nextChapter
} }
@ -386,12 +388,12 @@ class RecentsPresenter(
private fun setupExtraChapters( private fun setupExtraChapters(
existingItem: RecentMangaItem?, existingItem: RecentMangaItem?,
chapters: List<Chapter>, chapters: List<ChapterHistory>,
sort: Comparator<Chapter>, sort: Comparator<ChapterHistory>,
): Triple<MutableList<Chapter>, Chapter?, Int> { ): Triple<MutableList<ChapterHistory>, Chapter?, Int> {
var extraCount = 0 var extraCount = 0
val firstChapter: Chapter val firstChapter: Chapter
var sortedChapters: MutableList<Chapter> var sortedChapters: MutableList<ChapterHistory>
val reverseRead = !viewType.isHistory val reverseRead = !viewType.isHistory
if (existingItem != null) { if (existingItem != null) {
extraCount += chapters.size extraCount += chapters.size