예제 #1
0
        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();
        }
예제 #2
0
        /// <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)
                    );
            }
        }