@implements IDisposable @using LANCommander.Launcher.Data.Models @inject SDK.Client Client @inject MediaService MediaService @inject ImportService ImportService @inject MessageBusService MessageBusService @inject ILogger Logger @code { [Parameter] public Guid Id { get; set; } [Parameter] public string Class { get; set; } [Parameter] public string Key { get; set; } [CascadingParameter] public bool Connected { get; set; } [CascadingParameter] public bool OfflineMode { 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.GetAsync(Id); if (media == null && (Connected || OfflineMode)) media = await ImportService.ImportMediaAsync(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; } }