Exemple #1
0
        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()
                       };
        }
Exemple #2
0
        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;
        }
Exemple #3
0
        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);
        }
Exemple #6
0
 private IEnumerable<BlogPost> GetBlogPosts(
     DataSourceRefreshContext refreshInfo, IEnumerable<FileListItem> modifiedFiles)
 {
     return GetContentMetaPairs(modifiedFiles).Select(x => this.GetBlogPost(refreshInfo, x.Key, x.Value));
 }
Exemple #7
0
 protected internal virtual IEnumerable<FileListItem> GetFileList(DataSourceRefreshContext refreshInfo)
 {
     return DiskFileHelper.GetFileList(refreshInfo.BlogSetting.DataSourceUri, HtmlExtension, JsonExtension);
 }
Exemple #8
0
        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;
        }