mirror of https://github.com/zlatinb/muwire
ability to create and delete folders
parent
d3555db803
commit
799a2a99df
|
@ -2,6 +2,8 @@ package com.muwire.core
|
|||
|
||||
import com.muwire.core.files.PersisterDoneEvent
|
||||
import com.muwire.core.files.PersisterFolderService
|
||||
import com.muwire.core.messenger.UIFolderCreateEvent
|
||||
import com.muwire.core.messenger.UIFolderDeleteEvent
|
||||
|
||||
import java.nio.charset.StandardCharsets
|
||||
import java.util.concurrent.atomic.AtomicBoolean
|
||||
|
@ -499,6 +501,8 @@ public class Core {
|
|||
register(UIMessageEvent.class, messenger)
|
||||
register(UIMessageDeleteEvent.class, messenger)
|
||||
register(UIMessageReadEvent.class, messenger)
|
||||
register(UIFolderCreateEvent.class, messenger)
|
||||
register(UIFolderDeleteEvent.class, messenger)
|
||||
}
|
||||
|
||||
File modulesProps = new File(home, "mwmodules.list")
|
||||
|
|
|
@ -256,4 +256,25 @@ class Messenger {
|
|||
File messageFile = new File(file, deriveName(message))
|
||||
messageFile.delete()
|
||||
}
|
||||
|
||||
synchronized void onUIFolderCreateEvent(UIFolderCreateEvent e) {
|
||||
File folder = new File(localFolders, e.name)
|
||||
if (folder.mkdir()) {
|
||||
folders.put(e.name, folder)
|
||||
messages.put(folder, new LinkedHashSet())
|
||||
}
|
||||
}
|
||||
|
||||
synchronized void onUIFolderDeleteEvent(UIFolderDeleteEvent e) {
|
||||
File folder = new File(localFolders, e.name)
|
||||
if (!folder.exists())
|
||||
return
|
||||
|
||||
folders.remove(e.name)
|
||||
messages.remove(folder)
|
||||
|
||||
diskIO.execute({
|
||||
folder.deleteDir()
|
||||
})
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
package com.muwire.core.messenger
|
||||
|
||||
import com.muwire.core.Event
|
||||
|
||||
class UIFolderCreateEvent extends Event {
|
||||
String name
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
package com.muwire.core.messenger
|
||||
|
||||
import com.muwire.core.Event
|
||||
|
||||
class UIFolderDeleteEvent extends Event {
|
||||
String name
|
||||
}
|
|
@ -1,4 +1,8 @@
|
|||
package com.muwire.gui
|
||||
|
||||
import com.muwire.core.messenger.UIFolderCreateEvent
|
||||
import com.muwire.core.messenger.UIFolderDeleteEvent
|
||||
|
||||
import static com.muwire.gui.Translator.trans
|
||||
import griffon.core.GriffonApplication
|
||||
import griffon.core.artifact.GriffonController
|
||||
|
@ -863,6 +867,59 @@ class MainFrameController {
|
|||
CopyPasteSupport.copyToClipboard(feed.getPublisher().toBase64())
|
||||
}
|
||||
|
||||
@ControllerAction
|
||||
void createMessageFolder() {
|
||||
String name = null
|
||||
while(name == null) {
|
||||
name = JOptionPane.showInputDialog(trans("FOLDER_ENTER_NAME"))
|
||||
if (name == null)
|
||||
return
|
||||
name = name.trim()
|
||||
if (name.length() == 0) {
|
||||
JOptionPane.showMessageDialog(null, trans("FOLDER_NAME_EMPTY"),
|
||||
trans("FOLDER_NAME_EMPTY"), JOptionPane.WARNING_MESSAGE)
|
||||
name = null
|
||||
continue
|
||||
}
|
||||
if (model.messageFoldersMap.containsKey(name)) {
|
||||
JOptionPane.showMessageDialog(null, trans("FOLDER_ALREADY_EXISTS"),
|
||||
trans("FOLDER_ALREADY_EXISTS"), JOptionPane.WARNING_MESSAGE)
|
||||
name = null
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
def params = [:]
|
||||
params['core'] = core
|
||||
params['outgoing'] = false
|
||||
params['name'] = name
|
||||
def group = application.mvcGroupManager.createMVCGroup('message-folder', 'folder-$name', params)
|
||||
view.addUserMessageFolder(group)
|
||||
|
||||
UIFolderCreateEvent event = new UIFolderCreateEvent(name: name)
|
||||
core.eventBus.publish(event)
|
||||
}
|
||||
|
||||
@ControllerAction
|
||||
void deleteMessageFolder() {
|
||||
|
||||
def group = model.messageFoldersMap.get(model.folderIdx)
|
||||
if (group == null)
|
||||
return
|
||||
|
||||
if (!group.model.messages.isEmpty()) {
|
||||
int result = JOptionPane.showConfirmDialog(null, trans("FOLDER_CONFIRM_DELETE"),
|
||||
trans("FOLDER_CONFIRM_DELETE_TITLE"), JOptionPane.YES_NO_OPTION)
|
||||
if (result != JOptionPane.YES_OPTION)
|
||||
return
|
||||
}
|
||||
|
||||
view.deleteUserMessageFolder(model.folderIdx)
|
||||
|
||||
UIFolderDeleteEvent event = new UIFolderDeleteEvent(name: model.folderIdx)
|
||||
core.eventBus.publish(event)
|
||||
}
|
||||
|
||||
void startChat(Persona p) {
|
||||
if (!mvcGroup.getChildrenGroups().containsKey(p.getHumanReadableName())) {
|
||||
def params = [:]
|
||||
|
|
|
@ -590,6 +590,14 @@ REPLY=Reply
|
|||
REPLY_ALL=Reply All
|
||||
DOWNLOAD_ALL=Download All
|
||||
COLLECTION=Collection
|
||||
FOLDERS=Folders
|
||||
CREATE_FOLDER=New
|
||||
DELETE_FOLDER=Delete
|
||||
FOLDER_ENTER_NAME=Please enter a name for the new folder
|
||||
FOLDER_NAME_EMPTY=A folder name cannot be blank
|
||||
FOLDER_ALREADY_EXISTS=A folder with that name already exists
|
||||
FOLDER_CONFIRM_DELETE_TITLE=Folder not empty
|
||||
FOLDER_CONFIRM_DELETE=This folder is not empty. Are you sure you want to delete it?
|
||||
|
||||
## New message window
|
||||
UNREAD=Unread
|
||||
|
|
|
@ -158,6 +158,8 @@ class MainFrameModel {
|
|||
@Observable boolean viewItemCommentButtonEnabled
|
||||
@Observable boolean deleteCollectionButtonEnabled
|
||||
|
||||
@Observable boolean deleteMessageFolderButtonEnabled
|
||||
|
||||
@Observable boolean searchesPaneButtonEnabled
|
||||
@Observable boolean downloadsPaneButtonEnabled
|
||||
@Observable boolean uploadsPaneButtonEnabled
|
||||
|
|
|
@ -650,7 +650,16 @@ class MainFrameView {
|
|||
list(id: "message-folders-list", model: model.messageFolderListModel,
|
||||
constraints: gbc(weightx: 100, anchor: GridBagConstraints.LINE_START))
|
||||
}
|
||||
panel(border: etchedBorder(), constraints : gbc(gridx:0, gridy:1, fill: GridBagConstraints.BOTH,
|
||||
panel(border: etchedBorder(), constraints : gbc(gridx: 0, gridy:1, fill: GridBagConstraints.HORIZONTAL,
|
||||
weightx:0, weighty: 0)) {
|
||||
gridBagLayout()
|
||||
label(text : trans("FOLDERS"), constraints : gbc(gridx:0, gridy: 0))
|
||||
button(text : trans("CREATE_FOLDER"), constraints : gbc(gridx:0, gridy: 1, weightx: 100, fill:GridBagConstraints.HORIZONTAL),
|
||||
createMessageFolderAction)
|
||||
button(text : trans("DELETE_FOLDER"), enabled : bind {model.deleteMessageFolderButtonEnabled},
|
||||
constraints : gbc(gridx:0, gridy: 2, weightx: 100, fill: GridBagConstraints.HORIZONTAL), deleteMessageFolderAction)
|
||||
}
|
||||
panel(border: etchedBorder(), constraints : gbc(gridx:0, gridy:2, fill: GridBagConstraints.BOTH,
|
||||
weightx: 100, weighty: 100)) {
|
||||
gridLayout(rows: 1, cols: 1)
|
||||
scrollPane() {
|
||||
|
@ -1198,16 +1207,36 @@ class MainFrameView {
|
|||
model.folderIdx = model.messageFolders[index].model.name
|
||||
messageFolderContents.getLayout().show(messageFolderContents, model.folderIdx)
|
||||
userMessageFolderList.clearSelection()
|
||||
model.deleteMessageFolderButtonEnabled = false
|
||||
})
|
||||
|
||||
userMessageFolderList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION)
|
||||
userMessageFolderList.addListSelectionListener({
|
||||
int index = userMessageFolderList.getSelectedIndex()
|
||||
if (index < 0)
|
||||
if (index < 0) {
|
||||
model.deleteMessageFolderButtonEnabled = false
|
||||
return
|
||||
}
|
||||
model.folderIdx = model.messageFolders[index + Messenger.RESERVED_FOLDERS.size()].model.name
|
||||
messageFolderContents.getLayout().show(messageFolderContents, model.folderIdx)
|
||||
systemMessageFolderList.clearSelection()
|
||||
model.deleteMessageFolderButtonEnabled = true
|
||||
})
|
||||
|
||||
JPopupMenu folderMenu = new JPopupMenu()
|
||||
JMenuItem deleteItem = new JMenuItem(trans("DELETE_FOLDER"))
|
||||
deleteItem.addActionListener({controller.deleteMessageFolder()})
|
||||
folderMenu.add(deleteItem)
|
||||
|
||||
userMessageFolderList.addMouseListener(new MouseAdapter() {
|
||||
public void mousePressed(MouseEvent e) {
|
||||
if (e.isPopupTrigger() || e.button == MouseEvent.BUTTON3)
|
||||
showPopupMenu(folderMenu, e)
|
||||
}
|
||||
public void mouseReleased(MouseEvent e) {
|
||||
if (e.isPopupTrigger() || e.button == MouseEvent.BUTTON3)
|
||||
showPopupMenu(folderMenu, e)
|
||||
}
|
||||
})
|
||||
|
||||
// chat tabs
|
||||
|
@ -1710,6 +1739,14 @@ class MainFrameView {
|
|||
|
||||
messageFolderContents.add(group.view.folderPanel, group.model.name)
|
||||
}
|
||||
|
||||
void deleteUserMessageFolder(String name) {
|
||||
def group = model.messageFoldersMap.remove(name)
|
||||
if (group == null)
|
||||
return
|
||||
model.userMessageFolderListModel.removeElement(name)
|
||||
messageFolderContents.remove(group.view.folderPanel)
|
||||
}
|
||||
|
||||
int getSelectedContactsTableRow() {
|
||||
def table = builder.getVariable("contacts-table")
|
||||
|
|
Loading…
Reference in New Issue