122 lines
3.1 KiB
C#
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;
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
}
|