using DataLayer; using System; using System.Collections.Generic; using System.ComponentModel; using System.Threading.Tasks; namespace LibationUiBase.GridView { /// The View Model for a LibraryBook that is ContentType.Product or ContentType.Episode public class LibraryBookEntry : GridEntry, ILibraryBookEntry where TStatus : IEntryStatus { [Browsable(false)] public override DateTime DateAdded => LibraryBook.DateAdded; [Browsable(false)] public ISeriesEntry Parent { get; } public override bool? Remove { get => remove; set { remove = value ?? false; Parent?.ChildRemoveUpdate(); RaisePropertyChanged(nameof(Remove)); } } public LibraryBookEntry(LibraryBook libraryBook, ISeriesEntry parent = null) { Parent = parent; UpdateLibraryBook(libraryBook); LoadCover(); } /// /// Creates for all non-episode books in an enumeration of . /// /// Can be called from any thread, but requires the calling thread's to be valid. public static async Task> GetAllProductsAsync(IEnumerable libraryBooks) => await GetAllProductsAsync(libraryBooks, lb => lb.Book.IsProduct(), lb => new LibraryBookEntry(lb) as IGridEntry); protected override string GetBookTags() => string.Join("\r\n", Book.UserDefinedItem.TagsEnumerated); } }