public ScriptInfo(string filepath, string code, ScriptHeaderFields metadata) { string fileName = Path.GetFileName(filepath) ?? ""; string baseName = StripAllExtenstions(fileName); Id = metadata.Get("id") ?? baseName; Name = CleanupName(metadata.Get("name") ?? baseName); Filepath = filepath; Timestamp = new FileInfo(filepath).LastWriteTimeUtc.Ticks; Metadata = metadata; Code = code; IsUserscript = filepath.EndsWith(".usr.js"); }
public ScriptInfo(string filepath, string code, ScriptHeaderFields metadata) { string fileName = Path.GetFileName(filepath) ?? ""; string baseName = StripAllExtenstions(fileName); Id = metadata.Get("id") ?? baseName; Name = CleanupName(metadata.Get("name") ?? baseName); Filepath = filepath; Timestamp = new FileInfo(filepath).LastWriteTimeUtc.Ticks; Metadata = metadata; Code = code; DownloadUrl = metadata.Get("downloadURL") ?? string.Format(ScriptRepository.DEFAULT_DOWNLOADSOURCE_URL, fileName); IsUserscript = filepath.EndsWith(".usr.js"); }
private ScriptHeaderFields ParseHeaderFields(string script) { var metadata = new ScriptHeaderFields(); int start = script.IndexOf("// ==UserScript=="); int end = script.IndexOf("// ==/UserScript=="); if (start < 0 || end < 0) { start = script.IndexOf("/*"); end = script.IndexOf("*/", start + 1); } if (start >= 0 && end >= 0) { var regex = new Regex("^\\s*//\\s*@(\\w+)\\s+(.*?)\\s*$"); string[] lines = script.Substring(start, end - start + 1).Split('\n'); foreach (string line in lines) { Match match = regex.Match(line); if (!match.Success) continue; string key = match.Groups[1].Value; string value = match.Groups[2].Value; metadata.Add(key, value); } } return metadata; }