From 6444122c0a3173050afd8db1b2b336a360085a16 Mon Sep 17 00:00:00 2001 From: Koitharu Date: Thu, 21 May 2020 20:30:10 +0300 Subject: [PATCH] Update database: add tracklogs table --- .../java/org/koitharu/kotatsu/KotatsuApp.kt | 9 ++++--- .../koitharu/kotatsu/core/db/MangaDatabase.kt | 7 ++++-- .../koitharu/kotatsu/core/db/TrackLogsDao.kt | 22 +++++++++++++++++ .../kotatsu/core/db/entity/TrackLogEntity.kt | 24 +++++++++++++++++++ .../core/db/entity/TrackLogWithManga.kt | 20 ++++++++++++++++ .../core/db/migrations/Migration5To6.kt | 11 +++++++++ 6 files changed, 86 insertions(+), 7 deletions(-) create mode 100644 app/src/main/java/org/koitharu/kotatsu/core/db/TrackLogsDao.kt create mode 100644 app/src/main/java/org/koitharu/kotatsu/core/db/entity/TrackLogEntity.kt create mode 100644 app/src/main/java/org/koitharu/kotatsu/core/db/entity/TrackLogWithManga.kt create mode 100644 app/src/main/java/org/koitharu/kotatsu/core/db/migrations/Migration5To6.kt diff --git a/app/src/main/java/org/koitharu/kotatsu/KotatsuApp.kt b/app/src/main/java/org/koitharu/kotatsu/KotatsuApp.kt index 50f28cec9..c09bbbac9 100644 --- a/app/src/main/java/org/koitharu/kotatsu/KotatsuApp.kt +++ b/app/src/main/java/org/koitharu/kotatsu/KotatsuApp.kt @@ -3,6 +3,8 @@ package org.koitharu.kotatsu import android.app.Application import androidx.appcompat.app.AppCompatDelegate import androidx.room.Room +import androidx.room.RoomDatabase +import androidx.sqlite.db.SupportSQLiteDatabase import coil.Coil import coil.ComponentRegistry import coil.ImageLoaderBuilder @@ -15,10 +17,7 @@ import org.koin.android.ext.koin.androidLogger import org.koin.core.context.startKoin import org.koin.dsl.module import org.koitharu.kotatsu.core.db.MangaDatabase -import org.koitharu.kotatsu.core.db.migrations.Migration1To2 -import org.koitharu.kotatsu.core.db.migrations.Migration2To3 -import org.koitharu.kotatsu.core.db.migrations.Migration3To4 -import org.koitharu.kotatsu.core.db.migrations.Migration4To5 +import org.koitharu.kotatsu.core.db.migrations.* import org.koitharu.kotatsu.core.local.CbzFetcher import org.koitharu.kotatsu.core.local.PagesCache import org.koitharu.kotatsu.core.local.cookies.PersistentCookieJar @@ -125,5 +124,5 @@ class KotatsuApp : Application() { applicationContext, MangaDatabase::class.java, "kotatsu-db" - ).addMigrations(Migration1To2, Migration2To3, Migration3To4, Migration4To5) + ).addMigrations(Migration1To2, Migration2To3, Migration3To4, Migration4To5, Migration5To6) } \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/core/db/MangaDatabase.kt b/app/src/main/java/org/koitharu/kotatsu/core/db/MangaDatabase.kt index 6c4a9843c..1587bd37d 100644 --- a/app/src/main/java/org/koitharu/kotatsu/core/db/MangaDatabase.kt +++ b/app/src/main/java/org/koitharu/kotatsu/core/db/MangaDatabase.kt @@ -7,8 +7,9 @@ import org.koitharu.kotatsu.core.db.entity.* @Database( entities = [ MangaEntity::class, TagEntity::class, HistoryEntity::class, MangaTagsEntity::class, - FavouriteCategoryEntity::class, FavouriteEntity::class, MangaPrefsEntity::class, TrackEntity::class - ], version = 5 + FavouriteCategoryEntity::class, FavouriteEntity::class, MangaPrefsEntity::class, + TrackEntity::class, TrackLogEntity::class + ], version = 6 ) abstract class MangaDatabase : RoomDatabase() { @@ -25,4 +26,6 @@ abstract class MangaDatabase : RoomDatabase() { abstract val favouriteCategoriesDao: FavouriteCategoriesDao abstract val tracksDao: TracksDao + + abstract val trackLogsDao: TrackLogsDao } \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/core/db/TrackLogsDao.kt b/app/src/main/java/org/koitharu/kotatsu/core/db/TrackLogsDao.kt new file mode 100644 index 000000000..460205052 --- /dev/null +++ b/app/src/main/java/org/koitharu/kotatsu/core/db/TrackLogsDao.kt @@ -0,0 +1,22 @@ +package org.koitharu.kotatsu.core.db + +import androidx.room.* +import org.koitharu.kotatsu.core.db.entity.TrackLogEntity +import org.koitharu.kotatsu.core.db.entity.TrackLogWithManga + +@Dao +interface TrackLogsDao { + + @Transaction + @Query("SELECT * FROM track_logs ORDER BY created_at DESC LIMIT :limit OFFSET :offset") + suspend fun findAll(offset: Int, limit: Int): List + + @Query("DELETE FROM track_logs") + suspend fun clear() + + @Insert(onConflict = OnConflictStrategy.REPLACE) + suspend fun insert(entity: TrackLogEntity): Long + + @Query("DELETE FROM track_logs WHERE manga_id = :mangaId") + suspend fun removeAll(mangaId: Long) +} \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/core/db/entity/TrackLogEntity.kt b/app/src/main/java/org/koitharu/kotatsu/core/db/entity/TrackLogEntity.kt new file mode 100644 index 000000000..cf46e2338 --- /dev/null +++ b/app/src/main/java/org/koitharu/kotatsu/core/db/entity/TrackLogEntity.kt @@ -0,0 +1,24 @@ +package org.koitharu.kotatsu.core.db.entity + +import androidx.room.ColumnInfo +import androidx.room.Entity +import androidx.room.ForeignKey +import androidx.room.PrimaryKey + +@Entity( + tableName = "track_logs", foreignKeys = [ + ForeignKey( + entity = MangaEntity::class, + parentColumns = ["manga_id"], + childColumns = ["manga_id"], + onDelete = ForeignKey.CASCADE + ) + ] +) +data class TrackLogEntity( + @PrimaryKey(autoGenerate = true) + @ColumnInfo(name = "id") val id: Long, + @ColumnInfo(name = "manga_id") val mangaId: Long, + @ColumnInfo(name = "chapters") val chapters: String, + @ColumnInfo(name = "created_at") val createdAt: Long = System.currentTimeMillis() +) \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/core/db/entity/TrackLogWithManga.kt b/app/src/main/java/org/koitharu/kotatsu/core/db/entity/TrackLogWithManga.kt new file mode 100644 index 000000000..8c3b8c1b9 --- /dev/null +++ b/app/src/main/java/org/koitharu/kotatsu/core/db/entity/TrackLogWithManga.kt @@ -0,0 +1,20 @@ +package org.koitharu.kotatsu.core.db.entity + +import androidx.room.Embedded +import androidx.room.Junction +import androidx.room.Relation + +data class TrackLogWithManga( + @Embedded val trackLog: TrackLogEntity, + @Relation( + parentColumn = "manga_id", + entityColumn = "manga_id" + ) + val manga: MangaEntity, + @Relation( + parentColumn = "manga_id", + entityColumn = "tag_id", + associateBy = Junction(MangaTagsEntity::class) + ) + val tags: List +) \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/core/db/migrations/Migration5To6.kt b/app/src/main/java/org/koitharu/kotatsu/core/db/migrations/Migration5To6.kt new file mode 100644 index 000000000..02da0bdfa --- /dev/null +++ b/app/src/main/java/org/koitharu/kotatsu/core/db/migrations/Migration5To6.kt @@ -0,0 +1,11 @@ +package org.koitharu.kotatsu.core.db.migrations + +import androidx.room.migration.Migration +import androidx.sqlite.db.SupportSQLiteDatabase + +object Migration5To6 : Migration(4, 5) { + + override fun migrate(database: SupportSQLiteDatabase) { + database.execSQL("CREATE TABLE IF NOT EXISTS track_logs (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, manga_id INTEGER NOT NULL, chapters TEXT NOT NULL, created_at INTEGER NOT NULL, FOREIGN KEY(manga_id) REFERENCES manga(manga_id) ON UPDATE NO ACTION ON DELETE CASCADE)") + } +} \ No newline at end of file