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 <ApiResponse <ChartResponse> > GetReadStats() { var response = new ApiResponse <ChartResponse>(); try { var request = new ReadGrpcRequest(); var itemsResponse = await _readGrpcService.GetReadItemsAsync(request); if (itemsResponse.IsOk) { itemsResponse.ReadItems ??= new List <ReadItemRuntime>(); var chartResponse = new ChartResponse { Title = "当年阅读数", Type = "bar" }; foreach (var item in itemsResponse.ReadItems.GroupBy(x => x.Raw.StartTime.Year).OrderBy(x => x.Key)) { chartResponse.Data.Add(item.Count()); chartResponse.Labels.Add(item.Key.ToString()); } response.Content = chartResponse; } else { response.IsOk = false; response.Message = itemsResponse.Message; } } catch (Exception ex) { response.IsOk = false; response.Message = ex.Message; _logger.LogError(ex, "Get read stats failed."); } return(response); }