mirror of https://github.com/zlatinb/muwire
wip on shared files window
parent
1cc7925155
commit
fce8bbfd97
|
@ -0,0 +1,55 @@
|
|||
package com.muwire.clilanterna
|
||||
|
||||
import com.googlecode.lanterna.gui2.TextGUIThread
|
||||
import com.googlecode.lanterna.gui2.table.TableModel
|
||||
import com.muwire.core.Core
|
||||
import com.muwire.core.SharedFile
|
||||
import com.muwire.core.files.FileLoadedEvent
|
||||
import com.muwire.core.files.FileUnsharedEvent
|
||||
|
||||
import net.i2p.data.DataHelper
|
||||
|
||||
class FilesModel {
|
||||
private final TextGUIThread guiThread
|
||||
private final Core core
|
||||
private final List<SharedFile> sharedFiles = new ArrayList<>()
|
||||
private final TableModel model = new TableModel("Name","Size","Comment")
|
||||
|
||||
FilesModel(TextGUIThread guiThread, Core core) {
|
||||
this.guiThread = guiThread
|
||||
this.core = core
|
||||
|
||||
core.eventBus.register(FileLoadedEvent.class, this)
|
||||
core.eventBus.register(FileUnsharedEvent.class, this)
|
||||
|
||||
Runnable refreshModel = {refreshModel()}
|
||||
Timer timer = new Timer(true)
|
||||
timer.schedule({
|
||||
guiThread.invokeLater(refreshModel)
|
||||
} as TimerTask, 1000,1000)
|
||||
|
||||
}
|
||||
|
||||
void onFileLoadedEvent(FileLoadedEvent e) {
|
||||
guiThread.invokeLater {
|
||||
sharedFiles.add(e.loadedFile)
|
||||
}
|
||||
}
|
||||
|
||||
void onFileUnsharedEvent(FileUnsharedEvent e) {
|
||||
guiThread.invokeLater {
|
||||
sharedFiles.remove(e.unsharedFile)
|
||||
}
|
||||
}
|
||||
|
||||
private void refreshModel() {
|
||||
int rowCount = model.getRowCount()
|
||||
rowCount.times { model.removeRow(0) }
|
||||
|
||||
sharedFiles.each {
|
||||
long size = it.getCachedLength()
|
||||
boolean comment = it.comment != null
|
||||
model.addRow(new SharedFileWrapper(it), DataHelper.formatSize2(size, false)+"B", comment)
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,103 @@
|
|||
package com.muwire.clilanterna
|
||||
|
||||
|
||||
import com.googlecode.lanterna.gui2.BasicWindow
|
||||
import com.googlecode.lanterna.gui2.Button
|
||||
import com.googlecode.lanterna.gui2.GridLayout
|
||||
import com.googlecode.lanterna.gui2.GridLayout.Alignment
|
||||
import com.googlecode.lanterna.gui2.LayoutData
|
||||
import com.googlecode.lanterna.gui2.Panel
|
||||
import com.googlecode.lanterna.gui2.TextGUI
|
||||
import com.googlecode.lanterna.gui2.Window
|
||||
import com.googlecode.lanterna.gui2.dialogs.MessageDialog
|
||||
import com.googlecode.lanterna.gui2.dialogs.MessageDialogButton
|
||||
import com.googlecode.lanterna.gui2.table.Table
|
||||
import com.muwire.core.Core
|
||||
import com.muwire.core.SharedFile
|
||||
import com.muwire.core.files.FileUnsharedEvent
|
||||
import com.muwire.core.files.UIPersistFilesEvent
|
||||
|
||||
class FilesView extends BasicWindow {
|
||||
private final FilesModel model
|
||||
private final TextGUI textGUI
|
||||
private final Core core
|
||||
private final Table table
|
||||
|
||||
FilesView(FilesModel model, TextGUI textGUI, Core core) {
|
||||
super("Shared Files")
|
||||
this.model = model
|
||||
this.core = core
|
||||
this.textGUI = textGUI
|
||||
|
||||
setHints([Window.Hint.EXPANDED])
|
||||
|
||||
Panel contentPanel = new Panel()
|
||||
contentPanel.setLayoutManager(new GridLayout(1))
|
||||
LayoutData layoutData = GridLayout.createLayoutData(Alignment.CENTER, Alignment.CENTER)
|
||||
|
||||
table = new Table("Name","Size","Comment")
|
||||
table.setCellSelection(false)
|
||||
table.setTableModel(model.model)
|
||||
table.setSelectAction({rowSelected()})
|
||||
contentPanel.addComponent(table, layoutData)
|
||||
|
||||
Panel buttonsPanel = new Panel()
|
||||
buttonsPanel.setLayoutManager(new GridLayout(4))
|
||||
|
||||
Button shareFile = new Button("Share File", {shareFile()})
|
||||
Button shareDirectory = new Button("Share Directory", {shareDirectory()})
|
||||
Button unshareDirectory = new Button("Unshare Directory",{unshareDirectory()})
|
||||
Button close = new Button("Close", {close()})
|
||||
|
||||
buttonsPanel.with {
|
||||
addComponent(shareFile, layoutData)
|
||||
addComponent(shareDirectory, layoutData)
|
||||
addComponent(unshareDirectory, layoutData)
|
||||
addComponent(close, layoutData)
|
||||
}
|
||||
|
||||
contentPanel.addComponent(buttonsPanel, layoutData)
|
||||
setComponent(contentPanel)
|
||||
close.takeFocus()
|
||||
}
|
||||
|
||||
private void rowSelected() {
|
||||
int selectedRow = table.getSelectedRow()
|
||||
def row = model.model.getRow(selectedRow)
|
||||
SharedFile sf = row[0].sharedFile
|
||||
|
||||
Window prompt = new BasicWindow("Unshare or add comment to "+sf.getFile().getName()+" ?")
|
||||
prompt.setHints([Window.Hint.CENTERED])
|
||||
Panel contentPanel = new Panel()
|
||||
contentPanel.setLayoutManager(new GridLayout(2))
|
||||
|
||||
Button unshareButton = new Button("Unshare", {
|
||||
core.eventBus.publish(new FileUnsharedEvent(unsharedFile : sf))
|
||||
core.eventBus.publish(new UIPersistFilesEvent())
|
||||
MessageDialog.showMessageDialog(textGUI, "File Unshared", "Unshared "+sf.getFile().getName(), MessageDialogButton.OK)
|
||||
} )
|
||||
Button addCommentButton = new Button("Add comment", {})
|
||||
Button closeButton = new Button("Close", {prompt.close()})
|
||||
|
||||
LayoutData layoutData = GridLayout.createLayoutData(Alignment.CENTER, Alignment.CENTER)
|
||||
contentPanel.addComponent(unshareButton, layoutData)
|
||||
contentPanel.addComponent(addCommentButton, layoutData)
|
||||
contentPanel.addComponent(closeButton, layoutData)
|
||||
|
||||
prompt.setComponent(contentPanel)
|
||||
textGUI.addWindowAndWait(prompt)
|
||||
}
|
||||
|
||||
|
||||
private void shareFile() {
|
||||
|
||||
}
|
||||
|
||||
private void shareDirectory() {
|
||||
|
||||
}
|
||||
|
||||
private void unshareDirectory() {
|
||||
|
||||
}
|
||||
}
|
|
@ -24,6 +24,7 @@ class MainWindowView extends BasicWindow {
|
|||
|
||||
private final DownloadsModel downloadsModel
|
||||
private final UploadsModel uploadsModel
|
||||
private final FilesModel filesModel
|
||||
|
||||
public MainWindowView(String title, Core core, TextGUI textGUI) {
|
||||
super(title);
|
||||
|
@ -33,6 +34,7 @@ class MainWindowView extends BasicWindow {
|
|||
|
||||
downloadsModel = new DownloadsModel(textGUI.getGUIThread(),core)
|
||||
uploadsModel = new UploadsModel(textGUI.getGUIThread(), core)
|
||||
filesModel = new FilesModel(textGUI.getGUIThread(),core)
|
||||
|
||||
setHints([Window.Hint.EXPANDED])
|
||||
Panel contentPanel = new Panel()
|
||||
|
@ -51,7 +53,7 @@ class MainWindowView extends BasicWindow {
|
|||
Button searchButton = new Button("Search", { search() })
|
||||
Button downloadsButton = new Button("Downloads", {download()})
|
||||
Button uploadsButton = new Button("Uploads", {upload()})
|
||||
Button filesButton = new Button("Files", {println "files" })
|
||||
Button filesButton = new Button("Files", { files() })
|
||||
Button trustButton = new Button("Trust", {println "trust"})
|
||||
Button quitButton = new Button("Quit", {close()})
|
||||
|
||||
|
@ -103,4 +105,8 @@ class MainWindowView extends BasicWindow {
|
|||
private void upload() {
|
||||
textGUI.addWindowAndWait(new UploadsView(uploadsModel))
|
||||
}
|
||||
|
||||
private void files() {
|
||||
textGUI.addWindowAndWait(new FilesView(filesModel, textGUI, core))
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
package com.muwire.clilanterna
|
||||
|
||||
import com.muwire.core.SharedFile
|
||||
|
||||
class SharedFileWrapper {
|
||||
private final SharedFile sharedFile
|
||||
|
||||
SharedFileWrapper(SharedFile sharedFile) {
|
||||
this.sharedFile = sharedFile
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
sharedFile.getFile().getName()
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue