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(
|
class TransportPanel(
|
||||||
private val transferManager: InternalTransferManager,
|
private val transferManager: InternalTransferManager,
|
||||||
val host: Host,
|
var host: Host,
|
||||||
val loader: TransportSupportLoader,
|
val loader: TransportSupportLoader,
|
||||||
) : JPanel(BorderLayout()), DataProvider, Disposable, TransportNavigator {
|
) : JPanel(BorderLayout()), DataProvider, Disposable, TransportNavigator {
|
||||||
companion object {
|
companion object {
|
||||||
|
|||||||
@@ -3,6 +3,8 @@ package app.termora.transfer
|
|||||||
import app.termora.*
|
import app.termora.*
|
||||||
import app.termora.actions.AnAction
|
import app.termora.actions.AnAction
|
||||||
import app.termora.actions.AnActionEvent
|
import app.termora.actions.AnActionEvent
|
||||||
|
import app.termora.database.DatabaseChangedExtension
|
||||||
|
import app.termora.database.DatabaseManager
|
||||||
import app.termora.plugin.internal.local.LocalProtocolProvider
|
import app.termora.plugin.internal.local.LocalProtocolProvider
|
||||||
import com.formdev.flatlaf.extras.components.FlatPopupMenu
|
import com.formdev.flatlaf.extras.components.FlatPopupMenu
|
||||||
import com.formdev.flatlaf.extras.components.FlatTabbedPane
|
import com.formdev.flatlaf.extras.components.FlatTabbedPane
|
||||||
@@ -124,28 +126,38 @@ class TransportTabbed(
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
fun addSelectionTab() {
|
fun addSelectionTab(): TransportSelectionPanel {
|
||||||
val c = TransportSelectionPanel(tabbed, internalTransferManager)
|
val c = TransportSelectionPanel(tabbed, internalTransferManager)
|
||||||
addTab(I18n.getString("termora.transport.sftp.select-host"), c)
|
addTab(I18n.getString("termora.transport.sftp.select-host"), c)
|
||||||
selectedIndex = tabCount - 1
|
selectedIndex = tabCount - 1
|
||||||
SwingUtilities.invokeLater { c.requestFocusInWindow() }
|
SwingUtilities.invokeLater { c.requestFocusInWindow() }
|
||||||
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
fun addLocalTab() {
|
fun addLocalTab() {
|
||||||
val host = Host(name = "Local", protocol = LocalProtocolProvider.PROTOCOL)
|
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 })
|
val panel = TransportPanel(internalTransferManager, host, TransportSupportLoader { support })
|
||||||
addTab(I18n.getString("termora.transport.local"), panel)
|
addTab(I18n.getString("termora.transport.local"), panel)
|
||||||
super.setTabClosable(0, false)
|
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) {
|
private fun showContextMenu(tabIndex: Int, e: MouseEvent) {
|
||||||
|
val panel = getTransportPanel(tabIndex) ?: return
|
||||||
val popupMenu = FlatPopupMenu()
|
val popupMenu = FlatPopupMenu()
|
||||||
|
|
||||||
// 克隆
|
// 克隆
|
||||||
val clone = popupMenu.add(I18n.getString("termora.tabbed.contextmenu.clone"))
|
val clone = popupMenu.add(I18n.getString("termora.tabbed.contextmenu.clone"))
|
||||||
clone.addActionListener(object : AnAction() {
|
clone.addActionListener(object : AnAction() {
|
||||||
override fun actionPerformed(evt: AnActionEvent) {
|
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"))
|
val edit = popupMenu.add(I18n.getString("termora.keymgr.edit"))
|
||||||
edit.addActionListener(object : AnAction() {
|
edit.addActionListener(object : AnAction() {
|
||||||
override fun actionPerformed(evt: AnActionEvent) {
|
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.ExtensionManager
|
||||||
import app.termora.plugin.internal.sftppty.SFTPPtyProtocolProvider
|
import app.termora.plugin.internal.sftppty.SFTPPtyProtocolProvider
|
||||||
import app.termora.plugin.internal.ssh.SSHProtocolProvider
|
import app.termora.plugin.internal.ssh.SSHProtocolProvider
|
||||||
|
import app.termora.protocol.TransferProtocolProvider
|
||||||
import app.termora.tag.TagDialog
|
import app.termora.tag.TagDialog
|
||||||
import app.termora.tag.TagManager
|
import app.termora.tag.TagManager
|
||||||
import app.termora.tag.TagSimpleTreeCellRendererExtension
|
import app.termora.tag.TagSimpleTreeCellRendererExtension
|
||||||
|
import app.termora.transfer.TransferActionEvent
|
||||||
import com.formdev.flatlaf.extras.components.FlatPopupMenu
|
import com.formdev.flatlaf.extras.components.FlatPopupMenu
|
||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.Serializable
|
||||||
import kotlinx.serialization.json.*
|
import kotlinx.serialization.json.*
|
||||||
@@ -471,12 +473,12 @@ class NewHostTree : SimpleTree(), Disposable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun openWithSFTP(evt: EventObject) {
|
private fun openWithSFTP(evt: EventObject) {
|
||||||
val nodes =
|
val nodes = getSelectionSimpleTreeNodes(true)
|
||||||
getSelectionSimpleTreeNodes(true).map { it.host }.filter { it.protocol == SSHProtocolProvider.PROTOCOL }
|
.map { it.host }.filter { TransferProtocolProvider.valueOf(it.protocol) != null }
|
||||||
if (nodes.isEmpty()) return
|
if (nodes.isEmpty()) return
|
||||||
|
|
||||||
for (node in nodes) {
|
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