|
|
|
|
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()
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|