mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-31 14:27:57 +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