|
|
@ -3,10 +3,15 @@ package eu.kanade.tachiyomi.data.track
|
|
|
|
import androidx.annotation.CallSuper
|
|
|
|
import androidx.annotation.CallSuper
|
|
|
|
import androidx.annotation.DrawableRes
|
|
|
|
import androidx.annotation.DrawableRes
|
|
|
|
import androidx.annotation.StringRes
|
|
|
|
import androidx.annotation.StringRes
|
|
|
|
|
|
|
|
import eu.kanade.tachiyomi.data.database.DatabaseHelper
|
|
|
|
import eu.kanade.tachiyomi.data.database.models.Track
|
|
|
|
import eu.kanade.tachiyomi.data.database.models.Track
|
|
|
|
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
|
|
|
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
|
|
|
|
|
|
|
import eu.kanade.tachiyomi.data.track.anilist.Anilist
|
|
|
|
import eu.kanade.tachiyomi.data.track.model.TrackSearch
|
|
|
|
import eu.kanade.tachiyomi.data.track.model.TrackSearch
|
|
|
|
import eu.kanade.tachiyomi.network.NetworkHelper
|
|
|
|
import eu.kanade.tachiyomi.network.NetworkHelper
|
|
|
|
|
|
|
|
import eu.kanade.tachiyomi.source.model.SManga
|
|
|
|
|
|
|
|
import eu.kanade.tachiyomi.ui.manga.track.SetTrackReadingDatesDialog
|
|
|
|
|
|
|
|
import eu.kanade.tachiyomi.util.system.executeOnIO
|
|
|
|
import okhttp3.OkHttpClient
|
|
|
|
import okhttp3.OkHttpClient
|
|
|
|
import uy.kohesive.injekt.injectLazy
|
|
|
|
import uy.kohesive.injekt.injectLazy
|
|
|
|
|
|
|
|
|
|
|
@ -14,6 +19,7 @@ abstract class TrackService(val id: Int) {
|
|
|
|
|
|
|
|
|
|
|
|
val preferences: PreferencesHelper by injectLazy()
|
|
|
|
val preferences: PreferencesHelper by injectLazy()
|
|
|
|
val networkService: NetworkHelper by injectLazy()
|
|
|
|
val networkService: NetworkHelper by injectLazy()
|
|
|
|
|
|
|
|
val db: DatabaseHelper by injectLazy()
|
|
|
|
open fun canRemoveFromService() = false
|
|
|
|
open fun canRemoveFromService() = false
|
|
|
|
open val client: OkHttpClient
|
|
|
|
open val client: OkHttpClient
|
|
|
|
get() = networkService.client
|
|
|
|
get() = networkService.client
|
|
|
@ -34,6 +40,8 @@ abstract class TrackService(val id: Int) {
|
|
|
|
|
|
|
|
|
|
|
|
abstract fun isCompletedStatus(index: Int): Boolean
|
|
|
|
abstract fun isCompletedStatus(index: Int): Boolean
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
abstract fun completedStatus(): Int
|
|
|
|
|
|
|
|
|
|
|
|
abstract fun getStatus(status: Int): String
|
|
|
|
abstract fun getStatus(status: Int): String
|
|
|
|
|
|
|
|
|
|
|
|
abstract fun getGlobalStatus(status: Int): String
|
|
|
|
abstract fun getGlobalStatus(status: Int): String
|
|
|
@ -77,3 +85,39 @@ abstract class TrackService(val id: Int) {
|
|
|
|
preferences.setTrackCredentials(this, username, password)
|
|
|
|
preferences.setTrackCredentials(this, username, password)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
suspend fun TrackService.updateNewTrackInfo(track: Track) {
|
|
|
|
|
|
|
|
val allRead = db.getManga(track.manga_id).executeOnIO()?.status == SManga.COMPLETED &&
|
|
|
|
|
|
|
|
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)
|
|
|
|
|
|
|
|
if (allRead) {
|
|
|
|
|
|
|
|
track.status = completedStatus()
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
suspend fun TrackService.getStartDate(track: Track): Long {
|
|
|
|
|
|
|
|
if (db.getChapters(track.manga_id).executeOnIO().any { it.read }) {
|
|
|
|
|
|
|
|
val chapters = db.getHistoryByMangaId(track.manga_id).executeOnIO()
|
|
|
|
|
|
|
|
val date = chapters.minOfOrNull { it.last_read } ?: return 0L
|
|
|
|
|
|
|
|
return if (date <= 0L) 0L else date
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return 0L
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
suspend fun TrackService.getCompletedDate(track: Track, allRead: Boolean): Long {
|
|
|
|
|
|
|
|
if (allRead) {
|
|
|
|
|
|
|
|
val chapters = db.getHistoryByMangaId(track.manga_id).executeOnIO()
|
|
|
|
|
|
|
|
val date = chapters.maxOfOrNull { it.last_read } ?: return 0L
|
|
|
|
|
|
|
|
return if (date <= 0L) 0L else date
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return 0L
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
|
|
}
|
|
|
|