diff --git a/app/src/androidTest/java/org/koitharu/kotatsu/core/db/MangaDatabaseTest.kt b/app/src/androidTest/java/org/koitharu/kotatsu/core/db/MangaDatabaseTest.kt
index 6ff4fe4b2..daf61989e 100644
--- a/app/src/androidTest/java/org/koitharu/kotatsu/core/db/MangaDatabaseTest.kt
+++ b/app/src/androidTest/java/org/koitharu/kotatsu/core/db/MangaDatabaseTest.kt
@@ -68,6 +68,7 @@ class MangaDatabaseTest {
Migration10To11(),
Migration11To12(),
Migration12To13(),
+ Migration13To14(),
)
=======
>>>>>>> devel
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index bad45ea16..880e595c3 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -10,6 +10,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
\ No newline at end of file
+
diff --git a/app/src/main/java/org/koitharu/kotatsu/KotatsuApp.kt b/app/src/main/java/org/koitharu/kotatsu/KotatsuApp.kt
index 7c2d53226..957dc47ea 100644
--- a/app/src/main/java/org/koitharu/kotatsu/KotatsuApp.kt
+++ b/app/src/main/java/org/koitharu/kotatsu/KotatsuApp.kt
@@ -38,6 +38,7 @@ import org.koitharu.kotatsu.scrobbling.shikimori.shikimoriModule
import org.koitharu.kotatsu.search.searchModule
import org.koitharu.kotatsu.settings.settingsModule
import org.koitharu.kotatsu.suggestions.suggestionsModule
+import org.koitharu.kotatsu.sync.syncModule
import org.koitharu.kotatsu.tracker.trackerModule
import org.koitharu.kotatsu.widget.appWidgetModule
@@ -74,6 +75,7 @@ class KotatsuApp : Application() {
readerModule,
appWidgetModule,
suggestionsModule,
+ syncModule,
shikimoriModule,
bookmarksModule,
libraryModule,
@@ -154,4 +156,4 @@ class KotatsuApp : Application() {
.detectFragmentTagUsage()
.build()
}
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/org/koitharu/kotatsu/core/backup/JsonDeserializer.kt b/app/src/main/java/org/koitharu/kotatsu/core/backup/JsonDeserializer.kt
index 9416afcb9..42aa846b1 100644
--- a/app/src/main/java/org/koitharu/kotatsu/core/backup/JsonDeserializer.kt
+++ b/app/src/main/java/org/koitharu/kotatsu/core/backup/JsonDeserializer.kt
@@ -19,6 +19,7 @@ class JsonDeserializer(private val json: JSONObject) {
categoryId = json.getLong("category_id"),
sortKey = json.getIntOrDefault("sort_key", 0),
createdAt = json.getLong("created_at"),
+ deletedAt = 0L,
)
fun toMangaEntity() = MangaEntity(
@@ -51,6 +52,7 @@ class JsonDeserializer(private val json: JSONObject) {
page = json.getInt("page"),
scroll = json.getDouble("scroll").toFloat(),
percent = json.getFloatOrDefault("percent", -1f),
+ deletedAt = 0L,
)
fun toFavouriteCategoryEntity() = FavouriteCategoryEntity(
@@ -61,5 +63,6 @@ class JsonDeserializer(private val json: JSONObject) {
order = json.getStringOrNull("order") ?: SortOrder.NEWEST.name,
track = json.getBooleanOrDefault("track", true),
isVisibleInLibrary = json.getBooleanOrDefault("show_in_lib", true),
+ deletedAt = 0L,
)
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/org/koitharu/kotatsu/core/db/DatabaseModule.kt b/app/src/main/java/org/koitharu/kotatsu/core/db/DatabaseModule.kt
index 215d02259..150dba8dd 100644
--- a/app/src/main/java/org/koitharu/kotatsu/core/db/DatabaseModule.kt
+++ b/app/src/main/java/org/koitharu/kotatsu/core/db/DatabaseModule.kt
@@ -6,4 +6,4 @@ import org.koin.dsl.module
val databaseModule
get() = module {
single { MangaDatabase(androidContext()) }
- }
\ No newline at end of file
+ }
diff --git a/app/src/main/java/org/koitharu/kotatsu/core/db/DatabasePrePopulateCallback.kt b/app/src/main/java/org/koitharu/kotatsu/core/db/DatabasePrePopulateCallback.kt
index 435882014..e13b0d26a 100644
--- a/app/src/main/java/org/koitharu/kotatsu/core/db/DatabasePrePopulateCallback.kt
+++ b/app/src/main/java/org/koitharu/kotatsu/core/db/DatabasePrePopulateCallback.kt
@@ -10,8 +10,16 @@ class DatabasePrePopulateCallback(private val resources: Resources) : RoomDataba
override fun onCreate(db: SupportSQLiteDatabase) {
db.execSQL(
- "INSERT INTO favourite_categories (created_at, sort_key, title, `order`, track, show_in_lib) VALUES (?,?,?,?,?,?)",
- arrayOf(System.currentTimeMillis(), 1, resources.getString(R.string.read_later), SortOrder.NEWEST.name, 1, 1)
+ "INSERT INTO favourite_categories (created_at, sort_key, title, `order`, track, show_in_lib, `deleted_at`) VALUES (?,?,?,?,?,?,?)",
+ arrayOf(
+ System.currentTimeMillis(),
+ 1,
+ resources.getString(R.string.read_later),
+ SortOrder.NEWEST.name,
+ 1,
+ 1,
+ 0L,
+ )
)
}
-}
\ 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 5552e10d5..a9649e942 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
@@ -30,7 +30,7 @@ import org.koitharu.kotatsu.tracker.data.TrackEntity
import org.koitharu.kotatsu.tracker.data.TrackLogEntity
import org.koitharu.kotatsu.tracker.data.TracksDao
-const val DATABASE_VERSION = 13
+const val DATABASE_VERSION = 14
@Database(
entities = [
@@ -80,6 +80,7 @@ val databaseMigrations: Array
Migration10To11(),
Migration11To12(),
Migration12To13(),
+ Migration13To14(),
)
fun MangaDatabase(context: Context): MangaDatabase = Room
diff --git a/app/src/main/java/org/koitharu/kotatsu/core/db/Tables.kt b/app/src/main/java/org/koitharu/kotatsu/core/db/Tables.kt
index 28920a626..7fd8c8786 100644
--- a/app/src/main/java/org/koitharu/kotatsu/core/db/Tables.kt
+++ b/app/src/main/java/org/koitharu/kotatsu/core/db/Tables.kt
@@ -1,6 +1,5 @@
package org.koitharu.kotatsu.core.db
-
const val TABLE_FAVOURITES = "favourites"
const val TABLE_MANGA = "manga"
const val TABLE_TAGS = "tags"
diff --git a/app/src/main/java/org/koitharu/kotatsu/core/db/entity/MangaEntity.kt b/app/src/main/java/org/koitharu/kotatsu/core/db/entity/MangaEntity.kt
index 36e534c71..e2c474399 100644
--- a/app/src/main/java/org/koitharu/kotatsu/core/db/entity/MangaEntity.kt
+++ b/app/src/main/java/org/koitharu/kotatsu/core/db/entity/MangaEntity.kt
@@ -20,4 +20,4 @@ data class MangaEntity(
@ColumnInfo(name = "state") val state: String?,
@ColumnInfo(name = "author") val author: String?,
@ColumnInfo(name = "source") val source: String,
-)
\ No newline at end of file
+)
diff --git a/app/src/main/java/org/koitharu/kotatsu/core/db/entity/MangaTagsEntity.kt b/app/src/main/java/org/koitharu/kotatsu/core/db/entity/MangaTagsEntity.kt
index e7a59c5d0..bc343f784 100644
--- a/app/src/main/java/org/koitharu/kotatsu/core/db/entity/MangaTagsEntity.kt
+++ b/app/src/main/java/org/koitharu/kotatsu/core/db/entity/MangaTagsEntity.kt
@@ -13,13 +13,13 @@ import org.koitharu.kotatsu.core.db.TABLE_MANGA_TAGS
entity = MangaEntity::class,
parentColumns = ["manga_id"],
childColumns = ["manga_id"],
- onDelete = ForeignKey.CASCADE
+ onDelete = ForeignKey.CASCADE,
),
ForeignKey(
entity = TagEntity::class,
parentColumns = ["tag_id"],
childColumns = ["tag_id"],
- onDelete = ForeignKey.CASCADE
+ onDelete = ForeignKey.CASCADE,
)
]
)
diff --git a/app/src/main/java/org/koitharu/kotatsu/core/db/entity/TagEntity.kt b/app/src/main/java/org/koitharu/kotatsu/core/db/entity/TagEntity.kt
index 7f147c992..6c7907da6 100644
--- a/app/src/main/java/org/koitharu/kotatsu/core/db/entity/TagEntity.kt
+++ b/app/src/main/java/org/koitharu/kotatsu/core/db/entity/TagEntity.kt
@@ -12,4 +12,4 @@ data class TagEntity(
@ColumnInfo(name = "title") val title: String,
@ColumnInfo(name = "key") val key: String,
@ColumnInfo(name = "source") val source: String,
-)
\ No newline at end of file
+)
diff --git a/app/src/main/java/org/koitharu/kotatsu/core/db/migrations/Migration11To12.kt b/app/src/main/java/org/koitharu/kotatsu/core/db/migrations/Migration11To12.kt
index 9d13d2420..ae82764b2 100644
--- a/app/src/main/java/org/koitharu/kotatsu/core/db/migrations/Migration11To12.kt
+++ b/app/src/main/java/org/koitharu/kotatsu/core/db/migrations/Migration11To12.kt
@@ -24,4 +24,4 @@ class Migration11To12 : Migration(11, 12) {
database.execSQL("ALTER TABLE history ADD COLUMN `percent` REAL NOT NULL DEFAULT -1")
database.execSQL("ALTER TABLE bookmarks ADD COLUMN `percent` REAL NOT NULL DEFAULT -1")
}
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/org/koitharu/kotatsu/core/db/migrations/Migration13To14.kt b/app/src/main/java/org/koitharu/kotatsu/core/db/migrations/Migration13To14.kt
new file mode 100644
index 000000000..204e20843
--- /dev/null
+++ b/app/src/main/java/org/koitharu/kotatsu/core/db/migrations/Migration13To14.kt
@@ -0,0 +1,13 @@
+package org.koitharu.kotatsu.core.db.migrations
+
+import androidx.room.migration.Migration
+import androidx.sqlite.db.SupportSQLiteDatabase
+
+class Migration13To14 : Migration(13, 14) {
+
+ override fun migrate(database: SupportSQLiteDatabase) {
+ database.execSQL("ALTER TABLE favourite_categories ADD COLUMN `deleted_at` INTEGER NOT NULL DEFAULT 0")
+ database.execSQL("ALTER TABLE favourites ADD COLUMN `deleted_at` INTEGER NOT NULL DEFAULT 0")
+ database.execSQL("ALTER TABLE history ADD COLUMN `deleted_at` INTEGER NOT NULL DEFAULT 0")
+ }
+}
diff --git a/app/src/main/java/org/koitharu/kotatsu/core/network/CommonHeaders.kt b/app/src/main/java/org/koitharu/kotatsu/core/network/CommonHeaders.kt
index f377404c8..9b27ccfc2 100644
--- a/app/src/main/java/org/koitharu/kotatsu/core/network/CommonHeaders.kt
+++ b/app/src/main/java/org/koitharu/kotatsu/core/network/CommonHeaders.kt
@@ -9,6 +9,7 @@ object CommonHeaders {
const val ACCEPT = "Accept"
const val CONTENT_DISPOSITION = "Content-Disposition"
const val COOKIE = "Cookie"
+ const val CONTENT_ENCODING = "Content-Encoding"
const val AUTHORIZATION = "Authorization"
val CACHE_CONTROL_DISABLED: CacheControl
diff --git a/app/src/main/java/org/koitharu/kotatsu/core/network/GZipInterceptor.kt b/app/src/main/java/org/koitharu/kotatsu/core/network/GZipInterceptor.kt
index d923b0cec..1e53a4e7e 100644
--- a/app/src/main/java/org/koitharu/kotatsu/core/network/GZipInterceptor.kt
+++ b/app/src/main/java/org/koitharu/kotatsu/core/network/GZipInterceptor.kt
@@ -2,7 +2,7 @@ package org.koitharu.kotatsu.core.network
import okhttp3.Interceptor
import okhttp3.Response
-import org.jsoup.helper.HttpConnection.CONTENT_ENCODING
+import org.koitharu.kotatsu.core.network.CommonHeaders.CONTENT_ENCODING
class GZipInterceptor : Interceptor {
diff --git a/app/src/main/java/org/koitharu/kotatsu/core/prefs/AppSettings.kt b/app/src/main/java/org/koitharu/kotatsu/core/prefs/AppSettings.kt
index 826573312..cbb330d6e 100644
--- a/app/src/main/java/org/koitharu/kotatsu/core/prefs/AppSettings.kt
+++ b/app/src/main/java/org/koitharu/kotatsu/core/prefs/AppSettings.kt
@@ -315,6 +315,7 @@ class AppSettings(context: Context) {
const val KEY_DOH = "doh"
const val KEY_EXIT_CONFIRM = "exit_confirm"
const val KEY_INCOGNITO_MODE = "incognito"
+ const val KEY_SYNC = "sync"
// About
const val KEY_APP_UPDATE = "app_update"
@@ -325,4 +326,4 @@ class AppSettings(context: Context) {
private const val NETWORK_ALWAYS = 1
private const val NETWORK_NON_METERED = 2
}
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/org/koitharu/kotatsu/favourites/data/FavouriteCategoriesDao.kt b/app/src/main/java/org/koitharu/kotatsu/favourites/data/FavouriteCategoriesDao.kt
index e3227561a..b4b94737f 100644
--- a/app/src/main/java/org/koitharu/kotatsu/favourites/data/FavouriteCategoriesDao.kt
+++ b/app/src/main/java/org/koitharu/kotatsu/favourites/data/FavouriteCategoriesDao.kt
@@ -6,13 +6,13 @@ import kotlinx.coroutines.flow.Flow
@Dao
abstract class FavouriteCategoriesDao {
- @Query("SELECT * FROM favourite_categories WHERE category_id = :id")
+ @Query("SELECT * FROM favourite_categories WHERE category_id = :id AND deleted_at = 0")
abstract suspend fun find(id: Int): FavouriteCategoryEntity
- @Query("SELECT * FROM favourite_categories ORDER BY sort_key")
+ @Query("SELECT * FROM favourite_categories WHERE deleted_at = 0 ORDER BY sort_key")
abstract suspend fun findAll(): List
- @Query("SELECT * FROM favourite_categories ORDER BY sort_key")
+ @Query("SELECT * FROM favourite_categories WHERE deleted_at = 0 ORDER BY sort_key")
abstract fun observeAll(): Flow>
@MapInfo(valueColumn = "cover")
@@ -26,7 +26,7 @@ abstract class FavouriteCategoriesDao {
)
abstract fun observeAllWithDetails(): Flow