Upload via GUI (27 Dateien)

This commit is contained in:
2026-08-13 07:21:45 +00:00
parent 565835418e
commit 5571f225d5
9 changed files with 1244 additions and 711 deletions
+45 -7
View File
@@ -2125,6 +2125,36 @@ function updateSettingsHealth(patch) {
syncSettingsPanelHeights();
}
const INVALID_URL_HINT = 'Ungültige URL. Beispiel: https://git.example.net oder http://192.168.1.10:3000';
// Interne Fehlercodes aus dem Main-Prozess in verständliche Texte übersetzen.
const ERROR_CODE_MESSAGES = {
'missing-token-or-url': 'Gitea Token oder URL fehlt. Bitte in den Einstellungen speichern.',
'missing-token': 'Token fehlt. Bitte in den Einstellungen speichern.',
'missing-url': 'Gitea URL fehlt. Bitte in den Einstellungen speichern.'
};
// Abgebrochene Git-Uebertragungen erkennen (grosses Repo, Server-/Proxy-Timeout).
function isTransferAbortedError(raw) {
return raw.includes('early eof')
|| raw.includes('index-pack')
|| raw.includes('rpc failed')
|| raw.includes('remote end hung up')
|| raw.includes('unexpected disconnect')
|| raw.includes('transfer closed');
}
// Nur echte URL-Parse-Fehler erkennen - nicht jede Meldung, in der "URL" vorkommt.
function isInvalidUrlError(raw) {
return raw.includes('ungültige url')
|| raw.includes('ungueltige url')
|| raw.includes('invalid url')
|| raw.includes('err_invalid_url')
|| raw.includes('invalid uri')
|| raw.includes('unsupported protocol')
|| raw.includes('only absolute urls');
}
function normalizeAndValidateGiteaUrl(rawUrl) {
const value = (rawUrl || '').trim();
if (!value) return { ok: true, value: '' };
@@ -2135,7 +2165,7 @@ function normalizeAndValidateGiteaUrl(rawUrl) {
} catch (_) {
return {
ok: false,
error: 'Ungültige URL. Beispiel für IPv6: http://[2001:db8::1]:3000'
error: INVALID_URL_HINT
};
}
@@ -2173,8 +2203,16 @@ function renderGithubTokenHint(rawToken) {
}
function mapErrorMessage(message) {
const raw = String(message || '').toLowerCase();
if (!raw) return 'Unbekannter Fehler';
const original = String(message ?? '').trim();
if (!original) return 'Unbekannter Fehler';
const raw = original.toLowerCase();
if (ERROR_CODE_MESSAGES[raw]) return ERROR_CODE_MESSAGES[raw];
// Zuerst pruefen: abgebrochene Uebertragungen sind spezifischer als die Status-Code-Heuristik unten.
if (isTransferAbortedError(raw)) {
return 'Übertragung vom Server abgebrochen (early EOF / index-pack). Repository zu groß oder Timeout beim Gitea-Server bzw. Reverse-Proxy. Bitte erneut versuchen.';
}
if (raw.includes('401') || raw.includes('unauthorized') || raw.includes('authentifizierung')) {
return 'Authentifizierung fehlgeschlagen. Bitte Token prüfen.';
@@ -2186,15 +2224,15 @@ function mapErrorMessage(message) {
return 'Server oder Ressource nicht gefunden. URL/Repo prüfen.';
}
if (raw.includes('econnrefused') || raw.includes('enotfound') || raw.includes('eai_again') || raw.includes('getaddrinfo')) {
return 'Server nicht erreichbar. DNS, IPv4/IPv6 und Port prüfen.';
return 'Server nicht erreichbar. DNS, Server-IP und Port prüfen.';
}
if (raw.includes('timeout') || raw.includes('econnaborted') || raw.includes('zeitueberschreitung') || raw.includes('zeitüberschreitung')) {
return 'Zeitüberschreitung bei der Verbindung. Bitte erneut versuchen.';
}
if (raw.includes('ungueltige') || raw.includes('ungültige') || raw.includes('invalid') || raw.includes('url')) {
return 'Ungültige URL. Beispiel für IPv6: http://[2001:db8::1]:3000';
if (isInvalidUrlError(raw)) {
return INVALID_URL_HINT;
}
return String(message);
return original;
}
function setStatus(txt) {