public MainForm(LanguageCatalog languageCatalog, IEnumerable <IPatchTarget> containers) { InitializeComponent(); this.languageCatalog = languageCatalog ?? throw new ArgumentNullException(nameof(languageCatalog)); this.containers = containers ?? throw new ArgumentNullException(nameof(containers)); // Save the selected file text so we can set it again when resetting the form. defaultSelectedFileText = labelSelectedFile.Text; // Hide the newest version label and update button. They will be shown when the user clicks check update. labelNewestLangVersion.Visible = false; buttonLanguageUpdate.Visible = false; // Load the translations from a file if it exists (downloaded via update) or the resource if not localLanguageFile = Path.Join( Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), Properties.Resources.LanguageLocalFile ); if (File.Exists(localLanguageFile)) { languageCatalog.LoadTranslations(new FileInfo(localLanguageFile)); } else { using var stream = new MemoryStream(Properties.Resources.LoTranslation); languageCatalog.LoadTranslations(stream); } Debug.WriteLine($"Loaded {languageCatalog.Catalog.Count:N0} language entries"); // Display any translation catalog errors to the user. We continue so the user can attempt to update the // broken translations. if (languageCatalog.Errors.Any()) { ErrorMessage( Properties.Resources.ErrorModalTranslationParse, string.Join("\r\n", languageCatalog.Errors) ); } patchWorker.OnComplete += PatchWorker_OnComplete; languageUpdateChecker.OnComplete += LanguageUpdateChecker_OnComplete; languageUpdater.OnComplete += LanguageUpdater_OnComplete; DragEnter += MainForm_DragEnter; DragDrop += MainForm_DragDrop; ResetForm(); }
/// <summary> /// Called when the language task is complete. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void LanguageUpdater_OnComplete(object sender, UpdateResponse e) { if (labelCurrentLangVersion.InvokeRequired) { labelCurrentLangVersion.Invoke(new MethodInvoker(delegate { LanguageUpdater_OnComplete(sender, e); })); return; } progressBar.Visible = false; labelCurrentStatus.Visible = false; EnableForm(true); if (!e.Success) { ErrorMessage(Properties.Resources.ErrorModalUpdateFailed, e.Error?.Message ?? "Unknown error."); return; } using var stream = File.OpenRead(GetLocalTranslationPath()); if (languageCatalog.LoadTranslations(stream)) { buttonLanguageUpdate.Visible = false; labelCurrentLangVersion.Text = languageCatalog.Version?.ToString() ?? Properties.Resources.UnkownVersion; } else { ErrorMessage( Properties.Resources.ErrorModalTranslationParse, string.Join("\r\n", languageCatalog.Errors) ); } }