public override DataSourceRefreshResult Refresh(DataSourceRefreshContext refreshInfo) { var allFiles = this.GetFileList(refreshInfo).ToList(); var modifiedBlogPostMetas = this.GetModifiedPostMetas(refreshInfo, allFiles).ToList(); var modifiedFiles = from file in allFiles let fileName = Path.GetFileNameWithoutExtension(file.FullPath) from modified in modifiedBlogPostMetas let modifiedName = Path.GetFileNameWithoutExtension(modified.DataSourceId) where fileName == modifiedName select file; var modifiedBlogPosts = this.GetBlogPosts(refreshInfo, modifiedFiles).ToList(); var allBloggerIds = allFiles.Select(x => x.FullPath); var removedBlogPostIds = this.GetDeletedPostIds( refreshInfo.ExistingBlogPostsMetas.Select(x => x.Id), allBloggerIds); var blogInfo = this.GetBlogInfo(allFiles, refreshInfo.BlogInfoChecksum); blogInfo.Updated = blogInfo.Updated ?? (modifiedBlogPosts.Any() ? modifiedBlogPosts.Max(x => x.Updated) ?? DateTime.Now.ToUniversalTime() : (DateTime?)null); return new DataSourceRefreshResult { BlogInfo = blogInfo, ModifiedBlogPosts = modifiedBlogPosts, RemovedBlogPostIds = removedBlogPostIds.ToList() }; }
public static IEnumerable<FileListItem> GetModifiedFiles( DataSourceRefreshContext refreshInfo, IEnumerable<FileListItem> fileList) { var blogPostsMeta = refreshInfo.ExistingBlogPostsMetas.ToList(); var modifiedFiles = from file in fileList let existing = blogPostsMeta.FirstOrDefault(x => x.Id == file.FullPath) where existing != null || existing.Checksum != file.Checksum select file; return modifiedFiles; }
private IEnumerable<BlogPostMeta> GetModifiedPostMetas( DataSourceRefreshContext refreshInfo, IEnumerable<FileListItem> allFiles) { var metas = from kvp in GetContentMetaPairs(allFiles) let dataSourceId = Path.GetFileNameWithoutExtension(kvp.Key.FullPath) select new BlogPostMeta(dataSourceId) { BlogKey = refreshInfo.BlogSetting.BlogKey, Checksum = GetChecksum(kvp.Key, kvp.Value) }; return this.GetModifiedPostMetas(refreshInfo, metas); }
protected override IEnumerable<FileListItem> GetFileList(DataSourceRefreshContext refreshInfo) { return this.apiHelper.GetFileList(HtmlExtension, JsonExtension) .Select(x => new FileListItem { Checksum = x.Sha, FullPath = x.Path }); }
public override DataSourceRefreshResult Refresh(DataSourceRefreshContext refreshInfo) { this.apiHelper = new GitHubApiHelper(refreshInfo.BlogSetting); return base.Refresh(refreshInfo); }
private IEnumerable<BlogPost> GetBlogPosts( DataSourceRefreshContext refreshInfo, IEnumerable<FileListItem> modifiedFiles) { return GetContentMetaPairs(modifiedFiles).Select(x => this.GetBlogPost(refreshInfo, x.Key, x.Value)); }
protected internal virtual IEnumerable<FileListItem> GetFileList(DataSourceRefreshContext refreshInfo) { return DiskFileHelper.GetFileList(refreshInfo.BlogSetting.DataSourceUri, HtmlExtension, JsonExtension); }
private BlogPost GetBlogPost( DataSourceRefreshContext refreshInfo, FileListItem contentFile, FileListItem metaFile) { if (contentFile == null) { throw new ArgumentNullException("contentFile"); } string blogKey = refreshInfo.BlogSetting.BlogKey; string content = this.GetFileContent(contentFile.FullPath); string metaContent = (metaFile != null) ? this.GetFileContent(metaFile.FullPath) : null; var blogPost = ((!String.IsNullOrWhiteSpace(metaContent)) ? JsonHelper.Deserialize<BlogPost>(metaContent) : null) ?? new BlogPost(blogKey); blogPost.BlogKey = blogPost.BlogKey ?? refreshInfo.BlogSetting.BlogKey; blogPost.Content = content; blogPost.DataSourceUrl = contentFile.FullPath; blogPost.Title = blogPost.Title ?? Path.GetFileNameWithoutExtension(contentFile.FullPath); blogPost.UrlSlug = blogPost.UrlSlug ?? UrlSlug.Create(blogPost.Title); blogPost.Checksum = GetChecksum(contentFile, metaFile); string dataSourceId = Path.GetFileNameWithoutExtension(contentFile.FullPath); blogPost.SetIds(dataSourceId); return blogPost; }