Skip to content

Commit

Permalink
Started some workn on the continous refresher. Don't think it'll be p…
Browse files Browse the repository at this point in the history
…ossible to do, but want to try at least
  • Loading branch information
ProgrammerAL committed May 4, 2024
1 parent 0b548c8 commit 2160b86
Show file tree
Hide file tree
Showing 3 changed files with 117 additions and 0 deletions.
24 changes: 24 additions & 0 deletions src/SvgHelpers/SvgHelpers/Components/ImageRefreshComponent.razor
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
@using BlazorMonaco.Editor
@using ProgrammerAl.SvgHelpers.Components.AnimatedComponents

<div class="flex">
@* <p>File Url: </p>
<input type="text" @bind="EnteredImageUrl"
class="border border-black min-w-16 py-2 px-4" />
*@
<InputFile OnChange="@SingleUploadAsync" accept=".svg" />

</div>


@* @if (!string.IsNullOrWhiteSpace(ImageDataUrl)) *@
@if(!string.IsNullOrWhiteSpace(SvgHtml.Value))
{
<div>
<p>Image at: @(ImageFile!.Name))</p>
<p>Last update time: @(LastImageRefreshTime) </p>
@* <img src="@($"{ImageUrl}?unique={DateTime.Now.ToString("yyyy-MM-dd-HH:mm:ss")}")" /> *@
@* <img src="@ImageDataUrl" /> *@
@SvgHtml
</div>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.IO;
using System.Linq;
using System.Net.Http;
using System.Text.Json;

using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Forms;

namespace ProgrammerAl.SvgHelpers.Components;

public partial class ImageRefreshComponent : ComponentBase
{
private static readonly TimeSpan RefreshLoopWaitTime = TimeSpan.FromMilliseconds(500);
private static readonly TimeSpan ImageRefreshInterval = TimeSpan.FromSeconds(5);
private const long MaxImageSize = 1024 * 1024 * 1024; //1 GB

//private string? _lastImageUrl;

//private string? EnteredImageUrl { get; set; }
//private string? ImageUrl { get; set; }
private DateTime LastImageRefreshTime { get; set; } = DateTime.MinValue;
private IBrowserFile? ImageFile { get; set; } = null;

private string? ImageDataUrl { get; set; }
private MarkupString SvgHtml { get; set; }

protected override void OnInitialized()
{
//Fire and forget
_ = RefreshImageLoopAsync();

base.OnInitialized();
}

private async Task SingleUploadAsync(InputFileChangeEventArgs e)
{
ImageFile = e.File;
await RefreshImageAsync();
//MemoryStream ms = new MemoryStream();
//await e.File.OpenReadStream().CopyToAsync(ms);
//var bytes = ms.ToArray();
//do something with bytes
}

private async Task RefreshImageLoopAsync()
{
while (true)
{
await Task.Delay(RefreshLoopWaitTime);

if (ImageFile != null
&& (DateTime.Now - LastImageRefreshTime) >= ImageRefreshInterval)
{
await RefreshImageAsync();
}
}
}

private async Task RefreshImageAsync()
{
if (ImageFile is null)
{
return;
}

try
{
var svgText = await new StreamReader(ImageFile.OpenReadStream(maxAllowedSize: MaxImageSize)).ReadToEndAsync();
SvgHtml = new MarkupString(svgText);

//using var ms = new MemoryStream();
//await ImageFile.OpenReadStream(maxAllowedSize: MaxImageSize).CopyToAsync(ms);
//var bytes = ms.ToArray();
//var base64 = Convert.ToBase64String(bytes);
//ImageDataUrl = string.Format("data:image/svg+xml;base64,{0}", base64);

LastImageRefreshTime = DateTime.Now;
await InvokeAsync(StateHasChanged);
}
catch (Exception ex)
{
await Console.Out.WriteLineAsync(ex.ToString());
}
}
}
5 changes: 5 additions & 0 deletions src/SvgHelpers/SvgHelpers/Pages/Index.razor
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,9 @@
<TabPageComponent Title="SVG Mover">
<SvgMoverComponent />
</TabPageComponent>

@* <TabPageComponent Title="Continuous Image Refresher">
<ImageRefreshComponent />
</TabPageComponent>
*@
</TabComponent>

0 comments on commit 2160b86

Please sign in to comment.