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); } }
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); }