From 702dee7983c4ab4f8a4459f481cb7517753813c0 Mon Sep 17 00:00:00 2001 From: hstyi Date: Tue, 8 Jul 2025 11:53:05 +0800 Subject: [PATCH] feat: serial plugin --- build.gradle.kts | 1 - plugins/serial/build.gradle.kts | 17 ++++++++++++++ .../plugins}/serial/SerialHostOptionsPane.kt | 2 +- .../termora/plugins/serial/SerialPlugin.kt | 15 +++++++++---- .../plugins/serial}/SerialPortPtyConnector.kt | 2 +- .../serial/SerialProtocolHostPanel.kt | 2 +- .../SerialProtocolHostPanelExtension.kt | 2 +- .../plugins}/serial/SerialProtocolProvider.kt | 2 +- .../serial/SerialProtocolProviderExtension.kt | 2 +- .../plugins}/serial/SerialTerminalTab.kt | 7 ++++-- .../app/termora/plugins/serial}/Serials.kt | 5 ++++- .../src/main/resources/META-INF/plugin.xml | 22 +++++++++++++++++++ .../main/resources/META-INF/pluginIcon.svg | 1 + .../resources/META-INF/pluginIcon_dark.svg | 5 +++++ settings.gradle.kts | 1 + .../app/termora/plugin/PluginManager.kt | 3 --- .../plugin/internal/BasicGeneralOption.kt | 2 +- ...MoreInfoSimpleTreeCellRendererExtension.kt | 3 --- 18 files changed, 73 insertions(+), 21 deletions(-) create mode 100644 plugins/serial/build.gradle.kts rename {src/main/kotlin/app/termora/plugin/internal => plugins/serial/src/main/kotlin/app/termora/plugins}/serial/SerialHostOptionsPane.kt (99%) rename src/main/kotlin/app/termora/plugin/internal/serial/SerialInternalPlugin.kt => plugins/serial/src/main/kotlin/app/termora/plugins/serial/SerialPlugin.kt (65%) rename {src/main/kotlin/app/termora => plugins/serial/src/main/kotlin/app/termora/plugins/serial}/SerialPortPtyConnector.kt (97%) rename {src/main/kotlin/app/termora/plugin/internal => plugins/serial/src/main/kotlin/app/termora/plugins}/serial/SerialProtocolHostPanel.kt (93%) rename {src/main/kotlin/app/termora/plugin/internal => plugins/serial/src/main/kotlin/app/termora/plugins}/serial/SerialProtocolHostPanelExtension.kt (94%) rename {src/main/kotlin/app/termora/plugin/internal => plugins/serial/src/main/kotlin/app/termora/plugins}/serial/SerialProtocolProvider.kt (94%) rename {src/main/kotlin/app/termora/plugin/internal => plugins/serial/src/main/kotlin/app/termora/plugins}/serial/SerialProtocolProviderExtension.kt (90%) rename {src/main/kotlin/app/termora/plugin/internal => plugins/serial/src/main/kotlin/app/termora/plugins}/serial/SerialTerminalTab.kt (79%) rename {src/main/kotlin/app/termora => plugins/serial/src/main/kotlin/app/termora/plugins/serial}/Serials.kt (92%) create mode 100644 plugins/serial/src/main/resources/META-INF/plugin.xml create mode 100644 plugins/serial/src/main/resources/META-INF/pluginIcon.svg create mode 100644 plugins/serial/src/main/resources/META-INF/pluginIcon_dark.svg diff --git a/build.gradle.kts b/build.gradle.kts index 324d17d..da68e35 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -105,7 +105,6 @@ dependencies { api(libs.colorpicker) api(libs.mixpanel) - api(libs.jSerialComm) api(libs.ini4j) api(libs.restart4j) api(libs.exposed.core) diff --git a/plugins/serial/build.gradle.kts b/plugins/serial/build.gradle.kts new file mode 100644 index 0000000..f9b4db1 --- /dev/null +++ b/plugins/serial/build.gradle.kts @@ -0,0 +1,17 @@ +plugins { + alias(libs.plugins.kotlin.jvm) +} + + + +project.version = "0.0.1" + + +dependencies { + testImplementation(kotlin("test")) + compileOnly(project(":")) + implementation("com.fazecast:jSerialComm:2.11.2") +} + +apply(from = "$rootDir/plugins/common.gradle.kts") + diff --git a/src/main/kotlin/app/termora/plugin/internal/serial/SerialHostOptionsPane.kt b/plugins/serial/src/main/kotlin/app/termora/plugins/serial/SerialHostOptionsPane.kt similarity index 99% rename from src/main/kotlin/app/termora/plugin/internal/serial/SerialHostOptionsPane.kt rename to plugins/serial/src/main/kotlin/app/termora/plugins/serial/SerialHostOptionsPane.kt index 4adcf62..bed0769 100644 --- a/src/main/kotlin/app/termora/plugin/internal/serial/SerialHostOptionsPane.kt +++ b/plugins/serial/src/main/kotlin/app/termora/plugins/serial/SerialHostOptionsPane.kt @@ -1,4 +1,4 @@ -package app.termora.plugin.internal.serial +package app.termora.plugins.serial import app.termora.* import app.termora.plugin.internal.BasicGeneralOption diff --git a/src/main/kotlin/app/termora/plugin/internal/serial/SerialInternalPlugin.kt b/plugins/serial/src/main/kotlin/app/termora/plugins/serial/SerialPlugin.kt similarity index 65% rename from src/main/kotlin/app/termora/plugin/internal/serial/SerialInternalPlugin.kt rename to plugins/serial/src/main/kotlin/app/termora/plugins/serial/SerialPlugin.kt index 6b1ef06..e9f9b79 100644 --- a/src/main/kotlin/app/termora/plugin/internal/serial/SerialInternalPlugin.kt +++ b/plugins/serial/src/main/kotlin/app/termora/plugins/serial/SerialPlugin.kt @@ -1,11 +1,18 @@ -package app.termora.plugin.internal.serial +package app.termora.plugins.serial import app.termora.plugin.Extension -import app.termora.plugin.InternalPlugin +import app.termora.plugin.ExtensionSupport +import app.termora.plugin.Plugin import app.termora.protocol.ProtocolHostPanelExtension import app.termora.protocol.ProtocolProviderExtension -internal class SerialInternalPlugin : InternalPlugin() { +internal class SerialPlugin : Plugin { + private val support = ExtensionSupport() + + override fun getAuthor(): String { + return "TermoraDev" + } + init { support.addExtension(ProtocolProviderExtension::class.java) { SerialProtocolProviderExtension.instance } support.addExtension(ProtocolHostPanelExtension::class.java) { SerialProtocolHostPanelExtension.instance } @@ -13,7 +20,7 @@ internal class SerialInternalPlugin : InternalPlugin() { override fun getName(): String { - return "Serial Protocol" + return "Serial Comm" } diff --git a/src/main/kotlin/app/termora/SerialPortPtyConnector.kt b/plugins/serial/src/main/kotlin/app/termora/plugins/serial/SerialPortPtyConnector.kt similarity index 97% rename from src/main/kotlin/app/termora/SerialPortPtyConnector.kt rename to plugins/serial/src/main/kotlin/app/termora/plugins/serial/SerialPortPtyConnector.kt index cf8397c..de9b67c 100644 --- a/src/main/kotlin/app/termora/SerialPortPtyConnector.kt +++ b/plugins/serial/src/main/kotlin/app/termora/plugins/serial/SerialPortPtyConnector.kt @@ -1,4 +1,4 @@ -package app.termora +package app.termora.plugins.serial import app.termora.terminal.PtyConnector import com.fazecast.jSerialComm.SerialPort diff --git a/src/main/kotlin/app/termora/plugin/internal/serial/SerialProtocolHostPanel.kt b/plugins/serial/src/main/kotlin/app/termora/plugins/serial/SerialProtocolHostPanel.kt similarity index 93% rename from src/main/kotlin/app/termora/plugin/internal/serial/SerialProtocolHostPanel.kt rename to plugins/serial/src/main/kotlin/app/termora/plugins/serial/SerialProtocolHostPanel.kt index cb12f5e..c7094ae 100644 --- a/src/main/kotlin/app/termora/plugin/internal/serial/SerialProtocolHostPanel.kt +++ b/plugins/serial/src/main/kotlin/app/termora/plugins/serial/SerialProtocolHostPanel.kt @@ -1,4 +1,4 @@ -package app.termora.plugin.internal.serial +package app.termora.plugins.serial import app.termora.Disposer import app.termora.Host diff --git a/src/main/kotlin/app/termora/plugin/internal/serial/SerialProtocolHostPanelExtension.kt b/plugins/serial/src/main/kotlin/app/termora/plugins/serial/SerialProtocolHostPanelExtension.kt similarity index 94% rename from src/main/kotlin/app/termora/plugin/internal/serial/SerialProtocolHostPanelExtension.kt rename to plugins/serial/src/main/kotlin/app/termora/plugins/serial/SerialProtocolHostPanelExtension.kt index 8b16e2f..d582374 100644 --- a/src/main/kotlin/app/termora/plugin/internal/serial/SerialProtocolHostPanelExtension.kt +++ b/plugins/serial/src/main/kotlin/app/termora/plugins/serial/SerialProtocolHostPanelExtension.kt @@ -1,4 +1,4 @@ -package app.termora.plugin.internal.serial +package app.termora.plugins.serial import app.termora.account.AccountOwner import app.termora.protocol.ProtocolHostPanel diff --git a/src/main/kotlin/app/termora/plugin/internal/serial/SerialProtocolProvider.kt b/plugins/serial/src/main/kotlin/app/termora/plugins/serial/SerialProtocolProvider.kt similarity index 94% rename from src/main/kotlin/app/termora/plugin/internal/serial/SerialProtocolProvider.kt rename to plugins/serial/src/main/kotlin/app/termora/plugins/serial/SerialProtocolProvider.kt index 20f5545..255131b 100644 --- a/src/main/kotlin/app/termora/plugin/internal/serial/SerialProtocolProvider.kt +++ b/plugins/serial/src/main/kotlin/app/termora/plugins/serial/SerialProtocolProvider.kt @@ -1,4 +1,4 @@ -package app.termora.plugin.internal.serial +package app.termora.plugins.serial import app.termora.* import app.termora.actions.DataProvider diff --git a/src/main/kotlin/app/termora/plugin/internal/serial/SerialProtocolProviderExtension.kt b/plugins/serial/src/main/kotlin/app/termora/plugins/serial/SerialProtocolProviderExtension.kt similarity index 90% rename from src/main/kotlin/app/termora/plugin/internal/serial/SerialProtocolProviderExtension.kt rename to plugins/serial/src/main/kotlin/app/termora/plugins/serial/SerialProtocolProviderExtension.kt index 1b90ad3..f157523 100644 --- a/src/main/kotlin/app/termora/plugin/internal/serial/SerialProtocolProviderExtension.kt +++ b/plugins/serial/src/main/kotlin/app/termora/plugins/serial/SerialProtocolProviderExtension.kt @@ -1,4 +1,4 @@ -package app.termora.plugin.internal.serial +package app.termora.plugins.serial import app.termora.protocol.ProtocolProvider import app.termora.protocol.ProtocolProviderExtension diff --git a/src/main/kotlin/app/termora/plugin/internal/serial/SerialTerminalTab.kt b/plugins/serial/src/main/kotlin/app/termora/plugins/serial/SerialTerminalTab.kt similarity index 79% rename from src/main/kotlin/app/termora/plugin/internal/serial/SerialTerminalTab.kt rename to plugins/serial/src/main/kotlin/app/termora/plugins/serial/SerialTerminalTab.kt index 3b318bb..6859698 100644 --- a/src/main/kotlin/app/termora/plugin/internal/serial/SerialTerminalTab.kt +++ b/plugins/serial/src/main/kotlin/app/termora/plugins/serial/SerialTerminalTab.kt @@ -1,6 +1,9 @@ -package app.termora.plugin.internal.serial +package app.termora.plugins.serial -import app.termora.* +import app.termora.Host +import app.termora.Icons +import app.termora.PtyHostTerminalTab +import app.termora.WindowScope import app.termora.terminal.PtyConnector import org.apache.commons.io.Charsets import java.nio.charset.StandardCharsets diff --git a/src/main/kotlin/app/termora/Serials.kt b/plugins/serial/src/main/kotlin/app/termora/plugins/serial/Serials.kt similarity index 92% rename from src/main/kotlin/app/termora/Serials.kt rename to plugins/serial/src/main/kotlin/app/termora/plugins/serial/Serials.kt index f89d683..7dd4284 100644 --- a/src/main/kotlin/app/termora/Serials.kt +++ b/plugins/serial/src/main/kotlin/app/termora/plugins/serial/Serials.kt @@ -1,5 +1,8 @@ -package app.termora +package app.termora.plugins.serial +import app.termora.Host +import app.termora.SerialCommFlowControl +import app.termora.SerialCommParity import com.fazecast.jSerialComm.SerialPort object Serials { diff --git a/plugins/serial/src/main/resources/META-INF/plugin.xml b/plugins/serial/src/main/resources/META-INF/plugin.xml new file mode 100644 index 0000000..fc5670b --- /dev/null +++ b/plugins/serial/src/main/resources/META-INF/plugin.xml @@ -0,0 +1,22 @@ + + + serial + + Serial Comm + + ${projectVersion} + + + + app.termora.plugins.serial.SerialPlugin + + + Supports access to serial ports + 支持访问串口 + 支援訪問串口 + + + TermoraDev + + + diff --git a/plugins/serial/src/main/resources/META-INF/pluginIcon.svg b/plugins/serial/src/main/resources/META-INF/pluginIcon.svg new file mode 100644 index 0000000..602c7b5 --- /dev/null +++ b/plugins/serial/src/main/resources/META-INF/pluginIcon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/plugins/serial/src/main/resources/META-INF/pluginIcon_dark.svg b/plugins/serial/src/main/resources/META-INF/pluginIcon_dark.svg new file mode 100644 index 0000000..c78cf0b --- /dev/null +++ b/plugins/serial/src/main/resources/META-INF/pluginIcon_dark.svg @@ -0,0 +1,5 @@ + + + \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index 7785d4d..4c5c3d2 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -15,3 +15,4 @@ include("plugins:editor") include("plugins:geo") include("plugins:webdav") include("plugins:smb") +include("plugins:serial") diff --git a/src/main/kotlin/app/termora/plugin/PluginManager.kt b/src/main/kotlin/app/termora/plugin/PluginManager.kt index 5d2608a..61190a2 100644 --- a/src/main/kotlin/app/termora/plugin/PluginManager.kt +++ b/src/main/kotlin/app/termora/plugin/PluginManager.kt @@ -8,7 +8,6 @@ import app.termora.plugin.internal.extension.DynamicExtensionPlugin import app.termora.plugin.internal.local.LocalInternalPlugin import app.termora.plugin.internal.plugin.PluginInternalPlugin import app.termora.plugin.internal.rdp.RDPInternalPlugin -import app.termora.plugin.internal.serial.SerialInternalPlugin import app.termora.plugin.internal.sftppty.SFTPPtyInternalPlugin import app.termora.plugin.internal.ssh.SSHInternalPlugin import app.termora.plugin.internal.telnet.TelnetInternalPlugin @@ -118,8 +117,6 @@ internal class PluginManager private constructor() { plugins.add(PluginDescriptor(RDPInternalPlugin(), origin = PluginOrigin.Internal, version = version)) // telnet plugin plugins.add(PluginDescriptor(TelnetInternalPlugin(), origin = PluginOrigin.Internal, version = version)) - // serial plugin - plugins.add(PluginDescriptor(SerialInternalPlugin(), origin = PluginOrigin.Internal, version = version)) // wsl plugin if (SystemUtils.IS_OS_WINDOWS) { plugins.add(PluginDescriptor(WSLInternalPlugin(), origin = PluginOrigin.Internal, version = version)) diff --git a/src/main/kotlin/app/termora/plugin/internal/BasicGeneralOption.kt b/src/main/kotlin/app/termora/plugin/internal/BasicGeneralOption.kt index d4ee32d..ba7be92 100644 --- a/src/main/kotlin/app/termora/plugin/internal/BasicGeneralOption.kt +++ b/src/main/kotlin/app/termora/plugin/internal/BasicGeneralOption.kt @@ -10,7 +10,7 @@ import java.awt.event.ComponentAdapter import java.awt.event.ComponentEvent import javax.swing.* -internal class BasicGeneralOption : JPanel(BorderLayout()), OptionsPane.Option { +class BasicGeneralOption : JPanel(BorderLayout()), OptionsPane.Option { val nameTextField = OutlineTextField(128) val remarkTextArea = FixedLengthTextArea(512) private val formMargin = "7dlu" diff --git a/src/main/kotlin/app/termora/tree/ShowMoreInfoSimpleTreeCellRendererExtension.kt b/src/main/kotlin/app/termora/tree/ShowMoreInfoSimpleTreeCellRendererExtension.kt index 582da3c..ddf89c0 100644 --- a/src/main/kotlin/app/termora/tree/ShowMoreInfoSimpleTreeCellRendererExtension.kt +++ b/src/main/kotlin/app/termora/tree/ShowMoreInfoSimpleTreeCellRendererExtension.kt @@ -3,7 +3,6 @@ package app.termora.tree import app.termora.* import app.termora.plugin.internal.extension.DynamicExtensionHandler import app.termora.plugin.internal.rdp.RDPProtocolProvider -import app.termora.plugin.internal.serial.SerialProtocolProvider import app.termora.plugin.internal.ssh.SSHProtocolProvider import app.termora.plugin.internal.wsl.WSLProtocolProvider import org.apache.commons.lang3.StringUtils @@ -63,8 +62,6 @@ class ShowMoreInfoSimpleTreeCellRendererExtension private constructor() : Simple } else { "${host.username}@${host.host}" } - } else if (host.protocol == SerialProtocolProvider.PROTOCOL) { - text = host.options.serialComm.port } else if (host.protocol == WSLProtocolProvider.PROTOCOL) { text = host.host }