diff --git a/core/src/main/groovy/com/muwire/core/Core.groovy b/core/src/main/groovy/com/muwire/core/Core.groovy index 7df3cf7c..c76977da 100644 --- a/core/src/main/groovy/com/muwire/core/Core.groovy +++ b/core/src/main/groovy/com/muwire/core/Core.groovy @@ -82,6 +82,7 @@ import com.muwire.core.mesh.MeshManager import com.muwire.core.messenger.MessageReceivedEvent import com.muwire.core.messenger.Messenger import com.muwire.core.messenger.UIDownloadAttachmentEvent +import com.muwire.core.messenger.UIMessageDeleteEvent import com.muwire.core.messenger.UIMessageEvent import com.muwire.core.search.BrowseManager import com.muwire.core.search.QueryEvent @@ -493,6 +494,7 @@ public class Core { register(UILoadedEvent.class, messenger) register(MessageReceivedEvent.class, messenger) register(UIMessageEvent.class, messenger) + register(UIMessageDeleteEvent.class, messenger) } } diff --git a/core/src/main/groovy/com/muwire/core/messenger/MessageLoadedEvent.groovy b/core/src/main/groovy/com/muwire/core/messenger/MessageLoadedEvent.groovy index 3dfc83d3..5851a6b1 100644 --- a/core/src/main/groovy/com/muwire/core/messenger/MessageLoadedEvent.groovy +++ b/core/src/main/groovy/com/muwire/core/messenger/MessageLoadedEvent.groovy @@ -4,5 +4,5 @@ import com.muwire.core.Event class MessageLoadedEvent extends Event { MWMessage message - String folder + int folder } 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 d3852d83..4d8b7f19 100644 --- a/core/src/main/groovy/com/muwire/core/messenger/Messenger.groovy +++ b/core/src/main/groovy/com/muwire/core/messenger/Messenger.groovy @@ -23,6 +23,9 @@ import net.i2p.data.Base64 @Log class Messenger { + public final static int INBOX = 0 + public final static int OUTBOX = 1 + public final static int SENT = 2 private static final int MAX_IN_PROCESS = 4 @@ -76,14 +79,14 @@ class Messenger { private void load() { log.info("loading messages") - loadFolder(inbox, inboxMessages, "inbox") - loadFolder(outbox, outboxMessages, "outbox") - loadFolder(sent, sentMessages, "sent") + loadFolder(inbox, inboxMessages, INBOX) + loadFolder(outbox, outboxMessages, OUTBOX) + loadFolder(sent, sentMessages, SENT) log.info("loaded messages") timer.schedule({send()} as TimerTask, 1000, 1000) } - private void loadFolder(File file, Set dest, String folderName) { + private void loadFolder(File file, Set dest, int folder) { Files.walk(file.toPath()) .filter({it.getFileName().toString().endsWith(".mwmessage")}) .forEach { Path path -> @@ -93,7 +96,7 @@ class Messenger { message = new MWMessage(it) } addMessage(message, dest) - eventBus.publish(new MessageLoadedEvent(message : message, folder : folderName)) + eventBus.publish(new MessageLoadedEvent(message : message, folder : folder)) } } @@ -189,4 +192,18 @@ class Messenger { } } } + + public synchronized void onUIMessageDeleteEvent(UIMessageDeleteEvent e) { + switch(e.folder) { + case INBOX : deleteFromFolder(e.message, inboxMessages, inbox); break; + case OUTBOX : deleteFromFolder(e.message, outboxMessages, outbox); break; + case SENT : deleteFromFolder(e.message, sentMessages, sent); break + } + } + + private void deleteFromFolder(MWMessage message, Set set, File file) { + set.remove(message) + File messageFile = new File(file, deriveName(message)) + messageFile.delete() + } } \ No newline at end of file diff --git a/core/src/main/groovy/com/muwire/core/messenger/UIMessageDeleteEvent.groovy b/core/src/main/groovy/com/muwire/core/messenger/UIMessageDeleteEvent.groovy new file mode 100644 index 00000000..13bc1f72 --- /dev/null +++ b/core/src/main/groovy/com/muwire/core/messenger/UIMessageDeleteEvent.groovy @@ -0,0 +1,8 @@ +package com.muwire.core.messenger + +import com.muwire.core.Event + +class UIMessageDeleteEvent extends Event { + MWMessage message + int folder +} diff --git a/gui/griffon-app/controllers/com/muwire/gui/MainFrameController.groovy b/gui/griffon-app/controllers/com/muwire/gui/MainFrameController.groovy index 93d56500..cb6780e7 100644 --- a/gui/griffon-app/controllers/com/muwire/gui/MainFrameController.groovy +++ b/gui/griffon-app/controllers/com/muwire/gui/MainFrameController.groovy @@ -46,6 +46,7 @@ import com.muwire.core.files.FileUnsharedEvent import com.muwire.core.messenger.MWMessage import com.muwire.core.messenger.MWMessageAttachment import com.muwire.core.messenger.UIDownloadAttachmentEvent +import com.muwire.core.messenger.UIMessageDeleteEvent import com.muwire.core.search.QueryEvent import com.muwire.core.search.SearchEvent import com.muwire.core.trust.RemoteTrustList @@ -799,6 +800,12 @@ class MainFrameController { @ControllerAction void messageDelete() { + int row = view.selectedMessageHeader() + if (row < 0) + return + MWMessage msg = model.messageHeaders.get(row) + model.deleteMessage(msg) + core.eventBus.publish(new UIMessageDeleteEvent(message : msg, folder : model.folderIdx)) } @ControllerAction diff --git a/gui/griffon-app/models/com/muwire/gui/MainFrameModel.groovy b/gui/griffon-app/models/com/muwire/gui/MainFrameModel.groovy index bd6f4136..bcf4fd4d 100644 --- a/gui/griffon-app/models/com/muwire/gui/MainFrameModel.groovy +++ b/gui/griffon-app/models/com/muwire/gui/MainFrameModel.groovy @@ -54,6 +54,7 @@ import com.muwire.core.messenger.MWMessage import com.muwire.core.messenger.MessageLoadedEvent import com.muwire.core.messenger.MessageReceivedEvent import com.muwire.core.messenger.MessageSentEvent +import com.muwire.core.messenger.Messenger import com.muwire.core.search.QueryEvent import com.muwire.core.search.SearchEvent import com.muwire.core.search.UIResultBatchEvent @@ -122,10 +123,6 @@ class MainFrameModel { int folderIdx List messageAttachments = new ArrayList<>() - private final static int INBOX = 0 - private final static int OUTBOX = 1 - private final static int SENT = 2 - boolean sessionRestored @Observable int connections @@ -837,28 +834,18 @@ class MainFrameModel { } void addToOutbox(MWMessage message) { - messageHeadersMap.get(OUTBOX).add(message) - if (folderIdx == OUTBOX) { + messageHeadersMap.get(Messenger.OUTBOX).add(message) + if (folderIdx == Messenger.OUTBOX) { messageHeaders.clear() - messageHeaders.addAll(messageHeadersMap.get(OUTBOX)) + messageHeaders.addAll(messageHeadersMap.get(Messenger.OUTBOX)) view.messageHeaderTable.model.fireTableDataChanged() } } void onMessageLoadedEvent(MessageLoadedEvent e) { runInsideUIAsync { - int idx = 0 - switch(e.folder) { - case "inbox" : idx = INBOX; break - case "outbox" : idx = OUTBOX; break - case "sent" : idx = SENT; break - default : - throw new IllegalStateException("unknown folder $e.folder") - - } - - messageHeadersMap.get(idx).add(e.message) - if (idx == folderIdx) { + messageHeadersMap.get(e.folder).add(e.message) + if (e.folder == folderIdx) { messageHeaders.clear() messageHeaders.addAll(messageHeadersMap.get(idx)) view.messageHeaderTable.model.fireTableDataChanged() @@ -868,10 +855,10 @@ class MainFrameModel { void onMessageReceivedEvent(MessageReceivedEvent e) { runInsideUIAsync { - messageHeadersMap.get(INBOX).add(e.message) - if (folderIdx == INBOX) { + messageHeadersMap.get(Messenger.INBOX).add(e.message) + if (folderIdx == Messenger.INBOX) { messageHeaders.clear() - messageHeaders.addAll(messageHeadersMap.get(INBOX)) + messageHeaders.addAll(messageHeadersMap.get(Messenger.INBOX)) view.messageHeaderTable.model.fireTableDataChanged() } } @@ -879,13 +866,21 @@ class MainFrameModel { void onMessageSentEvent(MessageSentEvent e) { runInsideUIAsync { - messageHeadersMap.get(OUTBOX).remove(e.message) - messageHeadersMap.get(SENT).add(e.message) - if (folderIdx != INBOX) { + messageHeadersMap.get(Messenger.OUTBOX).remove(e.message) + messageHeadersMap.get(Messenger.SENT).add(e.message) + if (folderIdx != Messenger.INBOX) { messageHeaders.clear() messageHeaders.addAll(messageHeadersMap.get(folderIdx)) view.messageHeaderTable.model.fireTableDataChanged() } } } + + void deleteMessage(MWMessage message) { + messageHeadersMap.get(folderIdx).remove(message) + messageHeaders.remove(message) + view.messageHeaderTable.model.fireTableDataChanged() + view.messageBody.setText("") + view.messageSplitPane.setDividerLocation(1.0d) + } } \ No newline at end of file