Exemplo n.º 1
0
        private void BWorker_tweakerWebBrowser_load_DoWork(object sender, DoWorkEventArgs e)
        {
            /*string linefiletoskip = Classes.AIDA.TweakerWebPanel.CutString;
             * linefiletoskip = WebClientPool.GetWebClient(DefaultValues.MyServer.GetWebLink).DownloadString(DefaultValues.MyServer.GetWebLink + DefaultValues.MyServer.Web.TweakerSidePanelLiner);
             * if (string.IsNullOrWhiteSpace(linefiletoskip))
             *  linefiletoskip = Classes.AIDA.TweakerWebPanel.CutString;*/
            TweakerWebBrowser_IsLoading(true);
            if (!AIDA.IsPingedAIDA)
            {
                AIDA.GetIdeaServer();
            }
            if (AIDA.IsPingedAIDA)
            {
                this.webBrowserTweaker.LockNavigate = false;
                string resultofgettinghtmlfile = WebClientPool.GetWebClient_AIDA().DownloadString(AIDA.TweakerWebPanel.InfoPageLink);
                if (string.IsNullOrEmpty(resultofgettinghtmlfile))
                {
                    this.webBrowserTweaker.NavigateAsync(AIDA.TweakerWebPanel.InfoPageLink);
                    this.webBrowserTweaker.LockNavigate = true;
                }
                else
                {
                    this.webBrowserTweaker.NavigateContentAsync(resultofgettinghtmlfile);
                    this.webBrowserTweaker.LockNavigate = true;
                    //this.tweakerWebBrowser.EnglishPatchStatus = result.EnglishPatch;
                    //this.tweakerWebBrowser.ItemPatchStatus = result.ItemPatch;
                }//*/
            }
            else
            {
                this.webBrowserTweaker.LockNavigate = false;
                this.webBrowserTweaker.NavigateContentAsync(
                    @"
<!DOCTYPE html>
<html>
<head>
    <meta charset=""utf-8"" />
    <style>
        div{text-align:center;width:100%;font-weight:bold;font-family:""Times New Roman"",Times,serif;font-size:17px;}
        a:visited,a{color:red;}
    </style>
</head>
<body>
    <div>
        <span>Failed to connect to Arks-Layer's server.</span><br/>
        <a href=""leayal://retry"">Click me to retry</a>
    </div>
</body>
</html>
");
                this.webBrowserTweaker.LockNavigate = true;
            }
        }
        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 void OnUninstalling(object sender, DoWorkEventArgs e)
        {
            WorkerInfo wi = e.Argument as WorkerInfo;

            this.OnCurrentStepChanged(new StepEventArgs(string.Format(LanguageManager.GetMessageText("Restoring0PatchFiles", "Restoring {0} files"), Infos.DefaultValues.AIDA.Strings.LargeFilesPatchCalled)));
            string sourceTable = string.Empty;

            using (var theTextReader = new StringReader(wi.Params as string))
                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        pso2datafolder      = DefaultValues.Directory.PSO2Win32Data;
            string        englishBackupFolder = Path.Combine(pso2datafolder, DefaultValues.Directory.PSO2Win32DataBackup, DefaultValues.Directory.Backup.LargeFiles);
            List <string> backup_files        = new List <string>();

            if (Directory.Exists(englishBackupFolder))
            {
                foreach (string derp in Directory.GetFiles(englishBackupFolder, "*", SearchOption.TopDirectoryOnly))
                {
                    backup_files.Add(Path.GetFileName(derp).ToLower());
                }
            }
            string backedup;
            string data;
            string currentStringIndex;

            this.OnProgressBarStateChanged(new ProgressBarStateChangedEventArgs(Forms.MyMainMenu.ProgressBarVisibleState.Percent));
            if (backup_files.Count > 0)
            {
                if (tbl_files.Length > backup_files.Count)
                {
                    int total = tbl_files.Length;
                    this.OnCurrentTotalProgressChanged(new ProgressEventArgs(total));
                    int           count    = 0;
                    List <string> nonExist = new List <string>();
                    for (int i = 0; i < tbl_files.Length; i++)
                    {
                        currentStringIndex = tbl_files[i].ToLower();
                        data     = Path.Combine(pso2datafolder, currentStringIndex);
                        backedup = Path.Combine(englishBackupFolder, currentStringIndex);
                        if (File.Exists(backedup))
                        {
                            backup_files.Remove(currentStringIndex);
                            File.Delete(data);
                            File.Move(backedup, data);
                            count++;
                            this.OnCurrentProgressChanged(new ProgressEventArgs(count + 1));
                        }
                        else
                        {
                            nonExist.Add(currentStringIndex);
                        }
                    }
                    if (backup_files.Count > 0)
                    {
                        for (int i = 0; i < backup_files.Count; i++)
                        {
                            currentStringIndex = backup_files[i];
                            data     = Path.Combine(pso2datafolder, currentStringIndex);
                            backedup = Path.Combine(englishBackupFolder, currentStringIndex);
                            if (File.Exists(backedup))
                            {
                                File.Delete(data);
                                File.Move(backedup, data);
                                count++;
                                this.OnCurrentProgressChanged(new ProgressEventArgs(count + 1));
                            }
                        }
                    }
                    Directory.Delete(englishBackupFolder, true);
                    if (nonExist.Count > 0)
                    {
                        this.OnCurrentTotalProgressChanged(new ProgressEventArgs(nonExist.Count));
                        this.OnCurrentStepChanged(new StepEventArgs(LanguageManager.GetMessageText("RedownloadingMissingOriginalFiles", "Redownloading missing original files")));
                        using (CustomWebClient downloader = WebClientPool.GetWebClient_PSO2Download())
                        {
                            Dictionary <string, string> downloadlist = new Dictionary <string, string>();
                            for (int i = 0; i < nonExist.Count; i++)
                            {
                                currentStringIndex = nonExist[i];
                                downloadlist.Add("data/win32/" + currentStringIndex + DefaultValues.Web.FakeFileExtension, Path.Combine(pso2datafolder, currentStringIndex));
                            }
                            downloader.AutoUserAgent = true;
                            PSO2UpdateManager.RedownloadFiles(downloader, downloadlist, Downloader_StepProgressChanged, Downloader_DownloadFileProgressChanged, this.Uninstall_RedownloadCallback);
                            e.Result = false;
                        }
                    }
                    else
                    {
                        e.Result = true;
                    }
                }
                else
                {
                    int total = backup_files.Count;
                    this.OnCurrentTotalProgressChanged(new ProgressEventArgs(total));
                    for (int i = 0; i < backup_files.Count; i++)
                    {
                        currentStringIndex = backup_files[i];
                        data     = Path.Combine(pso2datafolder, currentStringIndex);
                        backedup = Path.Combine(englishBackupFolder, currentStringIndex);
                        if (File.Exists(backedup))
                        {
                            File.Delete(data);
                            File.Move(backedup, data);
                            this.OnCurrentProgressChanged(new ProgressEventArgs(i + 1));
                        }
                    }
                    Directory.Delete(englishBackupFolder, true);
                    e.Result = true;
                }
            }
            else if (tbl_files.Length > 0)
            {
                if (!this.IsInstalled)
                {
                    throw new KeyNotFoundException(string.Format(LanguageManager.GetMessageText("0PatchIsNotInstalled", "{0} is not installed."), Infos.DefaultValues.AIDA.Strings.LargeFilesPatchCalled));
                }
                this.OnCurrentTotalProgressChanged(new ProgressEventArgs(tbl_files.Length));
                this.OnCurrentStepChanged(new StepEventArgs(LanguageManager.GetMessageText("RedownloadingMissingOriginalFiles", "Redownloading missing original files")));
                using (CustomWebClient downloader = WebClientPool.GetWebClient_PSO2Download())
                {
                    Dictionary <string, string> downloadlist = new Dictionary <string, string>();
                    for (int i = 0; i < tbl_files.Length; i++)
                    {
                        currentStringIndex = tbl_files[i];
                        downloadlist.Add("data/win32/" + currentStringIndex + DefaultValues.Web.FakeFileExtension, Path.Combine(pso2datafolder, currentStringIndex));
                    }
                    downloader.AutoUserAgent = true;
                    PSO2UpdateManager.RedownloadFiles(downloader, downloadlist, Downloader_StepProgressChanged, Downloader_DownloadFileProgressChanged, this.Uninstall_RedownloadCallback);
                    e.Result = false;
                }
            }
            else
            {
                throw new Exception("Unknown Error");
                //Failed
            }
        }
        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 = e.UserState as WorkerInfo;
            RaiserWebClientInstallingMetaWrapper meta = null;

            if (state == null)
            {
                meta = e.UserState as RaiserWebClientInstallingMetaWrapper;
            }
            if (e.Error != null)
            {
                if (state != null)
                {
                    switch (state.Step)
                    {
                    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)
                    {
                    default:
                        this.OnProgressBarStateChanged(new ProgressBarStateChangedEventArgs(Forms.MyMainMenu.ProgressBarVisibleState.None));
                        this.OnHandledException(new HandledExceptionEventArgs(new NotImplementedException()));
                        break;
                    }
                }
            }
            else
            {
                if (state != null)
                {
                    switch (state.Step)
                    {
                    default:
                        this.OnHandledException(new HandledExceptionEventArgs(new NotImplementedException()));
                        break;
                    }
                }
                else if (meta != null)
                {
                    switch (meta.Step)
                    {
                    case 0:
                        if (!string.IsNullOrEmpty(e.Result))
                        {
                            try
                            {
                                string raiserURL = AIDA.FlatJsonFetch <string>(e.Result, Infos.DefaultValues.AIDA.Tweaker.TransArmThingiesOrWatever.RaiserURL);
                                if (!string.IsNullOrWhiteSpace(raiserURL))
                                {
                                    this.myWebClient_ForAIDA.DownloadStringAsync(new System.Uri(raiserURL), new RaiserWebClientInstallingMetaWrapper(1, meta.Meta, meta.LanguageName));
                                }
                                else
                                {
                                    this.OnPatchInstalled(new PatchFinishedEventArgs(VersionString));
                                }
                            }
                            catch (UriFormatException uriEx) { this.OnHandledException(new HandledExceptionEventArgs(uriEx)); }
                        }
                        else
                        {
                            this.OnHandledException(new HandledExceptionEventArgs(new Exception("Failed to check for patch.\r\n")));
                        }
                        break;

                    case 1:
                        this.OnProgressBarStateChanged(new ProgressBarStateChangedEventArgs(Forms.MyMainMenu.ProgressBarVisibleState.None));
                        if (!string.IsNullOrEmpty(e.Result))
                        {
                            try
                            {
                                var    langcode  = GetLangCode(meta.LanguageName);
                                var    obj       = GetValueFromJson(e.Result, langcode.ToString());
                                string newverurl = obj.URL,
                                       newvermd5 = obj.MD5;
                                if (!string.IsNullOrWhiteSpace(newverurl))
                                {
                                    System.Uri     url = new System.Uri(newverurl);
                                    InstallingMeta asd = new InstallingMeta(meta.Meta.Backup, meta.Meta.Force, newvermd5);
                                    if (this.VersionString != newvermd5 || !this.IsInstalled)
                                    {
                                        RaiserPatchNotificationEventArgs theevent = new RaiserPatchNotificationEventArgs(true, newvermd5, VersionString, meta.LanguageName);
                                        this.OnPatchNotification(theevent);
                                        if (meta.Meta.Force || theevent.Continue)
                                        {
                                            InstallPatchEx(theevent, url);
                                        }
                                    }
                                    else
                                    {
                                        this.OnPatchInstalled(new PatchFinishedEventArgs(VersionString));
                                    }
                                }
                                else
                                {
                                    this.OnPatchInstalled(new PatchFinishedEventArgs(VersionString));
                                }
                            }
                            catch (UriFormatException uriEx) { this.OnHandledException(new HandledExceptionEventArgs(uriEx)); }
                        }
                        else
                        {
                            this.OnHandledException(new HandledExceptionEventArgs(new Exception("Failed to check for patch.\r\n")));
                        }
                        break;
                    }
                }
            }
        }