Пример #1
0
        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;
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
                }
            }
        }