protected void OnPatchNotification(PatchNotificationEventArgs e) { if (this.PatchNotification != null) { this.syncContext?.Send(new System.Threading.SendOrPostCallback(delegate { this.PatchNotification.Invoke(this, e); }), null); } }
protected virtual void InstallPatchEx(PatchNotificationEventArgs myEventArgs, System.Uri url) { try { if (myEventArgs == null) { string patchversion = Path.GetFileNameWithoutExtension(url.OriginalString); myEventArgs = new PatchNotificationEventArgs(true, patchversion, this.VersionString); } string filePath = Path.Combine(Infos.DefaultValues.MyInfo.Directory.Patches, myEventArgs.NewPatchVersion); this.OnCurrentStepChanged(new StepEventArgs(string.Format(LanguageManager.GetMessageText("Downloading0Patch", "Downloading new {0} version"), Infos.DefaultValues.AIDA.Strings.EnglishPatchCalled))); this.OnProgressBarStateChanged(new ProgressBarStateChangedEventArgs(Forms.MyMainMenu.ProgressBarVisibleState.Percent)); this.OnCurrentTotalProgressChanged(new ProgressEventArgs(100)); this.myWebClient_ForAIDA.DownloadFileAsync(url, filePath, new WorkerInfo("InstallPatchEx_callback", myEventArgs, filePath, url, myEventArgs.Backup)); } catch (Exception ex) { this.OnHandledException(new HandledExceptionEventArgs(ex)); } }
protected virtual void InstallPatchEx(PatchNotificationEventArgs myEventArgs, DateTime newver) { try { if (myEventArgs == null) { myEventArgs = new PatchNotificationEventArgs(true, newver.ToVersionString(), this.VersionString); } string filePath = Infos.DefaultValues.MyInfo.Directory.Folders.LargeFilesPatch; this.OnCurrentStepChanged(new StepEventArgs(string.Format(LanguageManager.GetMessageText("Downloading0Patch", "Downloading new {0} version"), Infos.DefaultValues.AIDA.Strings.LargeFilesPatchCalled))); this.OnProgressBarStateChanged(new ProgressBarStateChangedEventArgs(Forms.MyMainMenu.ProgressBarVisibleState.Percent)); DownloadInfoCollection aaay = new DownloadInfoCollection(); aaay.Add(AIDA.WebPatches.TransAmEXE, Path.Combine(filePath, Infos.DefaultValues.AIDA.Tweaker.TransArmThingiesOrWatever.TransAmEXE)); aaay.Add(AIDA.WebPatches.LargeFilesDB, Path.Combine(filePath, Infos.DefaultValues.AIDA.Tweaker.TransArmThingiesOrWatever.LargeFilesDB + "zip")); this.myWebClient_ForAIDA.DownloadFileListAsync(aaay, new TransarmWorkerInfo(myEventArgs, filePath, newver, myEventArgs.Backup)); } catch (Exception ex) { this.OnHandledException(new HandledExceptionEventArgs(ex)); } }
private void myWebClient_ForAIDA_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) { WorkerInfo state = null; WebClientInstallingMetaWrapper meta = null; if (e.UserState != null) { if (e.UserState is WorkerInfo) { state = e.UserState as WorkerInfo; } else if (e.UserState is WebClientInstallingMetaWrapper) { meta = e.UserState as WebClientInstallingMetaWrapper; } } if (e.Error != null) { if (state != null) { switch (state.Step) { case "UninstallPatchEx": this.OnProgressBarStateChanged(new ProgressBarStateChangedEventArgs(Forms.MyMainMenu.ProgressBarVisibleState.None)); this.OnHandledException(new HandledExceptionEventArgs(e.Error)); break; default: this.OnProgressBarStateChanged(new ProgressBarStateChangedEventArgs(Forms.MyMainMenu.ProgressBarVisibleState.None)); this.OnHandledException(new HandledExceptionEventArgs(e.Error)); break; } } } else if (e.Cancelled) { if (state != null) { switch (state.Step) { case "UninstallPatchEx": this.OnProgressBarStateChanged(new ProgressBarStateChangedEventArgs(Forms.MyMainMenu.ProgressBarVisibleState.None)); this.OnPatchUninstalled(new PatchFinishedEventArgs(false, string.Empty)); break; default: this.OnProgressBarStateChanged(new ProgressBarStateChangedEventArgs(Forms.MyMainMenu.ProgressBarVisibleState.None)); this.OnHandledException(new HandledExceptionEventArgs(new NotImplementedException())); break; } } } else { //this.OnProgressBarStateChanged(new ProgressBarStateChangedEventArgs(Forms.MyMainMenu.ProgressBarVisibleState.None)); if (state != null) { switch (state.Step) { case "UninstallPatchEx": WorkerInfo wi = new WorkerInfo(string.Empty, e.Result, null, null, true); this.bWorker_uninstall.RunWorkerAsync(wi); break; default: this.OnHandledException(new HandledExceptionEventArgs(new NotImplementedException())); break; } } else if (meta != null) { if (meta.Step == 0) { if (!string.IsNullOrEmpty(e.Result)) { string hue = AIDA.FlatJsonFetch <string>(e.Result, Infos.DefaultValues.AIDA.Tweaker.TransArmThingiesOrWatever.LargeFilesTransAmDate); //System.Windows.Forms.MessageBox.Show(hue, "awghalwihgaliwhglaihwg"); if (!string.IsNullOrWhiteSpace(hue)) { DateTime dt = AIDA.StringToDateTime(hue, "M/d/yyyy", '/'); if (dt != DateTime.MinValue) { InstallingMeta newMeta = new InstallingMeta(meta.Meta.Backup, meta.Meta.Force, dt); if (VersionString != newMeta.NewVersionString) { PatchNotificationEventArgs theevent = new PatchNotificationEventArgs(true, newMeta.NewVersionString, VersionString); this.OnPatchNotification(theevent); if (meta.Meta.Force || theevent.Continue) { //this.OnHandledException(new HandledExceptionEventArgs(new NotImplementedException("This function is not available yet."))); InstallPatchEx(theevent, dt); } } else { this.OnPatchInstalled(new PatchFinishedEventArgs(newMeta.NewVersionString)); } } else { this.OnHandledException(new HandledExceptionEventArgs(new System.Exception("Failed to check for patch.\r\n" + e.Result))); } } else { this.OnPatchInstalled(new PatchFinishedEventArgs(hue)); } } else { this.OnHandledException(new HandledExceptionEventArgs(new System.Exception("Failed to check for patch.\r\n" + e.Result))); } } } } }
protected virtual void OnInstalling(object sender, DoWorkEventArgs e) { //return; TransarmWorkerInfo seed = e.Argument as TransarmWorkerInfo; PatchNotificationEventArgs seedEvent = seed.Params as PatchNotificationEventArgs; string pso2datadir = DefaultValues.Directory.PSO2Win32Data; string largefilesBackupFolder = Path.Combine(pso2datadir, DefaultValues.Directory.PSO2Win32DataBackup, DefaultValues.Directory.Backup.LargeFiles); this.OnCurrentStepChanged(new StepEventArgs(string.Format(LanguageManager.GetMessageText("Begin0PatchFiles", "Extracting {0} data"), Infos.DefaultValues.AIDA.Strings.LargeFilesPatchCalled))); string myPatcher = Path.Combine(seed.Path, Infos.DefaultValues.AIDA.Tweaker.TransArmThingiesOrWatever.TransAmEXE); string my7zDB = Path.Combine(seed.Path, Infos.DefaultValues.AIDA.Tweaker.TransArmThingiesOrWatever.LargeFilesDB + "zip"); string myDB = string.Empty; bool isOkay = false; var result = AbstractExtractor.ExtractZip(my7zDB, seed.Path, null); isOkay = result.IsSuccess; myDB = result.SuccessItems[0].Key; File.Delete(my7zDB); if (isOkay) { if (false) { this.OnCurrentStepChanged(new StepEventArgs(string.Format(LanguageManager.GetMessageText("BeginRestoring0PatchFiles", "Getting {0} filelist"), Infos.DefaultValues.AIDA.Strings.LargeFilesPatchCalled))); string rawtbl = this.myWebClient_ForAIDA.DownloadString(Classes.AIDA.WebPatches.PatchesFileListInfos); string sourceTable = string.Empty; using (var theTextReader = new StringReader(rawtbl)) using (var jsonReader = new Newtonsoft.Json.JsonTextReader(theTextReader)) while (jsonReader.Read()) { if (jsonReader.TokenType == Newtonsoft.Json.JsonToken.PropertyName) { if (jsonReader.Value is string && (jsonReader.Value as string).ToLower() == "largefileslist") { sourceTable = jsonReader.ReadAsString(); } } } string[] tbl_files = AIDA.StringToTableString(sourceTable); string originalFile, backupFile, currentIndexString; this.OnCurrentStepChanged(new StepEventArgs(string.Format(LanguageManager.GetMessageText("Creating0PatchBackup", "Creating backup for {0} files"), Infos.DefaultValues.AIDA.Strings.LargeFilesPatchCalled))); int total = tbl_files.Length; this.OnCurrentTotalProgressChanged(new ProgressEventArgs(total)); Directory.CreateDirectory(largefilesBackupFolder); for (int i = 0; i < tbl_files.Length; i++) { currentIndexString = tbl_files[i]; originalFile = Path.Combine(pso2datadir, currentIndexString); backupFile = Path.Combine(largefilesBackupFolder, currentIndexString); File.Copy(originalFile, backupFile, true); this.OnCurrentProgressChanged(new ProgressEventArgs(i + 1)); } } this.OnCurrentStepChanged(new StepEventArgs(LanguageManager.GetMessageText("CallTransarmPatcherBackup", "Call patcher and wait for patcher finish the job"))); this.OnProgressBarStateChanged(new ProgressBarStateChangedEventArgs(Forms.MyMainMenu.ProgressBarVisibleState.Infinite)); patcherProcess = Infos.CommonMethods.MakeProcess(myPatcher); //-i "Backup/" -h largefiles-10-7-2016 lf.stripped.db "Out" string MyBaseDateString = "largefiles-" + seed.Date.Month.ToString() + "-" + seed.Date.Day.ToString() + "-" + seed.Date.Year.ToString(); //lf.stripped.db //Infos.DefaultValues.AIDA.Tweaker.TransArmThingiesOrWatever.LargeFilesBackupFolder List <string> myParams = new List <string>(); myParams.Add(Infos.DefaultValues.AIDA.Tweaker.TransArmThingiesOrWatever.paramNodeForBackupOutput); myParams.Add(Infos.DefaultValues.AIDA.Tweaker.TransArmThingiesOrWatever.LargeFilesBackupFolder); myParams.Add(Infos.DefaultValues.AIDA.Tweaker.TransArmThingiesOrWatever.paramNodeForOutput); myParams.Add(MyBaseDateString); myParams.Add(myDB); myParams.Add(Infos.DefaultValues.AIDA.Tweaker.TransArmThingiesOrWatever.ValidPath(DefaultValues.Directory.PSO2Win32Data)); string pso2bin = DefaultValues.Directory.PSO2Dir; string veda = Path.Combine(pso2bin, Infos.DefaultValues.AIDA.Tweaker.TransArmThingiesOrWatever.VEDA_Filename); string asdadasd = Leayal.ProcessHelper.TableStringToArgs(myParams); //Log.LogManager.GetLog("asdasd.txt", true).Print(asdadasd); patcherProcess.StartInfo.Arguments = asdadasd; patcherProcess.StartInfo.WorkingDirectory = seed.Path; patcherProcess.StartInfo.WindowStyle = ProcessWindowStyle.Normal; if (Leayal.OSVersionInfo.Name.ToLower() != "windows xp") { patcherProcess.StartInfo.Verb = "runas"; } Exception exVeda = AIDA.TransarmOrVedaOrWhatever.VEDA_Activate(pso2bin); if (exVeda == null) { patcherProcess.StartInfo.UseShellExecute = false; patcherProcess.Start(); patcherProcess.WaitForExit(); File.Delete(veda); this.OnProgressBarStateChanged(new ProgressBarStateChangedEventArgs(Forms.MyMainMenu.ProgressBarVisibleState.None)); //Log.LogManager.GetLogDefaultPath("LargeFile.txt", true).Print("LargeFile Exit COde: " + patcher.ExitCode.ToString()); try { if ((patcherProcess != null) && (patcherProcess.ExitCode == 0)) { patcherProcess = null; e.Result = seed.Date.ToVersionString(); } else { patcherProcess = null; if (seed.Backup) { if (Directory.Exists(largefilesBackupFolder)) { this.OnProgressBarStateChanged(new ProgressBarStateChangedEventArgs(Forms.MyMainMenu.ProgressBarVisibleState.Percent)); this.OnCurrentStepChanged(new StepEventArgs(string.Format(LanguageManager.GetMessageText("Rollback0Patch", "Rolling back the {0} installation"), Infos.DefaultValues.AIDA.Strings.LargeFilesPatchCalled))); string[] tbl_backup = Directory.GetFiles(largefilesBackupFolder, "*", SearchOption.TopDirectoryOnly); string originalFile, backupFile, currentIndexString; int total = tbl_backup.Length; this.OnCurrentTotalProgressChanged(new ProgressEventArgs(total)); for (int i = 0; i < tbl_backup.Length; i++) { currentIndexString = Path.GetFileName(tbl_backup[i]); originalFile = Path.Combine(pso2datadir, currentIndexString); backupFile = Path.Combine(largefilesBackupFolder, currentIndexString); File.Delete(originalFile); File.Move(backupFile, originalFile); this.OnCurrentProgressChanged(new ProgressEventArgs(i + 1)); } } } throw new Exception(LanguageManager.GetMessageText("CancelLargeFilesPatchFiles", "User cancelled or the patcher closed with Error(s).")); } File.Delete(Path.Combine(seed.Path, myDB)); File.Delete(myPatcher); } catch (System.Net.WebException) { } } else { throw exVeda; } } else { throw new Exception(LanguageManager.GetMessageText("BadArchiveOrUnknownError", "Bad archive file or unknown error happened while") + " " + string.Format(LanguageManager.GetMessageText("Begin0PatchFiles", "Extracting {0} data"), Infos.DefaultValues.AIDA.Strings.LargeFilesPatchCalled)); } try { Directory.Delete(seed.Path, true); } catch (IOException) { try { Leayal.IO.DirectoryHelper.EmptyFolder(seed.Path); Directory.Delete(seed.Path, true); } catch { } } e.Result = seedEvent.NewPatchVersion; }
private void MyWebClient_ForAIDA_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) { WorkerInfo state = null; WebClientInstallingMetaWrapper meta = null; if (e.UserState != null) { if (e.UserState is WorkerInfo) { state = e.UserState as WorkerInfo; } else if (e.UserState is WebClientInstallingMetaWrapper) { meta = e.UserState as WebClientInstallingMetaWrapper; } } if (e.Error != null) { if (state != null) { switch (state.Step) { case "UninstallPatchEx": this.OnProgressBarStateChanged(new ProgressBarStateChangedEventArgs(Forms.MyMainMenu.ProgressBarVisibleState.None)); this.OnHandledException(new HandledExceptionEventArgs(e.Error)); break; default: this.OnProgressBarStateChanged(new ProgressBarStateChangedEventArgs(Forms.MyMainMenu.ProgressBarVisibleState.None)); this.OnHandledException(new HandledExceptionEventArgs(e.Error)); break; } } } else if (e.Cancelled) { if (state != null) { switch (state.Step) { case "UninstallPatchEx": this.OnProgressBarStateChanged(new ProgressBarStateChangedEventArgs(Forms.MyMainMenu.ProgressBarVisibleState.None)); this.OnPatchUninstalled(new PatchFinishedEventArgs(false, string.Empty)); break; default: this.OnProgressBarStateChanged(new ProgressBarStateChangedEventArgs(Forms.MyMainMenu.ProgressBarVisibleState.None)); this.OnHandledException(new HandledExceptionEventArgs(new NotImplementedException())); break; } } } else { if (state != null) { this.OnProgressBarStateChanged(new ProgressBarStateChangedEventArgs(Forms.MyMainMenu.ProgressBarVisibleState.None)); switch (state.Step) { case "UninstallPatchEx": WorkerInfo wi = new WorkerInfo(string.Empty, e.Result, null, null, true); this.bWorker_uninstall.RunWorkerAsync(wi); break; default: this.OnHandledException(new HandledExceptionEventArgs(new NotImplementedException())); break; } } else if (meta != null) { switch (meta.Step) { case 0: if (!string.IsNullOrEmpty(e.Result)) { try { if (Classes.AIDA.FlatJsonFetch <string>(e.Result, Infos.DefaultValues.AIDA.Tweaker.TransArmThingiesOrWatever.ENPatchOverride).BoolAIDASettings(false)) { this.OnProgressBarStateChanged(new ProgressBarStateChangedEventArgs(Forms.MyMainMenu.ProgressBarVisibleState.None)); string newverstring = Classes.AIDA.FlatJsonFetch <string>(e.Result, Infos.DefaultValues.AIDA.Tweaker.TransArmThingiesOrWatever.ENPatchOverrideURL); if (!string.IsNullOrWhiteSpace(newverstring)) { System.Uri url = new System.Uri(newverstring); newverstring = Path.GetFileNameWithoutExtension(newverstring); InstallingMeta asd = new InstallingMeta(meta.Meta.Backup, meta.Meta.Force, newverstring); if (VersionString != newverstring) { PatchNotificationEventArgs theevent = new PatchNotificationEventArgs(true, newverstring, VersionString); this.OnPatchNotification(theevent); if (meta.Meta.Force || theevent.Continue) { InstallPatchEx(theevent, url); } } else { this.OnPatchInstalled(new PatchFinishedEventArgs(VersionString)); } } else { this.OnPatchInstalled(new PatchFinishedEventArgs(VersionString)); } } else { if (MySettings.MinimizeNetworkUsage) { this.myWebClient_ForAIDA.CacheStorage = CacheStorage.DefaultStorage; this.myWebClient_ForPSO2.CacheStorage = CacheStorage.DefaultStorage; } else { this.myWebClient_ForAIDA.CacheStorage = null; this.myWebClient_ForPSO2.CacheStorage = null; } //this.myWebClient_ForAIDA.Credentials = Infos.DefaultValues.Arghlex.Web.AccountArghlex; var asdasdasdasdasd = new Uri(ACF.EnglishPatchManualHome); this.myWebClient_ForAIDA.AutoUserAgent = false; this.myWebClient_ForAIDA.UserAgent = ""; this.myWebClient_ForAIDA.DownloadStringAsync(asdasdasdasdasd, new WebClientInstallingMetaWrapper(2, meta.Meta)); } } catch (UriFormatException uriEx) { this.OnHandledException(new HandledExceptionEventArgs(uriEx)); } } else { this.OnHandledException(new HandledExceptionEventArgs(new Exception("Failed to check for patch.\r\n"))); } break; case 2: this.OnProgressBarStateChanged(new ProgressBarStateChangedEventArgs(Forms.MyMainMenu.ProgressBarVisibleState.None)); this.myWebClient_ForAIDA.AutoUserAgent = true; if (!string.IsNullOrWhiteSpace(e.Result)) { string newverstring = GetNewestENPatch(e.Result); if (!string.IsNullOrEmpty(newverstring)) { System.Uri url = new Uri(newverstring); newverstring = ACF.GetVersionFromURL(newverstring); InstallingMeta asd = new InstallingMeta(meta.Meta.Backup, meta.Meta.Force, newverstring); if (VersionString != newverstring) { this.myWebClient_ForAIDA.Credentials = Infos.DefaultValues.Arghlex.Web.AccountArghlex; PatchNotificationEventArgs theevent = new PatchNotificationEventArgs(true, newverstring, VersionString); this.OnPatchNotification(theevent); if (meta.Meta.Force || theevent.Continue) { InstallPatchEx(theevent, url); } } else { this.OnPatchInstalled(new PatchFinishedEventArgs(VersionString)); } } else { this.OnPatchInstalled(new PatchFinishedEventArgs(VersionString)); } } else { this.OnHandledException(new HandledExceptionEventArgs(new Exception("Failed to check for patch.\r\n"))); } break; case 1: // Discarded Code this.OnProgressBarStateChanged(new ProgressBarStateChangedEventArgs(Forms.MyMainMenu.ProgressBarVisibleState.None)); return; if (!string.IsNullOrWhiteSpace(e.Result)) { string newverstring = GetNewestENPatch(e.Result); if (!string.IsNullOrEmpty(newverstring)) { System.Uri url = new System.Uri(Leayal.UriHelper.URLConcat(Infos.DefaultValues.Arghlex.Web.PatchesFolder, newverstring)); newverstring = Path.GetFileNameWithoutExtension(newverstring); InstallingMeta asd = new InstallingMeta(meta.Meta.Backup, meta.Meta.Force, newverstring); if (VersionString != newverstring) { this.myWebClient_ForAIDA.Credentials = Infos.DefaultValues.Arghlex.Web.AccountArghlex; PatchNotificationEventArgs theevent = new PatchNotificationEventArgs(true, newverstring, VersionString); this.OnPatchNotification(theevent); if (meta.Meta.Force || theevent.Continue) { InstallPatchEx(theevent, url); } } else { this.OnPatchInstalled(new PatchFinishedEventArgs(VersionString)); } } else { this.OnPatchInstalled(new PatchFinishedEventArgs(VersionString)); } } else { this.OnHandledException(new HandledExceptionEventArgs(new Exception("Failed to check for patch.\r\n"))); } break; } } } }
protected virtual void OnInstalling(object sender, DoWorkEventArgs e) { this.OnProgressBarStateChanged(new ProgressBarStateChangedEventArgs(Forms.MyMainMenu.ProgressBarVisibleState.Percent)); WorkerInfo seed = e.Argument as WorkerInfo; PatchNotificationEventArgs seedEvent = seed.Params as PatchNotificationEventArgs; using (FileStream fs = File.OpenRead(seed.Path)) using (var archive = SharpCompress.Archives.ArchiveFactory.Open(fs)) { string pso2datafolder = DefaultValues.Directory.PSO2Win32Data; if (seed.Backup) { string tmppath; string englishBackupFolder = Path.Combine(pso2datafolder, DefaultValues.Directory.PSO2Win32DataBackup, DefaultValues.Directory.Backup.English); string backuppath; this.OnCurrentStepChanged(new StepEventArgs(string.Format(LanguageManager.GetMessageText("Creating0PatchBackup", "Creating backup for {0} files"), Infos.DefaultValues.AIDA.Strings.EnglishPatchCalled))); int total = System.Linq.Enumerable.Count(archive.Entries); this.OnCurrentTotalProgressChanged(new ProgressEventArgs(total)); int index = 0; Directory.CreateDirectory(englishBackupFolder); foreach (var entry in archive.Entries) { if (!entry.IsDirectory) { tmppath = Path.Combine(pso2datafolder, entry.Key); backuppath = Path.Combine(englishBackupFolder, entry.Key); File.Copy(tmppath, backuppath, true); index++; this.OnCurrentProgressChanged(new ProgressEventArgs(index + 1)); } } } this.OnCurrentStepChanged(new StepEventArgs(string.Format(LanguageManager.GetMessageText("Installing0Patch", "Installing {0}"), Infos.DefaultValues.AIDA.Strings.EnglishPatchCalled))); var result = AbstractExtractor.Extract(archive, pso2datafolder, extract_callback); if (!result.IsSuccess) { if (seed.Backup) { string tmppath; string englishBackupFolder = Path.Combine(pso2datafolder, DefaultValues.Directory.PSO2Win32DataBackup, DefaultValues.Directory.Backup.English); var rollbackList = Directory.GetFiles(englishBackupFolder, "*", SearchOption.TopDirectoryOnly); int total = rollbackList.Length; this.OnCurrentTotalProgressChanged(new ProgressEventArgs(total)); int index = 0; this.OnCurrentStepChanged(new StepEventArgs(string.Format(LanguageManager.GetMessageText("Rollback0Patch", "Rolling back the {0} installation"), Infos.DefaultValues.AIDA.Strings.EnglishPatchCalled))); foreach (string dundun in rollbackList) { tmppath = Path.Combine(pso2datafolder, Path.GetFileName(dundun)); File.Delete(tmppath); File.Move(dundun, tmppath); index++; this.OnCurrentProgressChanged(new ProgressEventArgs(index + 1)); } } throw new Exception("Extract failed."); } } try { File.Delete(seed.Path); } catch { } e.Result = seedEvent.NewPatchVersion; }