mirror of
https://github.com/tachiyomiorg/tachiyomi.git
synced 2024-11-20 02:19:14 +01:00
parent
a0bc45af46
commit
922f115c78
@ -2,6 +2,7 @@ package eu.kanade.tachiyomi.data.database.models
|
||||
|
||||
import android.content.Context
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.database.DatabaseHelper
|
||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||
import eu.kanade.tachiyomi.source.SourceManager
|
||||
import eu.kanade.tachiyomi.source.model.SManga
|
||||
@ -146,7 +147,7 @@ interface Manga : SManga {
|
||||
*/
|
||||
fun defaultReaderType(): Int {
|
||||
val sourceName = Injekt.get<SourceManager>().getOrStub(source).name
|
||||
val currentTags = genre?.split(",")?.map { it.trim().toLowerCase(Locale.US) } ?: emptyList()
|
||||
val currentTags = genre?.split(",")?.map { it.trim().lowercase(Locale.US) } ?: emptyList()
|
||||
return if (currentTags.any
|
||||
{ tag ->
|
||||
isManhwaTag(tag) || tag.contains("webtoon")
|
||||
@ -219,6 +220,20 @@ interface Manga : SManga {
|
||||
sourceName.contains("ComicExtra", true)
|
||||
}
|
||||
|
||||
fun isOneShotOrCompleted(db: DatabaseHelper): Boolean {
|
||||
val tags by lazy { genre?.split(",")?.map { it.trim().lowercase(Locale.US) } }
|
||||
val chapters by lazy { db.getChapters(this).executeAsBlocking() }
|
||||
val firstChapterName by lazy { chapters.firstOrNull()?.name?.lowercase() ?: "" }
|
||||
return status == SManga.COMPLETED || tags?.contains("oneshot") == true ||
|
||||
(
|
||||
chapters.size == 1 &&
|
||||
(
|
||||
Regex("one.?shot").containsMatchIn(firstChapterName) ||
|
||||
firstChapterName.contains("oneshot")
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
fun key(): String {
|
||||
return "manga-id-$id"
|
||||
}
|
||||
|
@ -8,7 +8,6 @@ import eu.kanade.tachiyomi.data.database.models.Track
|
||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||
import eu.kanade.tachiyomi.data.track.model.TrackSearch
|
||||
import eu.kanade.tachiyomi.network.NetworkHelper
|
||||
import eu.kanade.tachiyomi.source.model.SManga
|
||||
import eu.kanade.tachiyomi.util.system.executeOnIO
|
||||
import okhttp3.OkHttpClient
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
@ -85,13 +84,16 @@ abstract class TrackService(val id: Int) {
|
||||
}
|
||||
|
||||
suspend fun TrackService.updateNewTrackInfo(track: Track, planningStatus: Int) {
|
||||
val allRead = db.getManga(track.manga_id).executeOnIO()?.status == SManga.COMPLETED &&
|
||||
val manga = db.getManga(track.manga_id).executeOnIO()
|
||||
val allRead = manga?.isOneShotOrCompleted(db) == true &&
|
||||
db.getChapters(track.manga_id).executeOnIO().all { it.read }
|
||||
if (supportsReadingDates) {
|
||||
track.started_reading_date = getStartDate(track)
|
||||
track.finished_reading_date = getCompletedDate(track, allRead)
|
||||
}
|
||||
track.last_chapter_read = getLastChapterRead(track)
|
||||
track.last_chapter_read = getLastChapterRead(track).takeUnless {
|
||||
it == 0 && allRead
|
||||
} ?: 1
|
||||
if (track.last_chapter_read == 0) {
|
||||
track.status = planningStatus
|
||||
}
|
||||
@ -120,5 +122,6 @@ suspend fun TrackService.getCompletedDate(track: Track, allRead: Boolean): Long
|
||||
|
||||
suspend fun TrackService.getLastChapterRead(track: Track): Int {
|
||||
val chapters = db.getChapters(track.manga_id).executeOnIO()
|
||||
return chapters.filter { it.read }.minByOrNull { it.source_order }?.chapter_number?.toInt() ?: 0
|
||||
val lastChapterRead = chapters.filter { it.read }.minByOrNull { it.source_order }
|
||||
return lastChapterRead?.takeIf { it.isRecognizedNumber }?.chapter_number?.toInt() ?: 0
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user