aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.UI/Pages/BaseDetailPage.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.UI/Pages/BaseDetailPage.cs')
-rw-r--r--MediaBrowser.UI/Pages/BaseDetailPage.cs159
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()
+ {
+ }
+ }
+}