Upload via GUI (138 Dateien)

This commit is contained in:
2026-10-04 14:49:45 +00:00
parent 642d229d7e
commit 7e1fb616aa
2 changed files with 56 additions and 6 deletions
+20 -5
View File
@@ -1788,10 +1788,25 @@ ipcMain.handle('skin:modelFor', async (_e, uuid) => {
}
});
// Zeitpunkt der letzten eigenen Skin-Änderung: danach hinkt der Sitzungsserver
// (= was im Spiel zu sehen ist) noch kurz hinterher
let letzterSkinWechsel = 0;
const SKIN_NACHLAUF_MS = 3 * 60 * 1000;
// Kontoprofil + der Skin, den andere im Spiel sehen (siehe skins.waehleAnzeigeSkin)
async function profilMitSpielSkin(token) {
const p = await skins.holeProfil(token);
if (!p.ok) return p;
const kuerzlich = Date.now() - letzterSkinWechsel < SKIN_NACHLAUF_MS;
let spiel = null;
if (!kuerzlich) { try { spiel = await skins.holeSpielTexturen(p.id); } catch { /* dann eben das Kontoprofil */ } }
return skins.waehleAnzeigeSkin(p, spiel, kuerzlich);
}
ipcMain.handle('skin:profile', async () => {
const token = await aktivesToken();
if (!token) return { ok: false, message: 'Kein angemeldetes Konto.' };
try { return await skins.holeProfil(token); }
try { return await profilMitSpielSkin(token); }
catch (err) { return { ok: false, message: 'Profil konnte nicht geladen werden: ' + err.message }; }
});
@@ -1819,7 +1834,7 @@ ipcMain.handle('skin:apply', async (_e, dateiPfad, variante) => {
if (!token) return { ok: false, message: 'Kein angemeldetes Konto.' };
try {
const res = await skins.setzeSkin(token, dateiPfad, variante);
if (res && res.ok) { armformCache.clear(); broadcast('skin:changed'); }
if (res && res.ok) { letzterSkinWechsel = Date.now(); armformCache.clear(); broadcast('skin:changed'); }
return res;
}
catch (err) { return { ok: false, message: 'Skin konnte nicht gesetzt werden: ' + err.message }; }
@@ -1830,7 +1845,7 @@ ipcMain.handle('skin:reset', async () => {
if (!token) return { ok: false, message: 'Kein angemeldetes Konto.' };
try {
const res = await skins.setzeSkinZurueck(token);
if (res && res.ok) { armformCache.clear(); broadcast('skin:changed'); }
if (res && res.ok) { letzterSkinWechsel = Date.now(); armformCache.clear(); broadcast('skin:changed'); }
return res;
}
catch (err) { return { ok: false, message: 'Zurücksetzen fehlgeschlagen: ' + err.message }; }
@@ -1852,7 +1867,7 @@ ipcMain.handle('skin:currentData', async () => {
const token = await aktivesToken();
if (!token) return { ok: false, message: 'Kein angemeldetes Konto.' };
try {
const p = await skins.holeProfil(token);
const p = await profilMitSpielSkin(token);
if (!p.ok) return p;
if (!p.skinUrl) return { ok: false, standard: true, variante: p.variante, message: 'Das Konto nutzt den Standard-Skin.' };
const res = await fetch(p.skinUrl);
@@ -2063,7 +2078,7 @@ ipcMain.handle('skin:applyData', async (_e, base64, variante) => {
try {
fs.writeFileSync(tmp, daten);
const res = await skins.setzeSkin(token, tmp, variante);
if (res && res.ok) { armformCache.clear(); broadcast('skin:changed', { quelle: 'editor' }); }
if (res && res.ok) { letzterSkinWechsel = Date.now(); armformCache.clear(); broadcast('skin:changed', { quelle: 'editor' }); }
return res;
} catch (err) {
return { ok: false, message: 'Skin konnte nicht gesetzt werden: ' + err.message };