PageRenderTime 57ms CodeModel.GetById 18ms RepoModel.GetById 1ms app.codeStats 0ms

/JMMClient/JMMClient/MainWindow.xaml.cs

https://bitbucket.org/gibwar/jmm-test
C# | 3308 lines | 2545 code | 566 blank | 197 comment | 549 complexity | 1d0fff68e2c0e7591296e3fa34dfcf96 MD5 | raw file

Large files files are truncated, but you can click here to view the full file

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Windows;
  6. using System.Windows.Controls;
  7. using System.Windows.Data;
  8. using System.Windows.Documents;
  9. using System.Windows.Input;
  10. using System.Windows.Media;
  11. using System.Windows.Media.Imaging;
  12. using System.Windows.Navigation;
  13. using System.Windows.Shapes;
  14. using System.ComponentModel;
  15. using System.Diagnostics;
  16. using System.Globalization;
  17. using System.Threading;
  18. using System.Resources;
  19. using JMMClient.Properties;
  20. using JMMClient.ViewModel;
  21. using Infralution.Localization.Wpf;
  22. using System.Configuration;
  23. using JMMClient.ImageDownload;
  24. using System.Windows.Threading;
  25. using System.ServiceModel;
  26. using JMMClient.Forms;
  27. using System.IO;
  28. using NLog;
  29. using System.Collections.ObjectModel;
  30. using JMMClient.UserControls;
  31. using JMMClient.Downloads;
  32. using JMMClient.Utilities;
  33. namespace JMMClient
  34. {
  35. /// <summary>
  36. /// Interaction logic for MainWindow.xaml
  37. /// </summary>
  38. public partial class MainWindow : Window
  39. {
  40. private static Logger logger = LogManager.GetCurrentClassLogger();
  41. public static readonly int TAB_MAIN_Dashboard = 0;
  42. public static readonly int TAB_MAIN_Collection = 1;
  43. public static readonly int TAB_MAIN_Playlists = 2;
  44. public static readonly int TAB_MAIN_Bookmarks = 3;
  45. public static readonly int TAB_MAIN_Server = 4;
  46. public static readonly int TAB_MAIN_FileManger = 5;
  47. public static readonly int TAB_MAIN_Settings = 6;
  48. public static readonly int TAB_MAIN_Pinned = 7;
  49. public static readonly int TAB_MAIN_Downloads = 8;
  50. public static readonly int TAB_MAIN_Search = 9;
  51. public static int CurrentMainTabIndex = TAB_MAIN_Dashboard;
  52. private static readonly int TAB_FileManger_Unrecognised = 0;
  53. private static readonly int TAB_FileManger_Ignored = 1;
  54. private static readonly int TAB_FileManger_ManuallyLinked = 2;
  55. private static readonly int TAB_FileManger_DuplicateFiles = 3;
  56. private static readonly int TAB_FileManger_MultipleFiles = 4;
  57. private static readonly int TAB_FileManger_MissingMyList = 5;
  58. private static readonly int TAB_FileManger_SeriesNoFiles = 6;
  59. private static readonly int TAB_FileManger_MissingEps = 7;
  60. private static readonly int TAB_FileManger_IgnoredAnime = 8;
  61. private static readonly int TAB_FileManger_Avdump = 9;
  62. private static readonly int TAB_FileManger_FileSearch = 10;
  63. private static readonly int TAB_FileManger_Rename = 11;
  64. private static readonly int TAB_FileManger_UpdateData = 12;
  65. private static readonly int TAB_FileManger_Rankings = 13;
  66. public static readonly int TAB_Settings_Essential = 0;
  67. public static readonly int TAB_Settings_AniDB = 1;
  68. public static readonly int TAB_Settings_TvDB = 2;
  69. public static readonly int TAB_Settings_WebCache = 3;
  70. public static readonly int TAB_Settings_Display = 4;
  71. private static System.Timers.Timer postStartTimer = null;
  72. private int lastFileManagerTab = TAB_FileManger_Unrecognised;
  73. public static GroupFilterVM groupFilterVM = null;
  74. public static List<UserCulture> userLanguages = new List<UserCulture>();
  75. public static ImageDownloader imageHelper = null;
  76. private AnimeGroupVM groupBeforeChanges = null;
  77. private GroupFilterVM groupFilterBeforeChanges = null;
  78. BackgroundWorker showChildWrappersWorker = new BackgroundWorker();
  79. BackgroundWorker refreshGroupsWorker = new BackgroundWorker();
  80. BackgroundWorker downloadImagesWorker = new BackgroundWorker();
  81. BackgroundWorker toggleStatusWorker = new BackgroundWorker();
  82. BackgroundWorker moveSeriesWorker = new BackgroundWorker();
  83. BackgroundWorker showDashboardWorker = new BackgroundWorker();
  84. public static VideoHandler videoHandler = new VideoHandler();
  85. public MainWindow()
  86. {
  87. try
  88. {
  89. InitializeComponent();
  90. }
  91. catch(Exception ex)
  92. {
  93. File.WriteAllText(@"C:\jmmerror.txt", ex.ToString());
  94. }
  95. try
  96. {
  97. UnhandledExceptionManager.AddHandler();
  98. //AppSettings.DebugSettingsToLog();
  99. lbGroupsSeries.MouseDoubleClick += new MouseButtonEventHandler(lbGroupsSeries_MouseDoubleClick);
  100. lbGroupsSeries.SelectionChanged += new SelectionChangedEventHandler(lbGroupsSeries_SelectionChanged);
  101. this.grdMain.LayoutUpdated += new EventHandler(grdMain_LayoutUpdated);
  102. this.LayoutUpdated += new EventHandler(MainWindow_LayoutUpdated);
  103. lbPlaylists.SelectionChanged += new SelectionChangedEventHandler(lbPlaylists_SelectionChanged);
  104. showChildWrappersWorker.DoWork += new DoWorkEventHandler(showChildWrappersWorker_DoWork);
  105. showChildWrappersWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(showChildWrappersWorker_RunWorkerCompleted);
  106. downloadImagesWorker.DoWork += new DoWorkEventHandler(downloadImagesWorker_DoWork);
  107. refreshGroupsWorker.DoWork += new DoWorkEventHandler(refreshGroupsWorker_DoWork);
  108. refreshGroupsWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(refreshGroupsWorker_RunWorkerCompleted);
  109. toggleStatusWorker.DoWork += new DoWorkEventHandler(toggleStatusWorker_DoWork);
  110. toggleStatusWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(toggleStatusWorker_RunWorkerCompleted);
  111. moveSeriesWorker.DoWork += new DoWorkEventHandler(moveSeriesWorker_DoWork);
  112. moveSeriesWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(moveSeriesWorker_RunWorkerCompleted);
  113. txtGroupSearch.TextChanged += new TextChangedEventHandler(txtGroupSearch_TextChanged);
  114. showDashboardWorker.DoWork += new DoWorkEventHandler(showDashboardWorker_DoWork);
  115. showDashboardWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(showDashboardWorker_RunWorkerCompleted);
  116. MainListHelperVM.Instance.ViewGroups.Filter = GroupSearchFilter;
  117. cboLanguages.SelectionChanged += new SelectionChangedEventHandler(cboLanguages_SelectionChanged);
  118. if (MainListHelperVM.Instance.SeriesSearchTextBox == null) MainListHelperVM.Instance.SeriesSearchTextBox = seriesSearch.txtSeriesSearch;
  119. //grdSplitEps.DragCompleted += new System.Windows.Controls.Primitives.DragCompletedEventHandler(grdSplitEps_DragCompleted);
  120. imageHelper = new ImageDownloader();
  121. imageHelper.Init();
  122. videoHandler.Init();
  123. //videoHandler.HandleFileChange(AppSettings.MPCFolder + "\\mpc-hc.ini");
  124. InitCulture();
  125. imageHelper.QueueUpdateEvent += new ImageDownloader.QueueUpdateEventHandler(imageHelper_QueueUpdateEvent);
  126. cboGroupSort.Items.Clear();
  127. foreach (string sType in GroupFilterHelper.GetAllSortTypes())
  128. cboGroupSort.Items.Add(sType);
  129. cboGroupSort.SelectedIndex = 0;
  130. btnToolbarSort.Click += new RoutedEventHandler(btnToolbarSort_Click);
  131. tabControl1.SelectionChanged += new SelectionChangedEventHandler(tabControl1_SelectionChanged);
  132. tabFileManager.SelectionChanged += new SelectionChangedEventHandler(tabFileManager_SelectionChanged);
  133. tabSettingsChild.SelectionChanged += new SelectionChangedEventHandler(tabSettingsChild_SelectionChanged);
  134. this.Loaded += new RoutedEventHandler(MainWindow_Loaded);
  135. this.StateChanged += new EventHandler(MainWindow_StateChanged);
  136. // Have commented this out because it is no good when Desktop and Server are sharing
  137. // the same base image path
  138. //DeleteAvatarImages();
  139. this.AddHandler(CloseableTabItem.CloseTabEvent, new RoutedEventHandler(this.CloseTab));
  140. btnUpdateMediaInfo.Click += new RoutedEventHandler(btnUpdateMediaInfo_Click);
  141. btnAbout.Click += new RoutedEventHandler(btnAbout_Click);
  142. btnClearHasherQueue.Click += new RoutedEventHandler(btnClearHasherQueue_Click);
  143. btnClearGeneralQueue.Click += new RoutedEventHandler(btnClearGeneralQueue_Click);
  144. btnClearServerImageQueue.Click += new RoutedEventHandler(btnClearServerImageQueue_Click);
  145. JMMServerVM.Instance.BaseImagePath = Utils.GetBaseImagesPath();
  146. // timer for automatic updates
  147. postStartTimer = new System.Timers.Timer();
  148. postStartTimer.AutoReset = false;
  149. postStartTimer.Interval = 5 * 1000; // 15 seconds
  150. postStartTimer.Elapsed += new System.Timers.ElapsedEventHandler(postStartTimer_Elapsed);
  151. btnSwitchUser.Click += new RoutedEventHandler(btnSwitchUser_Click);
  152. //videoHandler.HandleFileChange(@"C:\Program Files (x86)\Combined Community Codec Pack\MPC\mpc-hc.ini");
  153. MainWindow.videoHandler.VideoWatchedEvent += new VideoHandler.VideoWatchedEventHandler(videoHandler_VideoWatchedEvent);
  154. if (AppSettings.DashboardType == DashboardType.Normal)
  155. dash.Visibility = System.Windows.Visibility.Visible;
  156. else
  157. dashMetro.Visibility = System.Windows.Visibility.Visible;
  158. UserSettingsVM.Instance.SetDashMetro_Image_Width();
  159. }
  160. catch (Exception ex)
  161. {
  162. logger.ErrorException(ex.ToString(), ex);
  163. }
  164. }
  165. void btnSwitchUser_Click(object sender, RoutedEventArgs e)
  166. {
  167. // authenticate user
  168. if (JMMServerVM.Instance.ServerOnline)
  169. {
  170. if (JMMServerVM.Instance.AuthenticateUser())
  171. {
  172. MainListHelperVM.Instance.ClearData();
  173. MainListHelperVM.Instance.ShowChildWrappers(null);
  174. RecentAdditionsType addType = RecentAdditionsType.Episode;
  175. if (dash.cboDashRecentAdditionsType.SelectedIndex == 0) addType = RecentAdditionsType.Episode;
  176. if (dash.cboDashRecentAdditionsType.SelectedIndex == 1) addType = RecentAdditionsType.Series;
  177. RefreshOptions opt = new RefreshOptions();
  178. opt.TraktScrobbles = dash.togTraktScrobbles.IsChecked.Value;
  179. opt.TraktShouts = dash.togTraktShouts.IsChecked.Value;
  180. opt.RecentAdditionType = addType;
  181. opt.RefreshRecentAdditions = true;
  182. opt.RefreshContinueWatching = true;
  183. opt.RefreshOtherWidgets = true;
  184. showDashboardWorker.RunWorkerAsync(opt);
  185. tabControl1.SelectedIndex = TAB_MAIN_Dashboard;
  186. }
  187. }
  188. }
  189. void videoHandler_VideoWatchedEvent(VideoWatchedEventArgs ev)
  190. {
  191. if (tabControl1.SelectedIndex == TAB_MAIN_Collection || tabControl1.SelectedIndex == TAB_MAIN_Pinned)
  192. {
  193. //RefreshView();
  194. }
  195. }
  196. void btnClearServerImageQueue_Click(object sender, RoutedEventArgs e)
  197. {
  198. try
  199. {
  200. this.Cursor = Cursors.Wait;
  201. JMMServerVM.Instance.clientBinaryHTTP.ClearImagesQueue();
  202. }
  203. catch (Exception ex)
  204. {
  205. Utils.ShowErrorMessage(ex);
  206. }
  207. this.Cursor = Cursors.Arrow;
  208. }
  209. void btnClearGeneralQueue_Click(object sender, RoutedEventArgs e)
  210. {
  211. try
  212. {
  213. this.Cursor = Cursors.Wait;
  214. JMMServerVM.Instance.clientBinaryHTTP.ClearGeneralQueue();
  215. }
  216. catch (Exception ex)
  217. {
  218. Utils.ShowErrorMessage(ex);
  219. }
  220. this.Cursor = Cursors.Arrow;
  221. }
  222. void btnClearHasherQueue_Click(object sender, RoutedEventArgs e)
  223. {
  224. try
  225. {
  226. this.Cursor = Cursors.Wait;
  227. JMMServerVM.Instance.clientBinaryHTTP.ClearHasherQueue();
  228. }
  229. catch (Exception ex)
  230. {
  231. Utils.ShowErrorMessage(ex);
  232. }
  233. this.Cursor = Cursors.Arrow;
  234. }
  235. void btnAbout_Click(object sender, RoutedEventArgs e)
  236. {
  237. AboutForm frm = new AboutForm();
  238. frm.Owner = this;
  239. frm.ShowDialog();
  240. }
  241. void btnUpdateMediaInfo_Click(object sender, RoutedEventArgs e)
  242. {
  243. try
  244. {
  245. JMMServerVM.Instance.clientBinaryHTTP.RefreshAllMediaInfo();
  246. MessageBox.Show("Process is Running", "Success", MessageBoxButton.OK, MessageBoxImage.Information);
  247. }
  248. catch (Exception ex)
  249. {
  250. Utils.ShowErrorMessage(ex);
  251. }
  252. }
  253. private void DeleteAvatarImages()
  254. {
  255. try
  256. {
  257. string path = Utils.GetTraktImagePath_Avatars();
  258. if (!Directory.Exists(path)) return;
  259. string[] imageFiles = Directory.GetFiles(path, "*.jpg");
  260. foreach (string filename in imageFiles)
  261. File.Delete(filename);
  262. }
  263. catch { }
  264. }
  265. private void CloseTab(object source, RoutedEventArgs args)
  266. {
  267. System.Windows.Controls.TabItem tabItem = args.Source as System.Windows.Controls.TabItem;
  268. if (tabItem != null)
  269. {
  270. System.Windows.Controls.TabControl tabControl = tabItem.Parent as System.Windows.Controls.TabControl;
  271. if (tabControl != null)
  272. tabControl.Items.Remove(tabItem);
  273. }
  274. }
  275. void MainWindow_StateChanged(object sender, EventArgs e)
  276. {
  277. //if (this.WindowState == System.Windows.WindowState.Minimized) this.Hide();
  278. if (this.WindowState == System.Windows.WindowState.Normal || this.WindowState == System.Windows.WindowState.Maximized)
  279. AppSettings.DefaultWindowState = this.WindowState;
  280. }
  281. void MainWindow_Loaded(object sender, RoutedEventArgs e)
  282. {
  283. //this.WindowState = AppSettings.DefaultWindowState;
  284. if (AppSettings.WindowFullScreen)
  285. SetWindowFullscreen();
  286. else
  287. SetWindowNormal();
  288. Utils.ClearAutoUpdateCache();
  289. // validate settings
  290. JMMServerVM.Instance.Test();
  291. bool loggedIn = false;
  292. if (JMMServerVM.Instance.ServerOnline)
  293. loggedIn = JMMServerVM.Instance.LoginAsLastUser();
  294. if (!loggedIn)
  295. {
  296. // authenticate user
  297. if (JMMServerVM.Instance.ServerOnline && !JMMServerVM.Instance.AuthenticateUser())
  298. {
  299. this.Close();
  300. return;
  301. }
  302. }
  303. if (JMMServerVM.Instance.ServerOnline)
  304. {
  305. tabControl1.SelectedIndex = TAB_MAIN_Dashboard;
  306. DisplayMainTab(TAB_MAIN_Dashboard);
  307. DownloadAllImages();
  308. }
  309. else
  310. tabControl1.SelectedIndex = TAB_MAIN_Settings;
  311. System.Reflection.Assembly a = System.Reflection.Assembly.GetExecutingAssembly();
  312. if (a != null)
  313. {
  314. JMMServerVM.Instance.ApplicationVersion = Utils.GetApplicationVersion(a);
  315. }
  316. UTorrentHelperVM.Instance.ValidateCredentials();
  317. postStartTimer.Start();
  318. }
  319. void postStartTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
  320. {
  321. postStartTimer.Stop();
  322. UTorrentHelperVM.Instance.Init();
  323. System.Windows.Application.Current.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, (Action)delegate()
  324. {
  325. automaticUpdater.ForceCheckForUpdate(true);
  326. });
  327. if (JMMServerVM.Instance.ServerOnline)
  328. DownloadAllImages();
  329. }
  330. void MainWindow_LayoutUpdated(object sender, EventArgs e)
  331. {
  332. // Why am I doing this?
  333. // Basically there is weird problem if you try and set the content control's width to the exact
  334. // ViewportWidth of the parent scroller.
  335. // On some resolutions, when you maximise the window it will cause UI glitches
  336. // By setting it slightly less than the max width, these problems go away
  337. try
  338. {
  339. //Debug.Print("Scroller width = {0}", Scroller.ActualWidth);
  340. //Debug.Print("Scroller ViewportWidth = {0}", Scroller.ViewportWidth);
  341. double tempWidth = ccDetail.ActualWidth - 8;
  342. double tempHeight = ccDetail.ActualHeight - 8;
  343. if (tempWidth > 0)
  344. {
  345. MainListHelperVM.Instance.MainScrollerWidth = tempWidth;
  346. }
  347. tempWidth = tabControl1.ActualWidth - 20;
  348. //tempWidth = tabControl1.ActualWidth - 300;
  349. if (tempWidth > 0)
  350. MainListHelperVM.Instance.FullScrollerWidth = tempWidth;
  351. tempHeight = tabControl1.ActualHeight - 50;
  352. if (tempHeight > 0)
  353. MainListHelperVM.Instance.FullScrollerHeight = tempHeight;
  354. tempWidth = ScrollerPlaylist.ViewportWidth - 8;
  355. if (tempWidth > 0)
  356. MainListHelperVM.Instance.PlaylistScrollerWidth = tempWidth;
  357. tempWidth = tabcDownloads.ActualWidth - 130;
  358. if (tempWidth > 0)
  359. MainListHelperVM.Instance.DownloadRecScrollerWidth = tempWidth;
  360. }
  361. catch (Exception ex)
  362. {
  363. logger.ErrorException(ex.ToString(), ex);
  364. }
  365. }
  366. void tabFileManager_SelectionChanged(object sender, SelectionChangedEventArgs e)
  367. {
  368. try
  369. {
  370. if (e.Source is System.Windows.Controls.TabControl)
  371. {
  372. System.Windows.Controls.TabControl tab = e.Source as System.Windows.Controls.TabControl;
  373. this.Cursor = Cursors.Wait;
  374. if (tab.SelectedIndex == TAB_FileManger_Unrecognised)
  375. {
  376. if (unRecVids.UnrecognisedFiles.Count == 0) unRecVids.RefreshUnrecognisedFiles();
  377. if (unRecVids.AllSeries.Count == 0) unRecVids.RefreshSeries();
  378. lastFileManagerTab = TAB_FileManger_Unrecognised;
  379. }
  380. if (tab.SelectedIndex == TAB_FileManger_Ignored)
  381. {
  382. if (ignoredFiles.IgnoredFilesCollection.Count == 0) ignoredFiles.RefreshIgnoredFiles();
  383. lastFileManagerTab = TAB_FileManger_Ignored;
  384. }
  385. if (tab.SelectedIndex == TAB_FileManger_ManuallyLinked)
  386. {
  387. if (linkedFiles.ManuallyLinkedFiles.Count == 0) linkedFiles.RefreshLinkedFiles();
  388. lastFileManagerTab = TAB_FileManger_ManuallyLinked;
  389. }
  390. if (tab.SelectedIndex == TAB_FileManger_DuplicateFiles)
  391. {
  392. if (duplicateFiles.DuplicateFilesCollection.Count == 0) duplicateFiles.RefreshDuplicateFiles();
  393. lastFileManagerTab = TAB_FileManger_DuplicateFiles;
  394. }
  395. if (tab.SelectedIndex == TAB_FileManger_MultipleFiles)
  396. {
  397. //if (multipleFiles.CurrentEpisodes.Count == 0) multipleFiles.RefreshMultipleFiles();
  398. lastFileManagerTab = TAB_FileManger_MultipleFiles;
  399. }
  400. if (tab.SelectedIndex == TAB_FileManger_Rename)
  401. {
  402. if (fileRenaming.RenameScripts.Count == 0) fileRenaming.RefreshScripts();
  403. lastFileManagerTab = TAB_FileManger_Rename;
  404. }
  405. if (tab.SelectedIndex == TAB_FileManger_Rankings)
  406. {
  407. if (rankings.AllAnime.Count == 0) rankings.Init();
  408. lastFileManagerTab = TAB_FileManger_Rankings;
  409. }
  410. this.Cursor = Cursors.Arrow;
  411. }
  412. }
  413. catch (Exception ex)
  414. {
  415. Utils.ShowErrorMessage(ex);
  416. }
  417. }
  418. void showDashboardWorker_DoWork(object sender, DoWorkEventArgs e)
  419. {
  420. RefreshOptions opt = e.Argument as RefreshOptions;
  421. DashboardVM.Instance.RefreshData(opt.TraktScrobbles, opt.TraktShouts, opt.RefreshContinueWatching, opt.RefreshRecentAdditions,
  422. opt.RefreshOtherWidgets, opt.RecentAdditionType);
  423. }
  424. void showDashboardWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
  425. {
  426. this.Cursor = Cursors.Arrow;
  427. tabControl1.IsEnabled = true;
  428. }
  429. private void DisplayMainTab(int tabIndex)
  430. {
  431. try
  432. {
  433. CurrentMainTabIndex = tabIndex;
  434. if (tabIndex == TAB_MAIN_Dashboard)
  435. {
  436. if (dash.Visibility == System.Windows.Visibility.Visible)
  437. {
  438. if (DashboardVM.Instance.EpsWatchNext_Recent.Count == 0 && DashboardVM.Instance.SeriesMissingEps.Count == 0
  439. && DashboardVM.Instance.MiniCalendar.Count == 0 && DashboardVM.Instance.RecommendationsWatch.Count == 0
  440. && DashboardVM.Instance.RecommendationsDownload.Count == 0)
  441. {
  442. tabControl1.IsEnabled = false;
  443. this.Cursor = Cursors.Wait;
  444. RecentAdditionsType addType = RecentAdditionsType.Episode;
  445. if (dash.cboDashRecentAdditionsType.SelectedIndex == 0) addType = RecentAdditionsType.Episode;
  446. if (dash.cboDashRecentAdditionsType.SelectedIndex == 1) addType = RecentAdditionsType.Series;
  447. RefreshOptions opt = new RefreshOptions();
  448. opt.TraktScrobbles = dash.togTraktScrobbles.IsChecked.Value;
  449. opt.TraktShouts = dash.togTraktShouts.IsChecked.Value;
  450. opt.RecentAdditionType = addType;
  451. opt.RefreshRecentAdditions = true;
  452. opt.RefreshContinueWatching = true;
  453. opt.RefreshOtherWidgets = true;
  454. showDashboardWorker.RunWorkerAsync(opt);
  455. }
  456. }
  457. else
  458. {
  459. if (DashboardMetroVM.Instance.ContinueWatching.Count == 0)
  460. dashMetro.RefreshAllData();
  461. }
  462. }
  463. if (tabIndex == TAB_MAIN_Collection)
  464. {
  465. if (MainListHelperVM.Instance.AllGroups.Count == 0)
  466. {
  467. MainListHelperVM.Instance.RefreshGroupsSeriesData();
  468. }
  469. if (MainListHelperVM.Instance.CurrentWrapper == null && lbGroupsSeries.Items.Count == 0)
  470. {
  471. MainListHelperVM.Instance.SearchTextBox = txtGroupSearch;
  472. MainListHelperVM.Instance.CurrentGroupFilter = MainListHelperVM.Instance.AllGroupFilter;
  473. MainListHelperVM.Instance.ShowChildWrappers(MainListHelperVM.Instance.CurrentWrapper);
  474. lbGroupsSeries.SelectedIndex = 0;
  475. }
  476. }
  477. if (tabIndex == TAB_MAIN_FileManger)
  478. {
  479. if (unRecVids.UnrecognisedFiles.Count == 0) unRecVids.RefreshUnrecognisedFiles();
  480. }
  481. if (tabIndex == TAB_MAIN_Playlists)
  482. {
  483. if (PlaylistHelperVM.Instance.Playlists == null || PlaylistHelperVM.Instance.Playlists.Count == 0) PlaylistHelperVM.Instance.RefreshData();
  484. if (lbPlaylists.Items.Count > 0 && lbPlaylists.SelectedIndex < 0)
  485. lbPlaylists.SelectedIndex = 0;
  486. }
  487. if (tabIndex == TAB_MAIN_Bookmarks)
  488. {
  489. if (MainListHelperVM.Instance.BookmarkedAnime == null || MainListHelperVM.Instance.BookmarkedAnime.Count == 0) MainListHelperVM.Instance.RefreshBookmarkedAnime();
  490. if (ucBookmarks.lbBookmarks.Items.Count > 0)
  491. ucBookmarks.lbBookmarks.SelectedIndex = 0;
  492. }
  493. if (tabIndex == TAB_MAIN_Search)
  494. {
  495. if (MainListHelperVM.Instance.AllSeries == null || MainListHelperVM.Instance.AllSeries.Count == 0) MainListHelperVM.Instance.RefreshGroupsSeriesData();
  496. }
  497. if (tabIndex == TAB_MAIN_Server)
  498. {
  499. if (JMMServerVM.Instance.ImportFolders.Count == 0) JMMServerVM.Instance.RefreshImportFolders();
  500. }
  501. if (tabIndex == TAB_MAIN_Settings)
  502. {
  503. if (JMMServerVM.Instance.ImportFolders.Count == 0) JMMServerVM.Instance.RefreshImportFolders();
  504. if (JMMServerVM.Instance.SelectedLanguages.Count == 0) JMMServerVM.Instance.RefreshNamingLanguages();
  505. if (JMMServerVM.Instance.AllUsers.Count == 0) JMMServerVM.Instance.RefreshAllUsers();
  506. if (JMMServerVM.Instance.AllCategories.Count == 0) JMMServerVM.Instance.RefreshAllCategories();
  507. }
  508. if (tabIndex == TAB_MAIN_Downloads)
  509. {
  510. if (UserSettingsVM.Instance.SelectedTorrentSources.Count == 0 || UserSettingsVM.Instance.UnselectedTorrentSources.Count == 0)
  511. UserSettingsVM.Instance.RefreshTorrentSources();
  512. }
  513. }
  514. catch (Exception ex)
  515. {
  516. Utils.ShowErrorMessage(ex);
  517. tabControl1.IsEnabled = true;
  518. }
  519. }
  520. void tabControl1_SelectionChanged(object sender, SelectionChangedEventArgs e)
  521. {
  522. try
  523. {
  524. SetColours();
  525. //if (!this.IsLoaded || !JMMServerVM.Instance.UserAuthenticated) return;
  526. if (!JMMServerVM.Instance.UserAuthenticated) return;
  527. TabControl tab = e.Source as TabControl;
  528. if (tab == null) return;
  529. if (!tab.Name.Equals("tabControl1", StringComparison.InvariantCultureIgnoreCase)) return;
  530. DisplayMainTab(tabControl1.SelectedIndex);
  531. }
  532. catch (Exception ex)
  533. {
  534. Utils.ShowErrorMessage(ex);
  535. tabControl1.IsEnabled = true;
  536. }
  537. }
  538. void tabSettingsChild_SelectionChanged(object sender, SelectionChangedEventArgs e)
  539. {
  540. try
  541. {
  542. if (e.Source is System.Windows.Controls.TabControl)
  543. {
  544. System.Windows.Controls.TabControl tab = e.Source as System.Windows.Controls.TabControl;
  545. if (tab.SelectedIndex == TAB_Settings_Display)
  546. {
  547. if (JMMServerVM.Instance.SelectedLanguages.Count == 0) JMMServerVM.Instance.RefreshNamingLanguages();
  548. }
  549. }
  550. }
  551. catch (Exception ex)
  552. {
  553. Utils.ShowErrorMessage(ex);
  554. }
  555. }
  556. void btnToolbarSort_Click(object sender, RoutedEventArgs e)
  557. {
  558. MainListHelperVM.Instance.ViewGroups.SortDescriptions.Clear();
  559. GroupFilterSorting sortType = GroupFilterHelper.GetEnumForText_Sorting(cboGroupSort.SelectedItem.ToString());
  560. MainListHelperVM.Instance.ViewGroups.SortDescriptions.Add(GroupFilterHelper.GetSortDescription(sortType, GroupFilterSortDirection.Asc));
  561. }
  562. void imageHelper_QueueUpdateEvent(QueueUpdateEventArgs ev)
  563. {
  564. try
  565. {
  566. this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new System.Windows.Forms.MethodInvoker(delegate()
  567. {
  568. tbImageDownloadQueueStatus.Text = ev.queueCount.ToString();
  569. }));
  570. }
  571. catch (Exception ex)
  572. {
  573. Utils.ShowErrorMessage(ex);
  574. }
  575. }
  576. void cboLanguages_SelectionChanged(object sender, SelectionChangedEventArgs e)
  577. {
  578. SetCulture();
  579. }
  580. private void InitCulture()
  581. {
  582. try
  583. {
  584. string currentCulture = AppSettings.Culture;
  585. cboLanguages.ItemsSource = UserCulture.SupportedLanguages;
  586. for (int i = 0; i < cboLanguages.Items.Count; i++)
  587. {
  588. UserCulture ul = cboLanguages.Items[i] as UserCulture;
  589. if (ul.Culture.Trim().ToUpper() == currentCulture.Trim().ToUpper())
  590. {
  591. cboLanguages.SelectedIndex = i;
  592. break;
  593. }
  594. }
  595. if (cboLanguages.SelectedIndex < 0)
  596. cboLanguages.SelectedIndex = 0;
  597. }
  598. catch (Exception ex)
  599. {
  600. Utils.ShowErrorMessage(ex);
  601. }
  602. }
  603. private void SetCulture()
  604. {
  605. if (cboLanguages.SelectedItem == null) return;
  606. UserCulture ul = cboLanguages.SelectedItem as UserCulture;
  607. try
  608. {
  609. CultureInfo ci = new CultureInfo(ul.Culture);
  610. CultureManager.UICulture = ci;
  611. AppSettings.Culture = ul.Culture;
  612. }
  613. catch (Exception ex)
  614. {
  615. Utils.ShowErrorMessage(ex);
  616. }
  617. }
  618. void txtGroupSearch_TextChanged(object sender, TextChangedEventArgs e)
  619. {
  620. try
  621. {
  622. SetDetailBinding(null);
  623. // move to all groups
  624. if (MainListHelperVM.Instance.CurrentWrapper == null)
  625. MainListHelperVM.Instance.ShowAllGroups();
  626. MainListHelperVM.Instance.ViewGroups.Refresh();
  627. }
  628. catch (Exception ex)
  629. {
  630. Utils.ShowErrorMessage(ex);
  631. }
  632. }
  633. private bool GroupSearchFilter(object obj)
  634. {
  635. MainListWrapper grp = obj as MainListWrapper;
  636. if (grp == null) return true;
  637. if (obj.GetType() != typeof(AnimeGroupVM) && obj.GetType() != typeof(AnimeSeriesVM))
  638. return true;
  639. // first evaluate the group filter
  640. // if the group doesn't match the group filter we won't continue
  641. if (obj.GetType() == typeof(AnimeGroupVM))
  642. {
  643. AnimeGroupVM grpvm = obj as AnimeGroupVM;
  644. //if (!GroupSearchFilterHelper.EvaluateGroupFilter(MainListHelperVM.Instance.CurrentGroupFilter, grpvm)) return false;
  645. return GroupSearchFilterHelper.EvaluateGroupTextSearch(grpvm, txtGroupSearch.Text);
  646. }
  647. if (obj.GetType() == typeof(AnimeSeriesVM))
  648. {
  649. AnimeSeriesVM ser = obj as AnimeSeriesVM;
  650. //if (!GroupSearchFilterHelper.EvaluateGroupFilter(MainListHelperVM.Instance.CurrentGroupFilter, ser)) return false;
  651. return GroupSearchFilterHelper.EvaluateSeriesTextSearch(ser, txtGroupSearch.Text);
  652. }
  653. return true;
  654. }
  655. void refreshGroupsWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
  656. {
  657. showChildWrappersWorker.RunWorkerAsync(MainListHelperVM.Instance.CurrentWrapper);
  658. }
  659. void refreshGroupsWorker_DoWork(object sender, DoWorkEventArgs e)
  660. {
  661. try
  662. {
  663. MainListHelperVM.Instance.RefreshGroupsSeriesData();
  664. DownloadAllImages();
  665. }
  666. catch (Exception ex)
  667. {
  668. Utils.ShowErrorMessage(ex);
  669. }
  670. }
  671. void showChildWrappersWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
  672. {
  673. try
  674. {
  675. EnableDisableGroupControls(true);
  676. if (lbGroupsSeries.Items.Count > 0)
  677. {
  678. HighlightMainListItem();
  679. }
  680. else
  681. SetDetailBinding(null);
  682. }
  683. catch (Exception ex)
  684. {
  685. Utils.ShowErrorMessage(ex);
  686. }
  687. }
  688. void showChildWrappersWorker_DoWork(object sender, DoWorkEventArgs e)
  689. {
  690. try
  691. {
  692. MainListHelperVM.Instance.ShowChildWrappers(e.Argument as MainListWrapper);
  693. }
  694. catch (Exception ex)
  695. {
  696. Utils.ShowErrorMessage(ex);
  697. }
  698. }
  699. void toggleStatusWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
  700. {
  701. EnableDisableGroupControls(true);
  702. this.Cursor = Cursors.Arrow;
  703. }
  704. void toggleStatusWorker_DoWork(object sender, DoWorkEventArgs e)
  705. {
  706. try
  707. {
  708. object obj = e.Argument;
  709. AnimeSeriesVM ser = null;
  710. bool newStatus = false;
  711. if (obj.GetType() == typeof(VideoDetailedVM))
  712. {
  713. VideoDetailedVM vid = obj as VideoDetailedVM;
  714. newStatus = !vid.Watched;
  715. JMMServerVM.Instance.clientBinaryHTTP.ToggleWatchedStatusOnVideo(vid.VideoLocalID, newStatus, JMMServerVM.Instance.CurrentUser.JMMUserID.Value);
  716. MainListHelperVM.Instance.UpdateHeirarchy(vid);
  717. ser = MainListHelperVM.Instance.GetSeriesForVideo(vid.VideoLocalID);
  718. }
  719. if (obj.GetType() == typeof(AnimeEpisodeVM))
  720. {
  721. AnimeEpisodeVM ep = obj as AnimeEpisodeVM;
  722. newStatus = !ep.Watched;
  723. JMMServerBinary.Contract_ToggleWatchedStatusOnEpisode_Response response = JMMServerVM.Instance.clientBinaryHTTP.ToggleWatchedStatusOnEpisode(ep.AnimeEpisodeID,
  724. newStatus, JMMServerVM.Instance.CurrentUser.JMMUserID.Value);
  725. if (!string.IsNullOrEmpty(response.ErrorMessage))
  726. {
  727. MessageBox.Show(response.ErrorMessage, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
  728. return;
  729. }
  730. MainListHelperVM.Instance.UpdateHeirarchy(response.AnimeEpisode);
  731. ser = MainListHelperVM.Instance.GetSeriesForEpisode(ep);
  732. }
  733. if (newStatus == true && ser != null)
  734. {
  735. Utils.PromptToRateSeries(ser, this);
  736. }
  737. }
  738. catch (Exception ex)
  739. {
  740. Utils.ShowErrorMessage(ex);
  741. }
  742. }
  743. void moveSeriesWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
  744. {
  745. EnableDisableGroupControls(true);
  746. SetDetailBinding(null);
  747. MainListHelperVM.Instance.RefreshGroupsSeriesData();
  748. MainListHelperVM.Instance.ShowChildWrappers(MainListHelperVM.Instance.CurrentWrapper);
  749. this.Cursor = Cursors.Arrow;
  750. MainListHelperVM.Instance.ViewGroups.Refresh();
  751. showChildWrappersWorker.RunWorkerAsync(MainListHelperVM.Instance.CurrentWrapper);
  752. }
  753. void moveSeriesWorker_DoWork(object sender, DoWorkEventArgs e)
  754. {
  755. try
  756. {
  757. object obj = e.Argument;
  758. if (obj.GetType() != typeof(MoveSeriesDetails)) return;
  759. MoveSeriesDetails request = obj as MoveSeriesDetails;
  760. DateTime start = DateTime.Now;
  761. //request.UpdatedSeries.Save();
  762. JMMServerBinary.Contract_AnimeSeries_SaveResponse response =
  763. JMMServerVM.Instance.clientBinaryHTTP.MoveSeries(request.UpdatedSeries.AnimeSeriesID.Value, request.UpdatedSeries.AnimeGroupID,
  764. JMMServerVM.Instance.CurrentUser.JMMUserID.Value);
  765. if (!string.IsNullOrEmpty(response.ErrorMessage))
  766. {
  767. this.Cursor = Cursors.Arrow;
  768. MessageBox.Show(response.ErrorMessage);
  769. return;
  770. }
  771. else
  772. {
  773. request.UpdatedSeries.Populate(response.AnimeSeries);
  774. }
  775. // update all the attached groups
  776. /*Dictionary<int, JMMServerBinary.Contract_AnimeGroup> grpsDict = new Dictionary<int, JMMServerBinary.Contract_AnimeGroup>();
  777. List<JMMServerBinary.Contract_AnimeGroup> grps = JMMServerVM.Instance.clientBinaryHTTP.GetAllGroupsAboveGroupInclusive(request.UpdatedSeries.AnimeGroupID,
  778. JMMServerVM.Instance.CurrentUser.JMMUserID.Value);
  779. List<JMMServerBinary.Contract_AnimeGroup> grpsOld = JMMServerVM.Instance.clientBinaryHTTP.GetAllGroupsAboveGroupInclusive(request.OldAnimeGroupID,
  780. JMMServerVM.Instance.CurrentUser.JMMUserID.Value);
  781. foreach (JMMServerBinary.Contract_AnimeGroup tempGrp in grps)
  782. grpsDict[tempGrp.AnimeGroupID] = tempGrp;
  783. foreach (JMMServerBinary.Contract_AnimeGroup tempGrp in grpsOld)
  784. grpsDict[tempGrp.AnimeGroupID] = tempGrp;
  785. foreach (AnimeGroupVM grp in MainListHelperVM.Instance.AllGroups)
  786. {
  787. if (grpsDict.ContainsKey(grp.AnimeGroupID.Value))
  788. {
  789. grp.Populate(grpsDict[grp.AnimeGroupID.Value]);
  790. }
  791. }
  792. TimeSpan ts = DateTime.Now - start;
  793. Console.Write(ts.TotalMilliseconds);*/
  794. }
  795. catch (Exception ex)
  796. {
  797. Utils.ShowErrorMessage(ex);
  798. }
  799. }
  800. private void DownloadAllImages()
  801. {
  802. //if (!downloadImagesWorker.IsBusy)
  803. // downloadImagesWorker.RunWorkerAsync();
  804. }
  805. void downloadImagesWorker_DoWork(object sender, DoWorkEventArgs e)
  806. {
  807. // 1. Download posters from AniDB
  808. List<JMMServerBinary.Contract_AniDBAnime> contracts = JMMServerVM.Instance.clientBinaryHTTP.GetAllAnime();
  809. int i = 0;
  810. foreach (JMMServerBinary.Contract_AniDBAnime anime in contracts)
  811. {
  812. //Thread.Sleep(5); // don't use too many resources
  813. imageHelper.DownloadAniDBCover(new AniDB_AnimeVM(anime), false);
  814. i++;
  815. //if (i == 80) break;
  816. }
  817. // 2. Download posters from TvDB
  818. List<JMMServerBinary.Contract_TvDB_ImagePoster> posters = JMMServerVM.Instance.clientBinaryHTTP.GetAllTvDBPosters(null);
  819. foreach (JMMServerBinary.Contract_TvDB_ImagePoster poster in posters)
  820. {
  821. //Thread.Sleep(5); // don't use too many resources
  822. imageHelper.DownloadTvDBPoster(new TvDB_ImagePosterVM(poster), false);
  823. }
  824. // 2a. Download posters from MovieDB
  825. List<JMMServerBinary.Contract_MovieDB_Poster> moviePosters = JMMServerVM.Instance.clientBinaryHTTP.GetAllMovieDBPosters(null);
  826. foreach (JMMServerBinary.Contract_MovieDB_Poster poster in moviePosters)
  827. {
  828. //Thread.Sleep(5); // don't use too many resources
  829. imageHelper.DownloadMovieDBPoster(new MovieDB_PosterVM(poster), false);
  830. }
  831. // 3. Download wide banners from TvDB
  832. List<JMMServerBinary.Contract_TvDB_ImageWideBanner> banners = JMMServerVM.Instance.clientBinaryHTTP.GetAllTvDBWideBanners(null);
  833. foreach (JMMServerBinary.Contract_TvDB_ImageWideBanner banner in banners)
  834. {
  835. //Thread.Sleep(5); // don't use too many resources
  836. imageHelper.DownloadTvDBWideBanner(new TvDB_ImageWideBannerVM(banner), false);
  837. }
  838. // 4. Download fanart from TvDB
  839. List<JMMServerBinary.Contract_TvDB_ImageFanart> fanarts = JMMServerVM.Instance.clientBinaryHTTP.GetAllTvDBFanart(null);
  840. foreach (JMMServerBinary.Contract_TvDB_ImageFanart fanart in fanarts)
  841. {
  842. //Thread.Sleep(5); // don't use too many resources
  843. imageHelper.DownloadTvDBFanart(new TvDB_ImageFanartVM(fanart), false);
  844. }
  845. // 4a. Download fanart from MovieDB
  846. List<JMMServerBinary.Contract_MovieDB_Fanart> movieFanarts = JMMServerVM.Instance.clientBinaryHTTP.GetAllMovieDBFanart(null);
  847. foreach (JMMServerBinary.Contract_MovieDB_Fanart fanart in movieFanarts)
  848. {
  849. //Thread.Sleep(5); // don't use too many resources
  850. imageHelper.DownloadMovieDBFanart(new MovieDB_FanartVM(fanart), false);
  851. }
  852. // 5. Download episode images from TvDB
  853. List<JMMServerBinary.Contract_TvDB_Episode> eps = JMMServerVM.Instance.clientBinaryHTTP.GetAllTvDBEpisodes(null);
  854. foreach (JMMServerBinary.Contract_TvDB_Episode episode in eps)
  855. {
  856. //Thread.Sleep(5); // don't use too many resources
  857. imageHelper.DownloadTvDBEpisode(new TvDB_EpisodeVM(episode), false);
  858. }
  859. // 6. Download posters from Trakt
  860. List<JMMServerBinary.Contract_Trakt_ImagePoster> traktPosters = JMMServerVM.Instance.clientBinaryHTTP.GetAllTraktPosters(null);
  861. foreach (JMMServerBinary.Contract_Trakt_ImagePoster traktposter in traktPosters)
  862. {
  863. //Thread.Sleep(5); // don't use too many resources
  864. if (string.IsNullOrEmpty(traktposter.ImageURL)) continue;
  865. imageHelper.DownloadTraktPoster(new Trakt_ImagePosterVM(traktposter), false);
  866. }
  867. // 7. Download fanart from Trakt
  868. List<JMMServerBinary.Contract_Trakt_ImageFanart> traktFanarts = JMMServerVM.Instance.clientBinaryHTTP.GetAllTraktFanart(null);
  869. foreach (JMMServerBinary.Contract_Trakt_ImageFanart traktFanart in traktFanarts)
  870. {
  871. //Thread.Sleep(5); // don't use too many resources
  872. if (string.IsNullOrEmpty(traktFanart.ImageURL)) continue;
  873. imageHelper.DownloadTraktFanart(new Trakt_ImageFanartVM(traktFanart), false);
  874. }
  875. // 8. Download episode images from Trakt
  876. List<JMMServerBinary.Contract_Trakt_Episode> traktEpisodes = JMMServerVM.Instance.clientBinaryHTTP.GetAllTraktEpisodes(null);
  877. foreach (JMMServerBinary.Contract_Trakt_Episode traktEp in traktEpisodes)
  878. {
  879. //Thread.Sleep(5); // don't use too many resources
  880. if (string.IsNullOrEmpty(traktEp.EpisodeImage)) continue;
  881. // special case for trak episodes
  882. // Trakt will return the fanart image when no episode image exists, but we don't want this
  883. int pos = traktEp.EpisodeImage.IndexOf(@"episodes/");
  884. if (pos <= 0) continue;
  885. //logger.Trace("Episode image: {0} - {1}/{2}", traktEp.Trakt_ShowID, traktEp.Season, traktEp.EpisodeNumber);
  886. imageHelper.DownloadTraktEpisode(new Trakt_EpisodeVM(traktEp), false);
  887. }
  888. }
  889. private void RefreshView()
  890. {
  891. if (!JMMServerVM.Instance.ServerOnline) return;
  892. EnableDisableGroupControls(false);
  893. try
  894. {
  895. this.Cursor = Cursors.Wait;
  896. // we are look at all the group filters
  897. if (MainListHelperVM.Instance.CurrentWrapper == null)
  898. {
  899. MainListHelperVM.Instance.SearchTextBox = txtGroupSearch;
  900. MainListHelperVM.Instance.CurrentGroupFilter = MainListHelperVM.Instance.AllGroupFilter;
  901. //refreshGroupsWorker.RunWorkerAsync(null);
  902. MainListHelperVM.Instance.RefreshGroupsSeriesData();
  903. DownloadAllImages();
  904. MainListHelperVM.Instance.ShowChildWrappers(MainListHelperVM.Instance.CurrentWrapper);
  905. }
  906. // we are inside one of the group filters, groups or series
  907. if (MainListHelperVM.Instance.CurrentWrapper != null)
  908. {
  909. // refresh the groups and series data
  910. refreshGroupsWorker.RunWorkerAsync(null);
  911. // refresh the episodes
  912. if (lbGroupsSeries.SelectedItem is AnimeSeriesVM)
  913. {
  914. AnimeSeriesVM ser = lbGroupsSeries.SelectedItem as AnimeSeriesVM;
  915. ser.RefreshEpisodes();
  916. }
  917. }
  918. }
  919. catch (Exception ex)
  920. {
  921. Utils.ShowErrorMessage(ex);
  922. EnableDisableGroupControls(true);
  923. }
  924. finally
  925. {
  926. this.Cursor = Cursors.Arrow;
  927. EnableDisableGroupControls(true);
  928. }
  929. }
  930. #region Command Bindings
  931. private void CommandBinding_EditTraktCredentials(object sender, ExecutedRoutedEventArgs e)
  932. {
  933. tabControl1.SelectedIndex = TAB_MAIN_Settings;
  934. tabSettingsChild.SelectedIndex = TAB_Settings_TvDB;
  935. }
  936. public void ShowPinnedFileAvDump(VideoLocalVM vid)
  937. {
  938. try
  939. {
  940. foreach (AVDumpVM dumpTemp in MainListHelperVM.Instance.AVDumpFiles)
  941. {
  942. if (dumpTemp.FullPath == vid.FullPath) return;
  943. }
  944. AVDumpVM dump = new AVDumpVM(vid);
  945. MainListHelperVM.Instance.AVDumpFiles.Add(dump);
  946. tabControl1.SelectedIndex = TAB_MAIN_FileManger;
  947. tabFileManager.SelectedIndex = TAB_FileManger_Avdump;
  948. }
  949. catch (Exception ex)
  950. {
  951. Utils.ShowErrorMessage(ex);
  952. }
  953. }
  954. public void ShowPinnedSeries(AnimeSeriesVM series)
  955. {
  956. this.Cursor = Cursors.Wait;
  957. CloseableTabItem cti = new CloseableTabItem();
  958. //TabItem cti = new TabItem();
  959. cti.Header = series.SeriesName;
  960. //AnimeSeries_Hulu seriesControl = new AnimeSeries_Hulu();
  961. AnimeSeries seriesControl = new AnimeSeries();
  962. seriesControl.DataContext = series;
  963. cti.Content = seriesControl;
  964. tabPinned.Items.Add(cti);
  965. tabControl1.SelectedIndex = TAB_MAIN_Pinned;
  966. tabPinned.SelectedIndex = tabPinned.Items.Count - 1;
  967. this.Cursor = Cursors.Arrow;
  968. }
  969. /*public void ToggleDashMetroStyle()
  970. {
  971. if (dash.Visibility == System.Windows.Visibility.Collapsed)
  972. {
  973. dash.Visibility = System.Windows.Visibility.Visible;
  974. dashMetro.Visibility = System.Windows.Visibility.Collapsed;
  975. DisplayMainTab(TAB_MAIN_Dashboard);
  976. AppSettings.DashboardType = DashboardType.Normal;
  977. }
  978. else
  979. {
  980. dash.Visibility = System.Windows.Visibility.Collapsed;
  981. dashMetro.Visibility = System.Windows.Visibility.Visible;
  982. DisplayMainTab(TAB_MAIN_Dashboard);
  983. AppSettings.DashboardType = DashboardType.Metro;
  984. }
  985. SetColours();
  986. }*/
  987. private void SetColours()
  988. {
  989. if (tabControl1.SelectedIndex == TAB_MAIN_Dashboard)
  990. {
  991. if (dash.Visibility == System.Windows.Visibility.Visible)
  992. {
  993. tabControl1.Background = new SolidColorBrush(Colors.Transparent);
  994. }
  995. else
  996. {
  997. var bc = new BrushConverter();
  998. tabControl1.Background = (Brush)bc.ConvertFrom("#F1F1F1");
  999. //tabControl1.Background = new SolidColorBrush(Colors.LightGray);
  1000. }
  1001. }
  1002. else
  1003. tabControl1.Background = new SolidColorBrush(Colors.Transparent);
  1004. }
  1005. public void ShowDashMetroView(MetroViews viewType, object data)
  1006. {
  1007. tileContinueWatching.Visibility = System.Windows.Visibility.Collapsed;
  1008. dash.Visibility = System.Windows.Visibility.Collapsed;
  1009. dashMetro.Visibility = System.Windows.Visibility.Collapsed;
  1010. switch (viewType)
  1011. {
  1012. case MetroViews.MainNormal:
  1013. dash.Visibility = System.Windows.Visibility.Visible;
  1014. DisplayMainTab(TAB_MAIN_Dashboard);
  1015. AppSettings.DashboardType = DashboardType.Normal;
  1016. break;
  1017. case MetroViews.MainMetro:
  1018. dashMetro.Visibility = System.Windows.Visibility.Visible;
  1019. DisplayMainTab(TAB_MAIN_Dashboard);
  1020. AppSettings.DashboardType = DashboardType.Metro;
  1021. break;
  1022. case MetroViews.ContinueWatching:
  1023. tileContinueWatching.Visibility = System.Windows.Visibility.Visible;
  1024. tileContinueWatching.DataContext = data;
  1025. break;
  1026. }
  1027. SetColours();
  1028. }
  1029. public void ShowDashMetroView(MetroViews viewType)
  1030. {
  1031. ShowDashMetroView(viewType, null);
  1032. }
  1033. private void CommandBinding_CreateSeriesFromAnime(object sender, ExecutedRoutedEventArgs e)
  1034. {
  1035. object obj = e.Parameter;
  1036. if (obj == null) return;
  1037. try
  1038. {
  1039. if (obj.GetType() == typeof(AniDB_AnimeVM) || obj.GetType() == typeof(AniDB_Anime_SimilarVM))
  1040. {
  1041. AniDB_AnimeVM anime = null;
  1042. if (obj.GetType() == typeof(AniDB_AnimeVM))
  1043. anime = (AniDB_AnimeVM)obj;
  1044. if (obj.GetType() == typeof(AniDB_Anime_SimilarVM))
  1045. anime = ((AniDB_Anime_SimilarVM)obj).AniDB_Anime;
  1046. // check if a series already exists
  1047. bool seriesExists = JMMServerVM.Instance.clientBinaryHTTP.GetSeriesExistingForAnime(anime.AnimeID);
  1048. if (seriesExists)
  1049. {
  1050. MessageBox.Show(Properties.Resources.ERROR_SeriesExists, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
  1051. return;
  1052. }
  1053. NewSeries frmNewSeries = new NewSeries();
  1054. frmNewSeries.Owner = this;
  1055. frmNewSeries.Init(anime, anime.FormattedTitle);
  1056. bool? result = frmNewSeries.ShowDialog();
  1057. if (result.HasValue && result.Value == true)
  1058. {
  1059. }
  1060. }
  1061. else
  1062. {
  1063. NewSeries frm = new NewSeries();
  1064. frm.Owner = this;
  1065. frm.Init(0, "");
  1066. bool? result = frm.ShowDialog();
  1067. if (result.HasValue && result.Value == true)
  1068. {
  1069. }
  1070. }
  1071. }
  1072. catch (Exception ex)
  1073. {
  1074. Utils.ShowErrorMessage(ex);
  1075. }
  1076. }
  1077. private void CommandBinding_AvdumpFile(object sender, ExecutedRoutedEventArgs e)
  1078. {
  1079. try
  1080. {
  1081. Window parentWindow = Window.GetWindow(this);
  1082. object obj = e.Parameter;
  1083. if (obj == null) return;
  1084. if (obj.GetType() == typeof(VideoLocalVM))
  1085. {
  1086. VideoLocalVM vid = obj as VideoLocalVM;
  1087. foreach (AVDumpVM dumpTemp in MainListHelperVM.Instance.AVDumpFiles)
  1088. {
  1089. if (dumpTemp.FullPath == vid.FullPath) return;
  1090. }
  1091. AVDumpVM dump = new AVDumpVM(vid);
  1092. MainListHelperVM.Instance.AVDumpFiles.Add(dump);
  1093. }
  1094. if (obj.GetType() == typeof(MultipleVideos))
  1095. {
  1096. MultipleVideos mv = obj as MultipleVideos;
  1097. foreach (VideoLocalVM vid in mv.VideoLocals)
  1098. {
  1099. bool alreadyExists = false;
  1100. foreach (AVDumpVM dumpTemp in MainListHelperVM.Instance.AVDumpFiles)
  1101. {
  1102. if (dumpTemp.FullPath == vid.FullPath)
  1103. {
  1104. alreadyExists = true;
  1105. break;
  1106. }
  1107. }
  1108. if (alreadyExists) continue;
  1109. AVDumpVM dump = new AVDumpVM(vid);
  1110. MainListHelperVM.Instance.AVDumpFiles.Add(dump);
  1111. }
  1112. }
  1113. tabControl1.SelectedIndex = TAB_MAIN_FileManger;
  1114. tabFileManager.SelectedIndex = TAB_FileManger_Avdump;
  1115. }
  1116. catch (Exception ex)
  1117. {
  1118. Utils.ShowErrorMessage(ex);
  1119. }
  1120. }
  1121. private void CommandBinding_BookmarkAnime(object sender, ExecutedRoutedEventArgs e)
  1122. {
  1123. Window parentWindow = Window.GetWindow(this);
  1124. object obj = e.Parameter;
  1125. if (obj == null) return;
  1126. try
  1127. {
  1128. if (obj.GetType() == typeof(RecommendationVM))
  1129. {
  1130. RecommendationVM rec = obj as RecommendationVM;
  1131. if (rec == null) return;
  1132. BookmarkedAnimeVM bookmark = new BookmarkedAnimeVM();
  1133. bookmark.AnimeID = rec.RecommendedAnimeID;
  1134. bookmark.Downloading = 0;
  1135. bookmark.Notes = "";
  1136. bookmark.Priority = 1;
  1137. if (bookmark.Save())
  1138. MainListHelperVM.Instance.RefreshBookmarkedAnime();
  1139. }
  1140. if (obj.GetType() == typeof(MissingEpisodeVM))
  1141. {
  1142. MissingEpisodeVM rec = obj as MissingEpisodeVM;
  1143. if (rec == null) return;
  1144. BookmarkedAnimeVM bookmark = new BookmarkedAnimeVM();
  1145. bookmark.AnimeID = rec.AnimeID;
  1146. bookmark.Downloading = 0;
  1147. bookmark.Notes = "";
  1148. bookmark.Priority = 1;
  1149. if (bookmark.Save())
  1150. MainListHelperVM.Instance.RefreshBookmarkedAnime();
  1151. }
  1152. if (obj.GetType() == typeof(AniDB_AnimeVM))
  1153. {
  1154. AniDB_AnimeVM rec = obj as AniDB_AnimeVM;
  1155. if (rec == null) return;
  1156. BookmarkedAnimeVM bookmark = new BookmarkedAnimeVM();
  1157. bookmark.AnimeID = rec.AnimeID;
  1158. bookmark.Downloading = 0;
  1159. bookmark.Notes = "";
  1160. bookmark.Priority = 1;
  1161. if (bookmark.Save())
  1162. MainListHelperVM.Instance.RefreshBookmarkedAnime();
  1163. }
  1164. if (obj.GetType() == typeof(AniDB_Anime_SimilarVM))
  1165. {
  1166. AniDB_Anime_SimilarVM sim = (AniDB_Anime_SimilarVM)obj;
  1167. BookmarkedAnimeVM bookmark = new BookmarkedAnimeVM();
  1168. bookmark.AnimeID = sim.SimilarAnimeID;
  1169. bookmark.Downloading = 0;
  1170. bookmark.Notes = "";
  1171. bookmark.Priority = 1;
  1172. if (bookmark.Save())
  1173. MainListHelperVM.Instance.RefreshBookmarkedAnime();
  1174. }
  1175. if (obj.GetType() == typeof(AniDB_Anime_RelationVM))
  1176. {
  1177. AniDB_Anime_RelationVM rel = (AniDB_Anime_RelationVM)obj;
  1178. BookmarkedAnimeVM bookmark = new BookmarkedAnimeVM();
  1179. bookmark.AnimeID = rel.RelatedAnimeID;
  1180. bookmark.Downloading = 0;
  1181. bookmark.Notes = "";
  1182. bookmark.Priority = 1;
  1183. if (bookmark.Save())
  1184. MainListHelperVM.Instance.RefreshBookmarkedAnime();
  1185. }
  1186. }
  1187. catch (Exception ex)
  1188. {
  1189. Utils.ShowErrorMessage(ex);
  1190. }
  1191. }
  1192. private void CommandBinding_RefreshBookmarks(object sender, ExecutedRoutedEventArgs e)
  1193. {
  1194. Window parentWindow = Window.GetWindow(this);
  1195. try
  1196. {
  1197. MainListHelperVM.Instance.RefreshBookmarkedAnime();
  1198. }
  1199. catch (Exception ex)
  1200. {
  1201. Utils.ShowErrorMessage(ex);
  1202. }
  1203. }
  1204. public void ShowTorrentSearch(DownloadSearchCriteria crit)
  1205. {
  1206. this.Cursor = Cursors.Wait;
  1207. tabControl1.SelectedIndex = TAB_MAIN_Downloads;
  1208. tabcDownloads.SelectedIndex = 1;
  1209. ucTorrentSearch.PerformSearch(crit);
  1210. this.Cursor = Cursors.Arrow;
  1211. }
  1212. private void CommandBinding_ShowTorrentSearch(object sender, ExecutedRoutedEventArgs e)
  1213. {
  1214. //object obj = lbGroupsSeries.SelectedItem;
  1215. object obj = e.Parameter;
  1216. if (obj == null) return;
  1217. try
  1218. {
  1219. if (obj.GetType() == typeof(AnimeEpisodeVM))
  1220. {
  1221. AnimeEpisodeVM ep = (AnimeEpisodeVM)obj;
  1222. DownloadSearchCriteria crit = new DownloadSearchCriteria(DownloadSearchType.Episode, ep);
  1223. ShowTorrentSearch(crit);
  1224. }
  1225. if (obj.GetType() == typeof(MissingEpisodeVM))
  1226. {
  1227. MissingEpisodeVM rec = obj as MissingEpisodeVM;
  1228. if (rec == null) return;
  1229. JMMServerBinary.Contract_AnimeEpisode contract = JMMServerVM.Instance.clientBinaryHTTP.GetEpisodeByAniDBEpisodeID(rec.EpisodeID,
  1230. JMMServerVM.Instance.CurrentUser.JMMUserID.Value);
  1231. if (contract != null)
  1232. {
  1233. DownloadSearchCriteria crit = new DownloadSearchCriteria(DownloadSearchType.Episode, new AnimeEpisodeVM(contract));
  1234. ShowTorrentSearch(crit);
  1235. }
  1236. }
  1237. /*if (obj.GetType() == typeof(MissingFileVM))
  1238. {
  1239. MissingFileVM mis = (MissingFileVM)obj;
  1240. ShowPinnedSeries(mis.AnimeSeries);
  1241. }*/
  1242. if (obj.GetType() == typeof(RecommendationVM))
  1243. {
  1244. RecommendationVM rec = obj as RecommendationVM;
  1245. if (rec == null) return;
  1246. DownloadSearchCriteria crit = new DownloadSearchCriteria(DownloadSearchType.Series, rec.Recommended_AniDB_Anime);
  1247. ShowTorrentSearch(crit);
  1248. }
  1249. if (obj.GetType() == typeof(AniDB_AnimeVM))
  1250. {
  1251. AniDB_AnimeVM anime = (AniDB_AnimeVM)obj;
  1252. DownloadSearchCriteria crit = new DownloadSearchCriteria(DownloadSearchType.Series, anime);
  1253. ShowTorrentSearch(crit);
  1254. }
  1255. if (obj.GetType() == typeof(AnimeSeriesVM))
  1256. {
  1257. AnimeSeriesVM ser = (AnimeSeriesVM)obj;
  1258. DownloadSearchCriteria crit = new DownloadSearchCriteria(DownloadSearchType.Series, ser.AniDB_Anime);
  1259. ShowTorrentSearch(crit);
  1260. }
  1261. if (obj.GetType() == typeof(AniDB_Anime_SimilarVM))
  1262. {
  1263. AniDB_Anime_SimilarVM sim = (AniDB_Anime_SimilarVM)obj;
  1264. DownloadSearchCriteria crit = new DownloadSearchCriteria(DownloadSearchType.Series, sim.AniDB_Anime);
  1265. ShowTorrentSearch(crit);
  1266. }
  1267. if (obj.GetType() == typeof(AniDB_Anime_RelationVM))
  1268. {
  1269. AniDB_Anime_RelationVM rel = (AniDB_Anime_RelationVM)obj;
  1270. DownloadSearchCriteria crit = new DownloadSearchCriteria(DownloadSearchType.Series, rel.AniDB_Anime);
  1271. ShowTorrentSearch(crit);
  1272. }
  1273. if (obj.GetType() == typeof(BookmarkedAnimeVM))
  1274. {
  1275. BookmarkedAnimeVM ba = (BookmarkedAnimeVM)obj;
  1276. DownloadSearchCriteria crit = new Dow

Large files files are truncated, but you can click here to view the full file