mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-31 06:17:57 +01:00 
			
		
		
		
	Fix database corruption (#7042)
When using SQLDelight and Storio at the same time
This commit is contained in:
		| @@ -2,6 +2,8 @@ package eu.kanade.tachiyomi | ||||
|  | ||||
| import android.app.Application | ||||
| import androidx.core.content.ContextCompat | ||||
| import androidx.sqlite.db.SupportSQLiteOpenHelper | ||||
| import androidx.sqlite.db.framework.FrameworkSQLiteOpenHelperFactory | ||||
| import com.squareup.sqldelight.android.AndroidSqliteDriver | ||||
| import com.squareup.sqldelight.db.SqlDriver | ||||
| import data.History | ||||
| @@ -34,15 +36,19 @@ class AppModule(val app: Application) : InjektModule { | ||||
|     override fun InjektRegistrar.registerInjectables() { | ||||
|         addSingleton(app) | ||||
|  | ||||
|         addSingletonFactory { DbOpenCallback() } | ||||
|         // This is used to allow incremental migration from Storio | ||||
|         addSingletonFactory<SupportSQLiteOpenHelper> { | ||||
|             FrameworkSQLiteOpenHelperFactory().create( | ||||
|                 SupportSQLiteOpenHelper.Configuration.builder(app) | ||||
|                     .callback(DbOpenCallback()) | ||||
|                     .name(DbOpenCallback.DATABASE_NAME) | ||||
|                     .noBackupDirectory(false) | ||||
|                     .build() | ||||
|             ) | ||||
|         } | ||||
|  | ||||
|         addSingletonFactory<SqlDriver> { | ||||
|             AndroidSqliteDriver( | ||||
|                 schema = Database.Schema, | ||||
|                 context = app, | ||||
|                 name = DbOpenCallback.DATABASE_NAME, | ||||
|                 callback = get<DbOpenCallback>() | ||||
|             ) | ||||
|             AndroidSqliteDriver(openHelper = get()) | ||||
|         } | ||||
|  | ||||
|         addSingletonFactory { | ||||
|   | ||||
| @@ -21,24 +21,18 @@ import eu.kanade.tachiyomi.data.database.queries.HistoryQueries | ||||
| import eu.kanade.tachiyomi.data.database.queries.MangaCategoryQueries | ||||
| import eu.kanade.tachiyomi.data.database.queries.MangaQueries | ||||
| import eu.kanade.tachiyomi.data.database.queries.TrackQueries | ||||
| import io.requery.android.database.sqlite.RequerySQLiteOpenHelperFactory | ||||
|  | ||||
| /** | ||||
|  * This class provides operations to manage the database through its interfaces. | ||||
|  */ | ||||
| open class DatabaseHelper( | ||||
|     context: Context, | ||||
|     callback: DbOpenCallback | ||||
|     openHelper: SupportSQLiteOpenHelper, | ||||
| ) : | ||||
|     MangaQueries, ChapterQueries, TrackQueries, CategoryQueries, MangaCategoryQueries, HistoryQueries { | ||||
|  | ||||
|     private val configuration = SupportSQLiteOpenHelper.Configuration.builder(context) | ||||
|         .name(DbOpenCallback.DATABASE_NAME) | ||||
|         .callback(callback) | ||||
|         .build() | ||||
|  | ||||
|     override val db = DefaultStorIOSQLite.builder() | ||||
|         .sqliteOpenHelper(RequerySQLiteOpenHelperFactory().create(configuration)) | ||||
|         .sqliteOpenHelper(openHelper) | ||||
|         .addTypeMapping(Manga::class.java, MangaTypeMapping()) | ||||
|         .addTypeMapping(Chapter::class.java, ChapterTypeMapping()) | ||||
|         .addTypeMapping(Track::class.java, TrackTypeMapping()) | ||||
|   | ||||
| @@ -4,6 +4,7 @@ import androidx.sqlite.db.SupportSQLiteDatabase | ||||
| import androidx.sqlite.db.SupportSQLiteOpenHelper | ||||
| import com.squareup.sqldelight.android.AndroidSqliteDriver | ||||
| import eu.kanade.tachiyomi.Database | ||||
| import logcat.logcat | ||||
|  | ||||
| class DbOpenCallback : SupportSQLiteOpenHelper.Callback(Database.Schema.version) { | ||||
|  | ||||
| @@ -15,15 +16,19 @@ class DbOpenCallback : SupportSQLiteOpenHelper.Callback(Database.Schema.version) | ||||
|     } | ||||
|  | ||||
|     override fun onCreate(db: SupportSQLiteDatabase) { | ||||
|         logcat { "Creating new database" } | ||||
|         Database.Schema.create(AndroidSqliteDriver(database = db, cacheSize = 1)) | ||||
|     } | ||||
|  | ||||
|     override fun onUpgrade(db: SupportSQLiteDatabase, oldVersion: Int, newVersion: Int) { | ||||
|         Database.Schema.migrate( | ||||
|             driver = AndroidSqliteDriver(database = db, cacheSize = 1), | ||||
|             oldVersion = oldVersion, | ||||
|             newVersion = newVersion | ||||
|         ) | ||||
|         if (oldVersion < newVersion) { | ||||
|             logcat { "Upgrading database from $oldVersion to $newVersion" } | ||||
|             Database.Schema.migrate( | ||||
|                 driver = AndroidSqliteDriver(database = db, cacheSize = 1), | ||||
|                 oldVersion = oldVersion, | ||||
|                 newVersion = newVersion | ||||
|             ) | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     override fun onConfigure(db: SupportSQLiteDatabase) { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user