using Microsoft.AspNetCore.Components; using Blog3000.Shared; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Threading.Tasks; namespace Blog3000.Client.Pages { public partial class Viewer: IDisposable { [Parameter] public string Id { get { return _id; } set { if (_id != value) { _id = value; idChanged?.Invoke(this, EventArgs.Empty); } } } private string _id; [Inject] private BlogDb BlogDb { get; set; } [Inject] private ViewStats ViewStats { get; set; } private BlogPost CurrentPost { get; set; } private string Status { get; set; } private int viewCount = 0; private event EventHandler idChanged; private Shared.MarkdownViewer.ImgRefRewriterDelegate imgRefRewriter; public void Dispose() { idChanged -= Viewer_idChanged; } protected override async Task OnInitializedAsync() { await RefreshData(); idChanged += Viewer_idChanged; } private async void Viewer_idChanged(object sender, EventArgs e) { await RefreshData(); this.StateHasChanged(); } private async Task RefreshData() { imgRefRewriter = (a, b) => { System.Diagnostics.Debug.WriteLine($"Rewrting {a}/{b}"); try { //var s = blogDb.FetchImage(Id, a); //return "data:image/jpeg;base64, " + s; return $"BlogPosts/{Id}/imgref/{a}"; } catch(IOException ex) { System.Diagnostics.Debug.WriteLine($"Error rewriting url {a}/{b}", ex); } return ""; }; Status = "Loading..."; var (post, res) = await BlogDb.GetCachedPostAsync(Id, true, true); if (res == BlogDb.FetchStatus.OK) { try { viewCount = await ViewStats.GetPostViewCount(Id); } catch(Exception ex) { System.Diagnostics.Debug.WriteLine($"Can't get viewCount: ${ex.ToString()}"); viewCount = -1; } _ = ViewStats.AddPostView(Id); CurrentPost = post; Status = ""; } else { CurrentPost = null; Status = res switch { BlogDb.FetchStatus.NotFound => "Not found", BlogDb.FetchStatus.NetError => "network error", BlogDb.FetchStatus.Offline => "not cached local and network offline", _ => "Unknown error" }; Status = "Cannot view requested document: " + Status; } } } }