Remove drag and drop

This commit is contained in:
Jobobby04 2022-07-16 19:49:46 -04:00
parent b4adab5eb4
commit dd68ef4ba8
15 changed files with 72 additions and 97 deletions

View File

@ -2,14 +2,11 @@ package eu.kanade.data.category
import eu.kanade.domain.category.model.Category import eu.kanade.domain.category.model.Category
val categoryMapper: (Long, String, Long, Long, List<Long>) -> Category = { id, name, order, flags, mangaOrder -> val categoryMapper: (Long, String, Long, Long) -> Category = { id, name, order, flags ->
Category( Category(
id = id, id = id,
name = name, name = name,
order = order, order = order,
flags = flags, flags = flags,
// SY -->
mangaOrder = mangaOrder,
// SY <--
) )
} }

View File

@ -1,7 +1,6 @@
package eu.kanade.data.category package eu.kanade.data.category
import eu.kanade.data.DatabaseHandler import eu.kanade.data.DatabaseHandler
import eu.kanade.data.listOfLongsAdapter
import eu.kanade.domain.category.model.Category import eu.kanade.domain.category.model.Category
import eu.kanade.domain.category.model.CategoryUpdate import eu.kanade.domain.category.model.CategoryUpdate
import eu.kanade.domain.category.repository.CategoryRepository import eu.kanade.domain.category.repository.CategoryRepository
@ -39,9 +38,6 @@ class CategoryRepositoryImpl(
name = category.name, name = category.name,
order = category.order, order = category.order,
flags = category.flags, flags = category.flags,
// SY -->
mangaOrder = category.mangaOrder,
// SY <--
) )
categoriesQueries.selectLastInsertedRowId() categoriesQueries.selectLastInsertedRowId()
} }
@ -68,9 +64,6 @@ class CategoryRepositoryImpl(
order = update.order, order = update.order,
flags = update.flags, flags = update.flags,
categoryId = update.id, categoryId = update.id,
// SY -->
mangaOrder = update.mangaOrder?.let(listOfLongsAdapter::encode),
// SY <--
) )
} }

View File

@ -24,7 +24,6 @@ class CreateCategoryWithName(
name = name, name = name,
order = nextOrder, order = nextOrder,
flags = 0, flags = 0,
mangaOrder = emptyList(),
) )
try { try {

View File

@ -14,9 +14,6 @@ data class Category(
val name: String, val name: String,
val order: Long, val order: Long,
val flags: Long, val flags: Long,
// SY -->
val mangaOrder: List<Long>,
// SY <--
) : Serializable { ) : Serializable {
val displayMode: Long val displayMode: Long
@ -35,7 +32,6 @@ data class Category(
name = context.getString(R.string.label_default), name = context.getString(R.string.label_default),
order = 0, order = 0,
flags = 0, flags = 0,
mangaOrder = emptyList(),
) )
} }
} }

View File

@ -5,7 +5,4 @@ data class CategoryUpdate(
val name: String? = null, val name: String? = null,
val order: Long? = null, val order: Long? = null,
val flags: Long? = null, val flags: Long? = null,
// SY -->
val mangaOrder: List<Long>? = null,
// SY <--
) )

View File

@ -293,7 +293,7 @@ class FullBackupManager(context: Context) : AbstractBackupManager(context) {
// Let the db assign the id // Let the db assign the id
category.id = null category.id = null
category.id = handler.awaitOne { category.id = handler.awaitOne {
categoriesQueries.insert(category.name, category.order.toLong(), category.flags.toLong(), category.mangaOrder) categoriesQueries.insert(category.name, category.order.toLong(), category.flags.toLong())
categoriesQueries.selectLastInsertedRowId() categoriesQueries.selectLastInsertedRowId()
}.toInt() }.toInt()
} }

View File

@ -12,23 +12,22 @@ class BackupCategory(
// Bump by 100 to specify this is a 0.x value // Bump by 100 to specify this is a 0.x value
@ProtoNumber(100) var flags: Long = 0, @ProtoNumber(100) var flags: Long = 0,
// SY specific values // SY specific values
@ProtoNumber(600) var mangaOrder: List<Long> = emptyList(), /*@ProtoNumber(600) var mangaOrder: List<Long> = emptyList(),*/
) { ) {
fun getCategoryImpl(): CategoryImpl { fun getCategoryImpl(): CategoryImpl {
return CategoryImpl().apply { return CategoryImpl().apply {
name = this@BackupCategory.name name = this@BackupCategory.name
flags = this@BackupCategory.flags.toInt() flags = this@BackupCategory.flags.toInt()
order = this@BackupCategory.order.toInt() order = this@BackupCategory.order.toInt()
mangaOrder = this@BackupCategory.mangaOrder /*mangaOrder = this@BackupCategory.mangaOrder*/
} }
} }
} }
val backupCategoryMapper = { _: Long, name: String, order: Long, flags: Long, mangaOrder: List<Long> -> val backupCategoryMapper = { _: Long, name: String, order: Long, flags: Long ->
BackupCategory( BackupCategory(
name = name, name = name,
order = order, order = order,
flags = flags, flags = flags,
mangaOrder = mangaOrder,
) )
} }

View File

@ -16,10 +16,6 @@ interface Category : Serializable {
var flags: Int var flags: Int
// SY -->
var mangaOrder: List<Long>
// SY <--
private fun setFlags(flag: Int, mask: Int) { private fun setFlags(flag: Int, mask: Int) {
flags = flags and mask.inv() or (flag and mask) flags = flags and mask.inv() or (flag and mask)
} }
@ -44,6 +40,5 @@ fun Category.toDomainCategory(): DomainCategory? {
name = this.name, name = this.name,
order = this.order.toLong(), order = this.order.toLong(),
flags = this.flags.toLong(), flags = this.flags.toLong(),
mangaOrder = mangaOrder,
) )
} }

View File

@ -10,10 +10,6 @@ class CategoryImpl : Category {
override var flags: Int = 0 override var flags: Int = 0
// SY -->
override var mangaOrder: List<Long> = emptyList()
// SY <--
override fun equals(other: Any?): Boolean { override fun equals(other: Any?): Boolean {
if (this === other) return true if (this === other) return true
if (other == null || javaClass != other.javaClass) return false if (other == null || javaClass != other.javaClass) return false

View File

@ -527,9 +527,6 @@ class LibraryPresenter(
i1.manga.date_added.compareTo(i2.manga.date_added) i1.manga.date_added.compareTo(i2.manga.date_added)
} }
// SY --> // SY -->
SortModeSetting.DRAG_AND_DROP -> {
0
}
SortModeSetting.TAG_LIST -> { SortModeSetting.TAG_LIST -> {
val manga1IndexOfTag = listOfTags.indexOfFirst { i1.manga.getGenres()?.contains(it) ?: false } val manga1IndexOfTag = listOfTags.indexOfFirst { i1.manga.getGenres()?.contains(it) ?: false }
val manga2IndexOfTag = listOfTags.indexOfFirst { i2.manga.getGenres()?.contains(it) ?: false } val manga2IndexOfTag = listOfTags.indexOfFirst { i2.manga.getGenres()?.contains(it) ?: false }
@ -589,7 +586,7 @@ class LibraryPresenter(
val items = if (groupType == LibraryGroup.BY_DEFAULT) { val items = if (groupType == LibraryGroup.BY_DEFAULT) {
map map
} else if (!libraryIsGrouped) { } else if (!libraryIsGrouped) {
editedCategories = listOf(Category(0, "All", 0, 0, emptyList())) editedCategories = listOf(Category(0, "All", 0, 0))
mapOf( mapOf(
0L to map.values.flatten().distinctBy { it.manga.id }, 0L to map.values.flatten().distinctBy { it.manga.id },
) )
@ -1138,7 +1135,7 @@ class LibraryPresenter(
LibraryGroup.BY_TRACK_STATUS, LibraryGroup.BY_STATUS -> grouping.values.filter { it.first in map.keys } LibraryGroup.BY_TRACK_STATUS, LibraryGroup.BY_STATUS -> grouping.values.filter { it.first in map.keys }
else -> grouping.values else -> grouping.values
}.map { (id, name) -> }.map { (id, name) ->
Category(id, name, 0, 0, emptyList()) Category(id, name, 0, 0)
} }
return map to categories return map to categories

View File

@ -216,14 +216,13 @@ class LibrarySettingsSheet(
private val dateAdded = Item.MultiSort(R.string.action_sort_date_added, this) private val dateAdded = Item.MultiSort(R.string.action_sort_date_added, this)
// SY --> // SY -->
private val dragAndDrop = Item.MultiSort(R.string.action_sort_drag_and_drop, this)
private val tagList = Item.MultiSort(R.string.tag_sorting, this) private val tagList = Item.MultiSort(R.string.tag_sorting, this)
// SY <-- // SY <--
override val header = null override val header = null
override val items = override val items =
listOf(alphabetically, lastRead, lastChecked, unread, total, latestChapter, chapterFetchDate, dateAdded /* SY --> */, dragAndDrop) + if (preferences.sortTagsForLibrary().get().isNotEmpty()) listOf(tagList) else emptyList() // SY <-- listOf(alphabetically, lastRead, lastChecked, unread, total, latestChapter, chapterFetchDate, dateAdded /* SY --> */) + if (preferences.sortTagsForLibrary().get().isNotEmpty()) listOf(tagList) else emptyList() // SY <--
override val footer = null override val footer = null
override fun initModels() { override fun initModels() {
@ -251,8 +250,6 @@ class LibrarySettingsSheet(
dateAdded.state = dateAdded.state =
if (sorting == SortModeSetting.DATE_ADDED) order else Item.MultiSort.SORT_NONE if (sorting == SortModeSetting.DATE_ADDED) order else Item.MultiSort.SORT_NONE
// SY --> // SY -->
dragAndDrop.state =
if (sorting == SortModeSetting.DRAG_AND_DROP) order else Item.MultiSort.SORT_NONE
tagList.state = tagList.state =
if (sorting == SortModeSetting.TAG_LIST) order else Item.MultiSort.SORT_NONE if (sorting == SortModeSetting.TAG_LIST) order else Item.MultiSort.SORT_NONE
// SY <-- // SY <--
@ -260,27 +257,19 @@ class LibrarySettingsSheet(
override fun onItemClicked(item: Item) { override fun onItemClicked(item: Item) {
item as Item.MultiStateGroup item as Item.MultiStateGroup
// SY -->
if (item == dragAndDrop && preferences.groupLibraryBy().get() != LibraryGroup.BY_DEFAULT) return
// SY <--
val prevState = item.state val prevState = item.state
item.group.items.forEach { item.group.items.forEach {
(it as Item.MultiStateGroup).state = (it as Item.MultiStateGroup).state =
Item.MultiSort.SORT_NONE Item.MultiSort.SORT_NONE
} }
// SY -->
if (item == dragAndDrop) { item.state = when (prevState) {
item.state = Item.MultiSort.SORT_ASC Item.MultiSort.SORT_NONE -> Item.MultiSort.SORT_ASC
} else { Item.MultiSort.SORT_ASC -> Item.MultiSort.SORT_DESC
item.state = when (prevState) { Item.MultiSort.SORT_DESC -> Item.MultiSort.SORT_ASC
Item.MultiSort.SORT_NONE -> Item.MultiSort.SORT_ASC else -> throw Exception("Unknown state")
Item.MultiSort.SORT_ASC -> Item.MultiSort.SORT_DESC
Item.MultiSort.SORT_DESC -> Item.MultiSort.SORT_ASC
else -> throw Exception("Unknown state")
}
} }
// SY <--
item.state = when (prevState) { item.state = when (prevState) {
Item.MultiSort.SORT_NONE -> Item.MultiSort.SORT_ASC Item.MultiSort.SORT_NONE -> Item.MultiSort.SORT_ASC
@ -329,7 +318,6 @@ class LibrarySettingsSheet(
chapterFetchDate -> SortModeSetting.CHAPTER_FETCH_DATE chapterFetchDate -> SortModeSetting.CHAPTER_FETCH_DATE
dateAdded -> SortModeSetting.DATE_ADDED dateAdded -> SortModeSetting.DATE_ADDED
// SY --> // SY -->
dragAndDrop -> SortModeSetting.DRAG_AND_DROP
tagList -> SortModeSetting.TAG_LIST tagList -> SortModeSetting.TAG_LIST
// SY <-- // SY <--
else -> throw NotImplementedError("Unknown display mode") else -> throw NotImplementedError("Unknown display mode")
@ -590,12 +578,6 @@ class LibrarySettingsSheet(
override fun onItemClicked(item: Item) { override fun onItemClicked(item: Item) {
item as Item.DrawableSelection item as Item.DrawableSelection
if (item.id != LibraryGroup.BY_DEFAULT && preferences.librarySortingMode().get() == SortModeSetting.DRAG_AND_DROP) {
preferences.librarySortingMode().set(SortModeSetting.ALPHABETICAL)
preferences.librarySortingAscending().set(SortDirectionSetting.ASCENDING)
sort.adjustDisplaySelection()
}
item.group.items.forEach { item.group.items.forEach {
(it as Item.DrawableSelection).state = (it as Item.DrawableSelection).state =
Item.DrawableSelection.NOT_SELECTED Item.DrawableSelection.NOT_SELECTED

View File

@ -12,8 +12,12 @@ enum class SortModeSetting(val flag: Long) {
LATEST_CHAPTER(0b00010100), LATEST_CHAPTER(0b00010100),
CHAPTER_FETCH_DATE(0b00011000), CHAPTER_FETCH_DATE(0b00011000),
DATE_ADDED(0b00011100), DATE_ADDED(0b00011100),
// SY -->
@Deprecated("Was unused")
DRAG_AND_DROP(0b00100000), DRAG_AND_DROP(0b00100000),
TAG_LIST(0b00100100), TAG_LIST(0b00100100),
// SY <--
@Deprecated("Use LAST_MANGA_UPDATE") @Deprecated("Use LAST_MANGA_UPDATE")
LAST_CHECKED(0b00001000), LAST_CHECKED(0b00001000),

View File

@ -5,6 +5,7 @@ package exh
import androidx.core.content.edit import androidx.core.content.edit
import androidx.preference.PreferenceManager import androidx.preference.PreferenceManager
import eu.kanade.data.DatabaseHandler import eu.kanade.data.DatabaseHandler
import eu.kanade.data.category.categoryMapper
import eu.kanade.data.chapter.chapterMapper import eu.kanade.data.chapter.chapterMapper
import eu.kanade.domain.chapter.interactor.DeleteChapters import eu.kanade.domain.chapter.interactor.DeleteChapters
import eu.kanade.domain.chapter.interactor.UpdateChapter import eu.kanade.domain.chapter.interactor.UpdateChapter
@ -39,6 +40,7 @@ import eu.kanade.tachiyomi.ui.library.setting.SortModeSetting
import eu.kanade.tachiyomi.ui.reader.setting.OrientationType import eu.kanade.tachiyomi.ui.reader.setting.OrientationType
import eu.kanade.tachiyomi.util.preference.minusAssign import eu.kanade.tachiyomi.util.preference.minusAssign
import eu.kanade.tachiyomi.util.system.DeviceUtil import eu.kanade.tachiyomi.util.system.DeviceUtil
import eu.kanade.tachiyomi.util.system.logcat
import exh.eh.EHentaiUpdateWorker import exh.eh.EHentaiUpdateWorker
import exh.log.xLogE import exh.log.xLogE
import exh.merged.sql.models.MergedMangaReference import exh.merged.sql.models.MergedMangaReference
@ -268,36 +270,40 @@ object EXHMigrations {
} }
} }
if (oldVersion under 20) { if (oldVersion under 20) {
val oldSortingMode = prefs.getInt(PreferenceKeys.librarySortingMode, 0) try {
val oldSortingDirection = prefs.getBoolean(PreferenceKeys.librarySortingDirection, true) val oldSortingMode = prefs.getInt(PreferenceKeys.librarySortingMode, 0)
val oldSortingDirection = prefs.getBoolean(PreferenceKeys.librarySortingDirection, true)
val newSortingMode = when (oldSortingMode) { val newSortingMode = when (oldSortingMode) {
LibrarySort.ALPHA -> SortModeSetting.ALPHABETICAL LibrarySort.ALPHA -> SortModeSetting.ALPHABETICAL
LibrarySort.LAST_READ -> SortModeSetting.LAST_READ LibrarySort.LAST_READ -> SortModeSetting.LAST_READ
LibrarySort.LAST_CHECKED -> SortModeSetting.LAST_MANGA_UPDATE LibrarySort.LAST_CHECKED -> SortModeSetting.LAST_MANGA_UPDATE
LibrarySort.UNREAD -> SortModeSetting.UNREAD_COUNT LibrarySort.UNREAD -> SortModeSetting.UNREAD_COUNT
LibrarySort.TOTAL -> SortModeSetting.TOTAL_CHAPTERS LibrarySort.TOTAL -> SortModeSetting.TOTAL_CHAPTERS
LibrarySort.LATEST_CHAPTER -> SortModeSetting.LATEST_CHAPTER LibrarySort.LATEST_CHAPTER -> SortModeSetting.LATEST_CHAPTER
LibrarySort.CHAPTER_FETCH_DATE -> SortModeSetting.CHAPTER_FETCH_DATE LibrarySort.CHAPTER_FETCH_DATE -> SortModeSetting.CHAPTER_FETCH_DATE
LibrarySort.DATE_ADDED -> SortModeSetting.DATE_ADDED LibrarySort.DATE_ADDED -> SortModeSetting.DATE_ADDED
LibrarySort.DRAG_AND_DROP -> SortModeSetting.DRAG_AND_DROP LibrarySort.DRAG_AND_DROP -> SortModeSetting.DRAG_AND_DROP
LibrarySort.TAG_LIST -> SortModeSetting.TAG_LIST LibrarySort.TAG_LIST -> SortModeSetting.TAG_LIST
else -> SortModeSetting.ALPHABETICAL else -> SortModeSetting.ALPHABETICAL
} }
val newSortingDirection = when (oldSortingDirection) { val newSortingDirection = when (oldSortingDirection) {
true -> SortDirectionSetting.ASCENDING true -> SortDirectionSetting.ASCENDING
else -> SortDirectionSetting.DESCENDING else -> SortDirectionSetting.DESCENDING
} }
prefs.edit(commit = true) { prefs.edit(commit = true) {
remove(PreferenceKeys.librarySortingMode) remove(PreferenceKeys.librarySortingMode)
remove(PreferenceKeys.librarySortingDirection) remove(PreferenceKeys.librarySortingDirection)
} }
prefs.edit { prefs.edit {
putString(PreferenceKeys.librarySortingMode, newSortingMode.name) putString(PreferenceKeys.librarySortingMode, newSortingMode.name)
putString(PreferenceKeys.librarySortingDirection, newSortingDirection.name) putString(PreferenceKeys.librarySortingDirection, newSortingDirection.name)
}
} catch (e: Exception) {
logcat(throwable = e) { "Already done migration" }
} }
} }
if (oldVersion under 21) { if (oldVersion under 21) {
@ -413,9 +419,24 @@ object EXHMigrations {
SortModeSetting.LAST_CHECKED -> SortModeSetting.LAST_MANGA_UPDATE SortModeSetting.LAST_CHECKED -> SortModeSetting.LAST_MANGA_UPDATE
SortModeSetting.UNREAD -> SortModeSetting.UNREAD_COUNT SortModeSetting.UNREAD -> SortModeSetting.UNREAD_COUNT
SortModeSetting.DATE_FETCHED -> SortModeSetting.CHAPTER_FETCH_DATE SortModeSetting.DATE_FETCHED -> SortModeSetting.CHAPTER_FETCH_DATE
SortModeSetting.DRAG_AND_DROP -> SortModeSetting.ALPHABETICAL
else -> oldSortingMode else -> oldSortingMode
} }
preferences.librarySortingMode().set(newSortingMode) preferences.librarySortingMode().set(newSortingMode)
runBlocking {
handler.await(true) {
categoriesQueries.getCategories(categoryMapper).executeAsList()
.filter { SortModeSetting.fromFlag(it.flags) == SortModeSetting.DRAG_AND_DROP }
.forEach {
categoriesQueries.update(
categoryId = it.id,
flags = it.flags xor SortModeSetting.DRAG_AND_DROP.flag,
name = null,
order = null,
)
}
}
}
} }
// if (oldVersion under 1) { } (1 is current release version) // if (oldVersion under 1) { } (1 is current release version)

View File

@ -13,8 +13,7 @@ SELECT
_id AS id, _id AS id,
name, name,
sort AS `order`, sort AS `order`,
flags, flags
manga_order AS `mangaOrder`
FROM categories FROM categories
ORDER BY sort; ORDER BY sort;
@ -23,8 +22,7 @@ SELECT
C._id AS id, C._id AS id,
C.name, C.name,
C.sort AS `order`, C.sort AS `order`,
C.flags, C.flags
C.manga_order AS `mangaOrder`
FROM categories C FROM categories C
JOIN mangas_categories MC JOIN mangas_categories MC
ON C._id = MC.category_id ON C._id = MC.category_id
@ -32,7 +30,7 @@ WHERE MC.manga_id = :mangaId;
insert: insert:
INSERT INTO categories(name, sort, flags, manga_order) INSERT INTO categories(name, sort, flags, manga_order)
VALUES (:name, :order, :flags, :mangaOrder); VALUES (:name, :order, :flags, NULL);
delete: delete:
DELETE FROM categories DELETE FROM categories
@ -42,8 +40,7 @@ update:
UPDATE categories UPDATE categories
SET name = coalesce(:name, name), SET name = coalesce(:name, name),
sort = coalesce(:order, sort), sort = coalesce(:order, sort),
flags = coalesce(:flags, flags), flags = coalesce(:flags, flags)
manga_order = coalesce(:mangaOrder, manga_order)
WHERE _id = :categoryId; WHERE _id = :categoryId;
selectLastInsertedRowId: selectLastInsertedRowId:

View File

@ -13,3 +13,5 @@ WHERE cover_last_modified = -1;
UPDATE mangas UPDATE mangas
SET last_update = 0 SET last_update = 0
WHERE last_update = -1; WHERE last_update = -1;
UPDATE categories
SET manga_order = NULL;