| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294 | using System.Linq;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 readonly ILogger Logger;        /// <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(ILogger logger)        {            if (logger == null)            {                throw new ArgumentNullException("logger");            }            Logger = logger;                        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 = 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.ToLocalTime().ToShortDateString();            }        }        /// <summary>        /// Gets the image path.        /// </summary>        /// <param name="item">The item.</param>        /// <returns>System.String.</returns>        internal static string GetImagePath(BaseItem item)        {            // Try our best to find an image            var path = item.PrimaryImagePath;            if (string.IsNullOrEmpty(path) && item.BackdropImagePaths != null)            {                path = item.BackdropImagePaths.FirstOrDefault();            }            if (string.IsNullOrEmpty(path))            {                path = item.GetImage(ImageType.Thumb);            }            if (string.IsNullOrEmpty(path))            {                path = item.GetImage(ImageType.Art);            }            if (string.IsNullOrEmpty(path))            {                path = item.GetImage(ImageType.Logo);            }            if (string.IsNullOrEmpty(path))            {                path = item.GetImage(ImageType.Disc);            }            return path;        }        /// <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);            }        }    }}
 |