Ganze Abfrage-URL einfuegen statt drei Felder tippen
Deploy / check (push) Has been cancelled
Deploy / deploy (push) Has been cancelled

This commit is contained in:
2026-08-05 17:14:30 +02:00
parent 4e7fc99999
commit 8981eb91b8
5 changed files with 62 additions and 17 deletions
+35 -3
View File
@@ -171,6 +171,33 @@ const BELIEBTE_SPIELE = [
];
const GAMESEL_MAX = 60;
/**
* Ganze Abfrage-URL eingefügt statt Host getippt? Dann Host, Port und Code
* daraus ziehen.
*
* Bei Farming Simulator ist genau das der Normalfall: der Hoster gibt einem
* eine fertige URL wie
* `http://1.2.3.4:8200/feed/dedicated-server-stats.xml?code=…`,
* und die drei Felder von Hand auseinanderzupflücken ist Arbeit, die niemand
* machen muss. Der Port steht mit drin — er ist nicht immer 8080.
*
* @returns {{host: string, port: string, token?: string} | null}
*/
function feedUrlZerlegen(text) {
const roh = String(text).trim();
if (!/^https?:\/\//i.test(roh)) return null;
let u;
try { u = new URL(roh); } catch { return null; }
if (!u.hostname) return null;
const code = u.searchParams.get('code') || u.searchParams.get('token') || '';
return {
host: u.hostname,
port: u.port || '',
// Ohne Code im Link den vorhandenen stehen lassen, statt ihn zu leeren
...(code ? { token: code } : {}),
};
}
/** Combobox für die Spiel-Auswahl — datalist ist nicht stylebar, das hier schon.
* Die Liste kommt aus gamedig selbst, damit sie mit jedem Update mitwächst;
* freie IDs bleiben trotzdem erlaubt. */
@@ -832,6 +859,11 @@ export default function Settings({ me }) {
const serverNeedsUrl = ['fivem', 'http'].includes(serverDraft.type);
const gewaehltesSpiel = games.find((g) => g.id === serverDraft.type) ?? null;
/** Ins Host-Feld getippt — oder die ganze Abfrage-URL eingefügt */
function hostEingeben(wert) {
const teile = feedUrlZerlegen(wert);
setServerDraft((d) => (teile ? { ...d, ...teile } : { ...d, host: wert }));
}
/** Spiel gewählt: Standard-Port vorschlagen, solange keiner drinsteht */
function spielWaehlen(type) {
const spiel = games.find((g) => g.id === type);
@@ -3332,14 +3364,14 @@ export default function Settings({ me }) {
<input type="text" placeholder={serverDraft.type === 'fivem' ? 'http://ip:30120' : 'https://dienst.example/health'} value={serverDraft.query_url} onChange={(e) => setServerDraft({ ...serverDraft, query_url: e.target.value })} />
) : (
<>
<input type="text" placeholder="Host / IP" value={serverDraft.host} onChange={(e) => setServerDraft({ ...serverDraft, host: e.target.value })} />
<input type="text" placeholder="Host / IP — oder ganze Abfrage-URL einfügen" title="Du kannst hier auch die komplette Abfrage-URL einfügen; Host, Port und Code werden herausgezogen." value={serverDraft.host} onChange={(e) => hostEingeben(e.target.value)} />
<input type="text" style={{ flex: 'none', width: '6rem' }} placeholder={gewaehltesSpiel?.port ? `Port ${gewaehltesSpiel.port}` : 'Port'} value={serverDraft.port} onChange={(e) => setServerDraft({ ...serverDraft, port: e.target.value })} />
</>
)}
</div>
<p className="field-hint" style={{ marginTop: '.3rem' }}>
{gewaehltesSpiel
? <>Gewählt: <b>{gewaehltesSpiel.name}</b>{!gewaehltesSpiel.eigen && gewaehltesSpiel.port ? ` — Standard-Query-Port ${gewaehltesSpiel.port}` : ''}. Die Liste kommt direkt aus gamedig, {games.length} Einträge.</>
? <>Gewählt: <b>{gewaehltesSpiel.name}</b>{!gewaehltesSpiel.eigen && gewaehltesSpiel.port ? ` — Standard-Query-Port ${gewaehltesSpiel.port}, Hoster weichen oft davon ab` : ''}. Die Liste kommt direkt aus gamedig, {games.length} Einträge.</>
: <>Unbekannte ID sie wird trotzdem versucht. Alle bekannten stehen in der <a href="https://github.com/gamedig/node-gamedig/blob/master/GAMES_LIST.md" target="_blank" rel="noreferrer" style={{ textDecoration: 'underline' }}>gamedig-Liste</a>.</>}
</p>
</div>
@@ -3358,7 +3390,7 @@ export default function Settings({ me }) {
/>
<p className="field-hint" style={{ marginTop: '.3rem' }}>
{gewaehltesSpiel.id.startsWith('farmingsimulator')
? <>Im Spiel heißt er <b>Code</b>. Steht im Webinterface des Servers unter <code>http://host:{gewaehltesSpiel.port ?? 8080}/settings.html</code> — er gilt nur für den eigenen Server.</>
? <>Im Spiel heißt er <b>Code</b> und steckt in der Abfrage-URL, die dein Hoster ausgibt: <code>/feed/dedicated-server-stats.xml?code=<b>DAS_HIER</b></code>. Am einfachsten die ganze URL oben ins Host-Feld einfügen Host, Port und Code werden herausgezogen.</>
: <>Steht im Webinterface des Servers. Ohne ihn liefert die Abfrage nichts und der Server stünde dauerhaft auf offline".</>}
</p>
</div>