private void OnAcceptSaveUpgrade() { suppressSaveUpgradeClose = true; if (saveToBeLoaded == null) { GD.PrintErr("Save to upgrade is null"); return; } GD.Print("Save upgrade accepted by user on: ", saveToBeLoaded); var saveToUpgrade = saveToBeLoaded; if (SaveUpgrader.IsSaveABackup(saveToBeLoaded)) { saveToBeLoaded = SaveUpgrader.RemoveBackupSuffix(saveToBeLoaded); GD.Print("Selected save is a backup, really going to load after upgrade: ", saveToBeLoaded); } // Perform save upgrade (the game will lag here, but I'll leave it to someone else to make a progress bar) // Instead could show a popup with a spinner on it and run the upgrade with TaskExecutor in the background var task = new Task(() => SaveUpgrader.PerformSaveUpgrade(saveToUpgrade)); TaskExecutor.Instance.AddTask(task); try { if (!task.Wait(TimeSpan.FromMinutes(1))) { throw new Exception("Upgrade failed to complete within acceptable time"); } } catch (Exception e) { upgradeFailedDialog.ExceptionInfo = e.Message; upgradeFailedDialog.PopupCenteredShrink(); GD.PrintErr("Save upgrade failed: ", e); return; } OnConfirmSaveLoad(); }
static bool Prefix() { SaveUpgrader.Upgrade(); return(true); }