diff options
Diffstat (limited to 'MediaBrowser.UI/Pages/BaseDetailPage.cs')
| -rw-r--r-- | MediaBrowser.UI/Pages/BaseDetailPage.cs | 159 |
1 files changed, 159 insertions, 0 deletions
diff --git a/MediaBrowser.UI/Pages/BaseDetailPage.cs b/MediaBrowser.UI/Pages/BaseDetailPage.cs new file mode 100644 index 000000000..c7a2859a0 --- /dev/null +++ b/MediaBrowser.UI/Pages/BaseDetailPage.cs @@ -0,0 +1,159 @@ +using MediaBrowser.Model.DTO; +using MediaBrowser.Model.Net; +using MediaBrowser.UI.Controller; +using MediaBrowser.UI.Playback; +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace MediaBrowser.UI.Pages +{ + /// <summary> + /// Provides a base class for detail pages + /// </summary> + public abstract class BaseDetailPage : BasePage + { + /// <summary> + /// The _item id + /// </summary> + private string _itemId; + /// <summary> + /// Gets or sets the id of the item being displayed + /// </summary> + /// <value>The item id.</value> + protected string ItemId + { + get { return _itemId; } + private set + { + _itemId = value; + OnPropertyChanged("ItemId"); + } + } + + /// <summary> + /// The _item + /// </summary> + private DtoBaseItem _item; + /// <summary> + /// Gets or sets the item. + /// </summary> + /// <value>The item.</value> + public DtoBaseItem Item + { + get { return _item; } + + set + { + _item = value; + OnPropertyChanged("Item"); + OnItemChanged(); + } + } + + /// <summary> + /// Gets a value indicating whether this instance can resume. + /// </summary> + /// <value><c>true</c> if this instance can resume; otherwise, <c>false</c>.</value> + protected bool CanResume + { + get { return Item.CanResume; } + } + + /// <summary> + /// Gets a value indicating whether this instance can queue. + /// </summary> + /// <value><c>true</c> if this instance can queue; otherwise, <c>false</c>.</value> + protected bool CanQueue + { + get { return true; } + } + + /// <summary> + /// Gets a value indicating whether this instance can play trailer. + /// </summary> + /// <value><c>true</c> if this instance can play trailer; otherwise, <c>false</c>.</value> + protected bool CanPlayTrailer + { + get { return Item.HasTrailer; } + } + + /// <summary> + /// Initializes a new instance of the <see cref="BaseDetailPage" /> class. + /// </summary> + /// <param name="itemId">The item id.</param> + protected BaseDetailPage(string itemId) + : base() + { + ItemId = itemId; + } + + /// <summary> + /// Called when [property changed]. + /// </summary> + /// <param name="name">The name.</param> + public async override void OnPropertyChanged(string name) + { + base.OnPropertyChanged(name); + + // Reload the item when the itemId changes + if (name.Equals("ItemId")) + { + await ReloadItem(); + } + } + + /// <summary> + /// Reloads the item. + /// </summary> + /// <returns>Task.</returns> + private async Task ReloadItem() + { + try + { + Item = await App.Instance.ApiClient.GetItemAsync(ItemId, App.Instance.CurrentUser.Id); + } + catch (HttpException) + { + App.Instance.ShowDefaultErrorMessage(); + } + } + + /// <summary> + /// Called when [item changed]. + /// </summary> + protected virtual void OnItemChanged() + { + SetBackdrops(Item); + } + + /// <summary> + /// Plays this instance. + /// </summary> + public async void Play() + { + await UIKernel.Instance.PlaybackManager.Play(new PlayOptions + { + Items = new List<DtoBaseItem> { Item } + }); + } + + /// <summary> + /// Resumes this instance. + /// </summary> + public async void Resume() + { + await UIKernel.Instance.PlaybackManager.Play(new PlayOptions + { + Items = new List<DtoBaseItem> { Item }, + Resume = true + }); + } + + /// <summary> + /// Queues this instance. + /// </summary> + public void Queue() + { + } + } +} |
