diff options
Diffstat (limited to 'MediaBrowser.ServerApplication/Controls/ItemUpdateNotification.xaml.cs')
| -rw-r--r-- | MediaBrowser.ServerApplication/Controls/ItemUpdateNotification.xaml.cs | 249 |
1 files changed, 249 insertions, 0 deletions
diff --git a/MediaBrowser.ServerApplication/Controls/ItemUpdateNotification.xaml.cs b/MediaBrowser.ServerApplication/Controls/ItemUpdateNotification.xaml.cs new file mode 100644 index 000000000..8cb42f0e5 --- /dev/null +++ b/MediaBrowser.ServerApplication/Controls/ItemUpdateNotification.xaml.cs @@ -0,0 +1,249 @@ +using MediaBrowser.Common.Logging; +using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Entities.TV; +using MediaBrowser.Model.Entities; +using MediaBrowser.Model.Logging; +using System; +using System.Collections.Generic; +using System.IO; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Media; + +namespace MediaBrowser.ServerApplication.Controls +{ + /// <summary> + /// Interaction logic for ItemUpdateNotification.xaml + /// </summary> + public partial class ItemUpdateNotification : UserControl + { + /// <summary> + /// The logger + /// </summary> + private static readonly ILogger Logger = LogManager.GetLogger("MultiItemUpdateNotification"); + + /// <summary> + /// Gets the children changed event args. + /// </summary> + /// <value>The children changed event args.</value> + private BaseItem Item + { + get { return DataContext as BaseItem; } + } + + /// <summary> + /// Initializes a new instance of the <see cref="ItemUpdateNotification" /> class. + /// </summary> + public ItemUpdateNotification() + { + InitializeComponent(); + + Loaded += ItemUpdateNotification_Loaded; + } + + /// <summary> + /// Handles the Loaded event of the ItemUpdateNotification control. + /// </summary> + /// <param name="sender">The source of the event.</param> + /// <param name="e">The <see cref="RoutedEventArgs" /> instance containing the event data.</param> + void ItemUpdateNotification_Loaded(object sender, RoutedEventArgs e) + { + DisplayItem(Item); + } + + /// <summary> + /// Gets the display name. + /// </summary> + /// <param name="item">The item.</param> + /// <param name="includeParentName">if set to <c>true</c> [include parent name].</param> + /// <returns>System.String.</returns> + internal static string GetDisplayName(BaseItem item, bool includeParentName) + { + var name = item.Name; + + if (item.ProductionYear.HasValue && !(item is Episode)) + { + name += string.Format(" ({0})", item.ProductionYear); + } + + var episode = item as Episode; + if (episode != null) + { + var indexNumbers = new List<int>(); + + if (episode.Season.IndexNumber.HasValue) + { + indexNumbers.Add(episode.Season.IndexNumber.Value); + } + if (episode.IndexNumber.HasValue) + { + indexNumbers.Add(episode.IndexNumber.Value); + } + var indexNumber = string.Join(".", indexNumbers.ToArray()); + + name = string.Format("{0} - {1}", indexNumber, name); + + if (includeParentName) + { + name = episode.Series.Name + " - " + name; + } + } + + if (includeParentName) + { + var season = item as Season; + + if (season != null) + { + name = season.Series.Name + " - " + name; + } + } + + return name; + } + + /// <summary> + /// Displays the parent title. + /// </summary> + /// <param name="item">The item.</param> + private void DisplayParentTitle(BaseItem item) + { + if (!(item is Episode || item is Season)) + { + txtParentName.Visibility = Visibility.Collapsed; + imgParentLogo.Visibility = Visibility.Collapsed; + return; + } + + var series = item is Episode ? (item as Episode).Series : (item as Season).Series; + + var logo = series.GetImage(ImageType.Logo); + + if (string.IsNullOrEmpty(logo)) + { + imgParentLogo.Visibility = Visibility.Collapsed; + txtParentName.Visibility = Visibility.Visible; + } + else + { + imgParentLogo.Visibility = Visibility.Visible; + txtParentName.Visibility = Visibility.Collapsed; + imgParentLogo.Source = App.Instance.GetBitmapImage(logo); + } + + txtParentName.Text = series.Name; + } + + /// <summary> + /// Displays the title. + /// </summary> + /// <param name="item">The item.</param> + private void DisplayTitle(BaseItem item) + { + txtName.Text = GetDisplayName(item, false); + } + + /// <summary> + /// Displays the item. + /// </summary> + /// <param name="item">The item.</param> + private void DisplayItem(BaseItem item) + { + DisplayParentTitle(item); + DisplayTitle(item); + DisplayRating(item); + + var path = MultiItemUpdateNotification.GetImagePath(item); + + if (string.IsNullOrEmpty(path)) + { + img.Visibility = Visibility.Collapsed; + } + else + { + img.Visibility = Visibility.Visible; + + try + { + img.Source = App.Instance.GetBitmapImage(path); + } + catch (FileNotFoundException) + { + Logger.Error("Image file not found {0}", path); + } + } + + if (string.IsNullOrEmpty(item.Overview)) + { + txtOverview.Visibility = Visibility.Collapsed; + } + else + { + txtOverview.Visibility = Visibility.Visible; + txtOverview.Text = item.Overview; + } + + if (item.Taglines == null || item.Taglines.Count == 0) + { + txtTagline.Visibility = Visibility.Collapsed; + } + else + { + txtTagline.Visibility = Visibility.Visible; + txtTagline.Text = item.Taglines[0]; + } + + if (!item.PremiereDate.HasValue) + { + txtPremeireDate.Visibility = Visibility.Collapsed; + } + else + { + txtPremeireDate.Visibility = Visibility.Visible; + txtPremeireDate.Text = "Premiered " + item.PremiereDate.Value.ToShortDateString(); + } + } + + /// <summary> + /// Displays the rating. + /// </summary> + /// <param name="item">The item.</param> + private void DisplayRating(BaseItem item) + { + if (!item.CommunityRating.HasValue) + { + pnlRating.Visibility = Visibility.Collapsed; + return; + } + + pnlRating.Children.Clear(); + pnlRating.Visibility = Visibility.Visible; + + var rating = item.CommunityRating.Value; + + for (var i = 0; i < 10; i++) + { + Image image; + if (rating < i - 1) + { + image = App.Instance.GetImage(new Uri("../Resources/Images/starEmpty.png", UriKind.Relative)); + } + else if (rating < i) + { + image = App.Instance.GetImage(new Uri("../Resources/Images/starHalf.png", UriKind.Relative)); + } + else + { + image = App.Instance.GetImage(new Uri("../Resources/Images/starFull.png", UriKind.Relative)); + } + + RenderOptions.SetBitmapScalingMode(image, BitmapScalingMode.Fant); + + image.Stretch = Stretch.Uniform; + image.Height = 16; + + pnlRating.Children.Add(image); + } + } + } +} |
