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.
152 lines
4.1 KiB
152 lines
4.1 KiB
using MediaBrowser.Controller.Entities;
|
|
using MediaBrowser.Model.Entities;
|
|
using MediaBrowser.Model.Logging;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Windows;
|
|
using System.Windows.Controls;
|
|
using System.Windows.Media;
|
|
|
|
namespace MediaBrowser.ServerApplication.Controls
|
|
{
|
|
/// <summary>
|
|
/// Interaction logic for MultiItemUpdateNotification.xaml
|
|
/// </summary>
|
|
public partial class MultiItemUpdateNotification : 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 List<BaseItem> Items
|
|
{
|
|
get { return DataContext as List<BaseItem>; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Initializes a new instance of the <see cref="MultiItemUpdateNotification" /> class.
|
|
/// </summary>
|
|
public MultiItemUpdateNotification(ILogger logger)
|
|
{
|
|
if (logger == null)
|
|
{
|
|
throw new ArgumentNullException("logger");
|
|
}
|
|
|
|
Logger = logger;
|
|
|
|
InitializeComponent();
|
|
|
|
Loaded += MultiItemUpdateNotification_Loaded;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Handles the Loaded event of the MultiItemUpdateNotification 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 MultiItemUpdateNotification_Loaded(object sender, RoutedEventArgs e)
|
|
{
|
|
header.Text = string.Format("{0} New Items!", Items.Count);
|
|
|
|
PopulateItems();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Populates the items.
|
|
/// </summary>
|
|
private void PopulateItems()
|
|
{
|
|
itemsPanel.Children.Clear();
|
|
|
|
var items = Items;
|
|
|
|
const int maxItemsToDisplay = 8;
|
|
var index = 0;
|
|
|
|
foreach (var item in items)
|
|
{
|
|
if (index >= maxItemsToDisplay)
|
|
{
|
|
break;
|
|
}
|
|
|
|
// Try our best to find an image
|
|
var path = GetImagePath(item);
|
|
|
|
if (string.IsNullOrEmpty(path))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
Image img;
|
|
|
|
try
|
|
{
|
|
img = App.Instance.GetImage(path);
|
|
}
|
|
catch (FileNotFoundException)
|
|
{
|
|
Logger.Error("Image file not found {0}", path);
|
|
continue;
|
|
}
|
|
|
|
img.Stretch = Stretch.Uniform;
|
|
img.Margin = new Thickness(0, 0, 5, 5);
|
|
img.ToolTip = ItemUpdateNotification.GetDisplayName(item, true);
|
|
RenderOptions.SetBitmapScalingMode(img, BitmapScalingMode.Fant);
|
|
itemsPanel.Children.Add(img);
|
|
|
|
index++;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/// <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;
|
|
}
|
|
}
|
|
}
|