private void MainWindow_FormLoadPost(object sender, EventArgs e) { //Can be null if restart after upgrade is in progress //In this case, EarlyUpdateCheckExt.Terminate() might have been called already //RemoveAndBackupFormLoadPostHandlers and RestoreFormLoadPostHandlers should work around that, but you never know... if (m_host == null || m_host.MainWindow == null) { return; } if (m_host.MainWindow.IsDisposed || m_host.MainWindow.Disposing) { return; } m_host.MainWindow.FormLoadPost -= MainWindow_FormLoadPost; //Load plugins and check check for new translations if not already done if (PluginUpdateHandler.CheckTranslations && !m_bRestartInvoke) { ThreadPool.QueueUserWorkItem(new WaitCallback(CheckPluginLanguages)); } else if (!m_bRestartInvoke) { //Only load plugins, do NOT check for new translations ThreadPool.QueueUserWorkItem(new WaitCallback((object o) => { PluginUpdateHandler.LoadPlugins(false); })); } PluginDebug.AddInfo("All plugins loaded", 0, DebugPrint); m_bRestartInvoke = false; }
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); }
private void OnUpdateCheckFormShown(object sender, EventArgs e) { m_lEventHandlerItemActivate = null; PluginDebug.AddSuccess("OUCFS 1", 0); if (!PluginConfig.Active || !PluginConfig.OneClickUpdate) { return; } PluginDebug.AddSuccess("OUCFS 2", 0); CustomListViewEx lvPlugins = (CustomListViewEx)Tools.GetControl("m_lvInfo", sender as UpdateCheckForm); if (lvPlugins == null) { PluginDebug.AddError("m_lvInfo not found", 0); return; } else { PluginDebug.AddSuccess("m_lvInfo found", 0); } PluginUpdateHandler.LoadPlugins(false); if (PluginUpdateHandler.Plugins.Count == 0) { return; } SetPluginSelectionStatus(false); bool bColumnAdded = false; m_lEventHandlerItemActivate = EventHelper.GetItemActivateHandlers(lvPlugins); if (m_lEventHandlerItemActivate.Count > 0) { EventHelper.RemoveItemActivateEventHandlers(lvPlugins, m_lEventHandlerItemActivate); lvPlugins.ItemActivate += LvPlugins_ItemActivate; } //https://github.com/mono/mono/issues/17747 //Do NOT use ListView.SmallImageList if (m_ImgApply == null) { m_ImgApply = (Image)KeePass.Program.Resources.GetObject("B16x16_Apply"); } if (m_ImgUnselected == null) { m_ImgUnselected = m_ImgApply == null ? null : UIUtil.CreateGrayImage(m_ImgApply); } foreach (ListViewItem item in lvPlugins.Items) { PluginDebug.AddInfo("Check plugin update status", 0, item.SubItems[0].Text, item.SubItems[1].Text); if (!item.SubItems[1].Text.Contains(KeePass.Resources.KPRes.NewVersionAvailable)) { continue; } foreach (PluginUpdate upd in PluginUpdateHandler.Plugins) { if (item.SubItems[0].Text != upd.Title) { continue; } if (upd.UpdateMode == UpdateOtherPluginMode.Unknown) { continue; } if (!bColumnAdded) { lvPlugins.Columns.Add(PluginTranslate.PluginUpdate); bColumnAdded = true; } ListViewItem.ListViewSubItem lvsiUpdate = new ListViewItem.ListViewSubItem(item, PluginTranslate.PluginUpdate); lvsiUpdate.Tag = upd; item.SubItems.Add(lvsiUpdate); upd.Selected = true; try { upd.VersionAvailable = new Version(item.SubItems[3].Text); } catch (Exception ex) { PluginDebug.AddError("Could not parse new version", 0, upd.Name, item.SubItems[3].Text, ex.Message); } break; } } if (bColumnAdded) { UIUtil.ResizeColumns(lvPlugins, new int[] { 3, 3, 2, 2, 1 }, true); lvPlugins.MouseClick += OnUpdateCheckFormPluginMouseClick; lvPlugins.OwnerDraw = true; lvPlugins.DrawSubItem += LvPlugins_DrawSubItem; lvPlugins.DrawColumnHeader += LvPlugins_DrawColumnHeader; ShowUpdateButton(sender as Form, true); } if (m_lEventHandlerItemActivate.Count == 0) { if (lvPlugins.ContextMenuStrip == null) { lvPlugins.ContextMenuStrip = new ContextMenuStrip(); string sMenuText = KeePass.Resources.KPRes.PluginsDesc; try { sMenuText = Tools.GetControl("m_linkPlugins", sender as UpdateCheckForm).Text; } catch { } lvPlugins.ContextMenuStrip.Items.Add(new ToolStripMenuItem(sMenuText, null, OnReleasePageClick)); lvPlugins.ContextMenuStrip.Opening += ContextMenuStrip_Opening; } else { PluginDebug.AddWarning("m_lvEntries.ContextMenuStrip already defined, special handling for added 'go to release page' to be defined", 0); } } }