Media is now imported if its given an ID that doesn't exist in the database. This should almost never happen, but it's there if needed. The login process for the launcher has been refactored to do some initialization steps on application start. This should include pulling down the profile avatar and validating connection on start. Fixes #124
65 lines
1.6 KiB
Text
65 lines
1.6 KiB
Text
@implements IDisposable
|
|
@using LANCommander.Launcher.Data.Models
|
|
@inject SDK.Client Client
|
|
@inject MediaService MediaService
|
|
@inject ImportService ImportService
|
|
@inject MessageBusService MessageBusService
|
|
@inject ILogger<MediaImage> Logger
|
|
|
|
<img @ref="Ref" @key="Id" src="@MediaUrl" class="@Class @HiddenClass" @onerror="Hide" />
|
|
|
|
@code {
|
|
[Parameter] public Guid Id { get; set; }
|
|
[Parameter] public string Class { get; set; }
|
|
|
|
string MediaUrl { get; set; }
|
|
string HiddenClass { get; set; }
|
|
|
|
ElementReference Ref;
|
|
|
|
protected override async Task OnInitializedAsync()
|
|
{
|
|
MessageBusService.OnMediaChanged += OnMediaChanged;
|
|
}
|
|
|
|
protected override async Task OnParametersSetAsync()
|
|
{
|
|
try {
|
|
var media = await MediaService.Get(Id);
|
|
|
|
if (media == null && Client.IsConnected())
|
|
media = await ImportService.ImportMedia(Id);
|
|
|
|
UpdateMediaUrl(media);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Logger?.LogError(ex, "Could not load media with ID {MediaId}", Id);
|
|
}
|
|
}
|
|
|
|
async Task OnMediaChanged(Media media)
|
|
{
|
|
if (media.Id == Id)
|
|
{
|
|
UpdateMediaUrl(media);
|
|
|
|
await InvokeAsync(StateHasChanged);
|
|
}
|
|
}
|
|
|
|
async Task Hide()
|
|
{
|
|
HiddenClass = "hidden";
|
|
}
|
|
|
|
void UpdateMediaUrl(Media media)
|
|
{
|
|
MediaUrl = $"media://image?id={media?.Id}&fileId={media?.FileId}&crc32={media?.Crc32}&mime={media?.MimeType}";
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
MessageBusService.OnMediaChanged -= OnMediaChanged;
|
|
}
|
|
}
|