mirror of https://github.com/zlatinb/muwire
unread status column
parent
22c0e483c3
commit
92b616a58b
|
@ -84,6 +84,7 @@ 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.messenger.UIMessageReadEvent
|
||||
import com.muwire.core.search.BrowseManager
|
||||
import com.muwire.core.search.QueryEvent
|
||||
import com.muwire.core.search.ResponderCache
|
||||
|
@ -495,6 +496,7 @@ public class Core {
|
|||
register(MessageReceivedEvent.class, messenger)
|
||||
register(UIMessageEvent.class, messenger)
|
||||
register(UIMessageDeleteEvent.class, messenger)
|
||||
register(UIMessageReadEvent.class, messenger)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -5,4 +5,5 @@ import com.muwire.core.Event
|
|||
class MessageLoadedEvent extends Event {
|
||||
MWMessage message
|
||||
int folder
|
||||
boolean unread
|
||||
}
|
||||
|
|
|
@ -96,7 +96,8 @@ class Messenger {
|
|||
message = new MWMessage(it)
|
||||
}
|
||||
addMessage(message, dest)
|
||||
eventBus.publish(new MessageLoadedEvent(message : message, folder : folder))
|
||||
File unread = new File(file, deriveUnread(message))
|
||||
eventBus.publish(new MessageLoadedEvent(message : message, folder : folder, unread : unread.exists()))
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -109,6 +110,13 @@ class Messenger {
|
|||
diskIO.execute({persist(e.message, outbox)})
|
||||
}
|
||||
|
||||
synchronized void onUIMessageReadEvent(UIMessageReadEvent e) {
|
||||
diskIO.execute({
|
||||
File unread = new File(inbox, deriveUnread(e.message))
|
||||
unread.delete()
|
||||
})
|
||||
}
|
||||
|
||||
private void persist(MWMessage message, File folder) {
|
||||
File f = new File(folder, deriveName(message))
|
||||
f.withOutputStream {
|
||||
|
@ -126,8 +134,16 @@ class Messenger {
|
|||
}
|
||||
|
||||
private static String deriveName(MWMessage message) {
|
||||
namePrefix(message) + ".mwmessage"
|
||||
}
|
||||
|
||||
private static String deriveUnread(MWMessage message) {
|
||||
namePrefix(message) + ".unread"
|
||||
}
|
||||
|
||||
private static String namePrefix(MWMessage message) {
|
||||
String ih = Base64.encode(message.getInfoHash().getRoot())
|
||||
"${ih}_${message.sender.getHumanReadableName()}_${message.timestamp}.mwmessage"
|
||||
"${ih}_${message.sender.getHumanReadableName()}_${message.timestamp}"
|
||||
}
|
||||
|
||||
private synchronized void send() {
|
||||
|
@ -165,7 +181,11 @@ class Messenger {
|
|||
|
||||
public synchronized void onMessageReceivedEvent(MessageReceivedEvent e) {
|
||||
inboxMessages.add(e.message)
|
||||
diskIO.execute({persist(e.message, inbox)})
|
||||
diskIO.execute({
|
||||
File unread = new File(inbox, deriveUnread(e.message))
|
||||
unread.createNewFile()
|
||||
persist(e.message, inbox)
|
||||
})
|
||||
}
|
||||
|
||||
private boolean deliverTo(MWMessage message, Persona recipient) {
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
package com.muwire.core.messenger
|
||||
|
||||
import com.muwire.core.Event
|
||||
|
||||
class UIMessageReadEvent extends Event {
|
||||
MWMessage message
|
||||
}
|
|
@ -8,6 +8,7 @@ import griffon.metadata.ArtifactProviderFor
|
|||
import net.i2p.crypto.DSAEngine
|
||||
import net.i2p.data.Base64
|
||||
import net.i2p.data.Signature
|
||||
import net.i2p.data.i2cp.MessageStatusMessage
|
||||
|
||||
import java.awt.Desktop
|
||||
import java.awt.Toolkit
|
||||
|
@ -47,6 +48,7 @@ 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.messenger.UIMessageReadEvent
|
||||
import com.muwire.core.search.QueryEvent
|
||||
import com.muwire.core.search.SearchEvent
|
||||
import com.muwire.core.trust.RemoteTrustList
|
||||
|
@ -57,6 +59,7 @@ import com.muwire.core.trust.TrustSubscriptionEvent
|
|||
import com.muwire.core.upload.HashListUploader
|
||||
import com.muwire.core.upload.Uploader
|
||||
import com.muwire.core.util.DataUtil
|
||||
import com.muwire.gui.MainFrameModel.MWMessageStatus
|
||||
|
||||
@ArtifactProviderFor(GriffonController)
|
||||
class MainFrameController {
|
||||
|
@ -794,7 +797,7 @@ class MainFrameController {
|
|||
int row = view.selectedMessageHeader()
|
||||
if (row < 0)
|
||||
return
|
||||
MWMessage msg = model.messageHeaders.get(row)
|
||||
MWMessage msg = model.messageHeaders.get(row).message
|
||||
|
||||
def params = [:]
|
||||
params.reply = msg
|
||||
|
@ -808,7 +811,7 @@ class MainFrameController {
|
|||
int row = view.selectedMessageHeader()
|
||||
if (row < 0)
|
||||
return
|
||||
MWMessage msg = model.messageHeaders.get(row)
|
||||
MWMessage msg = model.messageHeaders.get(row).message
|
||||
|
||||
Set<Persona> all = new HashSet<>()
|
||||
all.add(msg.sender)
|
||||
|
@ -826,7 +829,7 @@ class MainFrameController {
|
|||
int row = view.selectedMessageHeader()
|
||||
if (row < 0)
|
||||
return
|
||||
MWMessage msg = model.messageHeaders.get(row)
|
||||
MWMessage msg = model.messageHeaders.get(row).message
|
||||
model.deleteMessage(msg)
|
||||
core.eventBus.publish(new UIMessageDeleteEvent(message : msg, folder : model.folderIdx))
|
||||
}
|
||||
|
@ -879,12 +882,17 @@ class MainFrameController {
|
|||
doDownloadAttachments(model.messageAttachments)
|
||||
}
|
||||
|
||||
void markMessageRead(MWMessageStatus status) {
|
||||
status.status = false
|
||||
model.core.eventBus.publish(new UIMessageReadEvent(message : status.message))
|
||||
}
|
||||
|
||||
private void doDownloadAttachments(List attachments) {
|
||||
int messageRow = view.selectedMessageHeader()
|
||||
if (messageRow < 0)
|
||||
return
|
||||
|
||||
MWMessage message = model.messageHeaders.get(messageRow)
|
||||
MWMessage message = model.messageHeaders.get(messageRow).message
|
||||
attachments.each {
|
||||
if (it instanceof MWMessageAttachment)
|
||||
core.eventBus.publish(new UIDownloadAttachmentEvent(attachment : it, sender : message.sender))
|
||||
|
|
|
@ -586,6 +586,7 @@ DOWNLOAD_ALL=Download All
|
|||
COLLECTION=Collection
|
||||
|
||||
## New message window
|
||||
UNREAD=Unread
|
||||
RECIPIENTS=Recipients
|
||||
RECIPIENTS_TITLE=Drag and drop recipients from your contacts
|
||||
SEND=Send
|
||||
|
|
|
@ -118,8 +118,8 @@ class MainFrameModel {
|
|||
def feedItems = []
|
||||
|
||||
def messageFolders = [trans("INBOX"), trans("OUTBOX"), trans("SENT")]
|
||||
List<MWMessage> messageHeaders = new ArrayList<>()
|
||||
Map<Integer, Set<MWMessage>> messageHeadersMap = new HashMap<>()
|
||||
List<MWMessageStatus> messageHeaders = new ArrayList<>()
|
||||
Map<Integer, Set<MWMessageStatus>> messageHeadersMap = new HashMap<>()
|
||||
int folderIdx
|
||||
List<Object> messageAttachments = new ArrayList<>()
|
||||
|
||||
|
@ -833,7 +833,7 @@ class MainFrameModel {
|
|||
}
|
||||
|
||||
void addToOutbox(MWMessage message) {
|
||||
messageHeadersMap.get(Messenger.OUTBOX).add(message)
|
||||
messageHeadersMap.get(Messenger.OUTBOX).add(new MWMessageStatus(message, false))
|
||||
if (folderIdx == Messenger.OUTBOX) {
|
||||
messageHeaders.clear()
|
||||
messageHeaders.addAll(messageHeadersMap.get(Messenger.OUTBOX))
|
||||
|
@ -843,7 +843,7 @@ class MainFrameModel {
|
|||
|
||||
void onMessageLoadedEvent(MessageLoadedEvent e) {
|
||||
runInsideUIAsync {
|
||||
messageHeadersMap.get(e.folder).add(e.message)
|
||||
messageHeadersMap.get(e.folder).add(new MWMessageStatus(e.message, e.unread))
|
||||
if (e.folder == folderIdx) {
|
||||
messageHeaders.clear()
|
||||
messageHeaders.addAll(messageHeadersMap.get(folderIdx))
|
||||
|
@ -854,7 +854,7 @@ class MainFrameModel {
|
|||
|
||||
void onMessageReceivedEvent(MessageReceivedEvent e) {
|
||||
runInsideUIAsync {
|
||||
messageHeadersMap.get(Messenger.INBOX).add(e.message)
|
||||
messageHeadersMap.get(Messenger.INBOX).add(new MWMessageStatus(e.message, true))
|
||||
if (folderIdx == Messenger.INBOX) {
|
||||
messageHeaders.clear()
|
||||
messageHeaders.addAll(messageHeadersMap.get(Messenger.INBOX))
|
||||
|
@ -865,8 +865,9 @@ class MainFrameModel {
|
|||
|
||||
void onMessageSentEvent(MessageSentEvent e) {
|
||||
runInsideUIAsync {
|
||||
messageHeadersMap.get(Messenger.OUTBOX).remove(e.message)
|
||||
messageHeadersMap.get(Messenger.SENT).add(e.message)
|
||||
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))
|
||||
|
@ -876,10 +877,29 @@ class MainFrameModel {
|
|||
}
|
||||
|
||||
void deleteMessage(MWMessage message) {
|
||||
messageHeadersMap.get(folderIdx).remove(message)
|
||||
messageHeaders.remove(message)
|
||||
MWMessageStatus status = new MWMessageStatus(message, false)
|
||||
messageHeadersMap.get(folderIdx).remove(status)
|
||||
messageHeaders.remove(status)
|
||||
view.messageHeaderTable.model.fireTableDataChanged()
|
||||
view.messageBody.setText("")
|
||||
view.messageSplitPane.setDividerLocation(1.0d)
|
||||
}
|
||||
|
||||
static class MWMessageStatus {
|
||||
private final MWMessage message
|
||||
private boolean status
|
||||
MWMessageStatus(MWMessage message, boolean status) {
|
||||
this.message = message
|
||||
this.status = status
|
||||
}
|
||||
|
||||
public int hashCode() {
|
||||
message.hashCode()
|
||||
}
|
||||
|
||||
public boolean equals(Object o) {
|
||||
MWMessageStatus other = (MWMessageStatus) o
|
||||
message.equals(other.message)
|
||||
}
|
||||
}
|
||||
}
|
|
@ -57,6 +57,7 @@ import com.muwire.core.messenger.MWMessage
|
|||
import com.muwire.core.messenger.MWMessageAttachment
|
||||
import com.muwire.core.trust.RemoteTrustList
|
||||
import com.muwire.core.upload.Uploader
|
||||
import com.muwire.gui.MainFrameModel.MWMessageStatus
|
||||
|
||||
import java.awt.BorderLayout
|
||||
import java.awt.CardLayout
|
||||
|
@ -692,10 +693,11 @@ class MainFrameView {
|
|||
scrollPane {
|
||||
table(id : "message-header-table", autoCreateRowSorter : true, rowHeight : rowHeight) {
|
||||
tableModel(list : model.messageHeaders) {
|
||||
closureColumn(header : trans("SENDER"), preferredWidth:200, type : String, read : {it.sender.getHumanReadableName()})
|
||||
closureColumn(header : trans("SUBJECT"), preferredWidth:300, type: String, read : {it.subject})
|
||||
closureColumn(header : trans("RECIPIENTS"), preferredWidth: 20, type:Integer, read : {it.recipients.size()})
|
||||
closureColumn(header : trans("DATE"), preferredWidth : 50, type : Long, read : {it.timestamp})
|
||||
closureColumn(header : trans("SENDER"), preferredWidth:200, type : String, read : {it.message.sender.getHumanReadableName()})
|
||||
closureColumn(header : trans("SUBJECT"), preferredWidth:300, type: String, read : {it.message.subject})
|
||||
closureColumn(header : trans("RECIPIENTS"), preferredWidth: 20, type:Integer, read : {it.message.recipients.size()})
|
||||
closureColumn(header : trans("DATE"), preferredWidth : 50, type : Long, read : {it.message.timestamp})
|
||||
closureColumn(header : trans("UNREAD"), preferredWidth : 20, type : Boolean, read : {it.status})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1319,7 +1321,9 @@ class MainFrameView {
|
|||
messageBody.setText("")
|
||||
model.messageRecipientList = ""
|
||||
} else {
|
||||
MWMessage selected = model.messageHeaders.getAt(selectedRow)
|
||||
MWMessageStatus selectedStatus = model.messageHeaders.getAt(selectedRow)
|
||||
controller.markMessageRead(selectedStatus)
|
||||
MWMessage selected = selectedStatus.message
|
||||
messageBody.setText(selected.body)
|
||||
model.messageButtonsEnabled = true
|
||||
model.messageRecipientList = String.join(",", selected.recipients.collect {it.getHumanReadableName()})
|
||||
|
|
Loading…
Reference in New Issue