protected void OnPatchNotification(PatchNotificationEventArgs e)
 {
     if (this.PatchNotification != null)
     {
         this.syncContext?.Send(new System.Threading.SendOrPostCallback(delegate { this.PatchNotification.Invoke(this, e); }), null);
     }
 }
Example #2
0
 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;
        }
Example #6
0
        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;
                    }
                }
            }
        }
Example #7
0
        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;
        }