mirror of
https://github.com/TermoraDev/termora.git
synced 2026-01-16 02:12:58 +08:00
Compare commits
1 Commits
2.0.0-beta
...
dependabot
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d8a165d715 |
@@ -1,7 +1,7 @@
|
|||||||
[versions]
|
[versions]
|
||||||
kotlin = "2.2.20"
|
kotlin = "2.2.10"
|
||||||
slf4j = "2.0.17"
|
slf4j = "2.0.17"
|
||||||
pty4j = "0.13.10"
|
pty4j = "0.13.11"
|
||||||
tinylog = "2.7.0"
|
tinylog = "2.7.0"
|
||||||
kotlinx-coroutines = "1.10.2"
|
kotlinx-coroutines = "1.10.2"
|
||||||
flatlaf = "3.6.1"
|
flatlaf = "3.6.1"
|
||||||
@@ -28,7 +28,7 @@ okhttp = "5.1.0"
|
|||||||
sshj = "0.39.0"
|
sshj = "0.39.0"
|
||||||
sshd-core = "2.15.0"
|
sshd-core = "2.15.0"
|
||||||
jgit = "7.2.0.202503040940-r"
|
jgit = "7.2.0.202503040940-r"
|
||||||
commonmark = "0.26.0"
|
commonmark = "0.25.1"
|
||||||
jnafilechooser = "1.1.2"
|
jnafilechooser = "1.1.2"
|
||||||
xodus = "2.0.1"
|
xodus = "2.0.1"
|
||||||
bip39 = "1.0.9"
|
bip39 = "1.0.9"
|
||||||
@@ -41,7 +41,7 @@ jSerialComm = "2.11.2"
|
|||||||
ini4j = "0.5.5-2"
|
ini4j = "0.5.5-2"
|
||||||
restart4j = "0.0.1"
|
restart4j = "0.0.1"
|
||||||
eddsa = "0.3.0"
|
eddsa = "0.3.0"
|
||||||
exposed = "1.0.0-rc-1"
|
exposed = "1.0.0-beta-5"
|
||||||
h2 = "2.3.232"
|
h2 = "2.3.232"
|
||||||
sqlite = "3.50.3.0"
|
sqlite = "3.50.3.0"
|
||||||
jug = "5.1.0"
|
jug = "5.1.0"
|
||||||
@@ -106,7 +106,7 @@ eddsa = { module = "net.i2p.crypto:eddsa", version.ref = "eddsa" }
|
|||||||
exposed-core = { module = "org.jetbrains.exposed:exposed-core", version.ref = "exposed" }
|
exposed-core = { module = "org.jetbrains.exposed:exposed-core", version.ref = "exposed" }
|
||||||
exposed-crypt = { module = "org.jetbrains.exposed:exposed-crypt", version.ref = "exposed" }
|
exposed-crypt = { module = "org.jetbrains.exposed:exposed-crypt", version.ref = "exposed" }
|
||||||
exposed-jdbc = { module = "org.jetbrains.exposed:exposed-jdbc", version.ref = "exposed" }
|
exposed-jdbc = { module = "org.jetbrains.exposed:exposed-jdbc", version.ref = "exposed" }
|
||||||
exposed-migration = { module = "org.jetbrains.exposed:exposed-migration-core", version.ref = "exposed" }
|
exposed-migration = { module = "org.jetbrains.exposed:exposed-migration", version.ref = "exposed" }
|
||||||
h2 = { module = "com.h2database:h2", version.ref = "h2" }
|
h2 = { module = "com.h2database:h2", version.ref = "h2" }
|
||||||
sqlite = { module = "org.xerial:sqlite-jdbc", version.ref = "sqlite" }
|
sqlite = { module = "org.xerial:sqlite-jdbc", version.ref = "sqlite" }
|
||||||
jug = { module = "com.fasterxml.uuid:java-uuid-generator", version.ref = "jug" }
|
jug = { module = "com.fasterxml.uuid:java-uuid-generator", version.ref = "jug" }
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ project.version = "0.0.4"
|
|||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
testImplementation(kotlin("test"))
|
testImplementation(kotlin("test"))
|
||||||
implementation("com.qcloud:cos_api:5.6.255")
|
implementation("com.qcloud:cos_api:5.6.251")
|
||||||
compileOnly(project(":"))
|
compileOnly(project(":"))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import org.apache.commons.codec.binary.Base64
|
|||||||
import org.apache.commons.codec.digest.DigestUtils
|
import org.apache.commons.codec.digest.DigestUtils
|
||||||
import org.apache.commons.lang3.ObjectUtils
|
import org.apache.commons.lang3.ObjectUtils
|
||||||
import org.apache.commons.lang3.StringUtils
|
import org.apache.commons.lang3.StringUtils
|
||||||
import org.jetbrains.exposed.v1.core.eq
|
|
||||||
import org.jetbrains.exposed.v1.jdbc.selectAll
|
import org.jetbrains.exposed.v1.jdbc.selectAll
|
||||||
import org.jetbrains.exposed.v1.jdbc.transactions.transaction
|
import org.jetbrains.exposed.v1.jdbc.transactions.transaction
|
||||||
import org.jetbrains.exposed.v1.jdbc.update
|
import org.jetbrains.exposed.v1.jdbc.update
|
||||||
|
|||||||
@@ -16,8 +16,8 @@ import app.termora.snippet.SnippetManager
|
|||||||
import app.termora.terminal.CursorStyle
|
import app.termora.terminal.CursorStyle
|
||||||
import org.apache.commons.io.FileUtils
|
import org.apache.commons.io.FileUtils
|
||||||
import org.apache.commons.lang3.StringUtils
|
import org.apache.commons.lang3.StringUtils
|
||||||
|
import org.jetbrains.exposed.v1.core.SqlExpressionBuilder.eq
|
||||||
import org.jetbrains.exposed.v1.core.and
|
import org.jetbrains.exposed.v1.core.and
|
||||||
import org.jetbrains.exposed.v1.core.eq
|
|
||||||
import org.jetbrains.exposed.v1.core.statements.StatementType
|
import org.jetbrains.exposed.v1.core.statements.StatementType
|
||||||
import org.jetbrains.exposed.v1.jdbc.*
|
import org.jetbrains.exposed.v1.jdbc.*
|
||||||
import org.jetbrains.exposed.v1.jdbc.transactions.TransactionManager
|
import org.jetbrains.exposed.v1.jdbc.transactions.TransactionManager
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ class MacroManager private constructor() {
|
|||||||
|
|
||||||
val accountId = AccountManager.getInstance().getAccountId()
|
val accountId = AccountManager.getInstance().getAccountId()
|
||||||
|
|
||||||
database.saveAndIncrementVersion(
|
database.save(
|
||||||
Data(
|
Data(
|
||||||
id = macro.id,
|
id = macro.id,
|
||||||
ownerId = accountId,
|
ownerId = accountId,
|
||||||
|
|||||||
@@ -30,8 +30,6 @@ import java.nio.file.Path
|
|||||||
import java.util.concurrent.CompletableFuture
|
import java.util.concurrent.CompletableFuture
|
||||||
import java.util.concurrent.Executors
|
import java.util.concurrent.Executors
|
||||||
import javax.swing.*
|
import javax.swing.*
|
||||||
import javax.swing.event.PopupMenuEvent
|
|
||||||
import javax.swing.event.PopupMenuListener
|
|
||||||
import kotlin.io.path.absolutePathString
|
import kotlin.io.path.absolutePathString
|
||||||
import kotlin.math.max
|
import kotlin.math.max
|
||||||
import kotlin.reflect.cast
|
import kotlin.reflect.cast
|
||||||
@@ -60,24 +58,12 @@ internal class TransferVisualWindow(tab: SSHTerminalTab, visualWindowManager: Vi
|
|||||||
private val connectFailedPanel = ConnectFailedPanel()
|
private val connectFailedPanel = ConnectFailedPanel()
|
||||||
private val transferManager = TransferTableModel(coroutineScope)
|
private val transferManager = TransferTableModel(coroutineScope)
|
||||||
private val disposable = Disposer.newDisposable()
|
private val disposable = Disposer.newDisposable()
|
||||||
private val focusedWindow get() = KeyboardFocusManager.getCurrentKeyboardFocusManager().focusedWindow
|
|
||||||
private val owner get() = SwingUtilities.getWindowAncestor(this)
|
private val owner get() = SwingUtilities.getWindowAncestor(this)
|
||||||
private val questionBtn = JButton(Icons.questionMark)
|
private val questionBtn = JButton(Icons.questionMark)
|
||||||
private val downloadBtn = JButton(Icons.download)
|
private val downloadBtn = JButton(Icons.download)
|
||||||
private val badgePresentation = Badge.getInstance(tab.windowScope)
|
private val badgePresentation = Badge.getInstance(tab.windowScope)
|
||||||
.addBadge(downloadBtn).apply { visible = false }
|
.addBadge(downloadBtn).apply { visible = false }
|
||||||
private val support = DataProviderSupport()
|
private val support = DataProviderSupport()
|
||||||
private var isShowPopupMenu = false
|
|
||||||
|
|
||||||
override var isStickHover: Boolean
|
|
||||||
get() = super.isStickHover
|
|
||||||
set(value) {
|
|
||||||
if (isShowPopupMenu || owner != focusedWindow) {
|
|
||||||
super.isStickHover = true
|
|
||||||
} else {
|
|
||||||
super.isStickHover = value
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
init {
|
init {
|
||||||
initViews()
|
initViews()
|
||||||
@@ -149,8 +135,6 @@ internal class TransferVisualWindow(tab: SSHTerminalTab, visualWindowManager: Vi
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
questionBtn.toolTipText = I18n.getString("termora.visual-window.transport.question")
|
|
||||||
|
|
||||||
// 立即连接
|
// 立即连接
|
||||||
connect()
|
connect()
|
||||||
}
|
}
|
||||||
@@ -167,7 +151,7 @@ internal class TransferVisualWindow(tab: SSHTerminalTab, visualWindowManager: Vi
|
|||||||
val support = DefaultTransportSupport(fileSystem, fileSystem.defaultDir)
|
val support = DefaultTransportSupport(fileSystem, fileSystem.defaultDir)
|
||||||
withContext(Dispatchers.Swing) {
|
withContext(Dispatchers.Swing) {
|
||||||
val internalTransferManager = MyInternalTransferManager()
|
val internalTransferManager = MyInternalTransferManager()
|
||||||
val transportPanel = object : TransportPanel(
|
val transportPanel = TransportPanel(
|
||||||
internalTransferManager, tab.host,
|
internalTransferManager, tab.host,
|
||||||
object : TransportSupportLoader {
|
object : TransportSupportLoader {
|
||||||
override suspend fun getTransportSupport(): TransportSupport {
|
override suspend fun getTransportSupport(): TransportSupport {
|
||||||
@@ -181,27 +165,7 @@ internal class TransferVisualWindow(tab: SSHTerminalTab, visualWindowManager: Vi
|
|||||||
override fun isLoaded(): Boolean {
|
override fun isLoaded(): Boolean {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}) {
|
})
|
||||||
override fun customizeContextmenu(
|
|
||||||
rows: Array<Int>,
|
|
||||||
e: MouseEvent,
|
|
||||||
popupMenu: TransportPopupMenu
|
|
||||||
) {
|
|
||||||
popupMenu.addPopupMenuListener(object : PopupMenuListener {
|
|
||||||
override fun popupMenuWillBecomeVisible(e: PopupMenuEvent?) {
|
|
||||||
isShowPopupMenu = true
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun popupMenuWillBecomeInvisible(e: PopupMenuEvent?) {
|
|
||||||
isShowPopupMenu = false
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun popupMenuCanceled(e: PopupMenuEvent?) {
|
|
||||||
isShowPopupMenu = false
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
internalTransferManager.setTransferPanel(transportPanel)
|
internalTransferManager.setTransferPanel(transportPanel)
|
||||||
Disposer.register(transportPanel, object : Disposable {
|
Disposer.register(transportPanel, object : Disposable {
|
||||||
override fun dispose() {
|
override fun dispose() {
|
||||||
@@ -276,10 +240,6 @@ internal class TransferVisualWindow(tab: SSHTerminalTab, visualWindowManager: Vi
|
|||||||
super.dispose()
|
super.dispose()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun reassemble() {
|
|
||||||
super.reassemble()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun <T : Any> getData(dataKey: DataKey<T>): T? {
|
override fun <T : Any> getData(dataKey: DataKey<T>): T? {
|
||||||
return support.getData(dataKey)
|
return support.getData(dataKey)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,7 +36,6 @@ open class VisualWindowPanel(protected val id: String, protected val visualWindo
|
|||||||
private var dialog: VisualWindowDialog? = null
|
private var dialog: VisualWindowDialog? = null
|
||||||
private var oldBounds = Rectangle()
|
private var oldBounds = Rectangle()
|
||||||
private var toggleWindowBtn = JButton(Icons.openInNewWindow)
|
private var toggleWindowBtn = JButton(Icons.openInNewWindow)
|
||||||
private val closeBtn = JButton(Icons.close)
|
|
||||||
private var isAlwaysTop
|
private var isAlwaysTop
|
||||||
get() = properties.getString("VisualWindow.${id}.dialog.isAlwaysTop", "false").toBoolean()
|
get() = properties.getString("VisualWindow.${id}.dialog.isAlwaysTop", "false").toBoolean()
|
||||||
set(value) = properties.putString("VisualWindow.${id}.dialog.isAlwaysTop", value.toString())
|
set(value) = properties.putString("VisualWindow.${id}.dialog.isAlwaysTop", value.toString())
|
||||||
@@ -48,8 +47,8 @@ open class VisualWindowPanel(protected val id: String, protected val visualWindo
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected open var isStickHover = false
|
protected var isStickHover = false
|
||||||
set(value) {
|
private set(value) {
|
||||||
if (value == field) return
|
if (value == field) return
|
||||||
field = value
|
field = value
|
||||||
reassemble()
|
reassemble()
|
||||||
@@ -93,8 +92,6 @@ open class VisualWindowPanel(protected val id: String, protected val visualWindo
|
|||||||
oldBounds = bounds
|
oldBounds = bounds
|
||||||
alwaysTopBtn.isSelected = isAlwaysTop
|
alwaysTopBtn.isSelected = isAlwaysTop
|
||||||
alwaysTopBtn.isVisible = false
|
alwaysTopBtn.isVisible = false
|
||||||
|
|
||||||
closeBtn.toolTipText = I18n.getString("termora.tabbed.contextmenu.close")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected open fun toolbarButtons(): List<Pair<JButton, Position>> {
|
protected open fun toolbarButtons(): List<Pair<JButton, Position>> {
|
||||||
@@ -137,7 +134,6 @@ open class VisualWindowPanel(protected val id: String, protected val visualWindo
|
|||||||
addMouseListener(object : MouseAdapter() {})
|
addMouseListener(object : MouseAdapter() {})
|
||||||
|
|
||||||
toggleWindowBtn.addActionListener { toggleWindow() }
|
toggleWindowBtn.addActionListener { toggleWindow() }
|
||||||
toggleWindowBtn.toolTipText = I18n.getString("termora.visual-window.toggle-window")
|
|
||||||
|
|
||||||
addPropertyChangeListener("isWindow") {
|
addPropertyChangeListener("isWindow") {
|
||||||
if (isWindow) {
|
if (isWindow) {
|
||||||
@@ -169,8 +165,6 @@ open class VisualWindowPanel(protected val id: String, protected val visualWindo
|
|||||||
dialog?.isAlwaysOnTop = isAlwaysTop
|
dialog?.isAlwaysOnTop = isAlwaysTop
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
closeBtn.addActionListener { if (beforeClose()) Disposer.dispose(visualWindow) }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun initToolBar() {
|
private fun initToolBar() {
|
||||||
@@ -186,7 +180,7 @@ open class VisualWindowPanel(protected val id: String, protected val visualWindo
|
|||||||
buttons.filter { it.second == Position.Right }.forEach { toolbar.add(it.first) }
|
buttons.filter { it.second == Position.Right }.forEach { toolbar.add(it.first) }
|
||||||
|
|
||||||
toolbar.add(toggleWindowBtn)
|
toolbar.add(toggleWindowBtn)
|
||||||
toolbar.add(closeBtn)
|
toolbar.add(JButton(Icons.close).apply { addActionListener { if (beforeClose()) Disposer.dispose(visualWindow) } })
|
||||||
toolbar.border = BorderFactory.createMatteBorder(0, 0, 1, 0, DynamicColor.BorderColor)
|
toolbar.border = BorderFactory.createMatteBorder(0, 0, 1, 0, DynamicColor.BorderColor)
|
||||||
add(toolbar, BorderLayout.NORTH)
|
add(toolbar, BorderLayout.NORTH)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -66,8 +66,6 @@ class BookmarkButton : JButton(Icons.bookmarks) {
|
|||||||
})
|
})
|
||||||
|
|
||||||
isBookmark = false
|
isBookmark = false
|
||||||
|
|
||||||
toolTipText = I18n.getString("termora.transport.bookmarks")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun showBookmarks(e: MouseEvent) {
|
private fun showBookmarks(e: MouseEvent) {
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ import kotlin.io.path.*
|
|||||||
import kotlin.time.Duration.Companion.milliseconds
|
import kotlin.time.Duration.Companion.milliseconds
|
||||||
import kotlin.time.Duration.Companion.seconds
|
import kotlin.time.Duration.Companion.seconds
|
||||||
|
|
||||||
internal open class TransportPanel(
|
internal class TransportPanel(
|
||||||
private val internalTransferManager: InternalTransferManager,
|
private val internalTransferManager: InternalTransferManager,
|
||||||
val host: Host,
|
val host: Host,
|
||||||
val loader: TransportSupportLoader,
|
val loader: TransportSupportLoader,
|
||||||
@@ -131,10 +131,10 @@ internal open class TransportPanel(
|
|||||||
* 工作目录
|
* 工作目录
|
||||||
*/
|
*/
|
||||||
override var workdir: Path? = null
|
override var workdir: Path? = null
|
||||||
protected set
|
private set
|
||||||
|
|
||||||
override var loading = false
|
override var loading = false
|
||||||
protected set(value) {
|
private set(value) {
|
||||||
val oldValue = field
|
val oldValue = field
|
||||||
field = value
|
field = value
|
||||||
if (oldValue != value) {
|
if (oldValue != value) {
|
||||||
@@ -165,14 +165,6 @@ internal open class TransportPanel(
|
|||||||
toolbar.add(eyeBtn)
|
toolbar.add(eyeBtn)
|
||||||
toolbar.add(refreshBtn)
|
toolbar.add(refreshBtn)
|
||||||
|
|
||||||
prevBtn.toolTipText = I18n.getString("termora.transport.toolbar.prev")
|
|
||||||
homeBtn.toolTipText = I18n.getString("termora.transport.toolbar.home")
|
|
||||||
nextBtn.toolTipText = I18n.getString("termora.transport.toolbar.next")
|
|
||||||
|
|
||||||
parentBtn.toolTipText = I18n.getString("termora.transport.toolbar.parent")
|
|
||||||
eyeBtn.toolTipText = I18n.getString("termora.transport.toolbar.show-hide")
|
|
||||||
refreshBtn.toolTipText = I18n.getString("termora.transport.toolbar.refresh")
|
|
||||||
|
|
||||||
sorter.maxSortKeys = 1
|
sorter.maxSortKeys = 1
|
||||||
table.setRowSorter(sorter)
|
table.setRowSorter(sorter)
|
||||||
table.setAutoCreateRowSorter(false)
|
table.setAutoCreateRowSorter(false)
|
||||||
@@ -419,7 +411,7 @@ internal open class TransportPanel(
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
addPropertyChangeListener("workdir") { _ -> reload() }
|
addPropertyChangeListener("workdir") { evt -> reload() }
|
||||||
|
|
||||||
reload()
|
reload()
|
||||||
}
|
}
|
||||||
@@ -530,8 +522,7 @@ internal open class TransportPanel(
|
|||||||
) == JOptionPane.YES_OPTION
|
) == JOptionPane.YES_OPTION
|
||||||
) {
|
) {
|
||||||
// 直接执行删除操作
|
// 直接执行删除操作
|
||||||
val future =
|
val future = internalTransferManager.addTransfer(validFiles, InternalTransferManager.TransferMode.Delete)
|
||||||
internalTransferManager.addTransfer(validFiles, InternalTransferManager.TransferMode.Delete)
|
|
||||||
mountFuture(future)
|
mountFuture(future)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -925,18 +916,13 @@ internal open class TransportPanel(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected open fun showContextmenu(rows: Array<Int>, e: MouseEvent) {
|
private fun showContextmenu(rows: Array<Int>, e: MouseEvent) {
|
||||||
val files = rows.map { model.getPath(it) to model.getAttributes(it) }
|
val files = rows.map { model.getPath(it) to model.getAttributes(it) }
|
||||||
val popupMenu = TransportPopupMenu(owner, model, internalTransferManager, loader, files)
|
val popupMenu = TransportPopupMenu(owner, model, internalTransferManager, loader, files)
|
||||||
popupMenu.addActionListener(PopupMenuActionListener(files))
|
popupMenu.addActionListener(PopupMenuActionListener(files))
|
||||||
customizeContextmenu(rows, e, popupMenu)
|
|
||||||
popupMenu.show(table, e.x, e.y)
|
popupMenu.show(table, e.x, e.y)
|
||||||
}
|
}
|
||||||
|
|
||||||
protected open fun customizeContextmenu(rows: Array<Int>, e: MouseEvent, popupMenu: TransportPopupMenu) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun <T : Any> getData(dataKey: DataKey<T>): T? {
|
override fun <T : Any> getData(dataKey: DataKey<T>): T? {
|
||||||
return support.getData(dataKey)
|
return support.getData(dataKey)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ import app.termora.*
|
|||||||
import app.termora.plugin.ExtensionManager
|
import app.termora.plugin.ExtensionManager
|
||||||
import app.termora.transfer.TransportPanel.Companion.isLocallyFileSystem
|
import app.termora.transfer.TransportPanel.Companion.isLocallyFileSystem
|
||||||
import com.formdev.flatlaf.extras.components.FlatPopupMenu
|
import com.formdev.flatlaf.extras.components.FlatPopupMenu
|
||||||
import com.formdev.flatlaf.util.SystemInfo
|
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import org.apache.commons.io.IOUtils
|
import org.apache.commons.io.IOUtils
|
||||||
import org.apache.commons.lang3.StringUtils
|
import org.apache.commons.lang3.StringUtils
|
||||||
@@ -42,14 +41,7 @@ internal class TransportPopupMenu(
|
|||||||
private val copyPathMenu = JMenuItem(I18n.getString("termora.transport.table.contextmenu.copy-path"))
|
private val copyPathMenu = JMenuItem(I18n.getString("termora.transport.table.contextmenu.copy-path"))
|
||||||
private val copyMenu = JMenuItem(I18n.getString("termora.copy"))
|
private val copyMenu = JMenuItem(I18n.getString("termora.copy"))
|
||||||
private val pasteMenu = JMenuItem(I18n.getString("termora.paste"))
|
private val pasteMenu = JMenuItem(I18n.getString("termora.paste"))
|
||||||
private val openInFinderMenu = JMenuItem(
|
private val openInFinderMenu = JMenuItem(I18n.getString("termora.transport.table.contextmenu.open-in-folder"))
|
||||||
I18n.getString(
|
|
||||||
"termora.transport.table.contextmenu.open-in-folder",
|
|
||||||
if (SystemInfo.isMacOS) I18n.getString("termora.finder")
|
|
||||||
else if (SystemInfo.isWindows) I18n.getString("termora.explorer")
|
|
||||||
else I18n.getString("termora.folder")
|
|
||||||
)
|
|
||||||
)
|
|
||||||
private val renameMenu = JMenuItem(I18n.getString("termora.transport.table.contextmenu.rename"))
|
private val renameMenu = JMenuItem(I18n.getString("termora.transport.table.contextmenu.rename"))
|
||||||
private val deleteMenu = JMenuItem(I18n.getString("termora.transport.table.contextmenu.delete"))
|
private val deleteMenu = JMenuItem(I18n.getString("termora.transport.table.contextmenu.delete"))
|
||||||
|
|
||||||
|
|||||||
@@ -8,8 +8,6 @@ import org.apache.commons.io.IOUtils
|
|||||||
import org.apache.commons.lang3.StringUtils
|
import org.apache.commons.lang3.StringUtils
|
||||||
import org.apache.sshd.client.SshClient
|
import org.apache.sshd.client.SshClient
|
||||||
import org.apache.sshd.client.session.ClientSession
|
import org.apache.sshd.client.session.ClientSession
|
||||||
import org.apache.sshd.core.CoreModuleProperties
|
|
||||||
import org.apache.sshd.sftp.SftpModuleProperties
|
|
||||||
import org.apache.sshd.sftp.client.SftpClientFactory
|
import org.apache.sshd.sftp.client.SftpClientFactory
|
||||||
|
|
||||||
internal class SFTPTransferProtocolProvider : TransferProtocolProvider {
|
internal class SFTPTransferProtocolProvider : TransferProtocolProvider {
|
||||||
@@ -34,11 +32,6 @@ internal class SFTPTransferProtocolProvider : TransferProtocolProvider {
|
|||||||
client = if (owner == null) SshClients.openClient(requester.host)
|
client = if (owner == null) SshClients.openClient(requester.host)
|
||||||
else SshClients.openClient(requester.host, owner)
|
else SshClients.openClient(requester.host, owner)
|
||||||
session = SshClients.openSession(requester.host, client)
|
session = SshClients.openSession(requester.host, client)
|
||||||
|
|
||||||
CoreModuleProperties.IO_CONNECT_TIMEOUT.get(client).ifPresent { e ->
|
|
||||||
SftpModuleProperties.SFTP_CHANNEL_OPEN_TIMEOUT.set(session, e)
|
|
||||||
}
|
|
||||||
|
|
||||||
val fileSystem = SftpClientFactory.instance().createSftpFileSystem(session)
|
val fileSystem = SftpClientFactory.instance().createSftpFileSystem(session)
|
||||||
|
|
||||||
val host = requester.host
|
val host = requester.host
|
||||||
|
|||||||
@@ -311,14 +311,6 @@ termora.tools.multiple=Send command to the current window sessions
|
|||||||
termora.transport.local=Local
|
termora.transport.local=Local
|
||||||
termora.transport.file-already-exists=The file {0} already exists
|
termora.transport.file-already-exists=The file {0} already exists
|
||||||
|
|
||||||
|
|
||||||
termora.transport.toolbar.prev=Backward
|
|
||||||
termora.transport.toolbar.home=Home Folder
|
|
||||||
termora.transport.toolbar.next=Forward
|
|
||||||
termora.transport.toolbar.parent=Parent Folder
|
|
||||||
termora.transport.toolbar.show-hide=Show/Hide Folders
|
|
||||||
termora.transport.toolbar.refresh=Refresh Folder
|
|
||||||
|
|
||||||
termora.transport.bookmarks=Bookmarks Manager
|
termora.transport.bookmarks=Bookmarks Manager
|
||||||
termora.transport.bookmarks.up=Up
|
termora.transport.bookmarks.up=Up
|
||||||
termora.transport.bookmarks.down=Down
|
termora.transport.bookmarks.down=Down
|
||||||
@@ -335,7 +327,7 @@ termora.transport.table.owner=Owner
|
|||||||
termora.transport.table.contextmenu.transfer=Transfer
|
termora.transport.table.contextmenu.transfer=Transfer
|
||||||
termora.transport.table.contextmenu.edit=${termora.keymgr.edit}
|
termora.transport.table.contextmenu.edit=${termora.keymgr.edit}
|
||||||
termora.transport.table.contextmenu.copy-path=Copy Path
|
termora.transport.table.contextmenu.copy-path=Copy Path
|
||||||
termora.transport.table.contextmenu.open-in-folder=Open in {0}
|
termora.transport.table.contextmenu.open-in-folder=Open in ${termora.finder}
|
||||||
termora.transport.table.contextmenu.rename=${termora.welcome.contextmenu.rename}
|
termora.transport.table.contextmenu.rename=${termora.welcome.contextmenu.rename}
|
||||||
termora.transport.table.contextmenu.delete=${termora.remove}
|
termora.transport.table.contextmenu.delete=${termora.remove}
|
||||||
termora.transport.table.contextmenu.rm-warning=Using the rm -rf command to delete a file is very dangerous
|
termora.transport.table.contextmenu.rm-warning=Using the rm -rf command to delete a file is very dangerous
|
||||||
@@ -441,8 +433,6 @@ termora.visual-window.system-information.mem=Mem
|
|||||||
termora.visual-window.system-information.swap=Swap
|
termora.visual-window.system-information.swap=Swap
|
||||||
termora.visual-window.system-information.filesystem=Filesystem
|
termora.visual-window.system-information.filesystem=Filesystem
|
||||||
termora.visual-window.system-information.used-total=Used / Total
|
termora.visual-window.system-information.used-total=Used / Total
|
||||||
termora.visual-window.toggle-window=Toggle window
|
|
||||||
termora.visual-window.transport.question=More Features
|
|
||||||
|
|
||||||
|
|
||||||
termora.visual-window.nvidia-smi=NVIDIA SMI
|
termora.visual-window.nvidia-smi=NVIDIA SMI
|
||||||
|
|||||||
@@ -251,14 +251,6 @@ termora.transport.bookmarks=Менеджер закладок
|
|||||||
termora.transport.bookmarks.up=Вверх
|
termora.transport.bookmarks.up=Вверх
|
||||||
termora.transport.bookmarks.down=Вниз
|
termora.transport.bookmarks.down=Вниз
|
||||||
|
|
||||||
termora.transport.toolbar.prev=Назад
|
|
||||||
termora.transport.toolbar.home=Домашняя папка
|
|
||||||
termora.transport.toolbar.next=Вперёд
|
|
||||||
termora.transport.toolbar.parent=Родительская папка
|
|
||||||
termora.transport.toolbar.show-hide=Показать/Скрыть папки
|
|
||||||
termora.transport.toolbar.refresh=Обновить
|
|
||||||
|
|
||||||
|
|
||||||
termora.transport.table.filename=Имя файла
|
termora.transport.table.filename=Имя файла
|
||||||
termora.transport.table.type=Тип
|
termora.transport.table.type=Тип
|
||||||
termora.transport.table.type.symbolic-link=Символьная Ссылка
|
termora.transport.table.type.symbolic-link=Символьная Ссылка
|
||||||
@@ -366,8 +358,6 @@ termora.visual-window.system-information.mem=Память
|
|||||||
termora.visual-window.system-information.swap=Подкачка
|
termora.visual-window.system-information.swap=Подкачка
|
||||||
termora.visual-window.system-information.filesystem=Файловая система
|
termora.visual-window.system-information.filesystem=Файловая система
|
||||||
termora.visual-window.system-information.used-total=Использовано / Всего
|
termora.visual-window.system-information.used-total=Использовано / Всего
|
||||||
termora.visual-window.toggle-window=Переключить окно
|
|
||||||
termora.visual-window.transport.question=Больше возможностей
|
|
||||||
|
|
||||||
|
|
||||||
termora.visual-window.nvidia-smi=NVIDIA SMI
|
termora.visual-window.nvidia-smi=NVIDIA SMI
|
||||||
|
|||||||
@@ -312,15 +312,6 @@ termora.transport.bookmarks=书签管理
|
|||||||
termora.transport.bookmarks.up=上移
|
termora.transport.bookmarks.up=上移
|
||||||
termora.transport.bookmarks.down=下移
|
termora.transport.bookmarks.down=下移
|
||||||
|
|
||||||
|
|
||||||
termora.transport.toolbar.prev=返回
|
|
||||||
termora.transport.toolbar.home=默认目录
|
|
||||||
termora.transport.toolbar.next=前进
|
|
||||||
termora.transport.toolbar.parent=父目录
|
|
||||||
termora.transport.toolbar.show-hide=显示/隐藏目录
|
|
||||||
termora.transport.toolbar.refresh=刷新
|
|
||||||
|
|
||||||
|
|
||||||
termora.transport.table.filename=文件名
|
termora.transport.table.filename=文件名
|
||||||
termora.transport.table.type=类型
|
termora.transport.table.type=类型
|
||||||
termora.transport.table.size=大小
|
termora.transport.table.size=大小
|
||||||
@@ -332,7 +323,7 @@ termora.transport.table.owner=所有者
|
|||||||
# contextmenu
|
# contextmenu
|
||||||
termora.transport.table.contextmenu.transfer=传输
|
termora.transport.table.contextmenu.transfer=传输
|
||||||
termora.transport.table.contextmenu.copy-path=复制路径
|
termora.transport.table.contextmenu.copy-path=复制路径
|
||||||
termora.transport.table.contextmenu.open-in-folder=在{0}中打开
|
termora.transport.table.contextmenu.open-in-folder=在${termora.finder}中打开
|
||||||
termora.transport.table.contextmenu.change-permissions=更改权限...
|
termora.transport.table.contextmenu.change-permissions=更改权限...
|
||||||
termora.transport.table.contextmenu.refresh=刷新
|
termora.transport.table.contextmenu.refresh=刷新
|
||||||
termora.transport.table.contextmenu.compress=压缩
|
termora.transport.table.contextmenu.compress=压缩
|
||||||
@@ -438,8 +429,6 @@ termora.visual-window.system-information.mem=内存
|
|||||||
termora.visual-window.system-information.swap=交换
|
termora.visual-window.system-information.swap=交换
|
||||||
termora.visual-window.system-information.filesystem=文件系统
|
termora.visual-window.system-information.filesystem=文件系统
|
||||||
termora.visual-window.system-information.used-total=使用 / 大小
|
termora.visual-window.system-information.used-total=使用 / 大小
|
||||||
termora.visual-window.toggle-window=切换窗口
|
|
||||||
termora.visual-window.transport.question=更多功能
|
|
||||||
|
|
||||||
termora.floating-toolbar.close-in-current-tab=在当前标签页关闭
|
termora.floating-toolbar.close-in-current-tab=在当前标签页关闭
|
||||||
|
|
||||||
|
|||||||
@@ -307,13 +307,6 @@ termora.transport.bookmarks=書籤管理
|
|||||||
termora.transport.bookmarks.up=上移
|
termora.transport.bookmarks.up=上移
|
||||||
termora.transport.bookmarks.down=下移
|
termora.transport.bookmarks.down=下移
|
||||||
|
|
||||||
termora.transport.toolbar.prev=返回
|
|
||||||
termora.transport.toolbar.home=預設目錄
|
|
||||||
termora.transport.toolbar.next=前進
|
|
||||||
termora.transport.toolbar.parent=父目錄
|
|
||||||
termora.transport.toolbar.show-hide=顯示/隱藏目錄
|
|
||||||
termora.transport.toolbar.refresh=重新整理
|
|
||||||
|
|
||||||
termora.transport.table.filename=檔名
|
termora.transport.table.filename=檔名
|
||||||
termora.transport.table.type=類型
|
termora.transport.table.type=類型
|
||||||
termora.transport.table.size=大小
|
termora.transport.table.size=大小
|
||||||
@@ -325,7 +318,7 @@ termora.transport.table.owner=所有者
|
|||||||
# contextmenu
|
# contextmenu
|
||||||
termora.transport.table.contextmenu.transfer=傳輸
|
termora.transport.table.contextmenu.transfer=傳輸
|
||||||
termora.transport.table.contextmenu.copy-path=複製路徑
|
termora.transport.table.contextmenu.copy-path=複製路徑
|
||||||
termora.transport.table.contextmenu.open-in-folder=在{0}中打開
|
termora.transport.table.contextmenu.open-in-folder=在${termora.finder}中打開
|
||||||
termora.transport.table.contextmenu.change-permissions=更改權限...
|
termora.transport.table.contextmenu.change-permissions=更改權限...
|
||||||
termora.transport.table.contextmenu.refresh=刷新
|
termora.transport.table.contextmenu.refresh=刷新
|
||||||
termora.transport.table.contextmenu.compress=壓縮
|
termora.transport.table.contextmenu.compress=壓縮
|
||||||
@@ -423,8 +416,6 @@ termora.visual-window.system-information.mem=內存
|
|||||||
termora.visual-window.system-information.swap=交換
|
termora.visual-window.system-information.swap=交換
|
||||||
termora.visual-window.system-information.filesystem=檔案系統
|
termora.visual-window.system-information.filesystem=檔案系統
|
||||||
termora.visual-window.system-information.used-total=使用 / 大小
|
termora.visual-window.system-information.used-total=使用 / 大小
|
||||||
termora.visual-window.toggle-window=切換視窗
|
|
||||||
termora.visual-window.transport.question=更多功能
|
|
||||||
|
|
||||||
termora.floating-toolbar.close-in-current-tab=在目前標籤頁關閉
|
termora.floating-toolbar.close-in-current-tab=在目前標籤頁關閉
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user