HomePageTile.xaml.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. using MediaBrowser.Model.Dto;
  2. using MediaBrowser.Model.Entities;
  3. using MediaBrowser.Model.Net;
  4. using MediaBrowser.UI;
  5. using MediaBrowser.UI.Controls;
  6. using MediaBrowser.UI.ViewModels;
  7. using System;
  8. using System.Windows;
  9. namespace MediaBrowser.Plugins.DefaultTheme.Controls
  10. {
  11. /// <summary>
  12. /// Interaction logic for BaseItemTile.xaml
  13. /// </summary>
  14. public partial class HomePageTile : BaseUserControl
  15. {
  16. /// <summary>
  17. /// Gets the view model.
  18. /// </summary>
  19. /// <value>The view model.</value>
  20. public DtoBaseItemViewModel ViewModel
  21. {
  22. get { return DataContext as DtoBaseItemViewModel; }
  23. }
  24. /// <summary>
  25. /// Gets the item.
  26. /// </summary>
  27. /// <value>The item.</value>
  28. private BaseItemDto Item
  29. {
  30. get { return ViewModel.Item; }
  31. }
  32. /// <summary>
  33. /// Initializes a new instance of the <see cref="HomePageTile" /> class.
  34. /// </summary>
  35. public HomePageTile()
  36. {
  37. InitializeComponent();
  38. DataContextChanged += BaseItemTile_DataContextChanged;
  39. }
  40. /// <summary>
  41. /// Handles the DataContextChanged event of the BaseItemTile control.
  42. /// </summary>
  43. /// <param name="sender">The source of the event.</param>
  44. /// <param name="e">The <see cref="DependencyPropertyChangedEventArgs" /> instance containing the event data.</param>
  45. void BaseItemTile_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e)
  46. {
  47. OnItemChanged();
  48. }
  49. /// <summary>
  50. /// Called when [item changed].
  51. /// </summary>
  52. private void OnItemChanged()
  53. {
  54. ReloadImage();
  55. }
  56. /// <summary>
  57. /// Reloads the image.
  58. /// </summary>
  59. private void ReloadImage()
  60. {
  61. if (Item.HasPrimaryImage)
  62. {
  63. var url = App.Instance.ApiClient.GetImageUrl(Item, new ImageOptions
  64. {
  65. ImageType = ImageType.Primary,
  66. Height = 225
  67. });
  68. SetImage(url);
  69. }
  70. else if (Item.BackdropCount > 0)
  71. {
  72. var url = App.Instance.ApiClient.GetImageUrl(Item, new ImageOptions
  73. {
  74. ImageType = ImageType.Backdrop,
  75. Height = 225,
  76. Width = 400
  77. });
  78. SetImage(url);
  79. }
  80. else if (Item.HasThumb)
  81. {
  82. var url = App.Instance.ApiClient.GetImageUrl(Item, new ImageOptions
  83. {
  84. ImageType = ImageType.Thumb,
  85. Height = 225,
  86. Width = 400
  87. });
  88. SetImage(url);
  89. }
  90. else
  91. {
  92. SetDefaultImage();
  93. }
  94. }
  95. /// <summary>
  96. /// Sets the image.
  97. /// </summary>
  98. /// <param name="url">The URL.</param>
  99. private async void SetImage(string url)
  100. {
  101. try
  102. {
  103. image.Source = await App.Instance.GetRemoteBitmapAsync(url);
  104. }
  105. catch (HttpException)
  106. {
  107. SetDefaultImage();
  108. }
  109. }
  110. private void SetDefaultImage()
  111. {
  112. var imageUri = new Uri("../Resources/Images/VideoDefault.png", UriKind.Relative);
  113. image.Source = App.Instance.GetBitmapImage(imageUri);
  114. }
  115. }
  116. }