Disable chat deletion
This commit is contained in:
@@ -324,8 +324,7 @@ private fun LoginScreen(vm: QMaxViewModel) {
|
||||
}
|
||||
|
||||
private enum class ChatBulkUiAction {
|
||||
ClearHistory,
|
||||
Delete
|
||||
ClearHistory
|
||||
}
|
||||
|
||||
private enum class MainTab {
|
||||
@@ -389,10 +388,6 @@ private fun ChatListScreen(vm: QMaxViewModel) {
|
||||
onClearSelectedHistory = {
|
||||
selectionMenuOpen = false
|
||||
pendingBulkAction = ChatBulkUiAction.ClearHistory
|
||||
},
|
||||
onDeleteSelectedChats = {
|
||||
selectionMenuOpen = false
|
||||
pendingBulkAction = ChatBulkUiAction.Delete
|
||||
}
|
||||
)
|
||||
|
||||
@@ -404,7 +399,6 @@ private fun ChatListScreen(vm: QMaxViewModel) {
|
||||
Text(
|
||||
when (action) {
|
||||
ChatBulkUiAction.ClearHistory -> "Очистить историю"
|
||||
ChatBulkUiAction.Delete -> "Удалить чаты"
|
||||
}
|
||||
)
|
||||
},
|
||||
@@ -412,7 +406,6 @@ private fun ChatListScreen(vm: QMaxViewModel) {
|
||||
Text(
|
||||
when (action) {
|
||||
ChatBulkUiAction.ClearHistory -> "Очистить историю в выбранных чатах: $selectedCount?"
|
||||
ChatBulkUiAction.Delete -> "Удалить выбранные чаты: $selectedCount?"
|
||||
}
|
||||
)
|
||||
},
|
||||
@@ -422,14 +415,12 @@ private fun ChatListScreen(vm: QMaxViewModel) {
|
||||
pendingBulkAction = null
|
||||
when (action) {
|
||||
ChatBulkUiAction.ClearHistory -> vm.clearSelectedChatHistories()
|
||||
ChatBulkUiAction.Delete -> vm.deleteSelectedChats()
|
||||
}
|
||||
}
|
||||
) {
|
||||
Text(
|
||||
when (action) {
|
||||
ChatBulkUiAction.ClearHistory -> "Очистить"
|
||||
ChatBulkUiAction.Delete -> "Удалить"
|
||||
}
|
||||
)
|
||||
}
|
||||
@@ -616,8 +607,7 @@ private fun TelegramChatListContent(
|
||||
onClearSelection: () -> Unit,
|
||||
onToggleChatSelection: (String) -> Unit,
|
||||
onBeginChatSelection: (String) -> Unit,
|
||||
onClearSelectedHistory: () -> Unit,
|
||||
onDeleteSelectedChats: () -> Unit
|
||||
onClearSelectedHistory: () -> Unit
|
||||
) {
|
||||
val selectedCount = state.selectedChatIds.size
|
||||
val listTab = activeTab != MainTab.Settings
|
||||
@@ -646,8 +636,7 @@ private fun TelegramChatListContent(
|
||||
menuOpen = selectionMenuOpen,
|
||||
onMenuOpenChange = onSelectionMenuOpenChange,
|
||||
onClearSelection = onClearSelection,
|
||||
onClearHistory = onClearSelectedHistory,
|
||||
onDelete = onDeleteSelectedChats
|
||||
onClearHistory = onClearSelectedHistory
|
||||
)
|
||||
} else {
|
||||
TelegramLikeHeader(
|
||||
@@ -815,8 +804,7 @@ private fun ChatSelectionHeader(
|
||||
menuOpen: Boolean,
|
||||
onMenuOpenChange: (Boolean) -> Unit,
|
||||
onClearSelection: () -> Unit,
|
||||
onClearHistory: () -> Unit,
|
||||
onDelete: () -> Unit
|
||||
onClearHistory: () -> Unit
|
||||
) {
|
||||
Row(
|
||||
modifier = Modifier
|
||||
@@ -865,20 +853,6 @@ private fun ChatSelectionHeader(
|
||||
onClearHistory()
|
||||
}
|
||||
)
|
||||
DropdownMenuItem(
|
||||
text = { Text("Удалить") },
|
||||
leadingIcon = {
|
||||
Icon(
|
||||
Icons.Filled.Delete,
|
||||
contentDescription = null,
|
||||
tint = Color(0xFFD84343)
|
||||
)
|
||||
},
|
||||
onClick = {
|
||||
onMenuOpenChange(false)
|
||||
onDelete()
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -136,20 +136,6 @@ class QMaxRepository(
|
||||
}
|
||||
}
|
||||
|
||||
suspend fun deleteChats(session: QMaxSession, chatIds: Collection<String>) {
|
||||
val ids = chatIds.filter(String::isNotBlank).distinct()
|
||||
if (ids.isEmpty()) {
|
||||
return
|
||||
}
|
||||
|
||||
messageCache.clearMessages(session, ids)
|
||||
val updatedChats = cachedChats(session).filterNot { it.id in ids }
|
||||
messageCache.saveChats(session, orderedChats(updatedChats))
|
||||
withFreshSession(session) {
|
||||
api.deleteChats(it.serverUrl, it.accessToken, ids)
|
||||
}
|
||||
}
|
||||
|
||||
suspend fun searchMessages(session: QMaxSession, chatId: String, query: String): List<MessageDto> {
|
||||
val messages = withFreshSession(session) { api.searchMessages(it.serverUrl, it.accessToken, chatId, query) }
|
||||
messages.forEach { messageCache.upsertMessage(session, it) }
|
||||
|
||||
@@ -91,10 +91,6 @@ class QMaxApi {
|
||||
postNoContent(sessionServerUrl, "/api/chats/clear-history", token, ChatBulkActionRequest(chatIds))
|
||||
}
|
||||
|
||||
suspend fun deleteChats(sessionServerUrl: String, token: String, chatIds: List<String>) {
|
||||
postNoContent(sessionServerUrl, "/api/chats/delete", token, ChatBulkActionRequest(chatIds))
|
||||
}
|
||||
|
||||
suspend fun searchMessages(sessionServerUrl: String, token: String, chatId: String, query: String): List<MessageDto> {
|
||||
val encodedQuery = URLEncoder.encode(query, StandardCharsets.UTF_8.toString())
|
||||
return get(sessionServerUrl, "/api/chats/$chatId/search?q=$encodedQuery", token)
|
||||
|
||||
@@ -433,35 +433,6 @@ class QMaxViewModel(private val repository: QMaxRepository) : ViewModel() {
|
||||
refreshChats(showLoading = false)
|
||||
}
|
||||
|
||||
fun deleteSelectedChats() = launchLoading(false) {
|
||||
val session = requireSession()
|
||||
val ids = state.value.selectedChatIds
|
||||
if (ids.isEmpty()) return@launchLoading
|
||||
|
||||
val selectedChatId = state.value.selectedChat?.id
|
||||
val selectedChatDeleted = selectedChatId != null && selectedChatId in ids
|
||||
val updatedChats = normalizeChats(state.value.chats.filterNot { it.id in ids })
|
||||
state.value = state.value.copy(
|
||||
selectedChat = if (selectedChatDeleted) null else state.value.selectedChat,
|
||||
chats = updatedChats,
|
||||
messages = if (selectedChatDeleted) emptyList() else state.value.messages,
|
||||
chatPresenceText = if (selectedChatDeleted) null else state.value.chatPresenceText,
|
||||
replyTarget = if (selectedChatDeleted) null else state.value.replyTarget,
|
||||
editTarget = if (selectedChatDeleted) null else state.value.editTarget,
|
||||
forwardTarget = if (selectedChatDeleted) null else state.value.forwardTarget,
|
||||
composerText = if (selectedChatDeleted) "" else state.value.composerText,
|
||||
selectedChatIds = emptySet()
|
||||
)
|
||||
if (selectedChatDeleted) {
|
||||
messagePollJob?.cancel()
|
||||
presencePollJob?.cancel()
|
||||
realtime.joinChat(null)
|
||||
}
|
||||
persistCurrentChats()
|
||||
repository.deleteChats(session, ids)
|
||||
refreshChats(showLoading = false)
|
||||
}
|
||||
|
||||
fun loadMessages(showLoading: Boolean = true, forceHydrate: Boolean = false) = launchLoading(showLoading) {
|
||||
if (!showLoading && state.value.sendingMessage) {
|
||||
return@launchLoading
|
||||
|
||||
Reference in New Issue
Block a user