mirror of
https://github.com/TermoraDev/termora.git
synced 2026-01-16 02:12:58 +08:00
chore: transfer support contextmenu
This commit is contained in:
@@ -63,7 +63,7 @@ import kotlin.time.Duration.Companion.seconds
|
||||
|
||||
class TransportPanel(
|
||||
private val transferManager: InternalTransferManager,
|
||||
val host: Host,
|
||||
var host: Host,
|
||||
val loader: TransportSupportLoader,
|
||||
) : JPanel(BorderLayout()), DataProvider, Disposable, TransportNavigator {
|
||||
companion object {
|
||||
|
||||
@@ -3,6 +3,8 @@ package app.termora.transfer
|
||||
import app.termora.*
|
||||
import app.termora.actions.AnAction
|
||||
import app.termora.actions.AnActionEvent
|
||||
import app.termora.database.DatabaseChangedExtension
|
||||
import app.termora.database.DatabaseManager
|
||||
import app.termora.plugin.internal.local.LocalProtocolProvider
|
||||
import com.formdev.flatlaf.extras.components.FlatPopupMenu
|
||||
import com.formdev.flatlaf.extras.components.FlatTabbedPane
|
||||
@@ -124,28 +126,38 @@ class TransportTabbed(
|
||||
return true
|
||||
}
|
||||
|
||||
fun addSelectionTab() {
|
||||
fun addSelectionTab(): TransportSelectionPanel {
|
||||
val c = TransportSelectionPanel(tabbed, internalTransferManager)
|
||||
addTab(I18n.getString("termora.transport.sftp.select-host"), c)
|
||||
selectedIndex = tabCount - 1
|
||||
SwingUtilities.invokeLater { c.requestFocusInWindow() }
|
||||
return c
|
||||
}
|
||||
|
||||
fun addLocalTab() {
|
||||
val host = Host(name = "Local", protocol = LocalProtocolProvider.PROTOCOL)
|
||||
val support = TransportSupport(FileSystems.getDefault(), SystemUtils.USER_HOME)
|
||||
val support = TransportSupport(FileSystems.getDefault(), getDefaultLocalPath())
|
||||
val panel = TransportPanel(internalTransferManager, host, TransportSupportLoader { support })
|
||||
addTab(I18n.getString("termora.transport.local"), panel)
|
||||
super.setTabClosable(0, false)
|
||||
}
|
||||
|
||||
private fun getDefaultLocalPath(): String {
|
||||
val defaultDirectory = DatabaseManager.getInstance().sftp.defaultDirectory
|
||||
if (defaultDirectory.isBlank()) return SystemUtils.USER_HOME
|
||||
return defaultDirectory
|
||||
}
|
||||
|
||||
private fun showContextMenu(tabIndex: Int, e: MouseEvent) {
|
||||
val panel = getTransportPanel(tabIndex) ?: return
|
||||
val popupMenu = FlatPopupMenu()
|
||||
|
||||
// 克隆
|
||||
val clone = popupMenu.add(I18n.getString("termora.tabbed.contextmenu.clone"))
|
||||
clone.addActionListener(object : AnAction() {
|
||||
override fun actionPerformed(evt: AnActionEvent) {
|
||||
|
||||
val c = addSelectionTab()
|
||||
c.connect(panel.host)
|
||||
}
|
||||
})
|
||||
|
||||
@@ -153,7 +165,15 @@ class TransportTabbed(
|
||||
val edit = popupMenu.add(I18n.getString("termora.keymgr.edit"))
|
||||
edit.addActionListener(object : AnAction() {
|
||||
override fun actionPerformed(evt: AnActionEvent) {
|
||||
|
||||
val window = evt.window
|
||||
val dialog = NewHostDialogV2(window, panel.host)
|
||||
dialog.setLocationRelativeTo(window)
|
||||
dialog.title = panel.host.name
|
||||
dialog.isVisible = true
|
||||
val host = dialog.host ?: return
|
||||
HostManager.getInstance().addHost(host, DatabaseChangedExtension.Source.Sync)
|
||||
setTitleAt(tabIndex, host.name)
|
||||
panel.host = host
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
@@ -8,9 +8,11 @@ import app.termora.database.DatabaseManager
|
||||
import app.termora.plugin.ExtensionManager
|
||||
import app.termora.plugin.internal.sftppty.SFTPPtyProtocolProvider
|
||||
import app.termora.plugin.internal.ssh.SSHProtocolProvider
|
||||
import app.termora.protocol.TransferProtocolProvider
|
||||
import app.termora.tag.TagDialog
|
||||
import app.termora.tag.TagManager
|
||||
import app.termora.tag.TagSimpleTreeCellRendererExtension
|
||||
import app.termora.transfer.TransferActionEvent
|
||||
import com.formdev.flatlaf.extras.components.FlatPopupMenu
|
||||
import kotlinx.serialization.Serializable
|
||||
import kotlinx.serialization.json.*
|
||||
@@ -471,12 +473,12 @@ class NewHostTree : SimpleTree(), Disposable {
|
||||
}
|
||||
|
||||
private fun openWithSFTP(evt: EventObject) {
|
||||
val nodes =
|
||||
getSelectionSimpleTreeNodes(true).map { it.host }.filter { it.protocol == SSHProtocolProvider.PROTOCOL }
|
||||
val nodes = getSelectionSimpleTreeNodes(true)
|
||||
.map { it.host }.filter { TransferProtocolProvider.valueOf(it.protocol) != null }
|
||||
if (nodes.isEmpty()) return
|
||||
|
||||
for (node in nodes) {
|
||||
// sftpAction.actionPerformed(SFTPActionEvent(this, node.id, evt))
|
||||
sftpAction.actionPerformed(TransferActionEvent(this, node.id, evt))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user