|
@@ -5,6 +5,8 @@ import com.jakewharton.rxrelay.BehaviorRelay
|
|
|
import eu.kanade.tachiyomi.data.database.models.Manga
|
|
|
import eu.kanade.tachiyomi.data.database.models.MangaCategory
|
|
|
import eu.kanade.tachiyomi.data.database.models.toMangaInfo
|
|
|
+import eu.kanade.tachiyomi.data.track.EnhancedTrackService
|
|
|
+import eu.kanade.tachiyomi.data.track.TrackManager
|
|
|
import eu.kanade.tachiyomi.source.CatalogueSource
|
|
|
import eu.kanade.tachiyomi.source.Source
|
|
|
import eu.kanade.tachiyomi.source.model.SChapter
|
|
@@ -19,6 +21,8 @@ import eu.kanade.tachiyomi.util.lang.launchIO
|
|
|
import eu.kanade.tachiyomi.util.lang.launchUI
|
|
|
import eu.kanade.tachiyomi.util.lang.withUIContext
|
|
|
import eu.kanade.tachiyomi.util.system.toast
|
|
|
+import uy.kohesive.injekt.Injekt
|
|
|
+import uy.kohesive.injekt.api.get
|
|
|
import java.util.Date
|
|
|
|
|
|
class SearchPresenter(
|
|
@@ -28,6 +32,8 @@ class SearchPresenter(
|
|
|
|
|
|
private val replacingMangaRelay = BehaviorRelay.create<Pair<Boolean, Manga?>>()
|
|
|
|
|
|
+ private val enhancedServices by lazy { Injekt.get<TrackManager>().services.filterIsInstance<EnhancedTrackService>() }
|
|
|
+
|
|
|
override fun onCreate(savedState: Bundle?) {
|
|
|
super.onCreate(savedState)
|
|
|
|
|
@@ -57,6 +63,7 @@ class SearchPresenter(
|
|
|
}
|
|
|
|
|
|
fun migrateManga(prevManga: Manga, manga: Manga, replace: Boolean) {
|
|
|
+ val prevSource = sourceManager.get(prevManga.source) ?: return
|
|
|
val source = sourceManager.get(manga.source) ?: return
|
|
|
|
|
|
replacingMangaRelay.call(Pair(true, null))
|
|
@@ -66,7 +73,7 @@ class SearchPresenter(
|
|
|
val chapters = source.getChapterList(manga.toMangaInfo())
|
|
|
.map { it.toSChapter() }
|
|
|
|
|
|
- migrateMangaInternal(source, chapters, prevManga, manga, replace)
|
|
|
+ migrateMangaInternal(prevSource, source, chapters, prevManga, manga, replace)
|
|
|
} catch (e: Throwable) {
|
|
|
withUIContext { view?.applicationContext?.toast(e.message) }
|
|
|
}
|
|
@@ -76,6 +83,7 @@ class SearchPresenter(
|
|
|
}
|
|
|
|
|
|
private fun migrateMangaInternal(
|
|
|
+ prevSource: Source,
|
|
|
source: Source,
|
|
|
sourceChapters: List<SChapter>,
|
|
|
prevManga: Manga,
|
|
@@ -135,12 +143,16 @@ class SearchPresenter(
|
|
|
|
|
|
// Update track
|
|
|
if (migrateTracks) {
|
|
|
- val tracks = db.getTracks(prevManga).executeAsBlocking()
|
|
|
- for (track in tracks) {
|
|
|
+ val tracksToUpdate = db.getTracks(prevManga).executeAsBlocking().mapNotNull { track ->
|
|
|
track.id = null
|
|
|
track.manga_id = manga.id!!
|
|
|
+
|
|
|
+ val service = enhancedServices
|
|
|
+ .firstOrNull { it.isTrackFrom(track, prevManga, prevSource) }
|
|
|
+ if (service != null) service.migrateTrack(track, manga, source)
|
|
|
+ else track
|
|
|
}
|
|
|
- db.insertTracks(tracks).executeAsBlocking()
|
|
|
+ db.insertTracks(tracksToUpdate).executeAsBlocking()
|
|
|
}
|
|
|
|
|
|
// Update favorite status
|