public TerrificTemplateRepository(IFileSystem fileSystem) { _fileSystem = fileSystem; InitCache(); if (!_fileSystem.SupportsSubscribe) return; _fileSystem.Subscribe(GlobPattern.AllWithExtension("html"), files => InitCache()); }
public static Project FromFile(string input, IFileSystem fileSystem) { var jObject = JsonConvert.DeserializeObject<Dictionary<string, JToken>>(input); var project = new Project(); foreach (var entry in jObject) { var kindObj = entry.Key; string[] list; if (entry.Value is JArray) list = entry.Value.ToObject<string[]>(); else list = new[] {entry.Value.ToObject<string>()}; foreach (var item in list) { var info = fileSystem.GetFileInfo(PathInfo.Create(item)); if (info == null) { var globPattern = GlobPattern.Create(item); if (!globPattern.IsWildcard) throw new InvalidProjectFileException($"Could not find file {item}."); var items = fileSystem.GetFiles(globPattern); foreach (var file in items) { var fileItem = new FileProjectItem(kindObj, file, fileSystem); ProjectItem existing; if (!project.TryGetItemById(fileItem.Identifier, out existing)) project.AddItem(fileItem); } project.AddSubscription(fileSystem.Subscribe(globPattern, a => { HandleChange(a, project, kindObj, fileSystem); })); } else { AddFile(fileSystem, project, kindObj, info, item); } } } return project; }
private static void AddFile(IFileSystem fileSystem, Project project, string kindObj, IFileInfo info, string item) { project.AddItem(new FileProjectItem(kindObj, info, fileSystem)); project.AddSubscription(fileSystem.Subscribe(GlobPattern.Exact(item), a => { HandleChange(a, project, kindObj, fileSystem); })); }