From ee43f12a35ea97a620ecb78c8ec25d4a426ada23 Mon Sep 17 00:00:00 2001 From: Zlatin Balevsky Date: Sun, 2 May 2021 19:09:43 +0100 Subject: [PATCH] multiple selection of messages --- core/persisted.bak | 1 + .../muwire/core/messenger/Messenger.groovy | 8 ++--- .../muwire/gui/MessageFolderController.groovy | 34 +++++++++++-------- .../com/muwire/gui/MainFrameModel.groovy | 2 +- .../com/muwire/gui/MessageFolderView.groovy | 24 +++++++------ 5 files changed, 39 insertions(+), 30 deletions(-) create mode 100644 core/persisted.bak diff --git a/core/persisted.bak b/core/persisted.bak new file mode 100644 index 00000000..abf60db1 --- /dev/null +++ b/core/persisted.bak @@ -0,0 +1 @@ +{"file":"AC8vVXNlcnMvemFiL2RldnN0dWZmL211d2lyZS9jb3JlL3NoYXJlZERpci9maWxlMQ==","length":1,"infoHash":"FAbgWIHimTZ3ZtMT4mwFVk7JG~ch0xcmvW5G5gaJU5o=","hashList":["bjQLnP-zepicpUTmu3gKLHiQHT-zNzh2hRGjBhevoB0="]} \ No newline at end of file diff --git a/core/src/main/groovy/com/muwire/core/messenger/Messenger.groovy b/core/src/main/groovy/com/muwire/core/messenger/Messenger.groovy index 14d02917..fc2a499d 100644 --- a/core/src/main/groovy/com/muwire/core/messenger/Messenger.groovy +++ b/core/src/main/groovy/com/muwire/core/messenger/Messenger.groovy @@ -1,11 +1,9 @@ package com.muwire.core.messenger -import com.sun.tools.doclets.standard.Standard import java.nio.charset.StandardCharsets import java.nio.file.Files import java.nio.file.Path -import java.nio.file.Paths import java.nio.file.StandardCopyOption import java.util.concurrent.ExecutorService import java.util.concurrent.Executors @@ -293,8 +291,9 @@ class Messenger { File from = new File(containerFrom, e.from) from = new File(from, deriveName(e.message)) - if (!from.exists()) + if (!from.exists()) { return + } File unread = new File(containerFrom, e.from) unread = new File(unread, deriveUnread(e.message)) @@ -311,8 +310,9 @@ class Messenger { File to = new File(containerTo, e.to) to = new File(to, deriveName(e.message)) - if (to.exists()) + if (to.exists()) { return + } Files.move(from.toPath(), to.toPath(), StandardCopyOption.ATOMIC_MOVE) diff --git a/gui/griffon-app/controllers/com/muwire/gui/MessageFolderController.groovy b/gui/griffon-app/controllers/com/muwire/gui/MessageFolderController.groovy index 8ca93731..f866d46e 100644 --- a/gui/griffon-app/controllers/com/muwire/gui/MessageFolderController.groovy +++ b/gui/griffon-app/controllers/com/muwire/gui/MessageFolderController.groovy @@ -25,10 +25,10 @@ class MessageFolderController { @ControllerAction void messageReply() { - int row = view.selectedMessageHeader() - if (row < 0) + int[] rows = view.selectedMessageHeaders() + if (rows.length == 0) return - MWMessage msg = model.messageHeaders.get(row).message + MWMessage msg = model.messageHeaders.get(rows[0]).message def params = [:] params.reply = msg @@ -39,10 +39,10 @@ class MessageFolderController { @ControllerAction void messageReplyAll() { - int row = view.selectedMessageHeader() - if (row < 0) + int[] rows = view.selectedMessageHeaders() + if (rows.length == 0) return - MWMessage msg = model.messageHeaders.get(row).message + MWMessage msg = model.messageHeaders.get(rows[0]).message Set all = new HashSet<>() all.add(msg.sender) @@ -57,12 +57,18 @@ class MessageFolderController { @ControllerAction void messageDelete() { - int row = view.selectedMessageHeader() - if (row < 0) + int[] rows = view.selectedMessageHeaders() + if (rows.length == 0) return - MWMessage msg = model.messageHeaders.get(row).message - model.deleteMessage(msg) - model.core.eventBus.publish(new UIMessageDeleteEvent(message : msg, folder : model.name)) + List toDelete = new ArrayList<>() + for (int row : rows) { + MWMessage msg = model.messageHeaders.get(row).message + toDelete.add(msg) + } + toDelete.each {msg -> + model.deleteMessage(msg) + model.core.eventBus.publish(new UIMessageDeleteEvent(message: msg, folder: model.name)) + } } @ControllerAction @@ -88,11 +94,11 @@ class MessageFolderController { } private void doDownloadAttachments(List attachments) { - int messageRow = view.selectedMessageHeader() - if (messageRow < 0) + int[] messageRows = view.selectedMessageHeaders() + if (messageRows.length == 0) return - MWMessage message = model.messageHeaders.get(messageRow).message + MWMessage message = model.messageHeaders.get(messageRows[0]).message attachments.each { if (it instanceof MWMessageAttachment) model.core.eventBus.publish(new UIDownloadAttachmentEvent(attachment : it, sender : message.sender)) diff --git a/gui/griffon-app/models/com/muwire/gui/MainFrameModel.groovy b/gui/griffon-app/models/com/muwire/gui/MainFrameModel.groovy index 8577e853..cf4831e1 100644 --- a/gui/griffon-app/models/com/muwire/gui/MainFrameModel.groovy +++ b/gui/griffon-app/models/com/muwire/gui/MainFrameModel.groovy @@ -900,7 +900,7 @@ class MainFrameModel { props['core'] = core props['outgoing'] = false props['name'] = e.name - def folder = application.mvcGroupManager.createMVCGroup('message-folder', 'folder-${e.name}', props) + def folder = application.mvcGroupManager.createMVCGroup('message-folder', "folder-${e.name}", props) view.addUserMessageFolder(folder) } } \ No newline at end of file diff --git a/gui/griffon-app/views/com/muwire/gui/MessageFolderView.groovy b/gui/griffon-app/views/com/muwire/gui/MessageFolderView.groovy index 2e68d03f..2b3b8d81 100644 --- a/gui/griffon-app/views/com/muwire/gui/MessageFolderView.groovy +++ b/gui/griffon-app/views/com/muwire/gui/MessageFolderView.groovy @@ -136,13 +136,15 @@ class MessageFolderView { messageAttachmentsTable = builder.getVariable("message-attachments-table") } - int selectedMessageHeader() { - int selectedRow = messageHeaderTable.getSelectedRow() - if (selectedRow < 0) - return -1 - if (lastMessageHeaderTableSortEvent != null) - selectedRow = messageHeaderTable.rowSorter.convertRowIndexToModel(selectedRow) - selectedRow + int[] selectedMessageHeaders() { + int[] selectedRows = messageHeaderTable.getSelectedRows() + if (selectedRows.length == 0) + return selectedRows + if (lastMessageHeaderTableSortEvent != null) { + for (int i = 0; i < selectedRows.length; i++) + selectedRows[i] = messageHeaderTable.rowSorter.convertRowIndexToModel(selectedRows[i]) + } + selectedRows } List selectedMessageAttachments() { @@ -183,16 +185,16 @@ class MessageFolderView { messageHeaderTable.rowSorter.setSortKeys(Collections.singletonList(sortKey)) def selectionModel = messageHeaderTable.getSelectionModel() - selectionModel.setSelectionMode(ListSelectionModel.SINGLE_SELECTION) + selectionModel.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION) selectionModel.addListSelectionListener({ - int selectedRow = selectedMessageHeader() - if (selectedRow < 0) { + int[] selectedRows = selectedMessageHeaders() + if (selectedRows.length == 0) { model.messageButtonsEnabled = false model.messageAttachmentsButtonEnabled = false messageBody.setText("") model.messageRecipientList = "" } else { - MWMessageStatus selectedStatus = model.messageHeaders.get(selectedRow) + MWMessageStatus selectedStatus = model.messageHeaders.get(selectedRows[0]) controller.markMessageRead(selectedStatus) MWMessage selected = selectedStatus.message messageBody.setText(selected.body)