Sort by tag settings is able to sort the tags and save the changes

This commit is contained in:
Jobobby04 2020-09-16 12:25:08 -04:00
parent f5998505a3
commit 905e1b68c6
3 changed files with 22 additions and 15 deletions

View File

@ -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)
}
/**

View File

@ -23,7 +23,7 @@ class SortTagPresenter : BasePresenter<SortTagController>() {
/**
* List containing categories.
*/
private var tags: List<String> = emptyList()
private var tags: List<Pair<Int, String>> = emptyList()
val preferences: PreferencesHelper = Injekt.get()
@ -38,10 +38,12 @@ class SortTagPresenter : BasePresenter<SortTagController>() {
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<SortTagController>() {
*
* @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<String>) {
categories.forEach {
preferences.sortTagsForLibrary() -= it
fun deleteTags(tags: List<String>) {
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<String>) {
preferences.sortTagsForLibrary().set(categories.toSet())
fun reorderTags(tags: List<String>) {
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) }
}
}

View File

@ -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 <--