Compare commits
4 Commits
muwire-0.2
...
fix-possib
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7718dc0821 | ||
|
|
e295aa67d5 | ||
|
|
a9f5625dc3 | ||
|
|
cc0af5b9ed |
@@ -1,6 +1,7 @@
|
|||||||
package com.muwire.core.connection
|
package com.muwire.core.connection
|
||||||
|
|
||||||
import java.util.concurrent.atomic.AtomicBoolean
|
import java.util.concurrent.atomic.AtomicBoolean
|
||||||
|
import java.util.logging.Level
|
||||||
|
|
||||||
import groovy.util.logging.Log
|
import groovy.util.logging.Log
|
||||||
import net.i2p.data.Destination
|
import net.i2p.data.Destination
|
||||||
@@ -24,7 +25,7 @@ class Endpoint implements Closeable {
|
|||||||
@Override
|
@Override
|
||||||
public void close() {
|
public void close() {
|
||||||
if (!closed.compareAndSet(false, true)) {
|
if (!closed.compareAndSet(false, true)) {
|
||||||
log.warning("Close loop detected for ${destination.toBase32()}", new Exception())
|
log.log(Level.WARNING,"Close loop detected for ${destination.toBase32()}", new Exception())
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if (inputStream != null) {
|
if (inputStream != null) {
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package com.muwire.core.connection
|
|||||||
|
|
||||||
import java.io.InputStream
|
import java.io.InputStream
|
||||||
import java.io.OutputStream
|
import java.io.OutputStream
|
||||||
|
import java.nio.charset.StandardCharsets
|
||||||
|
|
||||||
import com.muwire.core.EventBus
|
import com.muwire.core.EventBus
|
||||||
import com.muwire.core.MuWireSettings
|
import com.muwire.core.MuWireSettings
|
||||||
@@ -66,7 +67,7 @@ class PeerConnection extends Connection {
|
|||||||
protected void write(Object message) {
|
protected void write(Object message) {
|
||||||
byte[] payload
|
byte[] payload
|
||||||
if (message instanceof Map) {
|
if (message instanceof Map) {
|
||||||
payload = JsonOutput.toJson(message).bytes
|
payload = JsonOutput.toJson(message).getBytes(StandardCharsets.UTF_8)
|
||||||
DataUtil.packHeader(payload.length, writeHeader)
|
DataUtil.packHeader(payload.length, writeHeader)
|
||||||
log.fine "$name writing message type ${message.type} length $payload.length"
|
log.fine "$name writing message type ${message.type} length $payload.length"
|
||||||
writeHeader[0] &= (byte)0x7F
|
writeHeader[0] &= (byte)0x7F
|
||||||
|
|||||||
@@ -306,6 +306,19 @@ class MainFrameView {
|
|||||||
downloadsTable.rowSorter.addRowSorterListener({evt -> lastDownloadSortEvent = evt})
|
downloadsTable.rowSorter.addRowSorterListener({evt -> lastDownloadSortEvent = evt})
|
||||||
downloadsTable.rowSorter.setSortsOnUpdates(true)
|
downloadsTable.rowSorter.setSortsOnUpdates(true)
|
||||||
|
|
||||||
|
downloadsTable.addMouseListener(new MouseAdapter() {
|
||||||
|
@Override
|
||||||
|
public void mouseReleased(MouseEvent e) {
|
||||||
|
if (e.isPopupTrigger())
|
||||||
|
showDownloadsMenu(e)
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void mousePressed(MouseEvent e) {
|
||||||
|
if (e.isPopupTrigger())
|
||||||
|
showDownloadsMenu(e)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
// shared files table
|
// shared files table
|
||||||
def sharedFilesTable = builder.getVariable("shared-files-table")
|
def sharedFilesTable = builder.getVariable("shared-files-table")
|
||||||
sharedFilesTable.columnModel.getColumn(1).setCellRenderer(new SizeRenderer())
|
sharedFilesTable.columnModel.getColumn(1).setCellRenderer(new SizeRenderer())
|
||||||
@@ -353,7 +366,7 @@ class MainFrameView {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
def showPopupMenu(JPopupMenu menu, MouseEvent event) {
|
private static void showPopupMenu(JPopupMenu menu, MouseEvent event) {
|
||||||
menu.show(event.getComponent(), event.getX(), event.getY())
|
menu.show(event.getComponent(), event.getX(), event.getY())
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -386,6 +399,54 @@ class MainFrameView {
|
|||||||
selected
|
selected
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def showDownloadsMenu(MouseEvent e) {
|
||||||
|
int selected = selectedDownloaderRow()
|
||||||
|
if (selected < 0)
|
||||||
|
return
|
||||||
|
boolean cancelEnabled = false
|
||||||
|
boolean retryEnabled = false
|
||||||
|
Downloader downloader = model.downloads[selected].downloader
|
||||||
|
switch(downloader.currentState) {
|
||||||
|
case Downloader.DownloadState.DOWNLOADING:
|
||||||
|
case Downloader.DownloadState.HASHLIST:
|
||||||
|
case Downloader.DownloadState.CONNECTING:
|
||||||
|
cancelEnabled = true
|
||||||
|
retryEnabled = false
|
||||||
|
break
|
||||||
|
case Downloader.DownloadState.FAILED:
|
||||||
|
cancelEnabled = true
|
||||||
|
retryEnabled = true
|
||||||
|
break
|
||||||
|
default :
|
||||||
|
cancelEnabled = false
|
||||||
|
retryEnabled = false
|
||||||
|
}
|
||||||
|
|
||||||
|
JPopupMenu menu = new JPopupMenu()
|
||||||
|
JMenuItem copyHashToClipboard = new JMenuItem("Copy hash to clipboard")
|
||||||
|
copyHashToClipboard.addActionListener({
|
||||||
|
String hash = Base64.encode(downloader.infoHash.getRoot())
|
||||||
|
StringSelection selection = new StringSelection(hash)
|
||||||
|
def clipboard = Toolkit.getDefaultToolkit().getSystemClipboard()
|
||||||
|
clipboard.setContents(selection, null)
|
||||||
|
})
|
||||||
|
menu.add(copyHashToClipboard)
|
||||||
|
|
||||||
|
if (cancelEnabled) {
|
||||||
|
JMenuItem cancel = new JMenuItem("Cancel")
|
||||||
|
cancel.addActionListener({mvcGroup.controller.cancel()})
|
||||||
|
menu.add(cancel)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (retryEnabled) {
|
||||||
|
JMenuItem retry = new JMenuItem("Retry")
|
||||||
|
retry.addActionListener({mvcGroup.controller.resume()})
|
||||||
|
menu.add(retry)
|
||||||
|
}
|
||||||
|
|
||||||
|
showPopupMenu(menu, e)
|
||||||
|
}
|
||||||
|
|
||||||
def showSearchWindow = {
|
def showSearchWindow = {
|
||||||
def cardsPanel = builder.getVariable("cards-panel")
|
def cardsPanel = builder.getVariable("cards-panel")
|
||||||
cardsPanel.getLayout().show(cardsPanel, "search window")
|
cardsPanel.getLayout().show(cardsPanel, "search window")
|
||||||
|
|||||||
Reference in New Issue
Block a user