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