mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-11-04 08:08:55 +01:00 
			
		
		
		
	Force Migration to display titles from source rather than from local DB, and update local titles when migrated (#1670)
This commit is contained in:
		@@ -82,6 +82,11 @@ interface MangaQueries : DbProvider {
 | 
			
		||||
            .withPutResolver(MangaViewerPutResolver())
 | 
			
		||||
            .prepare()
 | 
			
		||||
 | 
			
		||||
    fun updateMangaTitle(manga: Manga) = db.put()
 | 
			
		||||
            .`object`(manga)
 | 
			
		||||
            .withPutResolver(MangaTitlePutResolver())
 | 
			
		||||
            .prepare()
 | 
			
		||||
 | 
			
		||||
    fun deleteManga(manga: Manga) = db.delete().`object`(manga).prepare()
 | 
			
		||||
 | 
			
		||||
    fun deleteMangas(mangas: List<Manga>) = db.delete().objects(mangas).prepare()
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,32 @@
 | 
			
		||||
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 MangaTitlePutResolver : 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(1).apply {
 | 
			
		||||
        put(MangaTable.COL_TITLE, manga.title)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -20,10 +20,10 @@ class MangaViewerPutResolver : PutResolver<Manga>() {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fun mapToUpdateQuery(manga: Manga) = UpdateQuery.builder()
 | 
			
		||||
        .table(MangaTable.TABLE)
 | 
			
		||||
        .where("${MangaTable.COL_ID} = ?")
 | 
			
		||||
        .whereArgs(manga.id)
 | 
			
		||||
        .build()
 | 
			
		||||
            .table(MangaTable.TABLE)
 | 
			
		||||
            .where("${MangaTable.COL_ID} = ?")
 | 
			
		||||
            .whereArgs(manga.id)
 | 
			
		||||
            .build()
 | 
			
		||||
 | 
			
		||||
    fun mapToContentValues(manga: Manga) = ContentValues(1).apply {
 | 
			
		||||
        put(MangaTable.COL_VIEWER, manga.viewer)
 | 
			
		||||
 
 | 
			
		||||
@@ -239,7 +239,7 @@ open class CatalogueSearchPresenter(
 | 
			
		||||
     * @param sManga the manga from the source.
 | 
			
		||||
     * @return a manga from the database.
 | 
			
		||||
     */
 | 
			
		||||
    private fun networkToLocalManga(sManga: SManga, sourceId: Long): Manga {
 | 
			
		||||
    protected open fun networkToLocalManga(sManga: SManga, sourceId: Long): Manga {
 | 
			
		||||
        var localManga = db.getManga(sManga.url, sourceId).executeAsBlocking()
 | 
			
		||||
        if (localManga == null) {
 | 
			
		||||
            val newManga = Manga.create(sManga.url, sManga.title, sourceId)
 | 
			
		||||
 
 | 
			
		||||
@@ -146,6 +146,9 @@ class MigrationPresenter(
 | 
			
		||||
            }
 | 
			
		||||
            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()
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -2,6 +2,7 @@ package eu.kanade.tachiyomi.ui.migration
 | 
			
		||||
 | 
			
		||||
import eu.kanade.tachiyomi.data.database.models.Manga
 | 
			
		||||
import eu.kanade.tachiyomi.source.CatalogueSource
 | 
			
		||||
import eu.kanade.tachiyomi.source.model.SManga
 | 
			
		||||
import eu.kanade.tachiyomi.ui.catalogue.global_search.CatalogueSearchCardItem
 | 
			
		||||
import eu.kanade.tachiyomi.ui.catalogue.global_search.CatalogueSearchItem
 | 
			
		||||
import eu.kanade.tachiyomi.ui.catalogue.global_search.CatalogueSearchPresenter
 | 
			
		||||
@@ -21,4 +22,11 @@ class SearchPresenter(
 | 
			
		||||
        //Set the catalogue search item as highlighted if the source matches that of the selected manga
 | 
			
		||||
        return CatalogueSearchItem(source, results, source.id == manga.source)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun networkToLocalManga(sManga: SManga, sourceId: Long): Manga {
 | 
			
		||||
        val localManga = super.networkToLocalManga(sManga, sourceId)
 | 
			
		||||
        // For migration, displayed title should always match source rather than local DB
 | 
			
		||||
        localManga.title = sManga.title
 | 
			
		||||
        return localManga
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user