Exemplo n.º 1
0
        // TODO: add caching for get all posts
        protected async Task <IEnumerable <Post> > GetAllAsync(CancellationToken cancellationToken)
        {
            IDictionary <string, byte[]> files;
            var posts = new List <Post>();

            try
            {
                files = await GitDbContext.GetFilesAsync(PathHelper.Build(Options.Value.RootPath, GitDbConstants.PostsFolder), cancellationToken);
            }
            catch
            {
                return(posts);
            }

            var postFiles = files.Values.Select(b => Encoding.UTF8.GetString(b));

            foreach (var postFile in postFiles)
            {
                var json      = postFile.Substring(0, postFile.IndexOf(GitDbConstants.MetaDataSeparator));
                var gitDbPost = JsonSerializer.Deserialize <GitDbPost>(json, new JsonSerializerOptions {
                    AllowTrailingCommas = true
                });

                var post = new Post
                {
                    Title        = gitDbPost.Title,
                    Description  = gitDbPost.Description,
                    Categories   = gitDbPost.Categories,
                    Published    = gitDbPost.Published,
                    Slug         = gitDbPost.Slug,
                    CoverUrl     = gitDbPost.CoverUrl,
                    CoverCaption = gitDbPost.CoverCaption,
                    CoverLink    = gitDbPost.CoverLink,
                };

                var content = postFile.Substring(postFile.IndexOf(GitDbConstants.MetaDataSeparator) + GitDbConstants.MetaDataSeparator.Length);
                post.Content = content.Trim();

                // TODO: add caching for authors
                var author = await _authorRepository.SingleOrDefaultAsync(a => a.UserName == gitDbPost.AuthorId, cancellationToken);

                post.Author = author;

                posts.Add(post);
            }

            return(posts);
        }
Exemplo n.º 2
0
        public async Task <BlogSettings> SingleOrDefaultAsync(CancellationToken cancellationToken)
        {
            IDictionary <string, byte[]> files;

            try
            {
                files = await GitDbContext.GetFilesAsync(new string[] { PathHelper.Build(Options.Value.RootPath, GitDbConstants.BlogSettingsFile) }, cancellationToken);
            }
            catch
            {
                return(null);
            }

            var json         = Encoding.UTF8.GetString(files.Values.Single());
            var blogSettings = JsonSerializer.Deserialize <BlogSettings>(json, new JsonSerializerOptions {
                AllowTrailingCommas = true
            });

            return(blogSettings);
        }
Exemplo n.º 3
0
        public async Task <Author> SingleOrDefaultAsync(Expression <Func <Author, bool> > predicate, CancellationToken cancellationToken)
        {
            IDictionary <string, byte[]> files;

            try
            {
                files = await GitDbContext.GetFilesAsync(new string[] { PathHelper.Build(Options.Value.RootPath, GitDbConstants.AuthorsFile) }, cancellationToken);
            }
            catch
            {
                return(null);
            }

            var json    = Encoding.UTF8.GetString(files.Values.Single());
            var authors = JsonSerializer.Deserialize <IEnumerable <Author> >(json, new JsonSerializerOptions {
                AllowTrailingCommas = true
            });

            return(authors.SingleOrDefault(predicate.Compile()));
        }