chore: transfer support contextmenu

This commit is contained in:
hstyi
2025-06-24 12:14:39 +08:00
committed by hstyi
parent c929a794d5
commit efd01da6f1
3 changed files with 30 additions and 8 deletions

View File

@@ -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 {

View File

@@ -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
}
})

View File

@@ -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))
}
}