blog3000/Blog3000/Client/Pages/Viewer.razor.cs

122 lines
3.1 KiB
C#

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;
}
}
}
}