public async Task <BlogGrpcResponse> DeleteTagAsync(BlogGrpcRequest request, CallContext context = default)
    {
        var response = new BlogGrpcResponse();

        try
        {
            await _blogFileService.DeleteBlogTagAsync(request.TagId);

            var posts = await _blogFileService.GetBlogPostsAsync();

            foreach (var blogPost in posts)
            {
                if (blogPost.Tag.Contains(request.TagId))
                {
                    blogPost.Tag.Remove(request.TagId);
                    await _blogFileService.UpdateBlogPostAsync(blogPost, blogPost.Link);
                }
            }

            await _blogSiteHttpClient.ReloadBlogDataAsync();
        }
        catch (Exception ex)
        {
            _logger.LogError(ex, $"{nameof(DeleteTagAsync)} failed.");
            response.IsOk    = false;
            response.Message = ex.Message;
        }

        return(response);
    }
    public async Task <BlogGrpcResponse> GetTagAsync(BlogGrpcRequest request, CallContext context = default)
    {
        var response = new BlogGrpcResponse();

        try
        {
            var tag = await _blogFileService.GetBlogTagAsync(request.TagId);

            if (tag == null)
            {
                response.IsOk    = false;
                response.Message = $"Tag id = {request.TagId} not found.";
            }
            else
            {
                response.Tag = tag;
            }
        }
        catch (Exception ex)
        {
            _logger.LogError(ex, $"{nameof(GetTagAsync)} failed.");
            response.IsOk    = false;
            response.Message = ex.Message;
        }

        return(response);
    }
    public async Task <BlogGrpcResponse> GetPostsAsync(BlogGrpcRequest request, CallContext context = default)
    {
        var response = new BlogGrpcResponse();

        try
        {
            var posts = await _blogFileService.GetBlogPostsAsync();

            var result = new List <BlogPostRuntime>();
            foreach (var blogPost in posts)
            {
                var blogPostRuntime = await GetBlogPostRuntimeAsync(blogPost, request.ExtractRuntime);

                result.Add(blogPostRuntime);
            }

            response.Posts = result;
        }
        catch (Exception ex)
        {
            _logger.LogError(ex, $"{nameof(GetPostsAsync)} failed.");
            response.IsOk    = false;
            response.Message = ex.Message;
        }

        return(response);
    }
    public async Task <BlogGrpcResponse> GetPostAsync(BlogGrpcRequest request, CallContext context = default)
    {
        var response = new BlogGrpcResponse();

        try
        {
            var post = await _blogFileService.GetBlogPostAsync(request.Link);

            if (post == null)
            {
                response.IsOk    = false;
                response.Message = $"Post with link not found: {request.Link}";
            }
            else
            {
                var blogPostRuntime = await GetBlogPostRuntimeAsync(post, request.ExtractRuntime);

                response.PostRuntime = blogPostRuntime;
            }
        }
        catch (Exception ex)
        {
            _logger.LogError(ex, $"{nameof(GetPostAsync)}({request.Link}) failed.");
            response.IsOk    = false;
            response.Message = ex.Message;
        }

        return(response);
    }
Exemple #5
0
 public BlogController(
     IOptions <AdminOptions> options, ILogger <BlogController> logger)
 {
     _logger          = logger;
     _options         = options.Value;
     _blogGrpcRequest = new BlogGrpcRequest();
     _blogGrpcService = GrpcClientHelper.CreateClient <IBlogGrpcService>(options.Value.ApiLocalEndpoint);
 }
Exemple #6
0
    public async Task ReloadAsync()
    {
        _reloadLock.Reset();
        try
        {
            var blogRequest = new BlogGrpcRequest {
                ExtractRuntime = true
            };
            var postsResponse = await _blogGrpcService.GetPostsAsync(blogRequest);

            if (!postsResponse.IsOk)
            {
                _logger.LogError($"Getting all posts failed: {postsResponse.Message}");
                return;
            }

            var tagsResponse = await _blogGrpcService.GetTagsAsync();

            if (!tagsResponse.IsOk)
            {
                _logger.LogError($"Getting all tags failed: {tagsResponse.Message}");
                return;
            }

            var readRequest = new ReadGrpcRequest {
                ExtractRuntime = true
            };
            var readResponse = await _readGrpcService.GetReadItemsAsync(readRequest);

            if (!readResponse.IsOk)
            {
                _logger.LogError($"Getting all read items failed: {tagsResponse.Message}");
                return;
            }

            var posts     = postsResponse.Posts ?? new List <BlogPostRuntime>();
            var tags      = tagsResponse.Tags ?? new List <BlogTag>();
            var readItems = readResponse.ReadItems ?? new List <ReadItemRuntime>();

            _allPosts.Clear();
            _allPosts.AddRange(posts.OrderByDescending(x => x.Raw.PublishTime));

            _allTags.Clear();
            _allTags.AddRange(tags.OrderByDescending(x => x.LastUpdatedAt));

            _allReadItems.Clear();
            _allReadItems.AddRange(readItems.OrderByDescending(x => x.Raw.StartTime));
            _lastReloadTime = DateTime.Now;
        }
        catch (Exception ex)
        {
            _logger.LogError(ex, "Reload blog data failed.");
        }
        finally
        {
            _reloadLock.Set();
        }
    }
    public async Task <BlogGrpcResponse> AddPostAccessAsync(BlogGrpcRequest request, CallContext context = default)
    {
        var response = new BlogGrpcResponse();

        try
        {
            await _blogFileService.AddBlogPostAccessAsync(request.Link, DateTime.Now, 1);
        }
        catch (Exception ex)
        {
            _logger.LogError(ex, $"{nameof(AddPostAccessAsync)}({request.Link}) failed.");
            response.IsOk    = false;
            response.Message = ex.Message;
        }

        return(response);
    }
    public async Task <MiscGrpcResponse> ReloadBlogCacheAsync(BlogGrpcRequest request, CallContext context = default)
    {
        var response = new MiscGrpcResponse();

        try
        {
            await _blogSiteHttpClient.ReloadBlogDataAsync();
        }
        catch (Exception ex)
        {
            response.IsOk    = false;
            response.Message = ex.Message;
            _logger.LogError(ex, $"{nameof(ReloadBlogCacheAsync)} failed.");
        }

        return(response);
    }
    public async Task <BlogGrpcResponse> AddTagAsync(BlogGrpcRequest request, CallContext context = default)
    {
        var response = new BlogGrpcResponse();

        try
        {
            await _blogFileService.AddBlogTagAsync(request.Tag);

            await _blogSiteHttpClient.ReloadBlogDataAsync();

            response.Tag = request.Tag;
        }
        catch (Exception ex)
        {
            _logger.LogError(ex, $"{nameof(AddTagAsync)} failed.");
            response.IsOk    = false;
            response.Message = ex.Message;
        }

        return(response);
    }
    public async Task <BlogGrpcResponse> UpdatePostAsync(BlogGrpcRequest request, CallContext context = default)
    {
        var response = new BlogGrpcResponse();

        try
        {
            await _blogFileService.UpdateBlogPostAsync(request.Post, request.OriginalPostLink);

            await _blogSiteHttpClient.ReloadBlogDataAsync();

            response.Post = request.Post;
        }
        catch (Exception ex)
        {
            _logger.LogError(ex, $"{nameof(UpdatePostAsync)}({JsonUtil.Serialize(request.Post)}) failed.");
            response.IsOk    = false;
            response.Message = ex.Message;
        }

        return(response);
    }
    private async Task ProcessAsync()
    {
        while (_blogService.TryDequeuePostAccess(out var link))
        {
            try
            {
                var request = new BlogGrpcRequest {
                    Link = link
                };
                var response = await _blogGrpcService.AddPostAccessAsync(request);

                if (!response.IsOk)
                {
                    _logger.LogError($"Add post access for {link} failed: {response.Message}");
                }
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, $"Failed to add new access for post: {link}");
            }
        }
    }