private void CheckPluginLanguages(object o) { PluginUpdateHandler.LoadPlugins(false); if (!PluginConfig.Active) { return; } if (m_bPluginLanguagesChecked) { return; } m_bPluginLanguagesChecked = true; string translations = string.Empty; List <OwnPluginUpdate> lPlugins = new List <OwnPluginUpdate>(); foreach (PluginUpdate pu in PluginUpdateHandler.Plugins) { if (!PluginUpdateHandler.VersionsEqual(pu.VersionInstalled, pu.VersionAvailable)) { continue; } foreach (var t in pu.Translations) { if (t.NewTranslationAvailable || (PluginConfig.DownloadActiveLanguage && t.TranslationForCurrentLanguageAvailable)) { lPlugins.Add(pu as OwnPluginUpdate); break; } } } if (lPlugins.Count == 0) { return; } var arrPlugins = lPlugins.ConvertAll(x => x.ToString()).ToArray(); PluginDebug.AddInfo("Available translation updates", 0, arrPlugins); KeePassLib.Delegates.GAction DisplayTranslationForm = () => { using (TranslationUpdateForm t = new TranslationUpdateForm()) { t.InitEx(lPlugins); if (t.ShowDialog() == DialogResult.OK) { UpdatePluginTranslations(PluginConfig.DownloadActiveLanguage, t.SelectedPlugins); } } }; m_host.MainWindow.BeginInvoke(DisplayTranslationForm); }
internal void InitEx(List <OwnPluginUpdate> lPlugins) { Text = PluginTranslate.TranslationUpdateForm; lSelectPlugins.Text = PluginTranslate.SelectPluginsForTranslationUpdate; bOK.Text = PluginTranslate.TranslationDownload_Update; bOK.Text = PluginTranslate.PluginUpdateSelected; bCancel.Text = KPRes.Cancel; clbPlugins.Items.Clear(); lPlugins.Sort(SortOwnPluginUpdate); foreach (OwnPluginUpdate plugin in lPlugins) { clbPlugins.Items.Add(plugin.Name, PluginUpdateHandler.VersionsEqual(plugin.VersionInstalled, plugin.VersionAvailable) ? CheckState.Checked : CheckState.Indeterminate); } }
private void bUpdateTranslations_Click(object sender, EventArgs e) { List <OwnPluginUpdate> lPlugins = new List <OwnPluginUpdate>(); foreach (PluginUpdate pu in PluginUpdateHandler.Plugins) { OwnPluginUpdate opu = pu as OwnPluginUpdate; if (opu == null) { continue; } if (!PluginUpdateHandler.VersionsEqual(pu.VersionInstalled, pu.VersionAvailable)) { continue; } if (opu.Translations.Count == 0) { continue; } if (!lPlugins.Contains(opu)) { lPlugins.Add(opu); } } if (lPlugins.Count == 0) { PluginTools.PluginDebug.AddInfo("No plugins where translations can be updated", 0); return; } using (TranslationUpdateForm t = new TranslationUpdateForm()) { t.InitEx(lPlugins); if (t.ShowDialog() == DialogResult.OK) { Plugin.UpdatePluginTranslations(PluginConfig.DownloadActiveLanguage, t.SelectedPlugins); } } }
private void UpdateAvailableTranslations() { Dictionary <string, List <UpdateComponentInfo> > dUpdateInfo = new Dictionary <string, List <UpdateComponentInfo> >(); Dictionary <string, long> dResult = new Dictionary <string, long>(); Type t = typeof(KeePass.Program).Assembly.GetType("KeePass.Util.UpdateCheckEx"); if (t == null) { PluginDebug.AddError("Could not locate class 'UpdateCheckEx'", 0); return; } MethodInfo mi = t.GetMethod("DownloadInfoFiles", BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Static); if (mi == null) { PluginDebug.AddError("Could not locate method 'DownloadInfoFiles'", 0); return; } if (string.IsNullOrEmpty(VersionURL)) { PluginDebug.AddError("Could not read plugin update url", 0); return; } dUpdateInfo = mi.Invoke(null, new object[] { new List <string>() { VersionURL }, null }) as Dictionary <string, List <UpdateComponentInfo> >; List <string> lTranslationsNew = new List <string>(); string[] cSplit = new string[] { "!", "!!!" }; foreach (KeyValuePair <string, List <UpdateComponentInfo> > kvp in dUpdateInfo) { if (kvp.Value == null) { continue; } Version vCheck = null; foreach (UpdateComponentInfo uci in kvp.Value) { //Github: <Plugin>!<language identifier> string[] sParts = uci.Name.Split(cSplit, StringSplitOptions.RemoveEmptyEntries); if (sParts.Length == 1) { vCheck = new Version(StrUtil.VersionToString(uci.VerAvailable, 2)); if (VersionAvailableIsUnknown()) { VersionAvailable = vCheck; } } if (!PluginUpdateHandler.VersionsEqual(VersionInstalled, vCheck)) { return; //Different version might require different translation files } if (sParts.Length != 2) { continue; } long lVer = 0; if (!long.TryParse(StrUtil.VersionToString(uci.VerAvailable), out lVer)) { continue; } string sLang = Name + "." + sParts[1].ToLowerInvariant() + ".language.xml"; TranslationVersionCheck tvc = Translations.Find(x => x.LangugageFile == sLang); if (tvc == null) { tvc = new TranslationVersionCheck() { LangugageFile = sLang }; Translations.Add(tvc); } tvc.Available = lVer; } } }