diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/alternatives/domain/MigrateUseCase.kt b/app/src/main/kotlin/org/koitharu/kotatsu/alternatives/domain/MigrateUseCase.kt index ddc28c2c1..8f1fbb50d 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/alternatives/domain/MigrateUseCase.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/alternatives/domain/MigrateUseCase.kt @@ -12,6 +12,7 @@ import org.koitharu.kotatsu.history.data.toMangaHistory import org.koitharu.kotatsu.parsers.model.Manga import org.koitharu.kotatsu.parsers.model.MangaChapter import org.koitharu.kotatsu.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.tracker.data.TrackEntity import javax.inject.Inject class MigrateUseCase @Inject constructor( @@ -56,6 +57,22 @@ class MigrateUseCase @Inject constructor( historyDao.delete(oldDetails.id) historyDao.upsert(newHistory) } + // track + val tracksDao = database.getTracksDao() + val oldTrack = tracksDao.find(oldDetails.id) + if (oldTrack != null) { + val lastChapter = newDetails.chapters?.lastOrNull() + val newTrack = TrackEntity( + mangaId = newDetails.id, + lastChapterId = lastChapter?.id ?: 0L, + newChapters = 0, + lastCheckTime = System.currentTimeMillis(), + lastChapterDate = lastChapter?.uploadDate ?: 0L, + lastResult = TrackEntity.RESULT_EXTERNAL_MODIFICATION, + ) + tracksDao.delete(oldDetails.id) + tracksDao.upsert(newTrack) + } } progressUpdateUseCase(newManga) } diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/tracker/domain/Tracker.kt b/app/src/main/kotlin/org/koitharu/kotatsu/tracker/domain/Tracker.kt index 01af8afda..787cd8cf0 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/tracker/domain/Tracker.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/tracker/domain/Tracker.kt @@ -6,10 +6,8 @@ import dagger.Reusable import org.koitharu.kotatsu.core.model.getPreferredBranch import org.koitharu.kotatsu.core.parser.MangaRepository import org.koitharu.kotatsu.core.parser.RemoteMangaRepository -import org.koitharu.kotatsu.core.prefs.AppSettings import org.koitharu.kotatsu.core.util.MultiMutex import org.koitharu.kotatsu.core.util.ext.toInstantOrNull -import org.koitharu.kotatsu.favourites.domain.FavouritesRepository import org.koitharu.kotatsu.history.data.HistoryRepository import org.koitharu.kotatsu.parsers.model.Manga import org.koitharu.kotatsu.parsers.util.runCatchingCancellable @@ -22,10 +20,8 @@ import kotlin.contracts.contract @Reusable class Tracker @Inject constructor( - private val settings: AppSettings, private val repository: TrackingRepository, private val historyRepository: HistoryRepository, - private val favouritesRepository: FavouritesRepository, private val mangaRepositoryFactory: MangaRepository.Factory, ) { diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/tracker/domain/TrackingRepository.kt b/app/src/main/kotlin/org/koitharu/kotatsu/tracker/domain/TrackingRepository.kt index 3efa1c38e..628b5ea29 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/tracker/domain/TrackingRepository.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/tracker/domain/TrackingRepository.kt @@ -9,16 +9,13 @@ import kotlinx.coroutines.flow.flatMapLatest import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onStart import org.koitharu.kotatsu.core.db.MangaDatabase -import org.koitharu.kotatsu.core.db.entity.MangaEntity import org.koitharu.kotatsu.core.db.entity.toManga import org.koitharu.kotatsu.core.db.entity.toMangaTags -import org.koitharu.kotatsu.core.model.FavouriteCategory import org.koitharu.kotatsu.core.prefs.AppSettings import org.koitharu.kotatsu.core.util.ext.ifZero import org.koitharu.kotatsu.core.util.ext.mapItems import org.koitharu.kotatsu.core.util.ext.toInstantOrNull -import org.koitharu.kotatsu.favourites.data.toFavouriteCategory -import org.koitharu.kotatsu.local.data.LocalMangaRepository +import org.koitharu.kotatsu.details.domain.ProgressUpdateUseCase import org.koitharu.kotatsu.parsers.model.Manga import org.koitharu.kotatsu.tracker.data.TrackEntity import org.koitharu.kotatsu.tracker.data.TrackLogEntity @@ -28,7 +25,6 @@ import org.koitharu.kotatsu.tracker.domain.model.MangaUpdates import org.koitharu.kotatsu.tracker.domain.model.TrackingLogItem import java.util.concurrent.atomic.AtomicBoolean import javax.inject.Inject -import javax.inject.Provider private const val NO_ID = 0L private const val MAX_LOG_SIZE = 120 @@ -37,7 +33,7 @@ private const val MAX_LOG_SIZE = 120 class TrackingRepository @Inject constructor( private val db: MangaDatabase, private val settings: AppSettings, - private val localMangaRepositoryProvider: Provider, + private val progressUpdateUseCase: ProgressUpdateUseCase, ) { private var isGcCalled = AtomicBoolean(false) @@ -77,10 +73,6 @@ class TrackingRepository @Inject constructor( .onStart { gcIfNotCalled() } } - suspend fun getCategoryId(mangaId: Long): Long { - return db.getFavouritesDao().findCategoriesIdsWithTrack(mangaId).firstOrNull() ?: NO_ID - } - suspend fun getTracks(offset: Int, limit: Int): List { return db.getTracksDao().findAll(offset = offset, limit = limit).map { MangaTracking( @@ -150,7 +142,7 @@ class TrackingRepository @Inject constructor( val track = getOrCreateTrack(updates.manga.id).mergeWith(updates) db.getTracksDao().upsert(track) if (updates is MangaUpdates.Success && updates.isValid && updates.newChapters.isNotEmpty()) { - updatePercent(updates) + progressUpdateUseCase(updates.manga) val logEntity = TrackLogEntity( mangaId = updates.manga.id, chapters = updates.newChapters.joinToString("\n") { x -> x.name }, @@ -194,14 +186,6 @@ class TrackingRepository @Inject constructor( ) } - suspend fun getAllFavouritesManga(): Map> { - val categories = db.getFavouriteCategoriesDao().findAll() - return categories.associateTo(LinkedHashMap(categories.size)) { categoryEntity -> - categoryEntity.toFavouriteCategory() to - db.getFavouritesDao().findAllManga(categoryEntity.categoryId).toMangaList() - } - } - suspend fun updateTracks() = db.withTransaction { val dao = db.getTracksDao() dao.gc() @@ -236,21 +220,6 @@ class TrackingRepository @Inject constructor( return db.getTracksDao().find(mangaId) ?: TrackEntity.create(mangaId) } - private suspend fun updatePercent(updates: MangaUpdates.Success) { - val history = db.getHistoryDao().find(updates.manga.id) ?: return - val chapters = updates.manga.chapters - if (chapters.isNullOrEmpty()) { - return - } - val chapterIndex = chapters.indexOfFirst { it.id == history.chapterId } - if (chapterIndex < 0) { - return - } - val position = (chapters.size - updates.newChapters.size) * history.percent - val newPercent = position / chapters.size.toFloat() - db.getHistoryDao().update(history.copy(percent = newPercent)) - } - private fun TrackEntity.mergeWith(updates: MangaUpdates): TrackEntity { val chapters = updates.manga.chapters.orEmpty() return when (updates) { @@ -279,6 +248,4 @@ class TrackingRepository @Inject constructor( gc() } } - - private fun Collection.toMangaList() = map { it.toManga(emptySet()) } }