mirror of
https://github.com/Termix-SSH/Termix.git
synced 2026-10-29 22:55:24 +00:00
feat: wire remote-desktop plugin into core and rename i18n keys
Repoints core consumers (dispatcher, collab, session-sharing, tab utils) at the plugin, adds isTabTypeAvailable gating for rdp/vnc/ telnet, widens hostCapability to accept an array, and renames the guacamole i18n namespace to remoteDesktop.
This commit is contained in:
1 parent
c6bcfdb80d
commit
76b2e5739a
41 files changed
+361
-686
No files matched your search
@@ -866,9 +866,9 @@ export function AdminSettingsPanel({
|
||||
async function handleSaveGuacamole() {
|
||||
try {
|
||||
await updateGuacamoleSettings({ enabled: guacEnabled, url: guacUrl });
|
||||
toast.success(t("admin.guacamoleSaved"));
|
||||
toast.success(t("admin.remoteDesktopSaved"));
|
||||
} catch {
|
||||
toast.error(t("admin.guacamoleSaveFailed"));
|
||||
toast.error(t("admin.remoteDesktopSaveFailed"));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -879,7 +879,7 @@ export function AdminSettingsPanel({
|
||||
await updateGuacamoleSettings({ enabled: newVal, url: guacUrl });
|
||||
} catch {
|
||||
setGuacEnabled(!newVal);
|
||||
toast.error(t("admin.guacamoleUpdateFailed"));
|
||||
toast.error(t("admin.remoteDesktopUpdateFailed"));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -520,17 +520,17 @@ export function AdminGeneralSettingsSection({
|
||||
|
||||
<div className="flex flex-col gap-2 border-t border-border pt-3 mt-2">
|
||||
<SettingRow
|
||||
label={t("admin.enableGuacamole")}
|
||||
label={t("admin.enableRemoteDesktop")}
|
||||
description={
|
||||
<>
|
||||
{t("admin.enableGuacamoleDesc")}{" "}
|
||||
{t("admin.enableRemoteDesktopDesc")}{" "}
|
||||
<a
|
||||
href="https://docs.termix.site/setup/remote-desktop"
|
||||
target="_blank"
|
||||
rel="noreferrer"
|
||||
className="text-accent-brand hover:underline"
|
||||
>
|
||||
{t("admin.enableGuacamoleDocsLink")}
|
||||
{t("admin.enableRemoteDesktopDocsLink")}
|
||||
</a>
|
||||
</>
|
||||
}
|
||||
|
||||
@@ -773,7 +773,7 @@ export function HostEditorGeneralTab({
|
||||
protocols.enableRdp ||
|
||||
protocols.enableVnc ||
|
||||
protocols.enableTelnet
|
||||
? `${t("hosts.connectionOriginDesc")} ${t("hosts.connectionOriginGuacamoleNote")}`
|
||||
? `${t("hosts.connectionOriginDesc")} ${t("hosts.connectionOriginRemoteDesktopNote")}`
|
||||
: t("hosts.connectionOriginDesc")
|
||||
}
|
||||
>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import type { SSHHostData } from "@/types";
|
||||
import type { Host } from "@/types/ui-types";
|
||||
import type { GuacamoleQuickHost } from "@/features/guacamole/GuacamoleApp";
|
||||
import type { GuacamoleQuickHost } from "../../../plugins/remote-desktop/frontend/GuacamoleApp";
|
||||
|
||||
export type QuickConnectProtocol = "ssh" | "rdp" | "vnc";
|
||||
|
||||
|
||||
@@ -493,17 +493,19 @@ export function HostItem({
|
||||
const sshActions = getSshActions(host);
|
||||
const availableActions: TabType[] = [
|
||||
...sshActions.map(({ type }) => type),
|
||||
...(host.enableRdp ? (["rdp"] as const) : []),
|
||||
...(host.enableVnc ? (["vnc"] as const) : []),
|
||||
...(host.enableTelnet ? (["telnet"] as const) : []),
|
||||
...(host.enableRdp && isTabTypeAvailable("rdp") ? (["rdp"] as const) : []),
|
||||
...(host.enableVnc && isTabTypeAvailable("vnc") ? (["vnc"] as const) : []),
|
||||
...(host.enableTelnet && isTabTypeAvailable("telnet")
|
||||
? (["telnet"] as const)
|
||||
: []),
|
||||
];
|
||||
const defaultAction: TabType = host.enableSsh
|
||||
? "terminal"
|
||||
: host.enableRdp
|
||||
: host.enableRdp && isTabTypeAvailable("rdp")
|
||||
? "rdp"
|
||||
: host.enableVnc
|
||||
: host.enableVnc && isTabTypeAvailable("vnc")
|
||||
? "vnc"
|
||||
: host.enableTelnet
|
||||
: host.enableTelnet && isTabTypeAvailable("telnet")
|
||||
? "telnet"
|
||||
: "terminal";
|
||||
const openHostTab = (
|
||||
@@ -604,11 +606,13 @@ export function HostItem({
|
||||
),
|
||||
)}
|
||||
{host.enableSsh &&
|
||||
(host.enableRdp || host.enableVnc || host.enableTelnet) &&
|
||||
((host.enableRdp && isTabTypeAvailable("rdp")) ||
|
||||
(host.enableVnc && isTabTypeAvailable("vnc")) ||
|
||||
(host.enableTelnet && isTabTypeAvailable("telnet"))) &&
|
||||
sshActions.length > 0 && (
|
||||
<div className="w-px h-3.5 bg-border/60 mx-0.5 shrink-0" />
|
||||
)}
|
||||
{host.enableRdp && (
|
||||
{host.enableRdp && isTabTypeAvailable("rdp") && (
|
||||
<button
|
||||
title={t("hosts.connectRdp")}
|
||||
onPointerEnter={() => preloadTabSurface("rdp")}
|
||||
@@ -631,7 +635,7 @@ export function HostItem({
|
||||
<MonitorUp className="size-3.5" />
|
||||
</button>
|
||||
)}
|
||||
{host.enableVnc && (
|
||||
{host.enableVnc && isTabTypeAvailable("vnc") && (
|
||||
<button
|
||||
title={t("hosts.connectVnc")}
|
||||
onPointerEnter={() => preloadTabSurface("vnc")}
|
||||
@@ -645,7 +649,7 @@ export function HostItem({
|
||||
<MousePointerClick className="size-3.5" />
|
||||
</button>
|
||||
)}
|
||||
{host.enableTelnet && (
|
||||
{host.enableTelnet && isTabTypeAvailable("telnet") && (
|
||||
<button
|
||||
title={t("hosts.connectTelnet")}
|
||||
onPointerEnter={() => preloadTabSurface("telnet")}
|
||||
@@ -822,7 +826,7 @@ export function HostItem({
|
||||
</DropdownMenuItem>
|
||||
),
|
||||
)}
|
||||
{host.enableRdp && (
|
||||
{host.enableRdp && isTabTypeAvailable("rdp") && (
|
||||
<DropdownMenuItem
|
||||
onClick={(e) => {
|
||||
e.stopPropagation();
|
||||
@@ -833,7 +837,7 @@ export function HostItem({
|
||||
{t("hosts.connectRdp")}
|
||||
</DropdownMenuItem>
|
||||
)}
|
||||
{host.enableVnc && (
|
||||
{host.enableVnc && isTabTypeAvailable("vnc") && (
|
||||
<DropdownMenuItem
|
||||
onClick={(e) => {
|
||||
e.stopPropagation();
|
||||
@@ -844,7 +848,7 @@ export function HostItem({
|
||||
{t("hosts.connectVnc")}
|
||||
</DropdownMenuItem>
|
||||
)}
|
||||
{host.enableTelnet && (
|
||||
{host.enableTelnet && isTabTypeAvailable("telnet") && (
|
||||
<DropdownMenuItem
|
||||
onClick={(e) => {
|
||||
e.stopPropagation();
|
||||
@@ -1055,7 +1059,7 @@ export function HostItem({
|
||||
{t("hosts.copyTmuxMonitorUrlAction")}
|
||||
</DropdownMenuItem>
|
||||
)}
|
||||
{host.enableRdp && (
|
||||
{host.enableRdp && isTabTypeAvailable("rdp") && (
|
||||
<DropdownMenuItem
|
||||
onClick={(e) => {
|
||||
e.stopPropagation();
|
||||
@@ -1069,7 +1073,7 @@ export function HostItem({
|
||||
{t("hosts.copyRdpUrlAction")}
|
||||
</DropdownMenuItem>
|
||||
)}
|
||||
{host.enableVnc && (
|
||||
{host.enableVnc && isTabTypeAvailable("vnc") && (
|
||||
<DropdownMenuItem
|
||||
onClick={(e) => {
|
||||
e.stopPropagation();
|
||||
@@ -1083,7 +1087,7 @@ export function HostItem({
|
||||
{t("hosts.copyVncUrlAction")}
|
||||
</DropdownMenuItem>
|
||||
)}
|
||||
{host.enableTelnet && (
|
||||
{host.enableTelnet && isTabTypeAvailable("telnet") && (
|
||||
<DropdownMenuItem
|
||||
onClick={(e) => {
|
||||
e.stopPropagation();
|
||||
|
||||
Reference in new issue
Block a user