multiple selection of messages

reproducible
Zlatin Balevsky 2021-05-02 19:09:43 +01:00
parent 591acc9325
commit ee43f12a35
No known key found for this signature in database
GPG Key ID: A72832072D525E41
5 changed files with 39 additions and 30 deletions

View File

@ -0,0 +1 @@
{"file":"AC8vVXNlcnMvemFiL2RldnN0dWZmL211d2lyZS9jb3JlL3NoYXJlZERpci9maWxlMQ==","length":1,"infoHash":"FAbgWIHimTZ3ZtMT4mwFVk7JG~ch0xcmvW5G5gaJU5o=","hashList":["bjQLnP-zepicpUTmu3gKLHiQHT-zNzh2hRGjBhevoB0="]}

View File

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

View File

@ -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<Persona> 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<MWMessage> 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))

View File

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

View File

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