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 25675897..3604dab7 100644 --- a/core/src/main/groovy/com/muwire/core/messenger/Messenger.groovy +++ b/core/src/main/groovy/com/muwire/core/messenger/Messenger.groovy @@ -138,12 +138,12 @@ class Messenger { synchronized void onUIMessageEvent(UIMessageEvent e) { outboxMessages.add(e.message) - diskIO.execute({persist(e.message, outbox)}) + diskIO.execute({persist(e.message, folders.get(OUTBOX))}) } synchronized void onUIMessageReadEvent(UIMessageReadEvent e) { diskIO.execute({ - File unread = new File(inbox, deriveUnread(e.message)) + File unread = new File(folders.get(INBOX), deriveUnread(e.message)) unread.delete() }) } @@ -157,8 +157,8 @@ class Messenger { private void moveToSent(MWMessage message) { String name = deriveName(message) - File f = new File(outbox, name) - File target = new File(sent, name) + File f = new File(folders.get(OUTBOX), name) + File target = new File(folders.get(SENT), name) Files.move(f.toPath(), target.toPath(), StandardCopyOption.ATOMIC_MOVE, StandardCopyOption.REPLACE_EXISTING) eventBus.publish(new MessageSentEvent(message : message)) log.fine("moved message to ${message.recipients} to sent folder") @@ -213,9 +213,9 @@ class Messenger { public synchronized void onMessageReceivedEvent(MessageReceivedEvent e) { if (inboxMessages.add(e.message)) { diskIO.execute({ - File unread = new File(inbox, deriveUnread(e.message)) + File unread = new File(folders.get(INBOX), deriveUnread(e.message)) unread.createNewFile() - persist(e.message, inbox) + persist(e.message, folders.get(INBOX)) }) } } @@ -247,9 +247,9 @@ 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 + case INBOX : deleteFromFolder(e.message, inboxMessages, folders.get(INBOX)); break; + case OUTBOX : deleteFromFolder(e.message, outboxMessages, folders.get(OUTBOX)); break; + case SENT : deleteFromFolder(e.message, sentMessages, folders.get(SENT)); break } } diff --git a/gui/griffon-app/controllers/com/muwire/gui/MessageFolderController.groovy b/gui/griffon-app/controllers/com/muwire/gui/MessageFolderController.groovy index 54486ae7..fb9934a2 100644 --- a/gui/griffon-app/controllers/com/muwire/gui/MessageFolderController.groovy +++ b/gui/griffon-app/controllers/com/muwire/gui/MessageFolderController.groovy @@ -69,7 +69,7 @@ class MessageFolderController { void messageCompose() { def params = [:] params.recipients = new HashSet<>() - params.core = core + params.core = model.core mvcGroup.createMVCGroup("new-message", UUID.randomUUID().toString(), params) } @@ -108,7 +108,7 @@ class MessageFolderController { } } - application.mvcGroupManager.findGroup('main-frame').view.showDownloadsWindow.call() + application.mvcGroupManager.findGroup('MainFrame').view.showDownloadsWindow.call() } void markMessageRead(MWMessageStatus status) { diff --git a/gui/griffon-app/controllers/com/muwire/gui/NewMessageController.groovy b/gui/griffon-app/controllers/com/muwire/gui/NewMessageController.groovy index 44f6bea8..e72f5f27 100644 --- a/gui/griffon-app/controllers/com/muwire/gui/NewMessageController.groovy +++ b/gui/griffon-app/controllers/com/muwire/gui/NewMessageController.groovy @@ -1,6 +1,10 @@ package com.muwire.gui +import griffon.core.GriffonApplication import griffon.core.artifact.GriffonController + +import javax.inject.Inject + import static com.muwire.gui.Translator.trans import griffon.core.controller.ControllerAction @@ -22,6 +26,8 @@ class NewMessageController { NewMessageModel model @MVCMember @Nonnull NewMessageView view + @Inject @Nonnull + GriffonApplication application @ControllerAction void send() { diff --git a/gui/griffon-app/models/com/muwire/gui/MainFrameModel.groovy b/gui/griffon-app/models/com/muwire/gui/MainFrameModel.groovy index 191fd63d..383fef26 100644 --- a/gui/griffon-app/models/com/muwire/gui/MainFrameModel.groovy +++ b/gui/griffon-app/models/com/muwire/gui/MainFrameModel.groovy @@ -823,12 +823,8 @@ class MainFrameModel { } void addToOutbox(MWMessage message) { - messageHeadersMap.get(Messenger.OUTBOX).add(new MWMessageStatus(message, false)) - if (folderIdx == Messenger.OUTBOX) { - messageHeaders.clear() - messageHeaders.addAll(messageHeadersMap.get(Messenger.OUTBOX)) - view.messageHeaderTable.model.fireTableDataChanged() - } + def status = new MWMessageStatus(message, false) + messageFoldersMap.get(Messenger.OUTBOX).model.add(status) } void onMessageLoadedEvent(MessageLoadedEvent e) { @@ -843,15 +839,10 @@ class MainFrameModel { void onMessageReceivedEvent(MessageReceivedEvent e) { runInsideUIAsync { - if (messageHeadersMap.get(Messenger.INBOX).add(new MWMessageStatus(e.message, true))) { + if (messageFoldersMap.get(Messenger.INBOX).model.processMessageReceivedEvent(e)) { messages++ messageNotificator.newMessage(e.message.sender.getHumanReadableName()) messageNotificator.messages(messages) - if (folderIdx == Messenger.INBOX) { - messageHeaders.clear() - messageHeaders.addAll(messageHeadersMap.get(Messenger.INBOX)) - view.messageHeaderTable.model.fireTableDataChanged() - } } } } @@ -859,13 +850,8 @@ class MainFrameModel { void onMessageSentEvent(MessageSentEvent e) { runInsideUIAsync { MWMessageStatus status = new MWMessageStatus(e.message, false) - messageHeadersMap.get(Messenger.OUTBOX).remove(status) - messageHeadersMap.get(Messenger.SENT).add(status) - if (folderIdx != Messenger.INBOX) { - messageHeaders.clear() - messageHeaders.addAll(messageHeadersMap.get(folderIdx)) - view.messageHeaderTable.model.fireTableDataChanged() - } + messageFoldersMap.get(Messenger.OUTBOX).model.remove(status) + messageFoldersMap.get(Messenger.SENT).model.add(status) } } diff --git a/gui/griffon-app/models/com/muwire/gui/MessageFolderModel.groovy b/gui/griffon-app/models/com/muwire/gui/MessageFolderModel.groovy index 2e5f0150..b5cd326a 100644 --- a/gui/griffon-app/models/com/muwire/gui/MessageFolderModel.groovy +++ b/gui/griffon-app/models/com/muwire/gui/MessageFolderModel.groovy @@ -3,6 +3,7 @@ package com.muwire.gui import com.muwire.core.Core import com.muwire.core.messenger.MWMessage import com.muwire.core.messenger.MessageLoadedEvent +import com.muwire.core.messenger.MessageReceivedEvent import griffon.core.artifact.GriffonModel import griffon.inject.MVCMember import griffon.transform.Observable @@ -39,7 +40,31 @@ class MessageFolderModel { def status = new MWMessageStatus(e.message, e.unread) if (messages.add(status)) { messageHeaders.add(status) + view.messageHeaderTable.model.fireTableDataChanged() + } + } + + boolean processMessageReceivedEvent(MessageReceivedEvent e) { + def status = new MWMessageStatus(e.message, true) + if (messages.add(status)) { + messageHeaders.add(status) + view.messageHeaderTable.model.fireTableDataChanged() + return true + } + false + } + + void remove(MWMessageStatus status) { + if (messages.remove(status)) { + messageHeaders.remove(status) + view.messageHeaderTable.model.fireTableDataChanged() + } + } + + void add(MWMessageStatus status) { + if (messages.add(status)) { + messageHeaders.add(status) + view.messageHeaderTable.model.fireTableDataChanged() } - view.messageHeaderTable.model.fireTableDataChanged() } } \ No newline at end of file