Пример #1
0
        private void CheckScriptUpdate()
        {
            DateTime now = DateTime.UtcNow;
            var      updatedScriptData = false;
            var      toUpdate          = new List <UserScript>();
            var      toUpdateTo        = new List <ScriptWithContent>();

            foreach (UserScript s in AllScripts)
            {
                if (!Userscript.UpdateDisabledScripts && !s.Enabled)
                {
                    continue;
                }

                if (!String.IsNullOrWhiteSpace(s.UpdateUrl) && s.InstallDate < now - TimeSpan.FromDays(7))
                {
                    try
                    {
                        var content = ScriptDownloader.DownloadDefendencies(s.UpdateUrl); //SendWebRequest(s.UpdateUrl);
                        if (content == String.Empty)                                      // Request failed, try again later
                        {
                            continue;
                        }
                        var newScript = ParseUserScript.Parse(content, false);

                        if (newScript.Version != s.Version)
                        {
                            var scriptContents = new ScriptWithContent(newScript)
                            {
                                Content = content
                            };
                            toUpdate.Add(s);
                            toUpdateTo.Add(scriptContents);
                        }
                    }
                    catch (Exception ex)
                    {
                        Logger.w("Script update check failed for: " + s.Name, ex);
                    }
                    s.InstallDate     = now;
                    updatedScriptData = true;
                }
            }

            if (updatedScriptData)
            {
                Save();
            }

            if (toUpdate.Count > 0)
            {
                AskUpdateScriptsAsync(toUpdate, toUpdateTo);
            }
        }
Пример #2
0
        public static UserScript UpdateParsedData(UserScript s, string contents, bool isCss)
        {
            //Requires API (should the API wrapper be added to the script)
            s.RequiresApi = contents.Contains("GM_");

            // Resources
            var reg     = new Regex(Resource);
            var matches = reg.Matches(contents);

            s.Resources = new Dictionary <string, string>();
            foreach (Match match in matches)
            {
                s.Resources.Add(match.Groups[2].Value, match.Groups[3].Value);
            }

            // Require
            // Get new values
            if (s.Require == null)
            {
                s.Require = new Dictionary <string, string>();
            }

            reg     = new Regex(Require);
            matches = reg.Matches(contents);
            var req = new List <string>();

            for (int i = 0; i < matches.Count; i++)
            {
                req.Add(matches[i].Groups[2].Value);
            }

            for (int i = 0; i < s.Require.Count; i++)
            {
                var key = s.Require.Keys.ToArray()[i];
                if (!req.Contains(key))
                {
                    s.Require.Remove(key);
                    i--;
                }
            }

            foreach (string t in req.Where(t => !s.Require.ContainsKey(t)))
            {
                s.Require.Add(t, ScriptDownloader.DownloadDefendencies(t));
            }
            return(s);
        }