mirror of
https://github.com/Termix-SSH/Termix.git
synced 2026-10-28 06:05:24 +00:00
Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
62ac931468 |
No files matched your search
@@ -146,8 +146,9 @@ jobs:
|
||||
run: npm run build && npx electron-builder --win --x64 --ia32 --publish never
|
||||
|
||||
# The updater only installs the x64 NSIS build; 32-bit installs get a link.
|
||||
# The combined x64+ia32 installer is never uploaded.
|
||||
- name: Fix Windows update files
|
||||
run: node scripts/fix-update-info.cjs --drop ia32 release/latest.yml release/beta.yml release/alpha.yml
|
||||
run: node scripts/fix-update-info.cjs --drop ia32 --drop termix_windows_nsis.exe release/latest.yml release/beta.yml release/alpha.yml
|
||||
|
||||
- name: Upload Windows x64 NSIS Installer
|
||||
uses: actions/upload-artifact@v7
|
||||
|
||||
+7
-1
@@ -20,10 +20,16 @@
|
||||
|
||||
- Regional browser languages like `es-MX`, `pt` or `zh-HK` showed English instead of the closest translation
|
||||
- Counts like "1 keys" or "Moved 1 host(s)" now use the singular
|
||||
- Plugin updates synced to the desktop app failed to start with "Cannot find package"
|
||||
- Plugin updates on the desktop app, synced or installed from the Plugins tab, failed to start with "Cannot find package"
|
||||
- The desktop app showed plugins that only run on the server as not running and out of date
|
||||
- Keep the terminal WebSocket open past nginx's 60s default
|
||||
- Plugin download counts now show in the Plugins tab without waiting for the background check
|
||||
- Clicking into a saved password, key passphrase or sudo password field and saving without typing erased it, which stopped sudo autofill
|
||||
- The desktop app now says when its data is from 2.8 or older and needs 2.9 first, instead of only saying the local server could not start
|
||||
- Client tunnels on the desktop app stopped with "Endpoint SSH connection closed" when a reverse proxy dropped their idle connection
|
||||
- Typing right after opening a host from the sidebar went to the host search instead of the new session
|
||||
- SSH config import failed on files that put a tab or `=` between a keyword and its value
|
||||
- App icons and the favicon have rounded corners again
|
||||
|
||||
## 26.10.0
|
||||
|
||||
|
||||
+10
-10
@@ -41,8 +41,8 @@
|
||||
{
|
||||
"id": "file-manager",
|
||||
"source": "tmxplug",
|
||||
"url": "https://github.com/Termix-SSH/Plugin-File-Manager/releases/download/v1.0.1/file-manager-1.0.1.tmxplug",
|
||||
"sha256": "12416f48f8dbbd1670e86ade779c7b473f27c5b0ae809d60ade507fd465d068b",
|
||||
"url": "https://github.com/Termix-SSH/Plugin-File-Manager/releases/download/v1.0.2/file-manager-1.0.2.tmxplug",
|
||||
"sha256": "4c735f5b795a8c676590a0dc25db1bcc6036ac250b9817a61867cebdc17931c6",
|
||||
"onboarding": {
|
||||
"recommended": true,
|
||||
"consent": false
|
||||
@@ -97,8 +97,8 @@
|
||||
{
|
||||
"id": "remote-desktop",
|
||||
"source": "tmxplug",
|
||||
"url": "https://github.com/Termix-SSH/Plugin-Remote-Desktop/releases/download/v1.0.1/remote-desktop-1.0.1.tmxplug",
|
||||
"sha256": "237b00c88f5cc2e83b48c17d5242ec2ac8b468dd975e4baa09c0b73c54182b20",
|
||||
"url": "https://github.com/Termix-SSH/Plugin-Remote-Desktop/releases/download/v1.0.2/remote-desktop-1.0.2.tmxplug",
|
||||
"sha256": "70823a3f5161f6722fee22a9d5fe274dd47623960bc2188429c39a1c7e3e2b39",
|
||||
"onboarding": {
|
||||
"recommended": true,
|
||||
"consent": false
|
||||
@@ -145,8 +145,8 @@
|
||||
{
|
||||
"id": "ssh-terminal",
|
||||
"source": "tmxplug",
|
||||
"url": "https://github.com/Termix-SSH/Plugin-SSH-Terminal/releases/download/v1.0.1/ssh-terminal-1.0.1.tmxplug",
|
||||
"sha256": "03e8c740a64d424e5197c54f889e8aef46949ff9290fcf4e033f33bf33f1696f",
|
||||
"url": "https://github.com/Termix-SSH/Plugin-SSH-Terminal/releases/download/v1.0.2/ssh-terminal-1.0.2.tmxplug",
|
||||
"sha256": "e65102a8cd6afdaa890095fa698f3f455a1035729b9fdca800a31cc6e5ed760f",
|
||||
"onboarding": {
|
||||
"recommended": true,
|
||||
"consent": false
|
||||
@@ -194,8 +194,8 @@
|
||||
{
|
||||
"id": "tmux-monitor",
|
||||
"source": "tmxplug",
|
||||
"url": "https://github.com/Termix-SSH/Plugin-Tmux-Monitor/releases/download/v1.0.1/tmux-monitor-1.0.1.tmxplug",
|
||||
"sha256": "a34eab840ba768a542db3a92036c1830db34373ab38aff6f7a0de5f83a7af7f9"
|
||||
"url": "https://github.com/Termix-SSH/Plugin-Tmux-Monitor/releases/download/v1.0.2/tmux-monitor-1.0.2.tmxplug",
|
||||
"sha256": "ea41f1f90bdeab6164cfa2a594f359492afa123ed06990afa338be69a9d974c6"
|
||||
},
|
||||
{
|
||||
"id": "totp",
|
||||
@@ -210,8 +210,8 @@
|
||||
{
|
||||
"id": "tunnels",
|
||||
"source": "tmxplug",
|
||||
"url": "https://github.com/Termix-SSH/Plugin-Tunnels/releases/download/v1.0.1/tunnels-1.0.1.tmxplug",
|
||||
"sha256": "a5157fdbd255910df00f2cb53d554379667bf7a5115069537528c6d3fd22767c",
|
||||
"url": "https://github.com/Termix-SSH/Plugin-Tunnels/releases/download/v1.0.2/tunnels-1.0.2.tmxplug",
|
||||
"sha256": "44799c0bdbcc576fb0e1c1ecce96f283d2cc32b44ac5aeeb7253f8ca0b650860",
|
||||
"onboarding": {
|
||||
"recommended": true,
|
||||
"consent": false
|
||||
|
||||
@@ -35,7 +35,13 @@ function parseConflictingPort(stderr) {
|
||||
* stderr. Always returns a failure -- see the note above on why every exit
|
||||
* that reaches this point counts as one.
|
||||
*/
|
||||
// Part of PRE_29_DATABASE_ERROR in src/backend/database/db/upgrade-guard.ts.
|
||||
const OLD_DATABASE_MARKER = "This database is from Termix 2.8 or older";
|
||||
|
||||
function classifyBackendFailure(stderr = "") {
|
||||
if (stderr.includes(OLD_DATABASE_MARKER)) {
|
||||
return { reason: "old-database", port: null };
|
||||
}
|
||||
if (stderr.includes("EADDRINUSE")) {
|
||||
return { reason: "port-in-use", port: parseConflictingPort(stderr) };
|
||||
}
|
||||
|
||||
@@ -1984,6 +1984,16 @@ const C2S_WS_HIGH_WATERMARK = 1024 * 1024;
|
||||
const C2S_WS_LOW_WATERMARK = 256 * 1024;
|
||||
const C2S_STREAM_WRITE_LIMIT = 8 * 1024 * 1024;
|
||||
|
||||
// A proxy in front of the server may drop an idle WebSocket, which stopped
|
||||
// the tunnel. Pings count as traffic.
|
||||
function keepC2SSocketAlive(ws) {
|
||||
const timer = setInterval(() => {
|
||||
if (ws.readyState === WebSocket.OPEN) ws.ping();
|
||||
}, 25_000);
|
||||
timer.unref?.();
|
||||
ws.once("close", () => clearInterval(timer));
|
||||
}
|
||||
|
||||
// C2S (client-to-server) tunnels relay through the server this desktop is
|
||||
// linked to, not the embedded backend.
|
||||
function getC2SRemoteBaseUrl() {
|
||||
@@ -2252,6 +2262,7 @@ async function openC2SRelay(
|
||||
getWebSocketOptions(relayUrl, { headers }),
|
||||
);
|
||||
attachC2SAuth(ws, tunnel.name || getC2STunnelName(tunnel));
|
||||
keepC2SSocketAlive(ws);
|
||||
const pendingChunks = [];
|
||||
let ready = false;
|
||||
let closed = false;
|
||||
@@ -2359,6 +2370,7 @@ async function testC2SRelay(
|
||||
getWebSocketOptions(relayUrl, { headers }),
|
||||
);
|
||||
attachC2SAuth(ws, tunnel.name || getC2STunnelName(tunnel));
|
||||
keepC2SSocketAlive(ws);
|
||||
|
||||
if (runtime) runtime.authSocket = ws;
|
||||
return new Promise((resolve) => {
|
||||
@@ -2669,6 +2681,7 @@ async function startC2SRemoteTunnel(tunnel, index = 0, authToken) {
|
||||
getWebSocketOptions(relayUrl, { headers }),
|
||||
);
|
||||
attachC2SAuth(ws, tunnel.name || getC2STunnelName(tunnel));
|
||||
keepC2SSocketAlive(ws);
|
||||
const sockets = new Map();
|
||||
let closed = false;
|
||||
|
||||
|
||||
Generated
+2
-2
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "termix",
|
||||
"version": "26.10.0",
|
||||
"version": "26.10.1",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "termix",
|
||||
"version": "26.10.0",
|
||||
"version": "26.10.1",
|
||||
"hasInstallScript": true,
|
||||
"workspaces": [
|
||||
"packages/*"
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@
|
||||
"workspaces": [
|
||||
"packages/*"
|
||||
],
|
||||
"version": "26.10.0",
|
||||
"version": "26.10.1",
|
||||
"description": "Self-hosted, plugin-based server management.",
|
||||
"author": "Karmaa",
|
||||
"main": "electron/main.cjs",
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import { createRequire } from "node:module";
|
||||
import { describe, expect, it } from "vitest";
|
||||
import { PRE_29_DATABASE_ERROR } from "../src/backend/database/db/upgrade-guard.js";
|
||||
|
||||
const require = createRequire(import.meta.url);
|
||||
const { classifyBackendFailure } =
|
||||
@@ -46,6 +47,16 @@ describe("classifyBackendFailure", () => {
|
||||
});
|
||||
});
|
||||
|
||||
it("identifies a 2.8 database the backend refused to open", () => {
|
||||
const stderr = `[ERROR] [SYSTEM] Failed to initialize backend services [op:startup_failed]
|
||||
Error: ${PRE_29_DATABASE_ERROR}
|
||||
at assertNotPre29Database (upgrade-guard.js:14:11)`;
|
||||
expect(classifyBackendFailure(stderr)).toEqual({
|
||||
reason: "old-database",
|
||||
port: null,
|
||||
});
|
||||
});
|
||||
|
||||
it("reports a crash for any other non-zero exit", () => {
|
||||
expect(classifyBackendFailure("TypeError: boom")).toEqual({
|
||||
reason: "crashed",
|
||||
|
||||
@@ -4,7 +4,8 @@
|
||||
* build, so the desktop updater gets the right download:
|
||||
*
|
||||
* --drop <text> remove entries whose file name contains text
|
||||
* (the ia32 installer, the universal mac zip)
|
||||
* (the ia32 installer, the combined Windows
|
||||
* installer, the universal mac zip)
|
||||
* --rename <old=new> follow an artifact the workflow renamed
|
||||
*
|
||||
* Usage: node scripts/fix-update-info.cjs [--drop x] [--rename a=b] files...
|
||||
@@ -15,9 +16,12 @@ const yaml = require("js-yaml");
|
||||
|
||||
function fixUpdateInfo(info, { drop = [], rename = {} } = {}) {
|
||||
const rewrite = (name) => rename[name] ?? name;
|
||||
const seen = new Set();
|
||||
// electron-builder can list the same file more than once.
|
||||
const files = (info.files ?? [])
|
||||
.filter((file) => !drop.some((text) => file.url.includes(text)))
|
||||
.map((file) => ({ ...file, url: rewrite(file.url) }));
|
||||
.map((file) => ({ ...file, url: rewrite(file.url) }))
|
||||
.filter((file) => !seen.has(file.url) && seen.add(file.url));
|
||||
if (files.length === 0) {
|
||||
throw new Error("no files left in update info");
|
||||
}
|
||||
|
||||
@@ -26,6 +26,26 @@ describe("fixUpdateInfo", () => {
|
||||
expect(fixed.version).toBe("26.10.2");
|
||||
});
|
||||
|
||||
it("drops the combined Windows installer and duplicate entries", () => {
|
||||
const fixed = fixUpdateInfo(
|
||||
{
|
||||
...info,
|
||||
files: [
|
||||
{ url: "termix_windows_nsis.exe", sha512: "c", size: 3 },
|
||||
{ url: "termix_windows_ia32_nsis.exe", sha512: "a", size: 1 },
|
||||
{ url: "termix_windows_x64_nsis.exe", sha512: "b", size: 2 },
|
||||
{ url: "termix_windows_x64_nsis.exe", sha512: "b", size: 2 },
|
||||
],
|
||||
path: "termix_windows_nsis.exe",
|
||||
},
|
||||
{ drop: ["ia32", "termix_windows_nsis.exe"] },
|
||||
);
|
||||
expect(fixed.files).toEqual([
|
||||
{ url: "termix_windows_x64_nsis.exe", sha512: "b", size: 2 },
|
||||
]);
|
||||
expect(fixed.path).toBe("termix_windows_x64_nsis.exe");
|
||||
});
|
||||
|
||||
it("follows renamed artifacts", () => {
|
||||
const fixed = fixUpdateInfo(
|
||||
{
|
||||
|
||||
@@ -91,11 +91,11 @@ export function parseSSHConfig(content: string): SSHConfigHost[] {
|
||||
const line = rawLine.trim();
|
||||
if (!line || line.startsWith("#")) continue;
|
||||
|
||||
const spaceIdx = line.indexOf(" ");
|
||||
if (spaceIdx === -1) continue;
|
||||
const match = /^(\S+?)(?:\s*=\s*|\s+)(.+)$/.exec(line);
|
||||
if (!match) continue;
|
||||
|
||||
const key = line.slice(0, spaceIdx).toLowerCase();
|
||||
const value = line.slice(spaceIdx + 1).trim();
|
||||
const key = match[1].toLowerCase();
|
||||
const value = match[2];
|
||||
|
||||
if (key === "host") {
|
||||
if (current && current.hostname) results.push(current);
|
||||
|
||||
@@ -92,6 +92,13 @@ Host alias-only
|
||||
expect(result).toHaveLength(0);
|
||||
});
|
||||
|
||||
it("accepts tabs and = between keywords and values", () => {
|
||||
const config = "Host\tweb\n\tHostName=10.0.0.5\n\tUser = deploy\n";
|
||||
expect(parseSSHConfig(config)).toEqual([
|
||||
{ name: "web", hostname: "10.0.0.5", user: "deploy" },
|
||||
]);
|
||||
});
|
||||
|
||||
it("defaults port to undefined when not specified", () => {
|
||||
const config = `
|
||||
Host server
|
||||
|
||||
@@ -61,6 +61,7 @@ function setup() {
|
||||
getC2SRelayHeaders: headers,
|
||||
getWebSocketOptions: (_url: string, options: unknown) => options,
|
||||
attachC2SAuth: vi.fn(),
|
||||
keepC2SSocketAlive: vi.fn(),
|
||||
logToFile: vi.fn(),
|
||||
emitC2STunnelStatuses: vi.fn(),
|
||||
checkLocalPortAvailable: async () => ({ available: true }),
|
||||
@@ -177,3 +178,32 @@ describe("client tunnel runtime authentication", () => {
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe("client tunnel socket keepalive", () => {
|
||||
it("pings an open socket until it closes", () => {
|
||||
vi.useFakeTimers();
|
||||
try {
|
||||
const context = vm.createContext({
|
||||
setInterval,
|
||||
clearInterval,
|
||||
WebSocket: { OPEN: 1 },
|
||||
});
|
||||
vm.runInContext(
|
||||
section("function keepC2SSocketAlive(", "// C2S (client-to-server)"),
|
||||
context,
|
||||
);
|
||||
const ws = Object.assign(new EventEmitter(), {
|
||||
readyState: 1,
|
||||
ping: vi.fn(),
|
||||
});
|
||||
context.keepC2SSocketAlive(ws);
|
||||
vi.advanceTimersByTime(50_000);
|
||||
expect(ws.ping).toHaveBeenCalledTimes(2);
|
||||
ws.emit("close");
|
||||
vi.advanceTimersByTime(50_000);
|
||||
expect(ws.ping).toHaveBeenCalledTimes(2);
|
||||
} finally {
|
||||
vi.useRealTimers();
|
||||
}
|
||||
});
|
||||
});
|
||||
@@ -1101,7 +1101,9 @@ export function Auth({ onLogin }: AuthProps) {
|
||||
port: embeddedServerFailure.port,
|
||||
})
|
||||
: t("messages.embeddedServerPortInUseUnknownPort")
|
||||
: t("messages.embeddedServerCrashed");
|
||||
: embeddedServerFailure.reason === "old-database"
|
||||
? t("messages.embeddedServerOldDatabase")
|
||||
: t("messages.embeddedServerCrashed");
|
||||
|
||||
return (
|
||||
<div className="fixed inset-0 flex items-center justify-center bg-background p-6">
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { isElectron } from "@/lib/electron";
|
||||
|
||||
export type EmbeddedServerFailureReason = "port-in-use" | "crashed";
|
||||
export type EmbeddedServerFailureReason =
|
||||
"port-in-use" | "old-database" | "crashed";
|
||||
|
||||
export interface EmbeddedServerFailure {
|
||||
reason: EmbeddedServerFailureReason;
|
||||
@@ -41,9 +42,13 @@ export async function getEmbeddedServerFailure(): Promise<EmbeddedServerFailure
|
||||
// An unrecognized reason from a newer/older main process still means the
|
||||
// backend is down, which is the part the caller acts on -- so it is
|
||||
// reported as the generic crash rather than dropped.
|
||||
return failure.reason === "port-in-use"
|
||||
? { reason: "port-in-use", port: failure.port ?? null }
|
||||
: { reason: "crashed", port: null };
|
||||
if (failure.reason === "port-in-use") {
|
||||
return { reason: "port-in-use", port: failure.port ?? null };
|
||||
}
|
||||
if (failure.reason === "old-database") {
|
||||
return { reason: "old-database", port: null };
|
||||
}
|
||||
return { reason: "crashed", port: null };
|
||||
} catch {
|
||||
// No status channel, or the main process is tearing down. Neither is
|
||||
// evidence that the backend failed, so keep waiting.
|
||||
|
||||
@@ -1127,6 +1127,7 @@
|
||||
"databaseConnectionFailed": "Failed to connect to the database server",
|
||||
"embeddedServerPortInUse": "Port {{port}} is already in use by another program. This is usually a Termix Docker container or a leftover Termix process from a previous session. Close it, then restart Termix.",
|
||||
"embeddedServerPortInUseUnknownPort": "One of the ports Termix needs is already in use by another program. Close whatever is using it, then restart Termix.",
|
||||
"embeddedServerOldDatabase": "Your local data is from Termix 2.8 or older and has to pass through 2.9 first. Install Termix 2.9.1, open it once so it can move your data, then update to this version again.",
|
||||
"embeddedServerCrashed": "The local server stopped unexpectedly. Restart Termix, and check the desktop log if this keeps happening.",
|
||||
"resetCodeSent": "Reset code sent to Docker logs",
|
||||
"codeVerified": "Code verified successfully",
|
||||
|
||||
@@ -1127,6 +1127,7 @@
|
||||
"databaseConnectionFailed": "Kon nie met die databasisbediener verbind nie",
|
||||
"embeddedServerPortInUse": "Poort {{port}} word reeds deur 'n ander program gebruik. Dit is gewoonlik 'n Termix Docker-houer of 'n oorblywende Termix-proses van 'n vorige sessie. Maak dit toe en herbegin dan Termix.",
|
||||
"embeddedServerPortInUseUnknownPort": "Een van die poorte wat Termix benodig, word reeds deur 'n ander program gebruik. Maak wat dit gebruik toe en herbegin dan Termix.",
|
||||
"embeddedServerOldDatabase": "U plaaslike data is van Termix 2.8 of ouer en moet eers deur 2.9 gaan. Installeer Termix 2.9.1, open dit een keer sodat dit u data kan verskuif, en dateer dan weer na hierdie weergawe op.",
|
||||
"embeddedServerCrashed": "Die plaaslike bediener het onverwags gestop. Herbegin Termix en kyk na die skryfstoeljoernaal as dit voortduur.",
|
||||
"resetCodeSent": "Herstelkode na Docker-logs gestuur",
|
||||
"codeVerified": "Kode suksesvol verifieer",
|
||||
|
||||
@@ -1183,6 +1183,7 @@
|
||||
"databaseConnectionFailed": "فشل في الاتصال بخادم قاعدة البيانات",
|
||||
"embeddedServerPortInUse": "المنفذ {{port}} مستخدم بالفعل بواسطة برنامج آخر. عادةً ما يكون هذا حاوية Docker لـ Termix أو عملية متبقية من Termix من جلسة سابقة. أغلقها، ثم أعد تشغيل Termix.",
|
||||
"embeddedServerPortInUseUnknownPort": "أحد المنافذ التي يحتاجها Termix مستخدم بالفعل بواسطة برنامج آخر. أغلق ما يستخدمه، ثم أعد تشغيل Termix.",
|
||||
"embeddedServerOldDatabase": "بياناتك المحلية من إصدار Termix 2.8 أو أقدم، ويجب أولاً تحديثها عبر الإصدار 2.9. قم بتثبيت Termix 2.9.1، وافتحه مرة واحدة للسماح بنقل بياناتك، ثم قم بالتحديث إلى هذا الإصدار مرة أخرى.",
|
||||
"embeddedServerCrashed": "توقف الخادم المحلي بشكل غير متوقع. أعد تشغيل Termix، وتحقق من سجل سطح المكتب إذا استمر هذا الأمر.",
|
||||
"resetCodeSent": "تم إرسال رمز إعادة التعيين إلى سجلات Docker",
|
||||
"codeVerified": "تم التحقق من الرمز بنجاح",
|
||||
|
||||
@@ -1127,6 +1127,7 @@
|
||||
"databaseConnectionFailed": "Неуспешно свързване със сървъра на базата данни",
|
||||
"embeddedServerPortInUse": "Порт {{port}} вече се използва от друга програма. Обикновено това е Termix Docker контейнер или остатъчен Termix процес от предишна сесия. Затворете го и рестартирайте Termix.",
|
||||
"embeddedServerPortInUseUnknownPort": "Един от портовете, нужни на Termix, вече се използва от друга програма. Затворете програмата, която го използва, и рестартирайте Termix.",
|
||||
"embeddedServerOldDatabase": "Вашите локални данни са от Termix 2.8 или по-стара версия и трябва първо да преминат през версия 2.9. Инсталирайте Termix 2.9.1, отворете го веднъж, за да може да прехвърли данните ви, след което актуализирайте отново до тази версия.",
|
||||
"embeddedServerCrashed": "Локалният сървър спря неочаквано. Рестартирайте Termix и проверете дневника на работния плот, ако това продължава да се случва.",
|
||||
"resetCodeSent": "Кодът за нулиране е изпратен в Docker логовете",
|
||||
"codeVerified": "Кодът е проверен успешно",
|
||||
|
||||
@@ -1127,6 +1127,7 @@
|
||||
"databaseConnectionFailed": "ডেটাবেস সার্ভারে সংযোগ করতে ব্যর্থ হয়েছে",
|
||||
"embeddedServerPortInUse": "{{port}} পোর্টটি ইতিমধ্যে অন্য একটি প্রোগ্রাম দ্বারা ব্যবহৃত হচ্ছে। এটি সাধারণত একটি Termix Docker কন্টেইনার বা আগের সেশনের একটি অবশিষ্ট Termix প্রক্রিয়া হয়। এটি বন্ধ করুন, তারপর Termix পুনরায় চালু করুন।",
|
||||
"embeddedServerPortInUseUnknownPort": "Termix-এর প্রয়োজনীয় পোর্টগুলোর একটি ইতিমধ্যে অন্য একটি প্রোগ্রাম দ্বারা ব্যবহৃত হচ্ছে। যা তা ব্যবহার করছে তা বন্ধ করুন, তারপর Termix পুনরায় চালু করুন।",
|
||||
"embeddedServerOldDatabase": "আপনার স্থানীয় ডেটাটি Termix 2.8 বা তার পূর্ববর্তী সংস্করণের এবং এটি প্রথমে 2.9 সংস্করণের মধ্য দিয়ে যেতে হবে। Termix 2.9.1 ইনস্টল করুন, এটি একবার ওপেন করুন যাতে এটি আপনার ডেটা স্থানান্তর করতে পারে, তারপর আবার এই সংস্করণে আপডেট করুন।",
|
||||
"embeddedServerCrashed": "স্থানীয় সার্ভার অপ্রত্যাশিতভাবে বন্ধ হয়ে গেছে। Termix পুনরায় চালু করুন এবং যদি এটি বারবার ঘটে তবে ডেস্কটপ লগ পরীক্ষা করুন।",
|
||||
"resetCodeSent": "রিসেট কোড Docker লগে পাঠানো হয়েছে",
|
||||
"codeVerified": "কোড সফলভাবে যাচাইকৃত হয়েছে",
|
||||
|
||||
@@ -1141,6 +1141,7 @@
|
||||
"databaseConnectionFailed": "No s'ha pogut connectar al servidor de bases de dades",
|
||||
"embeddedServerPortInUse": "El port {{port}} ja està en ús per un altre programa. Normalment és un contenidor Docker de Termix o un procés de Termix d'una sessió anterior. Tanca'l i reinicia Termix.",
|
||||
"embeddedServerPortInUseUnknownPort": "Un dels ports que necessita Termix ja està en ús per un altre programa. Tanca el que l'està utilitzant i reinicia Termix.",
|
||||
"embeddedServerOldDatabase": "Les dades locals són de Termix 2.8 o anterior i han de passar primer per la versió 2.9. Instal·la Termix 2.9.1, obre-la un cop perquè pugui moure les dades i, a continuació, actualitza a aquesta versió.",
|
||||
"embeddedServerCrashed": "El servidor local s'ha aturat inesperadament. Reinicia Termix i consulta el registre d'escriptori si el problema persisteix.",
|
||||
"resetCodeSent": "Codi de restabliment enviat als registres de Docker",
|
||||
"codeVerified": "Codi verificat correctament",
|
||||
|
||||
@@ -1155,6 +1155,7 @@
|
||||
"databaseConnectionFailed": "Nepodařilo se připojit k databázovému serveru",
|
||||
"embeddedServerPortInUse": "Port {{port}} je již používán jiným programem. Obvykle se jedná o Docker kontejner Termix nebo zbytkový proces Termix z předchozí relace. Zavřete jej a poté restartujte Termix.",
|
||||
"embeddedServerPortInUseUnknownPort": "Jeden z portů, které Termix potřebuje, je již používán jiným programem. Zavřete aplikaci, která jej používá, a poté restartujte Termix.",
|
||||
"embeddedServerOldDatabase": "Vaše místní data pocházejí z Termix 2.8 nebo starší verze a musí být nejprve převedena verzí 2.9. Nainstalujte Termix 2.9.1, otevřete jej jednou, aby mohl přesunout vaše data, a poté aktualizujte znovu na tuto verzi.",
|
||||
"embeddedServerCrashed": "Místní server neočekávaně přestal běžet. Restartujte Termix a pokud se problém opakuje, zkontrolujte protokol desktopu.",
|
||||
"resetCodeSent": "Resetovací kód byl odeslán do logů Dockeru",
|
||||
"codeVerified": "Kód byl úspěšně ověřen",
|
||||
|
||||
@@ -1127,6 +1127,7 @@
|
||||
"databaseConnectionFailed": "Kunne ikke oprette forbindelse til databasens server",
|
||||
"embeddedServerPortInUse": "Port {{port}} er allerede i brug af et andet program. Dette er typisk en Termix Docker-container eller en efterladt Termix-proces fra en tidligere session. Luk den, og genstart derefter Termix.",
|
||||
"embeddedServerPortInUseUnknownPort": "En af de porte, som Termix har brug for, er allerede i brug af et andet program. Luk det, der bruger den, og genstart derefter Termix.",
|
||||
"embeddedServerOldDatabase": "Dine lokale data stammer fra Termix 2.8 eller ældre og skal først migreres gennem version 2.9. Installer Termix 2.9.1, åbn den én gang, så den kan flytte dine data, og opdater derefter til denne version igen.",
|
||||
"embeddedServerCrashed": "Den lokale server stoppede uventet. Genstart Termix, og tjek skrivebordsloggen, hvis dette fortsætter.",
|
||||
"resetCodeSent": "Nulstillingskode sendt til Docker-logs",
|
||||
"codeVerified": "Kode verificeret med succes",
|
||||
|
||||
@@ -1127,6 +1127,7 @@
|
||||
"databaseConnectionFailed": "Verbindung zum Datenbankserver fehlgeschlagen",
|
||||
"embeddedServerPortInUse": "Der Port {{port}} wird bereits von einem anderen Programm verwendet. Dies ist in der Regel ein Termix-Docker-Container oder ein verbliebener Termix-Prozess aus einer früheren Sitzung. Schließen Sie dieses Programm und starten Sie Termix neu.",
|
||||
"embeddedServerPortInUseUnknownPort": "Einer der von Termix benötigten Ports wird bereits von einem anderen Programm verwendet. Schließen Sie das entsprechende Programm und starten Sie Termix neu.",
|
||||
"embeddedServerOldDatabase": "Ihre lokalen Daten stammen von Termix 2.8 oder älter und müssen zuerst durch Version 2.9 migriert werden. Installieren Sie Termix 2.9.1, öffnen Sie es einmal, damit Ihre Daten verschoben werden können, und aktualisieren Sie anschließend erneut auf diese Version.",
|
||||
"embeddedServerCrashed": "Der lokale Server wurde unerwartet beendet. Starten Sie Termix neu und prüfen Sie das Desktop-Protokoll, falls dies weiterhin auftritt.",
|
||||
"resetCodeSent": "Reset-Code an Docker-Logs gesendet",
|
||||
"codeVerified": "Code erfolgreich verifiziert",
|
||||
|
||||
@@ -1127,6 +1127,7 @@
|
||||
"databaseConnectionFailed": "Αποτυχία σύνδεσης με τον διακομιστή βάσης δεδομένων",
|
||||
"embeddedServerPortInUse": "Η θύρα {{port}} χρησιμοποιείται ήδη από ένα άλλο πρόγραμμα. Συνήθως πρόκειται για ένα Docker container του Termix ή μια διαδικασία του Termix από προηγούμενη συνεδρία. Κλείστε το και επανεκκινήστε το Termix.",
|
||||
"embeddedServerPortInUseUnknownPort": "Μία από τις θύρες που χρειάζεται το Termix χρησιμοποιείται ήδη από ένα άλλο πρόγραμμα. Κλείστε ό,τι τη χρησιμοποιεί και επανεκκινήστε το Termix.",
|
||||
"embeddedServerOldDatabase": "Τα τοπικά σας δεδομένα προέρχονται από την έκδοση Termix 2.8 ή παλαιότερη και πρέπει πρώτα να περάσουν από την έκδοση 2.9. Εγκαταστήστε την Termix 2.9.1, ανοίξτε την μία φορά ώστε να μετακινηθούν τα δεδομένα σας και στη συνέχεια ενημερώστε ξανά σε αυτή την έκδοση.",
|
||||
"embeddedServerCrashed": "Ο τοπικός διακομιστής σταμάτησε απροσδόκητα. Επανεκκινήστε το Termix και ελέγξτε το αρχείο καταγραφής της επιφάνειας εργασίας αν αυτό συνεχίζεται.",
|
||||
"resetCodeSent": "Ο κωδικός επαναφοράς στάλθηκε στα αρχεία καταγραφής του Docker",
|
||||
"codeVerified": "Ο κωδικός επαληθεύτηκε επιτυχώς",
|
||||
|
||||
@@ -1141,6 +1141,7 @@
|
||||
"databaseConnectionFailed": "Error al conectarse al servidor de base de datos",
|
||||
"embeddedServerPortInUse": "El puerto {{port}} ya está en uso por otro programa. Por lo general, se trata de un contenedor Docker de Termix o de un proceso residual de Termix de una sesión anterior. Ciérrelo y reinicie Termix.",
|
||||
"embeddedServerPortInUseUnknownPort": "Uno de los puertos que necesita Termix ya está en uso por otro programa. Cierre lo que lo esté usando y reinicie Termix.",
|
||||
"embeddedServerOldDatabase": "Tus datos locales son de Termix 2.8 o una versión anterior y deben pasar primero por la versión 2.9. Instala Termix 2.9.1, ábrelo una vez para que pueda migrar tus datos y, a continuación, actualiza a esta versión.",
|
||||
"embeddedServerCrashed": "El servidor local se detuvo de forma inesperada. Reinicie Termix y consulte el registro del escritorio si el problema persiste.",
|
||||
"resetCodeSent": "Código de restablecimiento enviado a los registros de Docker",
|
||||
"codeVerified": "Código verificado correctamente",
|
||||
|
||||
@@ -1127,6 +1127,7 @@
|
||||
"databaseConnectionFailed": "Andmebaasi serveriga ühendumine ebaõnnestus",
|
||||
"embeddedServerPortInUse": "Porti {{port}} kasutab juba teine programm. Tavaliselt on tegemist Termixi Docker-i konteineriga või eelmisest seansist allesjäänud Termixi protsessiga. Sulge see ja käivita Termix uuesti.",
|
||||
"embeddedServerPortInUseUnknownPort": "Üht Termixi jaoks vajalikust portidest kasutab juba teine programm. Sulge see programm ja käivita Termix uuesti.",
|
||||
"embeddedServerOldDatabase": "Teie kohalikud andmed pärinevad Termixi versioonist 2.8 või vanemast ja tuleb esmalt läbida versioon 2.9. Paigaldage Termix 2.9.1, avage see üks kord, et andmed saaksid ümber paigutada, ja uuendage seejärel uuesti sellele versioonile.",
|
||||
"embeddedServerCrashed": "Lokaalne server peatus ootamatult. Käivita Termix uuesti ja kui probleem püsib, vaata töölaua logifaili.",
|
||||
"resetCodeSent": "Lähtestuskood saadetud Docker-i logidesse",
|
||||
"codeVerified": "Kood edukalt kinnitatud",
|
||||
|
||||
@@ -1127,6 +1127,7 @@
|
||||
"databaseConnectionFailed": "Yhteys tietokantapalvelimeen epäonnistui",
|
||||
"embeddedServerPortInUse": "Porttia {{port}} käyttää jo toinen ohjelma. Kyseessä on yleensä Termixin Docker-kontti tai edellisestä istunnosta jäänyt Termix-prosessi. Sulje se ja käynnistä Termix uudelleen.",
|
||||
"embeddedServerPortInUseUnknownPort": "Termixin tarvitsema portti on jo toisen ohjelman käytössä. Sulje porttia käyttävä ohjelma ja käynnistä Termix uudelleen.",
|
||||
"embeddedServerOldDatabase": "Paikalliset tietosi ovat peräisin Termix 2.8 tai vanhemmasta versiosta, ja niiden on käyty ensin versiota 2.9. Asenna Termix 2.9.1, avaa se kerran, jotta se voi siirtää tietosi, ja päivitä sitten uudelleen tähän versioon.",
|
||||
"embeddedServerCrashed": "Paikallinen palvelin pysähtyi odottamatta. Käynnistä Termix uudelleen ja tarkista työpöytäloki, jos ongelma toistuu.",
|
||||
"resetCodeSent": "Palautuskoodi lähetetty Docker-lokeihin",
|
||||
"codeVerified": "Koodi vahvistettu onnistuneesti",
|
||||
|
||||
@@ -1141,6 +1141,7 @@
|
||||
"databaseConnectionFailed": "Échec de la connexion au serveur de base de données",
|
||||
"embeddedServerPortInUse": "Le port {{port}} est déjà utilisé par un autre programme. Il s'agit généralement d'un conteneur Docker Termix ou d'un processus Termix résidant d'une session précédente. Fermez-le, puis redémarrez Termix.",
|
||||
"embeddedServerPortInUseUnknownPort": "L'un des ports requis par Termix est déjà utilisé par un autre programme. Fermez l'application qui l'utilise, puis redémarrez Termix.",
|
||||
"embeddedServerOldDatabase": "Vos données locales proviennent de Termix 2.8 ou d'une version antérieure et doivent d'abord être migrées vers la version 2.9. Installez Termix 2.9.1, ouvrez-le une fois pour permettre la migration de vos données, puis mettez à jour vers cette version.",
|
||||
"embeddedServerCrashed": "Le serveur local s'est arrêté de manière inattendue. Redémarrez Termix et consultez le journal du bureau si le problème persiste.",
|
||||
"resetCodeSent": "Code de réinitialisation envoyé aux journaux Docker",
|
||||
"codeVerified": "Code vérifié avec succès",
|
||||
|
||||
@@ -1141,6 +1141,7 @@
|
||||
"databaseConnectionFailed": "החיבור לשרת המסד נתונים נכשל",
|
||||
"embeddedServerPortInUse": "הפורט {{port}} כבר בשימוש על ידי תוכנית אחרת. לרוב מדובר במיכל Docker של Termix או בתהליך Termix שנותר מהפעלה קודמת. סגור אותו, ואז הפעל מחדש את Termix.",
|
||||
"embeddedServerPortInUseUnknownPort": "אחד מהפורטים ש-Termix זקוק להם כבר בשימוש על ידי תוכנית אחרת. סגור את מה שמשתמש בו, ואז הפעל מחדש את Termix.",
|
||||
"embeddedServerOldDatabase": "הנתונים המקומיים שלך הם מ-Termix 2.8 או קודם יותר, ועליהם לעבור דרך גרסה 2.9 תחילה. התקן את Termix 2.9.1, פתח אותו פעם אחת כדי שיוכל להעביר את הנתונים שלך, ואז עדכן שוב לגרסה זו.",
|
||||
"embeddedServerCrashed": "השרת המקומי הופסק באופן בלתי צפוי. הפעל מחדש את Termix, ובדוק את יומן השולחן העבודה אם זה ממשיך לקרות.",
|
||||
"resetCodeSent": "קוד איפוס נשלח ליומני Docker",
|
||||
"codeVerified": "הקוד אומת בהצלחה",
|
||||
|
||||
@@ -1127,6 +1127,7 @@
|
||||
"databaseConnectionFailed": "डेटाबेस सर्वर से कनेक्ट करने में विफल",
|
||||
"embeddedServerPortInUse": "पोर्ट {{port}} पहले से ही किसी अन्य प्रोग्राम द्वारा उपयोग में है। यह आमतौर पर Termix Docker कंटेनर या पिछले सत्र से बचा हुआ Termix प्रक्रिया होती है। इसे बंद करें, फिर Termix को पुनः आरंभ करें।",
|
||||
"embeddedServerPortInUseUnknownPort": "Termix को आवश्यक एक पोर्ट पहले से ही किसी अन्य प्रोग्राम द्वारा उपयोग में है। जो भी इसे उपयोग कर रहा है उसे बंद करें, फिर Termix को पुनः आरंभ करें।",
|
||||
"embeddedServerOldDatabase": "आपका स्थानीय डेटा Termix 2.8 या उससे पुरानी संस्करण का है और इसे पहले 2.9 से होकर गुजरना होगा। Termix 2.9.1 इंस्टॉल करें, इसे एक बार खोलें ताकि यह आपके डेटा को स्थानांतरित कर सके, फिर वापस इस संस्करण पर अपडेट करें।",
|
||||
"embeddedServerCrashed": "स्थानीय सर्वर अचानक रुक गया। Termix को पुनः आरंभ करें, और यदि यह बार-बार होता है तो डेस्कटॉप लॉग की जांच करें।",
|
||||
"resetCodeSent": "रीसेट कोड Docker लॉग में भेजा गया",
|
||||
"codeVerified": "कोड सफलतापूर्वक सत्यापित",
|
||||
|
||||
@@ -1141,6 +1141,7 @@
|
||||
"databaseConnectionFailed": "Povezivanje s poslužiteljem baze podataka nije uspjelo",
|
||||
"embeddedServerPortInUse": "Port {{port}} već koristi drugi program. To je obično Termix Docker kontejner ili preostali Termix proces iz prethodne sesije. Zatvorite ga, a zatim ponovno pokrenite Termix.",
|
||||
"embeddedServerPortInUseUnknownPort": "Jedan od portova koji Termixu trebaju već koristi drugi program. Zatvorite program koji ga koristi, a zatim ponovno pokrenite Termix.",
|
||||
"embeddedServerOldDatabase": "Vaši lokalni podaci potječu iz Termixa 2.8 ili starije verzije i moraju prvo proći kroz verziju 2.9. Instalirajte Termix 2.9.1, otvorite ga jednom kako bi mogao premjestiti vaše podatke, a zatim ponovno ažurirajte na ovu verziju.",
|
||||
"embeddedServerCrashed": "Lokalni poslužitelj je neočekivano prestao raditi. Ponovno pokrenite Termix i provjerite dnevnik radne površine ako se to ponavlja.",
|
||||
"resetCodeSent": "Kod za resetiranje poslan u Docker dnevnike",
|
||||
"codeVerified": "Kod uspješno potvrđen",
|
||||
|
||||
@@ -1127,6 +1127,7 @@
|
||||
"databaseConnectionFailed": "Nem sikerült csatlakozni az adatbázis-szervert",
|
||||
"embeddedServerPortInUse": "A {{port}} portot már egy másik program használja. Ez általában egy Termix Docker-konténer vagy egy előző munkamenetből maradt Termix-folyamat. Zárja be, majd indítsa újra a Termixet.",
|
||||
"embeddedServerPortInUseUnknownPort": "A Termix által szükséges portok egyikét már egy másik program használja. Zárja be azt, ami használja, majd indítsa újra a Termixet.",
|
||||
"embeddedServerOldDatabase": "A helyi adatai a Termix 2.8 vagy régebbi verzióból származnak, és először át kell futniuk a 2.9-es verzió migrációján. Telepítse a Termix 2.9.1 verzióját, nyissa meg egyszer, hogy az adatok átkerüljenek, majd frissítsen újra erre a verzióra.",
|
||||
"embeddedServerCrashed": "A helyi szerver váratlanul leállt. Indítsa újra a Termixet, és ellenőrizze az asztali naplót, ha ez továbbra is előfordul.",
|
||||
"resetCodeSent": "A visszaállítási kód elküldve a Docker naplókba",
|
||||
"codeVerified": "A kód sikeresen ellenőrizve",
|
||||
|
||||
@@ -1113,6 +1113,7 @@
|
||||
"databaseConnectionFailed": "Gagal terhubung ke server database",
|
||||
"embeddedServerPortInUse": "Port {{port}} sudah digunakan oleh program lain. Biasanya ini adalah kontainer Docker Termix atau proses Termix yang tersisa dari sesi sebelumnya. Tutup program tersebut, lalu mulai ulang Termix.",
|
||||
"embeddedServerPortInUseUnknownPort": "Salah satu port yang dibutuhkan Termix sudah digunakan oleh program lain. Tutup program yang menggunakannya, lalu mulai ulang Termix.",
|
||||
"embeddedServerOldDatabase": "Data lokal Anda berasal dari Termix 2.8 atau lebih lama dan harus diproses melalui versi 2.9 terlebih dahulu. Instal Termix 2.9.1, buka sekali agar data Anda dapat dipindahkan, lalu perbarui ke versi ini lagi.",
|
||||
"embeddedServerCrashed": "Server lokal berhenti secara tidak terduga. Mulai ulang Termix, dan periksa log desktop jika masalah ini terus terjadi.",
|
||||
"resetCodeSent": "Kode reset dikirim ke log Docker",
|
||||
"codeVerified": "Kode berhasil diverifikasi",
|
||||
|
||||
@@ -1141,6 +1141,7 @@
|
||||
"databaseConnectionFailed": "Impossibile connettersi al server del database",
|
||||
"embeddedServerPortInUse": "La porta {{port}} è già in uso da un altro programma. Di solito si tratta di un container Docker di Termix o di un processo residuo di Termix da una sessione precedente. Chiudilo, quindi riavvia Termix.",
|
||||
"embeddedServerPortInUseUnknownPort": "Una delle porte necessarie a Termix è già in uso da un altro programma. Chiudi il programma che la sta utilizzando, quindi riavvia Termix.",
|
||||
"embeddedServerOldDatabase": "I tuoi dati locali provengono da Termix 2.8 o versioni precedenti e devono essere migrati tramite la versione 2.9. Installa Termix 2.9.1, aprilo una volta per consentire la migrazione dei dati, quindi aggiorna nuovamente a questa versione.",
|
||||
"embeddedServerCrashed": "Il server locale si è arrestato inaspettatamente. Riavvia Termix e controlla il log del desktop se il problema persiste.",
|
||||
"resetCodeSent": "Codice di reset inviato ai log di Docker",
|
||||
"codeVerified": "Codice verificato con successo",
|
||||
|
||||
@@ -1113,6 +1113,7 @@
|
||||
"databaseConnectionFailed": "データベースサーバーへの接続に失敗しました",
|
||||
"embeddedServerPortInUse": "ポート {{port}} はすでに別のプログラムで使用されています。これは通常、TermixのDockerコンテナや、以前のセッションから残ったTermixプロセスです。それを閉じてから、Termixを再起動してください。",
|
||||
"embeddedServerPortInUseUnknownPort": "Termixが必要とするポートの1つが、すでに別のプログラムで使用されています。それを使用中のものを閉じてから、Termixを再起動してください。",
|
||||
"embeddedServerOldDatabase": "ローカルデータは Termix 2.8 以前のものであり、まず 2.9 を経由する必要があります。Termix 2.9.1 をインストールし、一度起動してデータを移行してから、再度このバージョンにアップデートしてください。",
|
||||
"embeddedServerCrashed": "ローカルサーバーが予期せず停止しました。Termixを再起動し、この問題が繰り返される場合はデスクトップログを確認してください。",
|
||||
"resetCodeSent": "リセットコードをDockerログに送信しました",
|
||||
"codeVerified": "コードの検証に成功しました",
|
||||
|
||||
@@ -1113,6 +1113,7 @@
|
||||
"databaseConnectionFailed": "데이터베이스 서버 연결 실패",
|
||||
"embeddedServerPortInUse": "포트 {{port}}는 이미 다른 프로그램에서 사용 중입니다. 일반적으로 Termix Docker 컨테이너나 이전 세션의 Termix 프로세스가 원인입니다. 해당 프로그램을 닫은 후 Termix를 다시 시작하세요.",
|
||||
"embeddedServerPortInUseUnknownPort": "Termix가 필요로 하는 포트 중 하나가 이미 다른 프로그램에서 사용 중입니다. 해당 포트를 사용하는 프로그램을 닫은 후 Termix를 다시 시작하세요.",
|
||||
"embeddedServerOldDatabase": "로컬 데이터가 Termix 2.8 이하 버전에서 생성된 것으로, 먼저 2.9 버전을 거쳐야 합니다. Termix 2.9.1을 설치하고 한 번 실행하여 데이터를 마이그레이션한 후, 다시 이 버전으로 업데이트하세요.",
|
||||
"embeddedServerCrashed": "로컬 서버가 예기치 않게 중지되었습니다. Termix를 다시 시작하고, 이 문제가 계속 발생하면 데스크톱 로그를 확인하세요.",
|
||||
"resetCodeSent": "리셋 코드가 Docker 로그로 전송되었습니다",
|
||||
"codeVerified": "코드가 성공적으로 확인되었습니다",
|
||||
|
||||
@@ -1155,6 +1155,7 @@
|
||||
"databaseConnectionFailed": "Nepavyko prisijungti prie duomenų bazės serverio",
|
||||
"embeddedServerPortInUse": "Prievadas {{port}} jau naudojamas kitos programos. Dažniausiai tai yra Termix Docker konteineris arba ankstesnės sesijos Termix procesas. Uždarykite jį ir paleiskite Termix iš naujo.",
|
||||
"embeddedServerPortInUseUnknownPort": "Viena iš prievadų, kurių Termix reikia, jau naudojama kitos programos. Uždarykite programą, kurią naudoja, ir paleiskite Termix iš naujo.",
|
||||
"embeddedServerOldDatabase": "Jūsų vietiniai duomenys yra iš Termix 2.8 arba senesnės versijos, todėl pirmiausia juos reikia atnaujinti per 2.9 versiją. Įdiekite Termix 2.9.1, atidarykite ją vieną kartą, kad duomenys būtų perkelti, tada vėl atnaujinkite į šią versiją.",
|
||||
"embeddedServerCrashed": "Vietinis serveris netikėtai sustojo. Paleiskite Termix iš naujo ir, jei tai kartosis, patikrinkite darbalaužio žurnalą.",
|
||||
"resetCodeSent": "Atstatymo kodas išsiųstas į Docker žurnalus",
|
||||
"codeVerified": "Kodas sėkmingai patvirtintas",
|
||||
|
||||
@@ -1141,6 +1141,7 @@
|
||||
"databaseConnectionFailed": "Neizdevās izveidot savienojumu ar datubāzes serveri",
|
||||
"embeddedServerPortInUse": "Ports {{port}} jau tiek izmantots citā programmā. Parasti tas ir Termix Docker konteineris vai iepriekšējās sesijas Termix process. Aizveriet to un restartējiet Termix.",
|
||||
"embeddedServerPortInUseUnknownPort": "Viens no portiem, kurus Termix nepieciešams, jau tiek izmantots citā programmā. Aizveriet to, kas to izmanto, un restartējiet Termix.",
|
||||
"embeddedServerOldDatabase": "Jūsu vietējie dati ir no Termix 2.8 vai vecākas versijas, un tiem vispirms ir jāiziet cauri 2.9 versijai. Instalējiet Termix 2.9.1, atveriet to vienu reizi, lai tas pārvietotu jūsu datus, pēc tam atkal atjauniniet uz šo versiju.",
|
||||
"embeddedServerCrashed": "Vietējais serveris negaidīti apstājās. Restartējiet Termix un, ja tas turpinās notikt, pārbaudiet darbvirsmas žurnālu.",
|
||||
"resetCodeSent": "Atiestatīšanas kods nosūtīts uz Docker žurnāliem",
|
||||
"codeVerified": "Kods veiksmīgi verificēts",
|
||||
|
||||
@@ -1113,6 +1113,7 @@
|
||||
"databaseConnectionFailed": "Gagal menyambung ke pelayan pangkalan data",
|
||||
"embeddedServerPortInUse": "Port {{port}} sudah digunakan oleh program lain. Ini biasanya bekas kontena Docker Termix atau proses Termix yang tinggal dari sesi sebelumnya. Tutupnya, kemudian mulakan semula Termix.",
|
||||
"embeddedServerPortInUseUnknownPort": "Salah satu port yang diperlukan oleh Termix sudah digunakan oleh program lain. Tutup apa sahaja yang menggunakannya, kemudian mulakan semula Termix.",
|
||||
"embeddedServerOldDatabase": "Data tempatan anda adalah dari Termix 2.8 atau lebih lama dan perlu melalui versi 2.9 terlebih dahulu. Pasang Termix 2.9.1, buka sekali supaya ia boleh memindahkan data anda, kemudian kemaskini ke versi ini semula.",
|
||||
"embeddedServerCrashed": "Pelayan tempatan berhenti secara tidak dijangka. Mulakan semula Termix, dan semak log desktop jika ini berlaku berulang kali.",
|
||||
"resetCodeSent": "Kod reset dihantar ke log Docker",
|
||||
"codeVerified": "Kod berjaya disahkan",
|
||||
|
||||
@@ -1127,6 +1127,7 @@
|
||||
"databaseConnectionFailed": "Kan geen verbinding maken met de databaseserver",
|
||||
"embeddedServerPortInUse": "Poort {{port}} wordt al gebruikt door een ander programma. Dit is meestal een Termix Docker-container of een overgebleven Termix-proces van een eerdere sessie. Sluit deze af en start Termix opnieuw op.",
|
||||
"embeddedServerPortInUseUnknownPort": "Een van de poorten die Termix nodig heeft, wordt al gebruikt door een ander programma. Sluit het programma dat deze gebruikt en start Termix opnieuw op.",
|
||||
"embeddedServerOldDatabase": "Je lokale gegevens zijn afkomstig van Termix 2.8 of ouder en moeten eerst door versie 2.9 worden verwerkt. Installeer Termix 2.9.1, open het een keer zodat je gegevens kunnen worden gemigreerd en update daarna opnieuw naar deze versie.",
|
||||
"embeddedServerCrashed": "De lokale server is onverwacht gestopt. Start Termix opnieuw op en controleer het bureaubladlogboek als dit blijft gebeuren.",
|
||||
"resetCodeSent": "Resetcode verzonden naar Docker-logboeken",
|
||||
"codeVerified": "Code succesvol geverifieerd",
|
||||
|
||||
@@ -1127,6 +1127,7 @@
|
||||
"databaseConnectionFailed": "Kunne ikke koble til databasenserveren",
|
||||
"embeddedServerPortInUse": "Port {{port}} er allerede i bruk av et annet program. Dette er vanligvis en Termix Docker-container eller en etterlatt Termix-prosess fra en tidligere økt. Lukk den, og start deretter Termix på nytt.",
|
||||
"embeddedServerPortInUseUnknownPort": "En av portene Termix trenger er allerede i bruk av et annet program. Lukk det som bruker den, og start deretter Termix på nytt.",
|
||||
"embeddedServerOldDatabase": "De lokale dataene dine er fra Termix 2.8 eller eldre og må først oppgraderes gjennom versjon 2.9. Installer Termix 2.9.1, åpne den én gang slik at den kan flytte dataene dine, og oppgrader deretter til denne versjonen igjen.",
|
||||
"embeddedServerCrashed": "Den lokale serveren stoppet uventet. Start Termix på nytt, og sjekk skrivebordsloggen hvis dette fortsetter å skje.",
|
||||
"resetCodeSent": "Tilbakestillingskode sendt til Docker-logger",
|
||||
"codeVerified": "Koden ble verifisert",
|
||||
|
||||
@@ -1155,6 +1155,7 @@
|
||||
"databaseConnectionFailed": "Nie udało się połączyć z serwerem bazy danych",
|
||||
"embeddedServerPortInUse": "Port {{port}} jest już używany przez inny program. Zazwyczaj jest to kontener Docker Termix lub pozostały proces Termix z poprzedniej sesji. Zamknij go, a następnie uruchom Termix ponownie.",
|
||||
"embeddedServerPortInUseUnknownPort": "Jeden z portów wymaganych przez Termix jest już używany przez inny program. Zamknij program, który go używa, a następnie uruchom Termix ponownie.",
|
||||
"embeddedServerOldDatabase": "Twoje lokalne dane pochodzą z Termix 2.8 lub starszej wersji i muszą zostać najpierw zaktualizowane do wersji 2.9. Zainstaluj Termix 2.9.1, otwórz go raz, aby mógł przenieść Twoje dane, a następnie zaktualizuj ponownie do tej wersji.",
|
||||
"embeddedServerCrashed": "Lokalny serwer zatrzymał się nieoczekiwanie. Uruchom Termix ponownie i sprawdź dziennik pulpitu, jeśli problem będzie się powtarzał.",
|
||||
"resetCodeSent": "Kod resetowania wysłany do logów Docker",
|
||||
"codeVerified": "Kod zweryfikowany pomyślnie",
|
||||
|
||||
@@ -1141,6 +1141,7 @@
|
||||
"databaseConnectionFailed": "Falha ao conectar ao servidor de banco de dados",
|
||||
"embeddedServerPortInUse": "A porta {{port}} já está em uso por outro programa. Geralmente, isso é um contêiner Docker do Termix ou um processo residual do Termix de uma sessão anterior. Feche-o e reinicie o Termix.",
|
||||
"embeddedServerPortInUseUnknownPort": "Uma das portas necessárias para o Termix já está em uso por outro programa. Feche o que estiver usando-a e reinicie o Termix.",
|
||||
"embeddedServerOldDatabase": "Seus dados locais são da versão 2.8 ou anterior do Termix e precisam passar pela versão 2.9 primeiro. Instale o Termix 2.9.1, abra-o uma vez para que ele possa migrar seus dados e, em seguida, atualize para esta versão novamente.",
|
||||
"embeddedServerCrashed": "O servidor local parou inesperadamente. Reinicie o Termix e verifique o log da área de trabalho se isso continuar acontecendo.",
|
||||
"resetCodeSent": "Código de redefinição enviado para os logs do Docker",
|
||||
"codeVerified": "Código verificado com sucesso",
|
||||
|
||||
@@ -1141,6 +1141,7 @@
|
||||
"databaseConnectionFailed": "Falha ao conectar ao servidor de base de dados",
|
||||
"embeddedServerPortInUse": "A porta {{port}} já está em uso por outro programa. Isto é geralmente um contentor Docker do Termix ou um processo residual do Termix de uma sessão anterior. Feche-o e reinicie o Termix.",
|
||||
"embeddedServerPortInUseUnknownPort": "Uma das portas necessárias ao Termix já está em uso por outro programa. Feche o que a estiver a usar e reinicie o Termix.",
|
||||
"embeddedServerOldDatabase": "Os seus dados locais são da versão 2.8 ou anterior do Termix e precisam de passar primeiro pela versão 2.9. Instale o Termix 2.9.1, abra-o uma vez para que possa migrar os seus dados e, em seguida, atualize novamente para esta versão.",
|
||||
"embeddedServerCrashed": "O servidor local parou inesperadamente. Reinicie o Termix e verifique o registo do ambiente de trabalho se isto continuar a acontecer.",
|
||||
"resetCodeSent": "Código de redefinição enviado para os registos do Docker",
|
||||
"codeVerified": "Código verificado com sucesso",
|
||||
|
||||
@@ -1141,6 +1141,7 @@
|
||||
"databaseConnectionFailed": "Nu s-a putut conecta la serverul de bază de date",
|
||||
"embeddedServerPortInUse": "Portul {{port}} este deja utilizat de un alt program. De obicei, acesta este un container Docker Termix sau un proces Termix rămas dintr-o sesiune anterioară. Închideți-l, apoi reporniți Termix.",
|
||||
"embeddedServerPortInUseUnknownPort": "Unul dintre porturile de care are nevoie Termix este deja utilizat de un alt program. Închideți aplicația care îl utilizează, apoi reporniți Termix.",
|
||||
"embeddedServerOldDatabase": "Datele locale sunt din Termix 2.8 sau o versiune anterioară și trebuie să treacă mai întâi prin versiunea 2.9. Instalați Termix 2.9.1, deschideți-l o dată pentru a vă muta datele, apoi actualizați din nou la această versiune.",
|
||||
"embeddedServerCrashed": "Serverul local s-a oprit neașteptat. Reporniți Termix și verificați jurnalul desktop dacă problema persistă.",
|
||||
"resetCodeSent": "Codul de resetare a fost trimis în jurnalul Docker",
|
||||
"codeVerified": "Codul a fost verificat cu succes",
|
||||
|
||||
@@ -1155,6 +1155,7 @@
|
||||
"databaseConnectionFailed": "Не удалось подключиться к серверу базы данных",
|
||||
"embeddedServerPortInUse": "Порт {{port}} уже занят другой программой. Обычно это контейнер Termix Docker или процесс Termix от предыдущего сеанса. Закройте его, затем перезапустите Termix.",
|
||||
"embeddedServerPortInUseUnknownPort": "Один из портов, необходимых Termix, уже занят другой программой. Закройте программу, использующую этот порт, затем перезапустите Termix.",
|
||||
"embeddedServerOldDatabase": "Ваши локальные данные относятся к Termix версии 2.8 или более ранней и должны быть сначала обновлены через версию 2.9. Установите Termix 2.9.1, откройте его один раз для миграции данных, а затем обновитесь до текущей версии.",
|
||||
"embeddedServerCrashed": "Локальный сервер неожиданно остановился. Перезапустите Termix и проверьте журнал рабочего стола, если это повторится.",
|
||||
"resetCodeSent": "Код сброса отправлен в логи Docker",
|
||||
"codeVerified": "Код успешно подтвержден",
|
||||
|
||||
@@ -1155,6 +1155,7 @@
|
||||
"databaseConnectionFailed": "Nepodarilo sa pripojiť k databázovému serveru",
|
||||
"embeddedServerPortInUse": "Port {{port}} je už používaný iným programom. Zvyčajne ide o kontajner Termix Docker alebo o zvyškový proces Termix z predchádzajúcej relácie. Zatvorte ho a potom reštartujte Termix.",
|
||||
"embeddedServerPortInUseUnknownPort": "Jeden z portov, ktoré Termix potrebuje, je už používaný iným programom. Zatvorte aplikáciu, ktorá ho používa, a potom reštartujte Termix.",
|
||||
"embeddedServerOldDatabase": "Vaše lokálne údaje pochádzajú z Termix 2.8 alebo staršej verzie a musia prejsť cez verziu 2.9. Nainštalujte Termix 2.9.1, otvorte ho raz, aby mohol presunúť vaše údaje, a potom aktualizujte na túto verziu znova.",
|
||||
"embeddedServerCrashed": "Lokálny server neočakávane zastavil. Reštartujte Termix a ak sa problém opakuje, skontrolujte denník udalostí na ploche.",
|
||||
"resetCodeSent": "Resetovací kód bol odoslaný do logov Dockeru",
|
||||
"codeVerified": "Kód bol úspešne overený",
|
||||
|
||||
@@ -1155,6 +1155,7 @@
|
||||
"databaseConnectionFailed": "Povezava s strežnikom podatkovne zbirke ni uspela",
|
||||
"embeddedServerPortInUse": "Vrata {{port}} že uporablja drug program. To je običajno Docker posode Termix ali preostali proces Termix iz prejšnje seje. Zaprite ga in ponovno zaženite Termix.",
|
||||
"embeddedServerPortInUseUnknownPort": "Eno od vrat, ki jih Termix potrebuje, že uporablja drug program. Zaprite program, ki jih uporablja, in ponovno zaženite Termix.",
|
||||
"embeddedServerOldDatabase": "Vaši lokalni podatki so iz Termix 2.8 ali starejše različice in morajo najprej preiti skozi različico 2.9. Namestite Termix 2.9.1, ga enkrat odprite, da lahko preseli vaše podatke, nato pa posodobite na to različico.",
|
||||
"embeddedServerCrashed": "Lokalni strežnik se je nepričakovano ustavil. Ponovno zaženite Termix in, če se težava ponavlja, preverite dnevnik namizne aplikacije.",
|
||||
"resetCodeSent": "Koda za ponastavitev je poslana v Docker dnevnike",
|
||||
"codeVerified": "Koda je bila uspešno preverjena",
|
||||
|
||||
@@ -1141,6 +1141,7 @@
|
||||
"databaseConnectionFailed": "Неуспешно повезивање са сервером базе података",
|
||||
"embeddedServerPortInUse": "Порт {{port}} је већ у употреби од стране другог програма. Обично је у питању Termix Docker контејнер или преостали Termix процес из претходне сесије. Затворите га, а затим поново покрените Termix.",
|
||||
"embeddedServerPortInUseUnknownPort": "Један од портова који Termix-у треба већ је у употреби од стране другог програма. Затворите оно што га користи, а затим поново покрените Termix.",
|
||||
"embeddedServerOldDatabase": "Ваши локални подаци су из Termix 2.8 или старије верзије и морају прво да прођу кроз верзију 2.9. Инсталирајте Termix 2.9.1, отворите га једном како би пренео ваше податке, а затим ажурирајте на ову верзију.",
|
||||
"embeddedServerCrashed": "Локални сервер је неочекивано заустављен. Поново покрените Termix и проверите дневник десктопа ако се ово настави.",
|
||||
"resetCodeSent": "Код за ресетовање је послат у Docker дневнике",
|
||||
"codeVerified": "Код је успешно верификован",
|
||||
|
||||
@@ -1127,6 +1127,7 @@
|
||||
"databaseConnectionFailed": "Kunde inte ansluta till databasservern",
|
||||
"embeddedServerPortInUse": "Port {{port}} används redan av ett annat program. Detta är oftast en Termix Docker-container eller en kvarvarande Termix-process från en tidigare session. Stäng den och starta om Termix.",
|
||||
"embeddedServerPortInUseUnknownPort": "En av portarna som Termix behöver används redan av ett annat program. Stäng det som använder porten och starta om Termix.",
|
||||
"embeddedServerOldDatabase": "Din lokala data är från Termix 2.8 eller äldre och måste först migreras via version 2.9. Installera Termix 2.9.1, öppna den en gång så att den kan flytta dina data, och uppgradera sedan till denna version igen.",
|
||||
"embeddedServerCrashed": "Den lokala servern stoppade oväntat. Starta om Termix och kontrollera skrivbordsloggen om detta fortsätter att hända.",
|
||||
"resetCodeSent": "Återställningskod skickad till Docker-loggarna",
|
||||
"codeVerified": "Koden verifierades framgångsrikt",
|
||||
|
||||
@@ -1113,6 +1113,7 @@
|
||||
"databaseConnectionFailed": "ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ฐานข้อมูลได้",
|
||||
"embeddedServerPortInUse": "พอร์ต {{port}} ถูกใช้งานโดยโปรแกรมอื่นแล้ว โดยปกติแล้วมักจะเป็นคอนเทนเนอร์ Docker ของ Termix หรือกระบวนการ Termix ที่ค้างอยู่จากเซสชันก่อนหน้า กรุณาปิดโปรแกรมดังกล่าว แล้วรีสตาร์ท Termix",
|
||||
"embeddedServerPortInUseUnknownPort": "พอร์ตที่ Termix ต้องการถูกใช้งานโดยโปรแกรมอื่นแล้ว กรุณาปิดโปรแกรมที่ใช้งานพอร์ตดังกล่าว แล้วรีสตาร์ท Termix",
|
||||
"embeddedServerOldDatabase": "ข้อมูลท้องถิ่นของคุณมาจาก Termix 2.8 หรือเก่ากว่า และต้องผ่านเวอร์ชัน 2.9 ก่อน โปรดติดตั้ง Termix 2.9.1 เปิดใช้งานครั้งหนึ่งเพื่อให้สามารถย้ายข้อมูลของคุณ แล้วอัปเดตเป็นเวอร์ชันนี้อีกครั้ง",
|
||||
"embeddedServerCrashed": "เซิร์ฟเวอร์ท้องถิ่นหยุดทำงานอย่างกะทันหัน กรุณารีสตาร์ท Termix และตรวจสอบบันทึกการทำงานบนเดสก์ท็อปหากปัญหานี้เกิดขึ้นซ้ำ",
|
||||
"resetCodeSent": "ส่งรหัสรีเซ็ตไปยังบันทึกของ Docker แล้ว",
|
||||
"codeVerified": "ตรวจสอบรหัสสำเร็จ",
|
||||
|
||||
@@ -1127,6 +1127,7 @@
|
||||
"databaseConnectionFailed": "Veritabanı sunucusuna bağlanılamadı",
|
||||
"embeddedServerPortInUse": "{{port}} numaralı bağlantı noktası başka bir program tarafından kullanılıyor. Bu genellikle bir Termix Docker kapsayıcısı veya önceki bir oturumdan kalan bir Termix işlemidir. Kapatın ve ardından Termix'i yeniden başlatın.",
|
||||
"embeddedServerPortInUseUnknownPort": "Termix'in ihtiyaç duyduğu bağlantı noktalarından biri başka bir program tarafından kullanılıyor. Kullanan programı kapatın ve ardından Termix'i yeniden başlatın.",
|
||||
"embeddedServerOldDatabase": "Yerel verileriniz Termix 2.8 veya daha eski bir sürümden kalmadır ve önce 2.9 sürümünden geçmelidir. Termix 2.9.1'i yükleyin, verilerinizi taşıyabilmesi için bir kez açın, ardından tekrar bu sürüme güncelleyin.",
|
||||
"embeddedServerCrashed": "Yerel sunucu beklenmedik şekilde durdu. Termix'i yeniden başlatın ve bu durum devam ederse masaüstü günlüklerini kontrol edin.",
|
||||
"resetCodeSent": "Sıfırlama kodu Docker günlüklerine gönderildi",
|
||||
"codeVerified": "Kod başarıyla doğrulandı",
|
||||
|
||||
@@ -1155,6 +1155,7 @@
|
||||
"databaseConnectionFailed": "Не вдалося підключитися до сервера бази даних",
|
||||
"embeddedServerPortInUse": "Порт {{port}} вже використовується іншою програмою. Зазвичай це контейнер Termix Docker або залишковий процес Termix з попередньої сесії. Закрийте його, а потім перезапустіть Termix.",
|
||||
"embeddedServerPortInUseUnknownPort": "Один із портів, необхідних Termix, вже використовується іншою програмою. Закрийте програму, яка його використовує, а потім перезапустіть Termix.",
|
||||
"embeddedServerOldDatabase": "Ваші локальні дані походять з версії Termix 2.8 або старішої, тому спочатку їх потрібно оновити через версію 2.9. Встановіть Termix 2.9.1, відкрийте його один раз, щоб дані мігрували, а потім оновіться до цієї версії.",
|
||||
"embeddedServerCrashed": "Локальний сервер несподівано зупинився. Перезапустіть Termix і перевірте журнал робочого столу, якщо це повторюється.",
|
||||
"resetCodeSent": "Код скидання надіслано до логів Docker",
|
||||
"codeVerified": "Код успішно перевірено",
|
||||
|
||||
@@ -1113,6 +1113,7 @@
|
||||
"databaseConnectionFailed": "Không thể kết nối đến máy chủ cơ sở dữ liệu",
|
||||
"embeddedServerPortInUse": "Cổng {{port}} đang được sử dụng bởi một chương trình khác. Điều này thường là do một container Docker Termix hoặc một tiến trình Termix còn sót lại từ phiên trước. Hãy đóng nó đi, sau đó khởi động lại Termix.",
|
||||
"embeddedServerPortInUseUnknownPort": "Một trong các cổng mà Termix cần đang bị một chương trình khác sử dụng. Hãy đóng chương trình đang sử dụng cổng đó, sau đó khởi động lại Termix.",
|
||||
"embeddedServerOldDatabase": "Dữ liệu cục bộ của bạn từ Termix 2.8 hoặc cũ hơn và cần phải được nâng cấp qua phiên bản 2.9 trước. Hãy cài đặt Termix 2.9.1, mở ứng dụng một lần để nó có thể di chuyển dữ liệu của bạn, sau đó cập nhật lên phiên bản này.",
|
||||
"embeddedServerCrashed": "Máy chủ cục bộ đã dừng hoạt động bất ngờ. Hãy khởi động lại Termix và kiểm tra nhật ký máy tính để bàn nếu tình trạng này tiếp tục xảy ra.",
|
||||
"resetCodeSent": "Mã đặt lại đã được gửi đến nhật ký Docker",
|
||||
"codeVerified": "Xác minh mã thành công",
|
||||
|
||||
@@ -1113,6 +1113,7 @@
|
||||
"databaseConnectionFailed": "无法连接到数据库服务器",
|
||||
"embeddedServerPortInUse": "端口 {{port}} 已被其他程序占用。这通常是 Termix Docker 容器或上一次会话残留的 Termix 进程。请关闭该程序,然后重启 Termix。",
|
||||
"embeddedServerPortInUseUnknownPort": "Termix 所需的一个端口已被其他程序占用。请关闭占用该端口的程序,然后重启 Termix。",
|
||||
"embeddedServerOldDatabase": "您的本地数据来自 Termix 2.8 或更早版本,必须先通过 2.9 版本进行迁移。请安装 Termix 2.9.1,打开一次以完成数据迁移,然后再更新到当前版本。",
|
||||
"embeddedServerCrashed": "本地服务器意外停止。请重启 Termix,如果问题持续出现,请检查桌面日志。",
|
||||
"resetCodeSent": "重置代码已发送至 Docker 日志",
|
||||
"codeVerified": "代码验证成功",
|
||||
|
||||
@@ -1113,6 +1113,7 @@
|
||||
"databaseConnectionFailed": "無法連線至資料庫伺服器",
|
||||
"embeddedServerPortInUse": "連接埠 {{port}} 已被其他程式使用。這通常是 Termix Docker 容器或上次工作階段殘留的 Termix 行程。請關閉該程式,然後重新啟動 Termix。",
|
||||
"embeddedServerPortInUseUnknownPort": "Termix 所需的其中一個連接埠已被其他程式使用。請關閉佔用該連接埠的程式,然後重新啟動 Termix。",
|
||||
"embeddedServerOldDatabase": "您的本機資料來自 Termix 2.8 或更早版本,必須先透過 2.9 版本進行遷移。請安裝 Termix 2.9.1,開啟一次以完成資料遷移,然後再更新至此版本。",
|
||||
"embeddedServerCrashed": "本機伺服器意外停止。請重新啟動 Termix,若問題持續發生,請檢查桌面記錄檔。",
|
||||
"resetCodeSent": "重設碼已傳送至 Docker 記錄檔",
|
||||
"codeVerified": "驗證碼驗證成功",
|
||||
|
||||
@@ -1056,6 +1056,7 @@
|
||||
"messages.databaseConnectionFailed": "1b3aebbdb5fd",
|
||||
"messages.embeddedServerPortInUse": "5bf7c4c579d0",
|
||||
"messages.embeddedServerPortInUseUnknownPort": "1b00931d564b",
|
||||
"messages.embeddedServerOldDatabase": "531a8964b8fe",
|
||||
"messages.embeddedServerCrashed": "c927ebd90f05",
|
||||
"messages.resetCodeSent": "6419f91e7844",
|
||||
"messages.codeVerified": "65a610f29c92",
|
||||
|
||||
@@ -489,10 +489,6 @@ export function CredentialEditorView({
|
||||
? ""
|
||||
: credForm.passphrase
|
||||
}
|
||||
onFocus={() => {
|
||||
if (credForm.passphrase === "existing_key_password")
|
||||
setCredField("passphrase", "");
|
||||
}}
|
||||
onChange={(e) => setCredField("passphrase", e.target.value)}
|
||||
/>
|
||||
</div>
|
||||
|
||||
@@ -1094,10 +1094,6 @@ export function HostEditor({
|
||||
? ""
|
||||
: form.password
|
||||
}
|
||||
onFocus={() => {
|
||||
if (form.password === "existing_password")
|
||||
setField("password", "");
|
||||
}}
|
||||
onChange={(e) => setField("password", e.target.value)}
|
||||
/>
|
||||
<PluginComponent
|
||||
@@ -1211,10 +1207,6 @@ export function HostEditor({
|
||||
? ""
|
||||
: form.keyPassword
|
||||
}
|
||||
onFocus={() => {
|
||||
if (form.keyPassword === "existing_key_password")
|
||||
setField("keyPassword", "");
|
||||
}}
|
||||
onChange={(e) =>
|
||||
setField("keyPassword", e.target.value)
|
||||
}
|
||||
@@ -1236,10 +1228,6 @@ export function HostEditor({
|
||||
? ""
|
||||
: form.password
|
||||
}
|
||||
onFocus={() => {
|
||||
if (form.password === "existing_password")
|
||||
setField("password", "");
|
||||
}}
|
||||
onChange={(e) =>
|
||||
setField("password", e.target.value)
|
||||
}
|
||||
@@ -1377,10 +1365,6 @@ export function HostEditor({
|
||||
? ""
|
||||
: form.password
|
||||
}
|
||||
onFocus={() => {
|
||||
if (form.password === "existing_password")
|
||||
setField("password", "");
|
||||
}}
|
||||
onChange={(e) =>
|
||||
setField("password", e.target.value)
|
||||
}
|
||||
@@ -1506,10 +1490,6 @@ export function HostEditor({
|
||||
? ""
|
||||
: form.sudoPassword
|
||||
}
|
||||
onFocus={() => {
|
||||
if (form.sudoPassword === "existing_sudo_password")
|
||||
setField("sudoPassword", "");
|
||||
}}
|
||||
onChange={(e) =>
|
||||
setField("sudoPassword", e.target.value)
|
||||
}
|
||||
|
||||
@@ -79,7 +79,7 @@ import { useSidebarDragState } from "./hooks/useSidebarDragState";
|
||||
|
||||
export function SidebarTree({
|
||||
children,
|
||||
onOpenTab,
|
||||
onOpenTab: openTab,
|
||||
onEditHost,
|
||||
onShareHost,
|
||||
query: externalQuery = "",
|
||||
@@ -125,6 +125,16 @@ export function SidebarTree({
|
||||
rowFields?: HostRowFields;
|
||||
}) {
|
||||
const { t } = useTranslation();
|
||||
const rootRef = useRef<HTMLDivElement>(null);
|
||||
// Focus left on the clicked row sends the next keys to the host speed
|
||||
// search instead of the session that just opened.
|
||||
const onOpenTab: typeof openTab = (...args) => {
|
||||
const active = document.activeElement;
|
||||
if (active instanceof HTMLElement && rootRef.current?.contains(active)) {
|
||||
active.blur();
|
||||
}
|
||||
openTab(...args);
|
||||
};
|
||||
const hostSettingPlugins = usePluginHostSections();
|
||||
const hostSwitchPlugins = hostSettingPlugins.filter(
|
||||
(plugin) => !!plugin.contributes?.settings?.host?.enableKey,
|
||||
@@ -939,6 +949,7 @@ export function SidebarTree({
|
||||
|
||||
return (
|
||||
<div
|
||||
ref={rootRef}
|
||||
className="relative flex flex-col flex-1 min-h-0"
|
||||
onKeyDown={(event) => {
|
||||
if (selectionMode || arrangeMode) return;
|
||||
|
||||
@@ -38,6 +38,20 @@ describe("getEmbeddedServerFailure", () => {
|
||||
});
|
||||
});
|
||||
|
||||
it("surfaces a database too old to open", async () => {
|
||||
setElectronAPI({
|
||||
isElectron: true,
|
||||
getEmbeddedServerStatus: vi.fn().mockResolvedValue({
|
||||
running: false,
|
||||
failure: { reason: "old-database", port: null },
|
||||
}),
|
||||
});
|
||||
await expect(getEmbeddedServerFailure()).resolves.toEqual({
|
||||
reason: "old-database",
|
||||
port: null,
|
||||
});
|
||||
});
|
||||
|
||||
it("surfaces a generic crash", async () => {
|
||||
setElectronAPI({
|
||||
isElectron: true,
|
||||
|
||||
@@ -23,7 +23,9 @@ vi.mock("@/sidebar/tree/FolderItem/FolderItem", () => ({
|
||||
folderHostCount: () => 1,
|
||||
}));
|
||||
vi.mock("@/sidebar/tree/HostItem/HostItem", () => ({
|
||||
HostItem: () => <div>Host</div>,
|
||||
HostItem: ({ onOpenTab }: { onOpenTab: (type: string) => void }) => (
|
||||
<button onClick={() => onOpenTab("terminal")}>Host</button>
|
||||
),
|
||||
}));
|
||||
|
||||
const observers: Array<{
|
||||
@@ -161,13 +163,45 @@ it("finds a host inside a closed folder and opens the keyboard-selected match",
|
||||
const search = view.getByLabelText("hosts.speedSearch");
|
||||
expect(document.activeElement).toBe(search);
|
||||
expect(view.container.querySelectorAll("[data-index]")).toHaveLength(3);
|
||||
fireEvent.keyDown(search, { key: "ArrowDown" });
|
||||
fireEvent.keyDown(search, { key: "Enter" });
|
||||
expect(onOpenTab).toHaveBeenCalledWith(beta, "terminal", {
|
||||
forceNewTab: false,
|
||||
});
|
||||
fireEvent.keyDown(search, { key: "Escape" });
|
||||
expect(view.queryByLabelText("hosts.speedSearch")).toBeNull();
|
||||
expect(view.container.querySelectorAll("[data-index]")).toHaveLength(1);
|
||||
expect(document.activeElement).toBe(list);
|
||||
|
||||
fireEvent.keyDown(list, { key: "a" });
|
||||
const again = view.getByLabelText("hosts.speedSearch");
|
||||
fireEvent.keyDown(again, { key: "ArrowDown" });
|
||||
fireEvent.keyDown(again, { key: "Enter" });
|
||||
expect(onOpenTab).toHaveBeenCalledWith(beta, "terminal", {
|
||||
forceNewTab: false,
|
||||
});
|
||||
// The opened session takes over the keyboard.
|
||||
expect(view.queryByLabelText("hosts.speedSearch")).toBeNull();
|
||||
expect(view.container.contains(document.activeElement)).toBe(false);
|
||||
});
|
||||
|
||||
it("lets go of focus when a host opens, so typing reaches the session", () => {
|
||||
const host = {
|
||||
id: "1",
|
||||
name: "alpha",
|
||||
ip: "192.0.2.1",
|
||||
username: "u",
|
||||
} as Host;
|
||||
const onOpenTab = vi.fn();
|
||||
const view = render(
|
||||
<SidebarTree
|
||||
children={[{ name: "group", path: "group", children: [host] }]}
|
||||
onOpenTab={onOpenTab}
|
||||
onEditHost={vi.fn()}
|
||||
selectionMode={false}
|
||||
onToggleSelectionMode={vi.fn()}
|
||||
/>,
|
||||
);
|
||||
const row = view.getByText("Host");
|
||||
row.focus();
|
||||
fireEvent.click(row);
|
||||
expect(onOpenTab).toHaveBeenCalledWith(host, "terminal", undefined);
|
||||
expect(document.activeElement).not.toBe(row);
|
||||
fireEvent.keyDown(document.body, { key: "a" });
|
||||
expect(view.queryByLabelText("hosts.speedSearch")).toBeNull();
|
||||
});
|
||||
Reference in new issue
Block a user