diff --git a/app/src/main/java/eu/kanade/tachiyomi/Migrations.kt b/app/src/main/java/eu/kanade/tachiyomi/Migrations.kt index 94494e169a..3a350dcd30 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/Migrations.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/Migrations.kt @@ -17,6 +17,7 @@ import eu.kanade.tachiyomi.data.updater.AppUpdateJob import eu.kanade.tachiyomi.extension.ExtensionUpdateJob import eu.kanade.tachiyomi.network.PREF_DOH_CLOUDFLARE import eu.kanade.tachiyomi.ui.library.LibraryPresenter +import eu.kanade.tachiyomi.ui.library.LibrarySort import eu.kanade.tachiyomi.ui.reader.settings.OrientationType import eu.kanade.tachiyomi.ui.recents.RecentsPresenter import eu.kanade.tachiyomi.util.system.launchIO @@ -239,6 +240,21 @@ object Migrations { } } } + if (oldVersion < 110) { + try { + val librarySortString = prefs.getString("library_sorting_mode", "") + if (!librarySortString.isNullOrEmpty()) { + prefs.edit { + remove("library_sorting_mode") + putInt( + "library_sorting_mode", + LibrarySort.deserialize(librarySortString).mainValue, + ) + } + } + } catch (_: Exception) { + } + } return true } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupCreator.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupCreator.kt index f310a0d32e..dc3e1db6fc 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupCreator.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupCreator.kt @@ -46,6 +46,7 @@ import eu.kanade.tachiyomi.source.ConfigurableSource import eu.kanade.tachiyomi.source.SourceManager import eu.kanade.tachiyomi.source.preferenceKey import eu.kanade.tachiyomi.source.sourcePreferences +import eu.kanade.tachiyomi.ui.library.LibrarySort import kotlinx.serialization.protobuf.ProtoBuf import okio.buffer import okio.gzip @@ -244,6 +245,12 @@ class BackupCreator(val context: Context) { private fun Map.toBackupPreferences(): List { return this.filterKeys { !Preference.isPrivate(it) } .mapNotNull { (key, value) -> + // j2k fork differences + if (key == "library_sorting_mode" && value is Int) { + val stringValue = (LibrarySort.valueOf(value) ?: LibrarySort.Title).serialize() + return@mapNotNull BackupPreference(key, StringPreferenceValue(stringValue)) + } + // end j2k fork differences when (value) { is Int -> BackupPreference(key, IntPreferenceValue(value)) is Long -> BackupPreference(key, LongPreferenceValue(value)) diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupRestorer.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupRestorer.kt index 8f59dcce6c..6bb0163ad2 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupRestorer.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupRestorer.kt @@ -28,6 +28,7 @@ import eu.kanade.tachiyomi.data.preference.PreferenceStore import eu.kanade.tachiyomi.extension.ExtensionUpdateJob import eu.kanade.tachiyomi.source.model.SChapter import eu.kanade.tachiyomi.source.sourcePreferences +import eu.kanade.tachiyomi.ui.library.LibrarySort import eu.kanade.tachiyomi.util.BackupUtil import eu.kanade.tachiyomi.util.system.createFileInCacheDir import kotlinx.coroutines.coroutineScope @@ -385,6 +386,15 @@ class BackupRestorer(val context: Context, val notifier: BackupNotifier) { ) { val prefs = preferenceStore.getAll() toRestore.forEach { (key, value) -> + // j2k fork differences + if (key == "library_sorting_mode" && value is StringPreferenceValue && + prefs[key] is Int? + ) { + val intValue = LibrarySort.deserialize(value.value) + preferenceStore.getInt(key).set(intValue.mainValue) + return@forEach + } + // end j2k fork differences when (value) { is IntPreferenceValue -> { if (prefs[key] is Int?) { diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferenceKeys.kt b/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferenceKeys.kt index bcea2fa1fa..55caa2b54f 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferenceKeys.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferenceKeys.kt @@ -139,8 +139,6 @@ object PreferenceKeys { const val showEmptyCategoriesFiltering = "show_empty_categories_filtering" - const val librarySortingMode = "library_sorting_mode" - const val automaticExtUpdates = "automatic_ext_updates" const val installedExtensionsOrder = "installed_extensions_order" diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt b/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt index 6bcdc260b1..2738d479df 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt @@ -287,7 +287,7 @@ class PreferencesHelper(val context: Context) { fun showEmptyCategoriesWhileFiltering() = flowPrefs.getBoolean(Keys.showEmptyCategoriesFiltering, false) - fun librarySortingMode() = flowPrefs.getInt(Keys.librarySortingMode, 0) + fun librarySortingMode() = flowPrefs.getInt("library_sorting_mode", 0) fun librarySortingAscending() = flowPrefs.getBoolean("library_sorting_ascending", true) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt index 1e82cff2e5..0c99e67c40 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt @@ -204,9 +204,7 @@ class LibraryPresenter( preferences.lastUsedCategory().set(order) val category = categories.find { it.order == order }?.id ?: return currentCategory = category - view?.onNextLibraryUpdate( - sectionedLibraryItems[currentCategory] ?: blankItem(), - ) + view?.onNextLibraryUpdate(sectionedLibraryItems[currentCategory] ?: blankItem()) } fun blankItem(id: Int = currentCategory): List { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibrarySort.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibrarySort.kt index 2db865329e..baae2ac11c 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibrarySort.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibrarySort.kt @@ -38,6 +38,19 @@ enum class LibrarySort( val categoryValueDescending: Char get() = if (this == DragAndDrop) 'D' else 'b' + catValue * 2 + fun serialize(): String { + val type = when (this) { + LastRead -> "LAST_READ" + Unread -> "UNREAD_COUNT" + TotalChapters -> "TOTAL_CHAPTERS" + LatestChapter -> "LATEST_CHAPTER" + DateFetched -> "CHAPTER_FETCH_DATE" + DateAdded -> "DATE_ADDED" + else -> "ALPHABETICAL" + } + return "$type,ASCENDING" + } + @StringRes fun stringRes(isDynamic: Boolean) = if (isDynamic) dynamicStringRes else stringRes @@ -56,6 +69,26 @@ enum class LibrarySort( } companion object { + fun deserialize(serialized: String): LibrarySort { + if (serialized.isEmpty()) return Title + return try { + val values = serialized.split(",") + when (values[0]) { + "ALPHABETICAL" -> Title + "LAST_READ" -> LastRead + "LAST_MANGA_UPDATE" -> LatestChapter + "UNREAD_COUNT" -> Unread + "TOTAL_CHAPTERS" -> TotalChapters + "LATEST_CHAPTER" -> LatestChapter + "CHAPTER_FETCH_DATE" -> DateFetched + "DATE_ADDED" -> DateAdded + else -> Title + } + } catch (e: Exception) { + Title + } + } + fun valueOf(value: Int) = entries.find { it.mainValue == value } fun valueOf(char: Char?) = entries.find { it.categoryValue == char || it.categoryValueDescending == char } }