Skip to content

Commit 3695e23

Browse files
committed
trying to fix update logic
1 parent 47cb638 commit 3695e23

File tree

1 file changed

+78
-107
lines changed

1 file changed

+78
-107
lines changed

source/util/UpdateSubState.hx

Lines changed: 78 additions & 107 deletions
Original file line numberDiff line numberDiff line change
@@ -364,116 +364,87 @@ class UpdateSubState extends FlxSubState
364364
var i = 0;
365365
var total = toDelete.length + toDownload.length;
366366
var self = this;
367-
var lastDraw = Sys.time();
368-
function pumpEvents()
369-
{
370-
#if !flash
371-
try
372-
{
373-
update(Sys.time() - lastDraw );
374-
draw();
375-
}
376-
catch (_:Dynamic) {}
377-
#end
378-
}
367+
// Remove manual update/draw pumping. Flixel handles UI updates automatically.
368+
// If you need to keep UI responsive, break up work into async callbacks and avoid blocking loops.
379369
function next()
380370
{
381-
// Periodically pump events to keep UI responsive
382-
if (Sys.time() - lastDraw > 0.2)
383-
{
384-
pumpEvents();
385-
lastDraw = Sys.time();
386-
}
387-
if (i < toDelete.length)
388-
{
389-
var file = toDelete[i++];
390-
append('Deleting ' + file + '...');
391-
try
392-
{
393-
if (sys.FileSystem.exists(file))
394-
{
395-
if (sys.FileSystem.isDirectory(file))
396-
sys.FileSystem.deleteDirectory(file);
397-
else
398-
sys.FileSystem.deleteFile(file);
399-
append('Deleted ' + file);
400-
}
401-
}
402-
catch (e:Dynamic)
403-
{
404-
append('[ERROR] Failed to delete ' + file + ': ' + Std.string(e));
405-
}
406-
next();
407-
return;
408-
}
409-
if (i - toDelete.length < toDownload.length)
410-
{
411-
var idx = i - toDelete.length;
412-
var url = toDownload[idx];
413-
var dest = getLocalPathForDownload(url);
414-
append('Downloading ' + url + '...');
415-
downloadFile(url, dest, function()
416-
{
417-
append('Downloaded ' + dest);
418-
// Unzip ANY zip file after download, write .version, then delete zip
419-
if (dest.toLowerCase().endsWith('.zip'))
420-
{
421-
append('Unpacking zip...');
422-
try
423-
{
424-
var base = null;
425-
var ver = null;
426-
var m = ~/^(.*?)-v(\d+)\.zip$/i;
427-
var fname = haxe.io.Path.withoutDirectory(haxe.io.Path.normalize(dest));
428-
if (m.match(fname))
429-
{
430-
base = m.matched(1);
431-
ver = Std.parseInt(m.matched(2));
432-
}
433-
var outDir = null;
434-
if (url.indexOf('/games/') != -1 && base != null)
435-
{
436-
outDir = haxe.io.Path.join([haxe.io.Path.directory(dest), base]);
437-
}
438-
else if (url.toLowerCase().indexOf('theme-v') != -1)
439-
{
440-
outDir = haxe.io.Path.directory(dest);
441-
}
442-
if (outDir != null)
443-
{
444-
unzipTo(dest, outDir);
445-
append('Unpacked zip.');
446-
// Write .version file
447-
if (ver != null)
448-
{
449-
var versionFile = (url.indexOf('/games/') != -1) ? haxe.io.Path.join([outDir, ".version"]) : haxe.io.Path.join([outDir, ".version"]);
450-
sys.io.File.saveContent(versionFile, Std.string(ver));
451-
}
452-
// Delete zip after extraction
453-
try
454-
sys.FileSystem.deleteFile(dest)
455-
catch (_:Dynamic) {}
456-
}
457-
}
458-
catch (e:Dynamic)
459-
{
460-
append('[ERROR] Failed to unpack zip: ' + Std.string(e));
461-
}
462-
}
463-
i++;
464-
next();
465-
}, function(err:String)
466-
{
467-
append('[ERROR] Failed to download ' + url + ': ' + err);
468-
i++;
469-
next();
470-
});
471-
return;
472-
}
473-
append('Content update complete.');
474-
closeAndContinue();
371+
// No manual event pumping needed. All work is async and UI remains responsive.
372+
if (i < toDelete.length)
373+
{
374+
var file = toDelete[i++];
375+
append('[STEP] Deleting ' + file + '...');
376+
try {
377+
if (sys.FileSystem.exists(file)) {
378+
if (sys.FileSystem.isDirectory(file))
379+
sys.FileSystem.deleteDirectory(file);
380+
else
381+
sys.FileSystem.deleteFile(file);
382+
append('[STEP] Deleted ' + file);
383+
}
384+
} catch (e:Dynamic) {
385+
append('[ERROR] Failed to delete ' + file + ': ' + Std.string(e));
386+
}
387+
// Use haxe.Timer.delay to yield to main loop for UI responsiveness
388+
haxe.Timer.delay(next, 10);
389+
return;
390+
}
391+
if (i - toDelete.length < toDownload.length)
392+
{
393+
var idx = i - toDelete.length;
394+
var url = toDownload[idx];
395+
var dest = getLocalPathForDownload(url);
396+
append('[STEP] Downloading ' + url + '...');
397+
downloadFile(url, dest, function()
398+
{
399+
append('[STEP] Downloaded ' + dest);
400+
// Unzip ANY zip file after download, write .version, then delete zip
401+
if (dest.toLowerCase().endsWith('.zip'))
402+
{
403+
append('[STEP] Unpacking zip...');
404+
try {
405+
var base = null;
406+
var ver = null;
407+
var m = ~/^(.*?)-v(\d+)\.zip$/i;
408+
var fname = haxe.io.Path.withoutDirectory(haxe.io.Path.normalize(dest));
409+
if (m.match(fname)) {
410+
base = m.matched(1);
411+
ver = Std.parseInt(m.matched(2));
412+
}
413+
var outDir = null;
414+
if (url.indexOf('/games/') != -1 && base != null)
415+
outDir = haxe.io.Path.join([haxe.io.Path.directory(dest), base]);
416+
else if (url.toLowerCase().indexOf('theme-v') != -1)
417+
outDir = haxe.io.Path.directory(dest);
418+
if (outDir != null) {
419+
unzipTo(dest, outDir);
420+
append('[STEP] Unpacked zip.');
421+
// Write .version file
422+
if (ver != null) {
423+
var versionFile = haxe.io.Path.join([outDir, ".version"]);
424+
sys.io.File.saveContent(versionFile, Std.string(ver));
425+
}
426+
// Delete zip after extraction
427+
try sys.FileSystem.deleteFile(dest) catch (_:Dynamic) {}
428+
}
429+
} catch (e:Dynamic) {
430+
append('[ERROR] Failed to unpack zip: ' + Std.string(e));
431+
}
432+
}
433+
i++;
434+
// Use haxe.Timer.delay to yield to main loop for UI responsiveness
435+
haxe.Timer.delay(next, 10);
436+
}, function(err:String)
437+
{
438+
append('[ERROR] Failed to download ' + url + ': ' + err);
439+
i++;
440+
haxe.Timer.delay(next, 10);
441+
});
442+
return;
443+
}
444+
append('[STEP] Content update complete.');
445+
closeAndContinue();
475446
}
476-
next();
447+
next(); // All work is async, UI will remain responsive
477448
#else
478449
append('Content update not supported on this platform.');
479450
closeAndContinue();

0 commit comments

Comments
 (0)