Reaperxxxx commited on
Commit
f0efc85
Β·
verified Β·
1 Parent(s): c3f7d27

Update index.html

Browse files
Files changed (1) hide show
  1. index.html +69 -24
index.html CHANGED
@@ -316,34 +316,79 @@ fetch('/tools').then(r => r.json()).then(tools => {
316
  }).catch(() => {});
317
 
318
  // ── AUTO-INIT ──────────────────────────────────────────────────────
 
 
 
319
  (function initFromServer() {
320
  const wrap = document.getElementById('progressWrap');
321
  const bar = document.getElementById('progressBar');
322
  const label = document.getElementById('progressLabel');
323
- wrap.style.display = 'block';
324
- bar.style.width = '30%';
325
- label.textContent = 'Loading APK…';
326
-
327
- fetch('/init')
328
- .then(r => { if (!r.ok) return r.json().then(e => { throw new Error(e.error); }); return r.json(); })
329
- .then(data => {
330
- bar.style.width = '100%';
331
- sessionToken = data.token;
332
- originalRaw = data.characters;
333
- parseCharacters(data.characters);
334
- wrap.style.display = 'none';
335
- document.getElementById('fileInfoBar').style.display = 'flex';
336
- document.getElementById('fileInfoBar').innerHTML = `
337
- <div class="file-info">πŸ“¦ <span class="file-info-name">super-city-2.010.64-mod-t-5play.apk</span>
338
- &nbsp;Β·&nbsp; ${characters.length} characters loaded</div>`;
339
- document.getElementById('editorLayout').style.display = 'grid';
340
- setStep(2);
341
- showToast(`βœ” Loaded ${characters.length} characters`);
342
- })
343
- .catch(err => {
344
- wrap.style.display = 'none';
345
- showToast('Failed to load APK: ' + err.message, true);
346
- });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
347
  })();
348
 
349
  // ── PARSE ──────────────────────────────────────────────────────────
 
316
  }).catch(() => {});
317
 
318
  // ── AUTO-INIT ──────────────────────────────────────────────────────
319
+ const LS_TOKEN_KEY = 'supercity_session_token';
320
+ const LS_RAW_KEY = 'supercity_raw';
321
+
322
  (function initFromServer() {
323
  const wrap = document.getElementById('progressWrap');
324
  const bar = document.getElementById('progressBar');
325
  const label = document.getElementById('progressLabel');
326
+
327
+ // Try to restore a previous session from localStorage
328
+ const savedToken = localStorage.getItem(LS_TOKEN_KEY);
329
+ const savedRaw = localStorage.getItem(LS_RAW_KEY);
330
+
331
+ if (savedToken && savedRaw) {
332
+ // Verify the session is still alive on the server
333
+ label.textContent = 'Resuming session…';
334
+ wrap.style.display = 'block';
335
+ bar.style.width = '50%';
336
+
337
+ fetch('/session/' + savedToken)
338
+ .then(r => r.json())
339
+ .then(data => {
340
+ if (data.alive) {
341
+ bar.style.width = '100%';
342
+ sessionToken = savedToken;
343
+ originalRaw = savedRaw;
344
+ parseCharacters(savedRaw);
345
+ wrap.style.display = 'none';
346
+ document.getElementById('fileInfoBar').style.display = 'flex';
347
+ document.getElementById('fileInfoBar').innerHTML = `
348
+ <div class="file-info">β™» <span class="file-info-name">Session restored</span>
349
+ &nbsp;Β·&nbsp; ${characters.length} characters loaded</div>`;
350
+ document.getElementById('editorLayout').style.display = 'grid';
351
+ setStep(2);
352
+ showToast('βœ” Session restored β€” your edits are safe');
353
+ } else {
354
+ localStorage.removeItem(LS_TOKEN_KEY);
355
+ localStorage.removeItem(LS_RAW_KEY);
356
+ loadFresh(wrap, bar, label);
357
+ }
358
+ })
359
+ .catch(() => loadFresh(wrap, bar, label));
360
+ } else {
361
+ loadFresh(wrap, bar, label);
362
+ }
363
+
364
+ function loadFresh(wrap, bar, label) {
365
+ wrap.style.display = 'block';
366
+ bar.style.width = '30%';
367
+ label.textContent = 'Loading APK…';
368
+
369
+ fetch('/init')
370
+ .then(r => { if (!r.ok) return r.json().then(e => { throw new Error(e.error); }); return r.json(); })
371
+ .then(data => {
372
+ bar.style.width = '100%';
373
+ sessionToken = data.token;
374
+ originalRaw = data.characters;
375
+ localStorage.setItem(LS_TOKEN_KEY, data.token);
376
+ localStorage.setItem(LS_RAW_KEY, data.characters);
377
+ parseCharacters(data.characters);
378
+ wrap.style.display = 'none';
379
+ document.getElementById('fileInfoBar').style.display = 'flex';
380
+ document.getElementById('fileInfoBar').innerHTML = `
381
+ <div class="file-info">πŸ“¦ <span class="file-info-name">super-city-2.010.64-mod-t-5play.apk</span>
382
+ &nbsp;Β·&nbsp; ${characters.length} characters loaded</div>`;
383
+ document.getElementById('editorLayout').style.display = 'grid';
384
+ setStep(2);
385
+ showToast(`βœ” Loaded ${characters.length} characters`);
386
+ })
387
+ .catch(err => {
388
+ wrap.style.display = 'none';
389
+ showToast('Failed to load APK: ' + err.message, true);
390
+ });
391
+ }
392
  })();
393
 
394
  // ── PARSE ──────────────────────────────────────────────────────────