diff --git a/gui/griffon-app/controllers/com/muwire/gui/MainFrameController.groovy b/gui/griffon-app/controllers/com/muwire/gui/MainFrameController.groovy index 298e9b43..d3839bb6 100644 --- a/gui/griffon-app/controllers/com/muwire/gui/MainFrameController.groovy +++ b/gui/griffon-app/controllers/com/muwire/gui/MainFrameController.groovy @@ -505,6 +505,24 @@ class MainFrameController { clipboard.setContents(selection, null) } + @ControllerAction + void publish() { + def selectedFiles = view.selectedSharedFiles() + if (selectedFiles == null || selectedFiles.isEmpty()) + return + + if (model.publishButtonText == "Unpublish") { + selectedFiles.each { + it.unpublish() + } + } else { + long now = System.currentTimeMillis() + selectedFiles.stream().filter({!it.isPublished()}).forEach({it.publish(now)}) + } + // TODO: issue event to core + view.refreshSharedFiles() + } + void startChat(Persona p) { if (!mvcGroup.getChildrenGroups().containsKey(p.getHumanReadableName())) { def params = [:] diff --git a/gui/griffon-app/models/com/muwire/gui/MainFrameModel.groovy b/gui/griffon-app/models/com/muwire/gui/MainFrameModel.groovy index 32351c1c..0195147a 100644 --- a/gui/griffon-app/models/com/muwire/gui/MainFrameModel.groovy +++ b/gui/griffon-app/models/com/muwire/gui/MainFrameModel.groovy @@ -103,6 +103,8 @@ class MainFrameModel { @Observable boolean previewButtonEnabled @Observable String resumeButtonText @Observable boolean addCommentButtonEnabled + @Observable boolean publishButtonEnabled + @Observable String publishButtonText @Observable boolean subscribeButtonEnabled @Observable boolean markNeutralFromTrustedButtonEnabled @Observable boolean markDistrustedButtonEnabled @@ -253,6 +255,7 @@ class MainFrameModel { distrusted.addAll(core.trustService.bad.values()) resumeButtonText = "Retry" + publishButtonText = "Publish" searchesPaneButtonEnabled = false downloadsPaneButtonEnabled = true diff --git a/gui/griffon-app/views/com/muwire/gui/MainFrameView.groovy b/gui/griffon-app/views/com/muwire/gui/MainFrameView.groovy index 6949a5d5..91c39394 100644 --- a/gui/griffon-app/views/com/muwire/gui/MainFrameView.groovy +++ b/gui/griffon-app/views/com/muwire/gui/MainFrameView.groovy @@ -292,6 +292,7 @@ class MainFrameView { Core core = application.context.get("core") core.certificateManager.hasLocalCertificate(new InfoHash(it.getRoot())) }) + closureColumn(header : "Published", preferredWidth : 50, type : Boolean, read : {row -> row.isPublished()}) closureColumn(header : "Search Hits", preferredWidth: 50, type : Integer, read : {it.getHits()}) closureColumn(header : "Downloaders", preferredWidth: 50, type : Integer, read : {it.getDownloaders().size()}) } @@ -316,9 +317,11 @@ class MainFrameView { radioButton(text : "Table", selected : false, buttonGroup : sharedViewType, actionPerformed : showSharedFilesTable) } panel { - button(text : "Share", actionPerformed : shareFiles) - button(text : "Add Comment", enabled : bind {model.addCommentButtonEnabled}, addCommentAction) - button(text : "Certify", enabled : bind {model.addCommentButtonEnabled}, issueCertificateAction) + gridBagLayout() + button(text : "Share", constraints : gbc(gridx: 0), actionPerformed : shareFiles) + button(text : "Add Comment", enabled : bind {model.addCommentButtonEnabled}, constraints : gbc(gridx: 1), addCommentAction) + button(text : "Certify", enabled : bind {model.addCommentButtonEnabled}, constraints : gbc(gridx: 2), issueCertificateAction) + button(text : bind {model.publishButtonText}, enabled : bind {model.publishButtonEnabled}, constraints : gbc(gridx:3), publishAction) } panel { panel { @@ -682,14 +685,30 @@ class MainFrameView { if (selectedFiles == null || selectedFiles.isEmpty()) return model.addCommentButtonEnabled = true + model.publishButtonEnabled = true + boolean unpublish = true + selectedFiles.each { + unpublish &= it.isPublished() + } + model.publishButtonText = unpublish ? "Unpublish" : "Publish" }) + def sharedFilesTree = builder.getVariable("shared-files-tree") sharedFilesTree.addMouseListener(sharedFilesMouseListener) sharedFilesTree.addTreeSelectionListener({ def selectedNode = sharedFilesTree.getLastSelectedPathComponent() model.addCommentButtonEnabled = selectedNode != null - + model.publishButtonEnabled = selectedNode != null + + def selectedFiles = selectedSharedFiles() + if (selectedFiles == null || selectedFiles.isEmpty()) + return + boolean unpublish = true + selectedFiles.each { + unpublish &= it.isPublished() + } + model.publishButtonText = unpublish ? "Unpublish" : "Publish" }) sharedFilesTree.addTreeExpansionListener(expansionListener)