@using static Prelude @using ErsatzTV.Application.MediaCards @inject IMediator _mediator
@if (SelectClicked.HasDelegate || !string.IsNullOrWhiteSpace(Link)) {
@if (string.IsNullOrWhiteSpace(Data.Poster)) { @GetPlaceholder(Data.SortTitle) } @if (IsSelected) {
} @if (Data.State == MediaItemState.FileNotFound) {
} else if (Data.State == MediaItemState.Unavailable) {
}
@if (SelectClicked.HasDelegate) { } @if (AddToCollectionClicked.HasDelegate && !IsSelectMode) { } @if (DeleteClicked.HasDelegate && !IsSelectMode) { }
} else { @if (string.IsNullOrWhiteSpace(Data.Poster)) { @GetPlaceholder(Data.SortTitle) } } @(Title ?? Data.Title) @(Subtitle ?? Data.Subtitle)
@code { [Parameter] public MediaCardViewModel Data { get; set; } [Parameter] public string Link { get; set; } [Parameter] public EventCallback DataRefreshed { get; set; } [Parameter] public string Placeholder { get; set; } [Parameter] public string Title { get; set; } [Parameter] public string Subtitle { get; set; } [Parameter] public string ContainerClass { get; set; } [Parameter] public string CardClass { get; set; } [Parameter] public ArtworkKind ArtworkKind { get; set; } [Parameter] public EventCallback DeleteClicked { get; set; } [Parameter] public EventCallback AddToCollectionClicked { get; set; } [Parameter] public EventCallback SelectClicked { get; set; } [Parameter] public bool IsSelectMode { get; set; } [Parameter] public bool IsSelected { get; set; } [Parameter] public Color SelectColor { get; set; } = Color.Tertiary; [Parameter] public bool IsRemoteArtwork { get; set; } private string GetPlaceholder(string sortTitle) { if (Placeholder != null) { return Placeholder; } char first = Optional(sortTitle).Map(t => t.ToUpperInvariant().HeadOrNone()).Flatten().Match(head => head, () => ' '); return char.IsDigit(first) || !char.IsLetter(first) ? "#" : first.ToString(); } private string ArtworkForItem() { if (IsRemoteArtwork || Data.Poster?.StartsWith("http://") == true || Data.Poster?.StartsWith("https://") == true) { return $"position: relative; background-image: url({Data.Poster}); background-size: cover; background-position: center"; } return string.IsNullOrWhiteSpace(Data.Poster) ? "position: relative" : $"position: relative; background-image: url(artwork/{PathForArtwork()}/{Data.Poster}); background-size: cover; background-position: center"; } private string PathForArtwork() => ArtworkKind switch { ArtworkKind.Thumbnail => "thumbnails", _ => "posters" }; }