Fix migrate extra data like chapter filters and viewer

This commit is contained in:
Jobobby04 2020-10-20 16:13:34 -04:00
parent 89d9768759
commit b1048d8014
5 changed files with 51 additions and 12 deletions

View File

@ -12,6 +12,7 @@ import eu.kanade.tachiyomi.data.database.resolvers.MangaFavoritePutResolver
import eu.kanade.tachiyomi.data.database.resolvers.MangaFlagsPutResolver
import eu.kanade.tachiyomi.data.database.resolvers.MangaInfoPutResolver
import eu.kanade.tachiyomi.data.database.resolvers.MangaLastUpdatedPutResolver
import eu.kanade.tachiyomi.data.database.resolvers.MangaMigrationPutResolver
import eu.kanade.tachiyomi.data.database.resolvers.MangaTitlePutResolver
import eu.kanade.tachiyomi.data.database.resolvers.MangaViewerPutResolver
import eu.kanade.tachiyomi.data.database.tables.CategoryTable
@ -87,6 +88,11 @@ interface MangaQueries : DbProvider {
.`object`(manga)
.withPutResolver(MangaInfoPutResolver(true))
.prepare()
fun updateMangaMigrate(manga: Manga) = db.put()
.`object`(manga)
.withPutResolver(MangaMigrationPutResolver())
.prepare()
// SY <--
fun insertManga(manga: Manga) = db.put().`object`(manga).prepare()

View File

@ -25,7 +25,8 @@ class MangaFavoritePutResolver : PutResolver<Manga>() {
.whereArgs(manga.id)
.build()
fun mapToContentValues(manga: Manga) = ContentValues(1).apply {
fun mapToContentValues(manga: Manga) = ContentValues(2).apply {
put(MangaTable.COL_FAVORITE, manga.favorite)
put(MangaTable.COL_DATE_ADDED, manga.date_added)
}
}

View File

@ -0,0 +1,35 @@
package eu.kanade.tachiyomi.data.database.resolvers
import android.content.ContentValues
import com.pushtorefresh.storio.sqlite.StorIOSQLite
import com.pushtorefresh.storio.sqlite.operations.put.PutResolver
import com.pushtorefresh.storio.sqlite.operations.put.PutResult
import com.pushtorefresh.storio.sqlite.queries.UpdateQuery
import eu.kanade.tachiyomi.data.database.inTransactionReturn
import eu.kanade.tachiyomi.data.database.models.Manga
import eu.kanade.tachiyomi.data.database.tables.MangaTable
class MangaMigrationPutResolver : PutResolver<Manga>() {
override fun performPut(db: StorIOSQLite, manga: Manga) = db.inTransactionReturn {
val updateQuery = mapToUpdateQuery(manga)
val contentValues = mapToContentValues(manga)
val numberOfRowsUpdated = db.lowLevel().update(updateQuery, contentValues)
PutResult.newUpdateResult(numberOfRowsUpdated, updateQuery.table())
}
fun mapToUpdateQuery(manga: Manga) = UpdateQuery.builder()
.table(MangaTable.TABLE)
.where("${MangaTable.COL_ID} = ?")
.whereArgs(manga.id)
.build()
fun mapToContentValues(manga: Manga) = ContentValues(5).apply {
put(MangaTable.COL_FAVORITE, manga.favorite)
put(MangaTable.COL_DATE_ADDED, manga.date_added)
put(MangaTable.COL_TITLE, manga.title)
put(MangaTable.COL_CHAPTER_FLAGS, manga.chapter_flags)
put(MangaTable.COL_VIEWER, manga.viewer)
}
}

View File

@ -135,17 +135,22 @@ class MigrationProcessAdapter(
}
db.insertTracks(tracks).executeAsBlocking()
}
// Update extras
if (MigrationFlags.hasExtra(flags)) {
manga.viewer = prevManga.viewer
manga.chapter_flags = prevManga.chapter_flags
}
// Update favorite status
if (replace) {
prevManga.favorite = false
manga.date_added = prevManga.date_added
prevManga.date_added = 0
db.updateMangaFavorite(prevManga).executeAsBlocking()
} else {
manga.date_added = Date().time
}
manga.favorite = true
db.updateMangaFavorite(manga).executeAsBlocking()
db.updateMangaTitle(manga).executeAsBlocking()
db.updateMangaMigrate(manga).executeAsBlocking()
}
}

View File

@ -102,13 +102,8 @@ class MigrationMangaPresenter(
}
if (migrateExtra) {
manga.bookmarkedFilter = prevManga.bookmarkedFilter
manga.downloadedFilter = prevManga.downloadedFilter
manga.readFilter = prevManga.readFilter
manga.viewer = prevManga.viewer
manga.chapter_flags = prevManga.chapter_flags
manga.displayMode = prevManga.displayMode
manga.sorting = prevManga.sorting
}
// Update favorite status
@ -123,10 +118,7 @@ class MigrationMangaPresenter(
// Set extra data
manga.favorite = true
db.updateMangaFavorite(manga).executeAsBlocking()
// SearchPresenter#networkToLocalManga may have updated the manga title, so ensure db gets updated title
db.updateMangaTitle(manga).executeAsBlocking()
db.updateMangaMigrate(manga).executeAsBlocking()
}
}
// SY <--