message delete

pull/53/head
Zlatin Balevsky 2020-11-05 06:14:40 +00:00
parent 4f847b2ea4
commit 167a47e850
No known key found for this signature in database
GPG Key ID: A72832072D525E41
6 changed files with 60 additions and 31 deletions

View File

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

View File

@ -4,5 +4,5 @@ import com.muwire.core.Event
class MessageLoadedEvent extends Event {
MWMessage message
String folder
int folder
}

View File

@ -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<MWMessage> dest, String folderName) {
private void loadFolder(File file, Set<MWMessage> 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<MWMessage> set, File file) {
set.remove(message)
File messageFile = new File(file, deriveName(message))
messageFile.delete()
}
}

View File

@ -0,0 +1,8 @@
package com.muwire.core.messenger
import com.muwire.core.Event
class UIMessageDeleteEvent extends Event {
MWMessage message
int folder
}

View File

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

View File

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