From b7b40592259b3d5880f11888eacbea67412eb8ba Mon Sep 17 00:00:00 2001 From: Avently <7953703+avently@users.noreply.github.com> Date: Sat, 11 Jan 2025 00:28:26 +0700 Subject: [PATCH] removed support of archived page and counter --- .../chat/simplex/common/model/ChatModel.kt | 8 ++-- .../chat/simplex/common/model/SimpleXAPI.kt | 10 ++--- .../common/views/chat/ChatItemsLoader.kt | 2 +- .../simplex/common/views/chat/ChatView.kt | 20 +++------ .../views/chat/group/GroupChatInfoView.kt | 8 ++-- .../views/chat/group/GroupReportsView.kt | 41 +++---------------- .../commonMain/resources/MR/base/strings.xml | 2 - 7 files changed, 24 insertions(+), 67 deletions(-) diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/ChatModel.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/ChatModel.kt index 811ec33e5d..5eb4692e02 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/ChatModel.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/ChatModel.kt @@ -811,14 +811,13 @@ object ChatModel { } } - fun decreaseGroupReportsCounter(rhId: Long?, chatId: ChatId, wasArchived: Boolean) { + fun decreaseGroupReportsCounter(rhId: Long?, chatId: ChatId) { val i = getChatIndex(rhId, chatId) if (i >= 0) { val chat = chats.value[i] chats[i] = chat.copy( chatStats = chat.chatStats.copy( reportsCount = (chat.chatStats.reportsCount - 1).coerceAtLeast(0), - archivedReportsCount = if (wasArchived) chat.chatStats.archivedReportsCount + 1 else chat.chatStats.archivedReportsCount ) ) } @@ -1235,8 +1234,6 @@ data class Chat( val unreadCount: Int = 0, // actual only via getChats() and getChat(.initial), otherwise, zero val reportsCount: Int = 0, - // actual only via getChat(.initial), otherwise, zero - val archivedReportsCount: Int = 0, val minUnreadItemId: Long = 0, val unreadChat: Boolean = false ) @@ -1759,6 +1756,9 @@ data class GroupInfo ( val canAddMembers: Boolean get() = membership.memberRole >= GroupMemberRole.Admin && membership.memberActive + val canModerate: Boolean + get() = membership.memberRole >= GroupMemberRole.Moderator && membership.memberActive + companion object { val sampleData = GroupInfo( groupId = 1, diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt index 50b6a44f3d..28cc507fa6 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt @@ -2606,15 +2606,14 @@ object ChatController { generalGetString(MR.strings.marked_deleted_description) ) } - val wasModerated = r.member_ != null && (cItem.chatDir as CIDirection.GroupRcv?)?.groupMember != r.member_ - val deleted = if (wasModerated && r.member_ != null) { + val deleted = if (r.member_ != null && (cItem.chatDir as CIDirection.GroupRcv?)?.groupMember != r.member_) { CIDeleted.Moderated(Clock.System.now(), r.member_) } else { CIDeleted.Deleted(Clock.System.now()) } upsertChatItem(rhId, cInfo, cItem.copy(meta = cItem.meta.copy(itemDeleted = deleted))) if (cItem.isActiveReport) { - decreaseGroupReportsCounter(rhId, cInfo.id, wasModerated) + decreaseGroupReportsCounter(rhId, cInfo.id) } } } @@ -3491,7 +3490,7 @@ sealed class CC { val filter = if (contentFilter == null) { "" } else { - " content=${contentFilter.mcTag.name.lowercase()} deleted=${onOff(contentFilter.deleted ?: true)}" + " content=${contentFilter.mcTag.name.lowercase()}" } "/_get chat ${chatRef(type, id)}$filter ${pagination.cmdString}" + (if (search == "") "" else " search=$search") } @@ -3832,8 +3831,7 @@ data class NewUser( ) data class ContentFilter( - val mcTag: MsgContentTag, - val deleted: Boolean? + val mcTag: MsgContentTag ) sealed class ChatPagination { diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatItemsLoader.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatItemsLoader.kt index d27a33ac47..511619ca9d 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatItemsLoader.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatItemsLoader.kt @@ -17,7 +17,7 @@ suspend fun apiLoadSingleMessage( itemId: Long, contentTag: MsgContentTag?, ): ChatItem? = coroutineScope { - val contentFilter = if (contentTag != null) ContentFilter(contentTag, true) else null + val contentFilter = if (contentTag != null) ContentFilter(contentTag) else null val (chat, _) = chatModel.controller.apiGetChat(rhId, chatType, apiId, contentFilter, ChatPagination.Around(itemId, 0), "") ?: return@coroutineScope null chat.chatItems.firstOrNull() } diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatView.kt index 0f491658f4..c3f39c88f1 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatView.kt @@ -76,10 +76,9 @@ fun ChatView( ModalManager.end.closeModals() } } else { - val showArchivedReports = remember { mutableStateOf(if (reportsView) reportsShowArchived else false) } val groupReports = remember { derivedStateOf { val reportsCount = if (activeChatInfo.value is ChatInfo.Group) activeChatStats.value?.reportsCount ?: 0 else 0 - GroupReports(reportsCount, reportsView, showArchivedReports.value) } + GroupReports(reportsCount, reportsView) } } val reversedChatItems = remember { derivedStateOf { chatModel.chatItemsForContent(groupReports.value.contentTag).value.asReversed() } } val searchText = rememberSaveable { mutableStateOf("") } @@ -240,7 +239,6 @@ fun ChatView( } }, groupReports, - showArchivedReports, scrollToItemId, attachmentOption, attachmentBottomSheetState, @@ -387,7 +385,7 @@ fun ChatView( } val deletedItem = deleted.deletedChatItem.chatItem if (deletedItem.isActiveReport) { - decreaseGroupReportsCounter(chatRh, chatInfo.id, toChatItem != null) + decreaseGroupReportsCounter(chatRh, chatInfo.id) } } withReportsChatsIfOpen { @@ -667,7 +665,6 @@ fun ChatLayout( composeState: MutableState, composeView: (@Composable () -> Unit), groupReports: State, - showArchivedReports: MutableState, scrollToItemId: MutableState, attachmentOption: MutableState, attachmentBottomSheetState: ModalBottomSheetState, @@ -824,9 +821,7 @@ fun ChatLayout( Column(if (oneHandUI.value) Modifier.align(Alignment.BottomStart).imePadding() else Modifier) { Box { if (selectedChatItems.value == null) { - GroupReportsAppBar(groupReports, { ModalManager.end.closeModal() }, showArchived = { showHide -> - showArchivedReports.value = showHide - }, onSearchValueChanged) + GroupReportsAppBar(groupReports, { ModalManager.end.closeModal() }, onSearchValueChanged) } else { SelectedItemsTopToolbar(selectedChatItems, !oneHandUI.value) } @@ -1113,7 +1108,6 @@ private fun ContactVerifiedShield() { /** Saves current scroll position when [GroupReports] are open and user opens [ChatItemInfoView], for example, and goes back */ private var reportsListState: LazyListState? = null -private var reportsShowArchived: Boolean = false @Composable fun BoxScope.ChatItemsList( @@ -1165,12 +1159,11 @@ fun BoxScope.ChatItemsList( val maxHeightForList = rememberUpdatedState( with(LocalDensity.current) { LocalWindowHeight().roundToPx() - topPaddingToContentPx.value - (AppBarHeight * fontSizeSqrtMultiplier * 2).roundToPx() } ) - val listState = rememberUpdatedState(rememberSaveable(chatInfo.id, searchValueIsEmpty.value, groupReports.value.showArchived, saver = LazyListState.Saver) { + val listState = rememberUpdatedState(rememberSaveable(chatInfo.id, searchValueIsEmpty.value, saver = LazyListState.Saver) { val index = mergedItems.value.items.indexOfLast { it.hasUnread() } val reportsState = reportsListState if (reportsState != null) { reportsListState = null - reportsShowArchived = false reportsState } else if (index <= 0) { LazyListState(0, 0) @@ -1968,7 +1961,6 @@ private fun SaveReportsStateOnDispose(groupReports: State, listSta DisposableEffect(Unit) { onDispose { reportsListState = if (groupReports.value.reportsView && ModalManager.end.hasModalOpen(ModalViewId.GROUP_REPORTS)) listState.value else null - reportsShowArchived = if (groupReports.value.reportsView && ModalManager.end.hasModalOpen(ModalViewId.GROUP_REPORTS)) groupReports.value.showArchived else false } } } @@ -2322,7 +2314,7 @@ private fun deleteMessages(chatRh: Long?, chatInfo: ChatInfo, itemIds: List(null) }, attachmentBottomSheetState = rememberModalBottomSheetState(initialValue = ModalBottomSheetValue.Hidden), @@ -2758,7 +2749,6 @@ fun PreviewGroupChatLayout() { composeState = remember { mutableStateOf(ComposeState(useLinkPreviews = true)) }, composeView = {}, groupReports = remember { mutableStateOf(GroupReports(0, false)) }, - showArchivedReports = remember { mutableStateOf(false) }, scrollToItemId = remember { mutableStateOf(null) }, attachmentOption = remember { mutableStateOf(null) }, attachmentBottomSheetState = rememberModalBottomSheetState(initialValue = ModalBottomSheetValue.Hidden), diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupChatInfoView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupChatInfoView.kt index 50d25b037d..d82352c5eb 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupChatInfoView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupChatInfoView.kt @@ -364,8 +364,8 @@ fun ModalData.GroupChatInfoLayout( } val prefsTitleId = if (groupInfo.businessChat == null) MR.strings.group_preferences else MR.strings.chat_preferences GroupPreferencesButton(prefsTitleId, openPreferences) - if (chat.chatStats.reportsCount > 0 || chat.chatStats.archivedReportsCount > 0) { - GroupReportsButton(chat.chatStats) { + if (groupInfo.canModerate) { + GroupReportsButton { scope.launch { showGroupReportsView(chatModel.chatId, scrollToItemId, chat.chatInfo) } @@ -501,10 +501,10 @@ private fun GroupPreferencesButton(titleId: StringResource, onClick: () -> Unit) } @Composable -private fun GroupReportsButton(chatStats: Chat.ChatStats, onClick: () -> Unit) { +private fun GroupReportsButton(onClick: () -> Unit) { SettingsActionItem( painterResource(MR.images.ic_flag), - stringResource(if (chatStats.reportsCount > 0) MR.strings.group_reports_member_reports else MR.strings.group_reports_archived_member_reports), + stringResource(MR.strings.group_reports_member_reports), click = onClick ) } diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupReportsView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupReportsView.kt index 23907d9570..125ed0ccb3 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupReportsView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupReportsView.kt @@ -26,13 +26,12 @@ val LocalContentTag: ProvidableCompositionLocal = staticComposit data class GroupReports( val reportsCount: Int, val reportsView: Boolean, - val showArchived: Boolean = false ) { val showBar: Boolean = reportsCount > 0 && !reportsView fun toContentFilter(): ContentFilter? { if (!reportsView) return null - return ContentFilter(MsgContentTag.Report, deleted = showArchived) + return ContentFilter(MsgContentTag.Report) } val contentTag: MsgContentTag? = if (!reportsView) null else MsgContentTag.Report @@ -47,7 +46,6 @@ private fun GroupReportsView(staleChatId: State, scrollToItemId: Mutabl fun GroupReportsAppBar( groupReports: State, close: () -> Unit, - showArchived: (Boolean) -> Unit, onSearchValueChanged: (String) -> Unit ) { val oneHandUI = remember { appPrefs.oneHandUI.state } @@ -97,28 +95,7 @@ fun GroupReportsAppBar( showSearch.value = true }) } - - @Composable - fun ShowHideArchived() { - ItemAction( - if (groupReports.value.showArchived) stringResource(MR.strings.group_reports_show_active) else stringResource(MR.strings.group_reports_show_archived), - painterResource(if (groupReports.value.showArchived) MR.images.ic_flag else MR.images.ic_inventory_2), - onClick = { - onClosedAction.value = { - showArchived(!groupReports.value.showArchived) - onClosedAction.value = {} - } - showMenu.value = false - } - ) - } - if (oneHandUI.value) { - ShowHideArchived() - Search() - } else { - Search() - ShowHideArchived() - } + Search() } } ItemsReload(groupReports) @@ -127,10 +104,9 @@ fun GroupReportsAppBar( @Composable private fun ItemsReload(groupReports: State) { LaunchedEffect(Unit) { - snapshotFlow { groupReports.value.showArchived to chatModel.chatId.value } + snapshotFlow { chatModel.chatId.value } .distinctUntilChanged() .drop(1) - .map { it.second } .filterNotNull() .map { chatModel.getChat(it) } .filterNotNull() @@ -142,12 +118,11 @@ private fun ItemsReload(groupReports: State) { } suspend fun showGroupReportsView(staleChatId: State, scrollToItemId: MutableState, chatInfo: ChatInfo) { - openChat(chatModel.remoteHostId(), chatInfo, ContentFilter(MsgContentTag.Report, false)) + openChat(chatModel.remoteHostId(), chatInfo, ContentFilter(MsgContentTag.Report)) ModalManager.end.showCustomModal(true, id = ModalViewId.GROUP_REPORTS) { close -> ModalView({}, showAppBar = false) { val chatInfo = remember { derivedStateOf { chatModel.chats.value.firstOrNull { it.id == chatModel.chatId.value }?.chatInfo } }.value - val chatStats = remember { derivedStateOf { chatModel.chats.value.firstOrNull { it.id == chatModel.chatId.value }?.chatStats } }.value - if (chatInfo is ChatInfo.Group && chatStats != null && (chatStats.reportsCount > 0 || chatStats.archivedReportsCount > 0)) { + if (chatInfo is ChatInfo.Group && chatInfo.groupInfo.canModerate) { GroupReportsView(staleChatId, scrollToItemId) } else { LaunchedEffect(Unit) { @@ -160,9 +135,5 @@ suspend fun showGroupReportsView(staleChatId: State, scrollToItemId: Mu private suspend fun reloadItems(chat: Chat, groupReports: State) { val contentFilter = groupReports.value.toContentFilter() - if (chat.chatStats.reportsCount > 0 || contentFilter?.deleted == true) { - apiLoadMessages(chat.remoteHostId, chat.chatInfo.chatType, chat.chatInfo.apiId, contentFilter, ChatPagination.Initial(ChatPagination.INITIAL_COUNT)) - } else { - openLoadedChat(chat.copy(chatItems = emptyList()), contentTag = contentFilter?.mcTag) - } + apiLoadMessages(chat.remoteHostId, chat.chatInfo.chatType, chat.chatInfo.apiId, contentFilter, ChatPagination.Initial(ChatPagination.INITIAL_COUNT)) } diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml index 2451114af4..54a49bdf31 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml @@ -448,8 +448,6 @@ %d reports Member reports Archived member reports - Show archived - Show active Share message…