diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/category/genre/SortTagController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/category/genre/SortTagController.kt index d9146d63d..6929739f9 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/category/genre/SortTagController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/category/genre/SortTagController.kt @@ -352,7 +352,7 @@ class SortTagController : * @param name The name of the new category. */ override fun createCategory(name: String) { - presenter.createCategory(name) + presenter.createTag(name) } /** diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/category/genre/SortTagPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/category/genre/SortTagPresenter.kt index 38cdbf422..d1874ffcc 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/category/genre/SortTagPresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/category/genre/SortTagPresenter.kt @@ -23,7 +23,7 @@ class SortTagPresenter : BasePresenter() { /** * List containing categories. */ - private var tags: List = emptyList() + private var tags: List> = emptyList() val preferences: PreferencesHelper = Injekt.get() @@ -38,10 +38,12 @@ class SortTagPresenter : BasePresenter() { super.onCreate(savedState) preferences.sortTagsForLibrary().asFlow().onEach { tags -> - this.tags = tags.toList() + this.tags = tags.map { it.split("|") } + .mapNotNull { (it.getOrNull(0)?.toIntOrNull() ?: return@mapNotNull null) to (it.getOrNull(1) ?: return@mapNotNull null) } + .sortedBy { it.first } Observable.just(this.tags) - .map { it.map(::SortTagItem) } + .map { tagPairs -> tagPairs.map { it.second }.map(::SortTagItem) } .observeOn(AndroidSchedulers.mainThread()) .subscribeLatestCache(SortTagController::setCategories) }.launchIn(scope) @@ -52,40 +54,45 @@ class SortTagPresenter : BasePresenter() { * * @param name The name of the category to create. */ - fun createCategory(name: String) { + fun createTag(name: String) { // Do not allow duplicate categories. if (tagExists(name)) { Observable.just(Unit).subscribeFirst({ view, _ -> view.onTagExistsError() }) return } - preferences.sortTagsForLibrary() += name + val size = preferences.sortTagsForLibrary().get().size + + preferences.sortTagsForLibrary() += "$size|$name" } /** * Deletes the given categories from the database. * - * @param categories The list of categories to delete. + * @param tags The list of categories to delete. */ - fun deleteTags(categories: List) { - categories.forEach { - preferences.sortTagsForLibrary() -= it + fun deleteTags(tags: List) { + val preferenceTags = preferences.sortTagsForLibrary().get() + tags.forEach { tag -> + preferenceTags.firstOrNull { it.endsWith(tag) }?.let { + preferences.sortTagsForLibrary() -= it + } } } /** * Reorders the given categories in the database. * - * @param categories The list of categories to reorder. + * @param tags The list of categories to reorder. */ - fun reorderTags(categories: List) { - preferences.sortTagsForLibrary().set(categories.toSet()) + fun reorderTags(tags: List) { + preferences.sortTagsForLibrary().set(tags.mapIndexed { index, tag -> "$index|$tag" }.toSet()) } /** * Returns true if a category with the given name already exists. */ private fun tagExists(name: String): Boolean { - return tags.any { it.equals(name, true) } + return tags.any { it.equals(name) } } } 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 27db90e9a..c4f4b7862 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt @@ -313,7 +313,7 @@ class LibraryPresenter( // SY --> val listOfTags by lazy { - preferences.sortTagsForLibrary().get().toList().map { ("(, |^)$it").toRegex(RegexOption.IGNORE_CASE) } + preferences.sortTagsForLibrary().get().toList().mapNotNull { it.split("|").getOrNull(1) }.map { ("(, |^)$it").toRegex(RegexOption.IGNORE_CASE) } } // SY <--