diff --git a/CHANGELOG.md b/CHANGELOG.md index 43fd38873..496f255ce 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -35,6 +35,9 @@ The format is a modified version of [Keep a Changelog](https://keepachangelog.co - Fix App's preferences referencing deleted categories ([@cuong-tran](https://github.com/cuong-tran)) ([#1734](https://github.com/mihonapp/mihon/pull/1734)) - Fix backup/restore of category related preferences ([@cuong-tran](https://github.com/cuong-tran)) ([#1726](https://github.com/mihonapp/mihon/pull/1726)) +### Removed +- Remove alphabetical category sort option + ### Other - Add zoned "Current time" to debug info and include year & timezone in logcat output ([@MajorTanya](https://github.com/MajorTanya)) ([#1672](https://github.com/mihonapp/mihon/pull/1672)) diff --git a/app/src/main/java/eu/kanade/presentation/browse/SourceFeedOrderScreen.kt b/app/src/main/java/eu/kanade/presentation/browse/SourceFeedOrderScreen.kt index d2b1cd908..3cd31f983 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/SourceFeedOrderScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/SourceFeedOrderScreen.kt @@ -6,8 +6,6 @@ import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.rememberLazyListState -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.outlined.SortByAlpha import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect @@ -17,7 +15,6 @@ import eu.kanade.presentation.browse.components.FeedOrderListItem import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.components.AppBarTitle import eu.kanade.tachiyomi.ui.browse.source.feed.SourceFeedState -import kotlinx.collections.immutable.persistentListOf import sh.calvin.reorderable.ReorderableItem import sh.calvin.reorderable.rememberReorderableLazyListState import tachiyomi.domain.source.model.FeedSavedSearch @@ -36,7 +33,6 @@ fun SourceFeedOrderScreen( state: SourceFeedState, onClickDelete: (FeedSavedSearch) -> Unit, onChangeOrder: (FeedSavedSearch, Int) -> Unit, - onClickSortAlphabetically: () -> Unit, navigateUp: (() -> Unit)? = null, ) { Scaffold( @@ -46,15 +42,6 @@ fun SourceFeedOrderScreen( AppBarTitle(stringResource(KMR.strings.action_sort_feed)) }, navigateUp = navigateUp, - actions = { - persistentListOf( - AppBar.Action( - title = stringResource(MR.strings.action_sort), - icon = Icons.Outlined.SortByAlpha, - onClick = onClickSortAlphabetically, - ), - ) - }, isActionMode = false, scrollBehavior = scrollBehavior, ) diff --git a/app/src/main/java/eu/kanade/presentation/browse/components/SourceFeedDialogs.kt b/app/src/main/java/eu/kanade/presentation/browse/components/SourceFeedDialogs.kt index 8e227b141..e18d3eb20 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/components/SourceFeedDialogs.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/components/SourceFeedDialogs.kt @@ -29,7 +29,6 @@ import eu.kanade.presentation.more.settings.LocalPreferenceMinHeight import eu.kanade.presentation.more.settings.widget.TextPreferenceWidget import tachiyomi.domain.source.model.FeedSavedSearch import tachiyomi.i18n.MR -import tachiyomi.i18n.kmk.KMR import tachiyomi.i18n.sy.SYMR import tachiyomi.presentation.core.i18n.stringResource @@ -171,33 +170,4 @@ private fun FeedActionsDialogPreview() { onClickDelete = { }, ) } - -@Composable -fun FeedSortAlphabeticallyDialog( - onDismissRequest: () -> Unit, - onSort: () -> Unit, -) { - AlertDialog( - onDismissRequest = onDismissRequest, - confirmButton = { - TextButton(onClick = { - onSort() - onDismissRequest() - }) { - Text(text = stringResource(MR.strings.action_ok)) - } - }, - dismissButton = { - TextButton(onClick = onDismissRequest) { - Text(text = stringResource(MR.strings.action_cancel)) - } - }, - title = { - Text(text = stringResource(KMR.strings.action_sort_feed)) - }, - text = { - Text(text = stringResource(KMR.strings.sort_feed_confirmation)) - }, - ) -} // KMK <-- diff --git a/app/src/main/java/eu/kanade/presentation/category/CategoryScreen.kt b/app/src/main/java/eu/kanade/presentation/category/CategoryScreen.kt index 9648cd753..a67125a5b 100644 --- a/app/src/main/java/eu/kanade/presentation/category/CategoryScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/category/CategoryScreen.kt @@ -8,8 +8,6 @@ import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyListState import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.rememberLazyListState -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.outlined.SortByAlpha import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect @@ -19,10 +17,8 @@ import androidx.compose.ui.Modifier import eu.kanade.presentation.category.components.CategoryFloatingActionButton import eu.kanade.presentation.category.components.CategoryListItem import eu.kanade.presentation.components.AppBar -import eu.kanade.presentation.components.AppBarActions import eu.kanade.tachiyomi.ui.category.CategoryScreenState import kotlinx.collections.immutable.ImmutableList -import kotlinx.collections.immutable.persistentListOf import sh.calvin.reorderable.ReorderableItem import sh.calvin.reorderable.rememberReorderableLazyListState import tachiyomi.domain.category.model.Category @@ -38,7 +34,6 @@ import tachiyomi.presentation.core.util.plus fun CategoryScreen( state: CategoryScreenState.Success, onClickCreate: () -> Unit, - onClickSortAlphabetically: () -> Unit, onClickRename: (Category) -> Unit, onClickDelete: (Category) -> Unit, onChangeOrder: (Category, Int) -> Unit, @@ -53,17 +48,6 @@ fun CategoryScreen( AppBar( title = stringResource(MR.strings.action_edit_categories), navigateUp = navigateUp, - actions = { - AppBarActions( - persistentListOf( - AppBar.Action( - title = stringResource(MR.strings.action_sort), - icon = Icons.Outlined.SortByAlpha, - onClick = onClickSortAlphabetically, - ), - ), - ) - }, scrollBehavior = scrollBehavior, ) }, diff --git a/app/src/main/java/eu/kanade/presentation/category/components/CategoryDialogs.kt b/app/src/main/java/eu/kanade/presentation/category/components/CategoryDialogs.kt index f343f9034..723cc6e99 100644 --- a/app/src/main/java/eu/kanade/presentation/category/components/CategoryDialogs.kt +++ b/app/src/main/java/eu/kanade/presentation/category/components/CategoryDialogs.kt @@ -219,35 +219,6 @@ fun CategoryDeleteDialog( ) } -@Composable -fun CategorySortAlphabeticallyDialog( - onDismissRequest: () -> Unit, - onSort: () -> Unit, -) { - AlertDialog( - onDismissRequest = onDismissRequest, - confirmButton = { - TextButton(onClick = { - onSort() - onDismissRequest() - }) { - Text(text = stringResource(MR.strings.action_ok)) - } - }, - dismissButton = { - TextButton(onClick = onDismissRequest) { - Text(text = stringResource(MR.strings.action_cancel)) - } - }, - title = { - Text(text = stringResource(MR.strings.action_sort_category)) - }, - text = { - Text(text = stringResource(MR.strings.sort_category_confirmation)) - }, - ) -} - @Composable fun ChangeCategoryDialog( initialSelection: ImmutableList>, diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/feed/FeedScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/feed/FeedScreenModel.kt index 7484b82f0..c9ab48fd2 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/feed/FeedScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/feed/FeedScreenModel.kt @@ -45,7 +45,6 @@ import tachiyomi.domain.source.interactor.GetSavedSearchGlobalFeed import tachiyomi.domain.source.interactor.InsertFeedSavedSearch import tachiyomi.domain.source.interactor.ReorderFeed import tachiyomi.domain.source.model.FeedSavedSearch -import tachiyomi.domain.source.model.FeedSavedSearchUpdate import tachiyomi.domain.source.model.SavedSearch import tachiyomi.domain.source.service.SourceManager import uy.kohesive.injekt.Injekt @@ -223,21 +222,6 @@ open class FeedScreenModel( reorderFeed.changeOrder(feed, newIndex) } } - - fun sortAlphabetically() { - screenModelScope.launch { - reorderFeed.sortAlphabetically( - state.value.items - ?.sortedBy { feed -> feed.title } - ?.mapIndexed { index, feed -> - FeedSavedSearchUpdate( - id = feed.feed.id, - feedOrder = index.toLong(), - ) - }, - ) - } - } // KMK <-- private suspend fun getSourcesToGetFeed(feedSavedSearch: List): List> { @@ -384,8 +368,6 @@ open class FeedScreenModel( data class FeedActions( val feedItem: FeedItemUI, ) : Dialog() - - data object SortAlphabetically : Dialog() // KMK <-- } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/feed/FeedTab.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/feed/FeedTab.kt index 118b75cac..cddb04a18 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/feed/FeedTab.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/feed/FeedTab.kt @@ -4,7 +4,7 @@ import androidx.activity.compose.BackHandler import androidx.compose.animation.Crossfade import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.Add -import androidx.compose.material.icons.outlined.SortByAlpha +import androidx.compose.material.icons.outlined.Close import androidx.compose.material.icons.outlined.SwapVert import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable @@ -24,7 +24,6 @@ import eu.kanade.presentation.browse.FeedAddSearchDialog import eu.kanade.presentation.browse.FeedOrderScreen import eu.kanade.presentation.browse.FeedScreen import eu.kanade.presentation.browse.components.FeedActionsDialog -import eu.kanade.presentation.browse.components.FeedSortAlphabeticallyDialog import eu.kanade.presentation.browse.components.SourceFeedDeleteDialog import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.components.TabContent @@ -99,15 +98,10 @@ fun feedTab( persistentListOf( AppBar.Action( title = stringResource(KMR.strings.action_sort_feed), - icon = Icons.Outlined.SwapVert, + icon = Icons.Outlined.Close, iconTint = MaterialTheme.colorScheme.primary, onClick = { showingFeedOrderScreen.value = false }, ), - AppBar.Action( - title = stringResource(MR.strings.action_sort), - icon = Icons.Outlined.SortByAlpha, - onClick = { screenModel.showDialog(FeedScreenModel.Dialog.SortAlphabetically) }, - ), ) } else { // KMK <-- @@ -252,12 +246,6 @@ fun feedTab( onClickDelete = { screenModel.openDeleteDialog(it) }, ) } - is FeedScreenModel.Dialog.SortAlphabetically -> { - FeedSortAlphabeticallyDialog( - onDismissRequest = onDismissRequest, - onSort = { screenModel.sortAlphabetically() }, - ) - } // KMK <-- } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/feed/SourceFeedScreen.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/feed/SourceFeedScreen.kt index 03e3f2b5a..4707bbd4f 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/feed/SourceFeedScreen.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/feed/SourceFeedScreen.kt @@ -22,7 +22,6 @@ import eu.kanade.presentation.browse.SourceFeedOrderScreen import eu.kanade.presentation.browse.SourceFeedScreen import eu.kanade.presentation.browse.SourceFeedUI import eu.kanade.presentation.browse.components.FeedActionsDialog -import eu.kanade.presentation.browse.components.FeedSortAlphabeticallyDialog import eu.kanade.presentation.browse.components.SourceFeedAddDialog import eu.kanade.presentation.browse.components.SourceFeedDeleteDialog import eu.kanade.presentation.util.Screen @@ -106,9 +105,6 @@ class SourceFeedScreen(val sourceId: Long) : Screen() { state = state, onClickDelete = screenModel::openDeleteFeed, onChangeOrder = screenModel::changeOrder, - onClickSortAlphabetically = { - screenModel.showDialog(SourceFeedScreenModel.Dialog.SortAlphabetically) - }, navigateUp = { showingFeedOrderScreen.value = false }, ) } else { @@ -224,12 +220,6 @@ class SourceFeedScreen(val sourceId: Long) : Screen() { onClickDelete = { screenModel.openDeleteFeed(it) }, ) } - is SourceFeedScreenModel.Dialog.SortAlphabetically -> { - FeedSortAlphabeticallyDialog( - onDismissRequest = screenModel::dismissDialog, - onSort = { screenModel.sortAlphabetically() }, - ) - } // KMK <-- is SourceFeedScreenModel.Dialog.Filter -> { SourceFilterDialog( diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/feed/SourceFeedScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/feed/SourceFeedScreenModel.kt index 76ed00fd8..e747bcde0 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/feed/SourceFeedScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/feed/SourceFeedScreenModel.kt @@ -48,7 +48,6 @@ import tachiyomi.domain.source.interactor.InsertFeedSavedSearch import tachiyomi.domain.source.interactor.ReorderFeed import tachiyomi.domain.source.model.EXHSavedSearch import tachiyomi.domain.source.model.FeedSavedSearch -import tachiyomi.domain.source.model.FeedSavedSearchUpdate import tachiyomi.domain.source.model.SavedSearch import tachiyomi.domain.source.service.SourceManager import tachiyomi.i18n.kmk.KMR @@ -160,22 +159,6 @@ open class SourceFeedScreenModel( reorderFeed.changeOrder(feed, newIndex, false) } } - - fun sortAlphabetically() { - screenModelScope.launchNonCancellable { - reorderFeed.sortAlphabetically( - state.value.items - .filterIsInstance() - .sortedBy { feed -> feed.title } - .mapIndexed { index, feed -> - FeedSavedSearchUpdate( - id = feed.feed.id, - feedOrder = index.toLong(), - ) - }, - ) - } - } // KMK <-- private suspend fun getSourcesToGetFeed(feedSavedSearch: List): ImmutableList { @@ -422,8 +405,6 @@ open class SourceFeedScreenModel( data class FeedActions( val feedItem: SourceFeedUI.SourceSavedSearch, ) : Dialog() - - data object SortAlphabetically : Dialog() // KMK <-- } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/category/CategoryScreen.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/category/CategoryScreen.kt index 65e310178..b9eef3db3 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/category/CategoryScreen.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/category/CategoryScreen.kt @@ -13,7 +13,6 @@ import eu.kanade.presentation.category.CategoryScreen import eu.kanade.presentation.category.components.CategoryCreateDialog import eu.kanade.presentation.category.components.CategoryDeleteDialog import eu.kanade.presentation.category.components.CategoryRenameDialog -import eu.kanade.presentation.category.components.CategorySortAlphabeticallyDialog import eu.kanade.presentation.util.Screen import eu.kanade.tachiyomi.util.system.toast import kotlinx.collections.immutable.toImmutableList @@ -40,7 +39,6 @@ class CategoryScreen : Screen() { CategoryScreen( state = successState, onClickCreate = { screenModel.showDialog(CategoryDialog.Create) }, - onClickSortAlphabetically = { screenModel.showDialog(CategoryDialog.SortAlphabetically) }, onClickRename = { screenModel.showDialog(CategoryDialog.Rename(it)) }, onClickDelete = { screenModel.showDialog(CategoryDialog.Delete(it)) }, onChangeOrder = screenModel::changeOrder, @@ -74,12 +72,6 @@ class CategoryScreen : Screen() { category = dialog.category.name, ) } - is CategoryDialog.SortAlphabetically -> { - CategorySortAlphabeticallyDialog( - onDismissRequest = screenModel::dismissDialog, - onSort = { screenModel.sortAlphabetically() }, - ) - } } LaunchedEffect(Unit) { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/category/CategoryScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/category/CategoryScreenModel.kt index 27a7f9ad0..fd43240c2 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/category/CategoryScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/category/CategoryScreenModel.kt @@ -80,18 +80,9 @@ class CategoryScreenModel( } } - fun sortAlphabetically() { - screenModelScope.launch { - when (reorderCategory.sortAlphabetically()) { - is ReorderCategory.Result.InternalError -> _events.send(CategoryEvent.InternalError) - else -> {} - } - } - } - fun changeOrder(category: Category, newIndex: Int) { screenModelScope.launch { - when (reorderCategory.changeOrder(category, newIndex)) { + when (reorderCategory.await(category, newIndex)) { is ReorderCategory.Result.InternalError -> _events.send(CategoryEvent.InternalError) else -> {} } @@ -128,7 +119,6 @@ class CategoryScreenModel( sealed interface CategoryDialog { data object Create : CategoryDialog - data object SortAlphabetically : CategoryDialog data class Rename(val category: Category) : CategoryDialog data class Delete(val category: Category) : CategoryDialog } diff --git a/domain/src/main/java/tachiyomi/domain/category/interactor/ReorderCategory.kt b/domain/src/main/java/tachiyomi/domain/category/interactor/ReorderCategory.kt index 4f91a9901..498366154 100644 --- a/domain/src/main/java/tachiyomi/domain/category/interactor/ReorderCategory.kt +++ b/domain/src/main/java/tachiyomi/domain/category/interactor/ReorderCategory.kt @@ -12,10 +12,9 @@ import tachiyomi.domain.category.repository.CategoryRepository class ReorderCategory( private val categoryRepository: CategoryRepository, ) { - private val mutex = Mutex() - suspend fun changeOrder(category: Category, newIndex: Int) = withNonCancellableContext { + suspend fun await(category: Category, newIndex: Int) = withNonCancellableContext { mutex.withLock { val categories = categoryRepository.getAll() .filterNot(Category::isSystemCategory) @@ -45,27 +44,6 @@ class ReorderCategory( } } - suspend fun sortAlphabetically() = withNonCancellableContext { - mutex.withLock { - val updates = categoryRepository.getAll() - .sortedBy { category -> category.name } - .mapIndexed { index, category -> - CategoryUpdate( - id = category.id, - order = index.toLong(), - ) - } - - try { - categoryRepository.updatePartial(updates) - Result.Success - } catch (e: Exception) { - logcat(LogPriority.ERROR, e) - Result.InternalError(e) - } - } - } - sealed interface Result { data object Success : Result data object Unchanged : Result diff --git a/domain/src/main/java/tachiyomi/domain/source/interactor/ReorderFeed.kt b/domain/src/main/java/tachiyomi/domain/source/interactor/ReorderFeed.kt index 4129a75ea..3cef14f81 100644 --- a/domain/src/main/java/tachiyomi/domain/source/interactor/ReorderFeed.kt +++ b/domain/src/main/java/tachiyomi/domain/source/interactor/ReorderFeed.kt @@ -49,19 +49,6 @@ class ReorderFeed( } } - suspend fun sortAlphabetically(updates: List?) = withNonCancellableContext { - if (updates == null) return@withNonCancellableContext - mutex.withLock { - try { - feedSavedSearchRepository.updatePartial(updates) - Result.Success - } catch (e: Exception) { - logcat(LogPriority.ERROR, e) - Result.InternalError(e) - } - } - } - sealed interface Result { data object Success : Result data object Unchanged : Result diff --git a/i18n/src/commonMain/moko-resources/base/strings.xml b/i18n/src/commonMain/moko-resources/base/strings.xml index 2828b30cc..c40373d66 100644 --- a/i18n/src/commonMain/moko-resources/base/strings.xml +++ b/i18n/src/commonMain/moko-resources/base/strings.xml @@ -97,8 +97,6 @@ Set categories Do you wish to delete the category \"%s\"? Delete category - Sort categories - Would you like to sort the categories alphabetically? Edit cover View chapters Pause