App.xaml.cs 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. using MediaBrowser.Common.Kernel;
  2. using MediaBrowser.Common.Plugins;
  3. using MediaBrowser.Common.UI;
  4. using MediaBrowser.Model.Configuration;
  5. using MediaBrowser.Model.DTO;
  6. using MediaBrowser.Model.Weather;
  7. using MediaBrowser.UI.Controller;
  8. using System;
  9. using System.ComponentModel;
  10. using System.IO;
  11. using System.Linq;
  12. using System.Threading;
  13. using System.Threading.Tasks;
  14. using System.Windows;
  15. using System.Windows.Controls;
  16. using System.Windows.Media.Imaging;
  17. namespace MediaBrowser.UI
  18. {
  19. /// <summary>
  20. /// Interaction logic for App.xaml
  21. /// </summary>
  22. public partial class App : BaseApplication, IApplication
  23. {
  24. private Timer ClockTimer { get; set; }
  25. private Timer ServerConfigurationTimer { get; set; }
  26. public static App Instance
  27. {
  28. get
  29. {
  30. return Application.Current as App;
  31. }
  32. }
  33. public DtoUser CurrentUser
  34. {
  35. get
  36. {
  37. return UIKernel.Instance.CurrentUser;
  38. }
  39. set
  40. {
  41. UIKernel.Instance.CurrentUser = value;
  42. OnPropertyChanged("CurrentUser");
  43. }
  44. }
  45. public ServerConfiguration ServerConfiguration
  46. {
  47. get
  48. {
  49. return UIKernel.Instance.ServerConfiguration;
  50. }
  51. set
  52. {
  53. UIKernel.Instance.ServerConfiguration = value;
  54. OnPropertyChanged("ServerConfiguration");
  55. }
  56. }
  57. private DateTime _currentTime = DateTime.Now;
  58. public DateTime CurrentTime
  59. {
  60. get
  61. {
  62. return _currentTime;
  63. }
  64. private set
  65. {
  66. _currentTime = value;
  67. OnPropertyChanged("CurrentTime");
  68. }
  69. }
  70. private WeatherInfo _currentWeather;
  71. public WeatherInfo CurrentWeather
  72. {
  73. get
  74. {
  75. return _currentWeather;
  76. }
  77. private set
  78. {
  79. _currentWeather = value;
  80. OnPropertyChanged("CurrentWeather");
  81. }
  82. }
  83. private BaseTheme _currentTheme;
  84. public BaseTheme CurrentTheme
  85. {
  86. get
  87. {
  88. return _currentTheme;
  89. }
  90. private set
  91. {
  92. _currentTheme = value;
  93. OnPropertyChanged("CurrentTheme");
  94. }
  95. }
  96. [STAThread]
  97. public static void Main()
  98. {
  99. RunApplication<App>("MediaBrowserUI");
  100. }
  101. #region BaseApplication Overrides
  102. protected override IKernel InstantiateKernel()
  103. {
  104. return new UIKernel();
  105. }
  106. protected override Window InstantiateMainWindow()
  107. {
  108. return new MainWindow();
  109. }
  110. protected override void OnKernelLoaded()
  111. {
  112. base.OnKernelLoaded();
  113. PropertyChanged += AppPropertyChanged;
  114. // Update every 10 seconds
  115. ClockTimer = new Timer(ClockTimerCallback, null, 0, 10000);
  116. // Update every 30 minutes
  117. ServerConfigurationTimer = new Timer(ServerConfigurationTimerCallback, null, 0, 1800000);
  118. CurrentTheme = UIKernel.Instance.Plugins.OfType<BaseTheme>().First();
  119. foreach (var resource in CurrentTheme.GlobalResources)
  120. {
  121. Resources.MergedDictionaries.Add(resource);
  122. }
  123. }
  124. #endregion
  125. async void AppPropertyChanged(object sender, PropertyChangedEventArgs e)
  126. {
  127. if (e.PropertyName.Equals("ServerConfiguration"))
  128. {
  129. if (string.IsNullOrEmpty(ServerConfiguration.WeatherZipCode))
  130. {
  131. CurrentWeather = null;
  132. }
  133. else
  134. {
  135. CurrentWeather = await UIKernel.Instance.ApiClient.GetWeatherInfoAsync(ServerConfiguration.WeatherZipCode);
  136. }
  137. }
  138. }
  139. private void ClockTimerCallback(object stateInfo)
  140. {
  141. CurrentTime = DateTime.Now;
  142. }
  143. private async void ServerConfigurationTimerCallback(object stateInfo)
  144. {
  145. ServerConfiguration = await UIKernel.Instance.ApiClient.GetServerConfigurationAsync();
  146. }
  147. public async Task<Image> GetImage(string url)
  148. {
  149. var image = new Image();
  150. image.Source = await GetBitmapImage(url);
  151. return image;
  152. }
  153. public async Task<BitmapImage> GetBitmapImage(string url)
  154. {
  155. Stream stream = await UIKernel.Instance.ApiClient.GetImageStreamAsync(url);
  156. BitmapImage bitmap = new BitmapImage();
  157. bitmap.CacheOption = BitmapCacheOption.Default;
  158. bitmap.BeginInit();
  159. bitmap.StreamSource = stream;
  160. bitmap.EndInit();
  161. return bitmap;
  162. }
  163. public async Task LogoutUser()
  164. {
  165. CurrentUser = null;
  166. if (ServerConfiguration.EnableUserProfiles)
  167. {
  168. Navigate(CurrentTheme.LoginPageUri);
  169. }
  170. else
  171. {
  172. DtoUser defaultUser = await UIKernel.Instance.ApiClient.GetDefaultUserAsync();
  173. CurrentUser = defaultUser;
  174. Navigate(new Uri("/Pages/HomePage.xaml", UriKind.Relative));
  175. }
  176. }
  177. public void Navigate(Uri uri)
  178. {
  179. (MainWindow as MainWindow).Navigate(uri);
  180. }
  181. }
  182. }