You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
jellyfin/MediaBrowser.UI/Pages/BaseDetailPage.cs

160 lines
4.2 KiB

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 BaseItemDto _item;
/// <summary>
/// Gets or sets the item.
/// </summary>
/// <value>The item.</value>
public BaseItemDto 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<BaseItemDto> { Item }
});
}
/// <summary>
/// Resumes this instance.
/// </summary>
public async void Resume()
{
await UIKernel.Instance.PlaybackManager.Play(new PlayOptions
{
Items = new List<BaseItemDto> { Item },
Resume = true
});
}
/// <summary>
/// Queues this instance.
/// </summary>
public void Queue()
{
}
}
}