PageRenderTime 54ms CodeModel.GetById 25ms RepoModel.GetById 0ms app.codeStats 0ms

/animeplugin3/MyAnimePlugin3/ViewModel/JMMServerHelper.cs

https://bitbucket.org/gibwar/jmm-test
C# | 923 lines | 746 code | 161 blank | 16 comment | 75 complexity | 62bec7baffb2d3032a8e69f0a9d9f5a5 MD5 | raw file
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using BinaryNorthwest;
  6. using MyAnimePlugin3.Events;
  7. using System.ComponentModel;
  8. using System.Threading;
  9. using System.IO;
  10. namespace MyAnimePlugin3.ViewModel
  11. {
  12. public class JMMServerHelper
  13. {
  14. private BackgroundWorker downloadRelatedAnimeWorker = new BackgroundWorker();
  15. private BackgroundWorker downloadAnimeWorker = new BackgroundWorker();
  16. private BackgroundWorker downloadCharacterCreatorImagesWorker = new BackgroundWorker();
  17. private BackgroundWorker downloadCharacterImagesForSeiyuuWorker = new BackgroundWorker();
  18. private BackgroundWorker downloadRecommendedAnimeWorker = new BackgroundWorker();
  19. public JMMServerHelper()
  20. {
  21. downloadRelatedAnimeWorker.DoWork += new DoWorkEventHandler(downloadRelatedAnimeWorker_DoWork);
  22. downloadRelatedAnimeWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(downloadRelatedAnimeWorker_RunWorkerCompleted);
  23. downloadCharacterCreatorImagesWorker.DoWork += new DoWorkEventHandler(downloadCharacterCreatorImagesWorker_DoWork);
  24. downloadCharacterCreatorImagesWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(downloadCharacterCreatorImagesWorker_RunWorkerCompleted);
  25. downloadAnimeWorker.DoWork += new DoWorkEventHandler(downloadAnimeWorker_DoWork);
  26. downloadAnimeWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(downloadAnimeWorker_RunWorkerCompleted);
  27. downloadRecommendedAnimeWorker.DoWork += new DoWorkEventHandler(downloadRecommendedAnimeWorker_DoWork);
  28. downloadRecommendedAnimeWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(downloadRecommendedAnimeWorker_RunWorkerCompleted);
  29. downloadCharacterImagesForSeiyuuWorker.DoWork += new DoWorkEventHandler(downloadCharacterImagesForSeiyuuWorker_DoWork);
  30. }
  31. public delegate void GotCharacterCreatorImagesEventHandler(GotCharacterCreatorImagesEventArgs ev);
  32. public event GotCharacterCreatorImagesEventHandler GotCharacterCreatorImagesEvent;
  33. protected void OnGotCharacterCreatorImagesEvent(GotCharacterCreatorImagesEventArgs ev)
  34. {
  35. if (GotCharacterCreatorImagesEvent != null)
  36. {
  37. GotCharacterCreatorImagesEvent(ev);
  38. }
  39. }
  40. public delegate void GotCharacterImagesEventHandler(GotCharacterImagesEventArgs ev);
  41. public event GotCharacterImagesEventHandler GotCharacterImagesEvent;
  42. protected void OnGotCharacterImagesEvent(GotCharacterImagesEventArgs ev)
  43. {
  44. if (GotCharacterImagesEvent != null)
  45. {
  46. GotCharacterImagesEvent(ev);
  47. }
  48. }
  49. public delegate void GotRelatedAnimeEventHandler(GotAnimeForRelatedEventArgs ev);
  50. public event GotRelatedAnimeEventHandler GotRelatedAnimeEvent;
  51. protected void OnGotRelatedAnimeEvent(GotAnimeForRelatedEventArgs ev)
  52. {
  53. if (GotRelatedAnimeEvent != null)
  54. {
  55. GotRelatedAnimeEvent(ev);
  56. }
  57. }
  58. public delegate void GotRecommendedAnimeEventHandler(GotAnimeForRecommendedEventArgs ev);
  59. public event GotRecommendedAnimeEventHandler GotRecommendedAnimeEvent;
  60. protected void OnGotRecommendedAnimeEvent(GotAnimeForRecommendedEventArgs ev)
  61. {
  62. if (GotRecommendedAnimeEvent != null)
  63. {
  64. GotRecommendedAnimeEvent(ev);
  65. }
  66. }
  67. public delegate void GotAnimeEventHandler(GotAnimeEventArgs ev);
  68. public event GotAnimeEventHandler GotAnimeEvent;
  69. protected void OnGotAnimeEvent(GotAnimeEventArgs ev)
  70. {
  71. if (GotAnimeEvent != null)
  72. {
  73. GotAnimeEvent(ev);
  74. }
  75. }
  76. public void DownloadRecommendedAnime()
  77. {
  78. if (downloadRecommendedAnimeWorker.IsBusy) return;
  79. downloadRecommendedAnimeWorker.RunWorkerAsync();
  80. }
  81. public void DownloadRelatedAnime(int animeID)
  82. {
  83. if (downloadRelatedAnimeWorker.IsBusy) return;
  84. downloadRelatedAnimeWorker.RunWorkerAsync(animeID);
  85. }
  86. public void UpdateAnime(int animeID)
  87. {
  88. if (downloadAnimeWorker.IsBusy) return;
  89. downloadAnimeWorker.RunWorkerAsync(animeID);
  90. }
  91. public void DownloadCharacterCreatorImages(AniDB_AnimeVM anime)
  92. {
  93. if (downloadCharacterCreatorImagesWorker.IsBusy) return;
  94. downloadCharacterCreatorImagesWorker.RunWorkerAsync(anime);
  95. }
  96. public void DownloadCharacterImagesForSeiyuu(AniDB_SeiyuuVM seiyuu)
  97. {
  98. if (downloadCharacterImagesForSeiyuuWorker.IsBusy) return;
  99. downloadCharacterImagesForSeiyuuWorker.RunWorkerAsync(seiyuu);
  100. }
  101. void downloadRecommendedAnimeWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
  102. {
  103. }
  104. void downloadRecommendedAnimeWorker_DoWork(object sender, DoWorkEventArgs e)
  105. {
  106. List<JMMServerBinary.Contract_Recommendation> contracts =
  107. JMMServerVM.Instance.clientBinaryHTTP.GetRecommendations(20, JMMServerVM.Instance.CurrentUser.JMMUserID, 2); // downloads only
  108. foreach (JMMServerBinary.Contract_Recommendation contract in contracts)
  109. {
  110. RecommendationVM rec = new RecommendationVM();
  111. rec.Populate(contract);
  112. if (rec.Recommended_AniDB_Anime == null)
  113. {
  114. BaseConfig.MyAnimeLog.Write("Updating data for anime: " + rec.RecommendedAnimeID.ToString());
  115. JMMServerVM.Instance.clientBinaryHTTP.UpdateAnimeData(rec.RecommendedAnimeID);
  116. }
  117. }
  118. // refresh the data
  119. List<RecommendationVM> tempRecs = new List<RecommendationVM>();
  120. contracts = JMMServerVM.Instance.clientBinaryHTTP.GetRecommendations(20, JMMServerVM.Instance.CurrentUser.JMMUserID, 2); // downloads only
  121. foreach (JMMServerBinary.Contract_Recommendation contract in contracts)
  122. {
  123. RecommendationVM rec = new RecommendationVM();
  124. rec.Populate(contract);
  125. if (rec.Recommended_AniDB_Anime == null) tempRecs.Add(rec);
  126. }
  127. // lets try and download the images
  128. DateTime start = DateTime.Now;
  129. bool imagesAvailable = false;
  130. bool timeOut = false;
  131. while (!imagesAvailable && !timeOut)
  132. {
  133. BaseConfig.MyAnimeLog.Write("Checking for images...");
  134. bool foundAllImages = true;
  135. foreach (RecommendationVM rec in tempRecs)
  136. {
  137. if (!File.Exists(rec.Recommended_AniDB_Anime.PosterPathNoDefault))
  138. {
  139. BaseConfig.MyAnimeLog.Write("Downloading image for : " + rec.Recommended_AniDB_Anime.AnimeID.ToString());
  140. MainWindow.imageHelper.DownloadAniDBCover(rec.Recommended_AniDB_Anime, false);
  141. foundAllImages = false;
  142. }
  143. }
  144. TimeSpan ts = DateTime.Now - start;
  145. if (ts.TotalSeconds > 15) timeOut = true;
  146. imagesAvailable = foundAllImages;
  147. Thread.Sleep(2000);
  148. }
  149. OnGotRecommendedAnimeEvent(new GotAnimeForRecommendedEventArgs());
  150. }
  151. void downloadAnimeWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
  152. {
  153. }
  154. void downloadAnimeWorker_DoWork(object sender, DoWorkEventArgs e)
  155. {
  156. int animeID = int.Parse(e.Argument.ToString());
  157. BaseConfig.MyAnimeLog.Write("Updating data for anime: " + animeID.ToString());
  158. JMMServerVM.Instance.clientBinaryHTTP.UpdateAnimeData(animeID);
  159. OnGotAnimeEvent(new GotAnimeEventArgs(animeID));
  160. }
  161. void downloadCharacterCreatorImagesWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
  162. {
  163. }
  164. void downloadCharacterCreatorImagesWorker_DoWork(object sender, DoWorkEventArgs e)
  165. {
  166. AniDB_AnimeVM anime = e.Argument as AniDB_AnimeVM;
  167. MainWindow.imageHelper.DownloadAniDBCharactersCreatorsSync(anime, false);
  168. OnGotCharacterCreatorImagesEvent(new GotCharacterCreatorImagesEventArgs(anime.AnimeID));
  169. }
  170. void downloadCharacterImagesForSeiyuuWorker_DoWork(object sender, DoWorkEventArgs e)
  171. {
  172. AniDB_SeiyuuVM seiyuu = e.Argument as AniDB_SeiyuuVM;
  173. List<JMMServerBinary.Contract_AniDB_Character> charContracts = JMMServerVM.Instance.clientBinaryHTTP.GetCharactersForSeiyuu(seiyuu.AniDB_SeiyuuID);
  174. if (charContracts == null) return;
  175. List<AniDB_CharacterVM> charList = new List<AniDB_CharacterVM>();
  176. foreach (JMMServerBinary.Contract_AniDB_Character chr in charContracts)
  177. charList.Add(new AniDB_CharacterVM(chr));
  178. MainWindow.imageHelper.DownloadAniDBCharactersForSeiyuuSync(charList, false);
  179. OnGotCharacterImagesEvent(new GotCharacterImagesEventArgs(seiyuu.AniDB_SeiyuuID));
  180. }
  181. void downloadRelatedAnimeWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
  182. {
  183. }
  184. void downloadRelatedAnimeWorker_DoWork(object sender, DoWorkEventArgs e)
  185. {
  186. int animeID = int.Parse(e.Argument.ToString());
  187. List<AniDB_Anime_RelationVM> links = GetRelatedAnime(animeID);
  188. foreach (AniDB_Anime_RelationVM link in links)
  189. {
  190. if (!link.AnimeInfoExists)
  191. {
  192. BaseConfig.MyAnimeLog.Write("Updating data for anime: " + link.RelatedAnimeID.ToString());
  193. JMMServerVM.Instance.clientBinaryHTTP.UpdateAnimeData(link.RelatedAnimeID);
  194. }
  195. }
  196. // lets try and download the images
  197. DateTime start = DateTime.Now;
  198. bool imagesAvailable = false;
  199. bool timeOut = false;
  200. while (!imagesAvailable && !timeOut)
  201. {
  202. BaseConfig.MyAnimeLog.Write("Checking for images...");
  203. links = GetRelatedAnime(animeID);
  204. bool foundAllImages = true;
  205. foreach (AniDB_Anime_RelationVM link in links)
  206. {
  207. if (link.AnimeInfoExists)
  208. {
  209. if (!File.Exists(link.AniDB_Anime.PosterPathNoDefault))
  210. {
  211. BaseConfig.MyAnimeLog.Write("Downloading image for : " + link.AniDB_Anime.AnimeID.ToString());
  212. MainWindow.imageHelper.DownloadAniDBCover(link.AniDB_Anime, false);
  213. foundAllImages = false;
  214. }
  215. }
  216. }
  217. TimeSpan ts = DateTime.Now - start;
  218. if (ts.TotalSeconds > 15) timeOut = true;
  219. imagesAvailable = foundAllImages;
  220. Thread.Sleep(2000);
  221. }
  222. OnGotRelatedAnimeEvent(new GotAnimeForRelatedEventArgs(animeID));
  223. }
  224. public static AniDB_AnimeVM GetAnime(int animeID)
  225. {
  226. JMMServerBinary.Contract_AniDBAnime contractAnime = JMMServerVM.Instance.clientBinaryHTTP.GetAnime(animeID);
  227. if (contractAnime == null) return null;
  228. return new AniDB_AnimeVM(contractAnime);
  229. }
  230. public static byte[] GetImage(string entityID, ImageEntityType imageType, bool thumbNailOnly)
  231. {
  232. try
  233. {
  234. byte[] imageArray = JMMServerVM.Instance.imageClient.GetImage(entityID, (int)imageType, thumbNailOnly);
  235. return imageArray;
  236. }
  237. catch (Exception ex)
  238. {
  239. BaseConfig.MyAnimeLog.Write(ex.ToString());
  240. return null;
  241. }
  242. }
  243. public static GroupFilterExtendedVM GetGroupFilterExtended(int groupFilterID)
  244. {
  245. if (JMMServerVM.Instance.CurrentUser == null) return null;
  246. JMMServerBinary.Contract_GroupFilterExtended contract = JMMServerVM.Instance.clientBinaryHTTP.GetGroupFilterExtended(groupFilterID, JMMServerVM.Instance.CurrentUser.JMMUserID);
  247. if (contract == null) return null;
  248. return new GroupFilterExtendedVM(contract);
  249. }
  250. public static List<GroupFilterVM> GetAllGroupFilters()
  251. {
  252. List<GroupFilterVM> gfs = new List<GroupFilterVM>();
  253. try
  254. {
  255. /*List<JMMServerBinary.Contract_GroupFilterExtended> gf_cons = JMMServerVM.Instance.clientBinaryHTTP.GetAllGroupFiltersExtended(1);
  256. foreach (JMMServerBinary.Contract_GroupFilterExtended gf_con in gf_cons)
  257. {
  258. GroupFilterVM gf = new GroupFilterVM();
  259. gf.Populate(gf_con);
  260. gfs.Add(gf);
  261. }*/
  262. List<JMMServerBinary.Contract_GroupFilter> gf_cons = JMMServerVM.Instance.clientBinaryHTTP.GetAllGroupFilters();
  263. foreach (JMMServerBinary.Contract_GroupFilter gf_con in gf_cons)
  264. {
  265. GroupFilterVM gf = new GroupFilterVM(gf_con);
  266. gfs.Add(gf);
  267. }
  268. }
  269. catch (Exception ex)
  270. {
  271. BaseConfig.MyAnimeLog.Write(ex.ToString());
  272. }
  273. gfs.Sort();
  274. return gfs;
  275. }
  276. public static List<AnimeGroupVM> GetAnimeGroupsForFilter(GroupFilterVM groupFilter)
  277. {
  278. DateTime start = DateTime.Now;
  279. List<AnimeGroupVM> allGroups = new List<AnimeGroupVM>();
  280. if (JMMServerVM.Instance.CurrentUser == null) return allGroups;
  281. try
  282. {
  283. List<JMMServerBinary.Contract_AnimeGroup> rawGrps = JMMServerVM.Instance.clientBinaryHTTP.GetAnimeGroupsForFilter(groupFilter.GroupFilterID.Value,
  284. JMMServerVM.Instance.CurrentUser.JMMUserID, BaseConfig.Settings.SingleSeriesGroups);
  285. if (rawGrps == null) return allGroups;
  286. foreach (JMMServerBinary.Contract_AnimeGroup contract in rawGrps)
  287. allGroups.Add(new AnimeGroupVM(contract));
  288. // apply sorting
  289. List<SortPropOrFieldAndDirection> sortCriteria = GroupFilterHelper.GetSortDescriptions(groupFilter);
  290. if (sortCriteria.Count == 0)
  291. {
  292. // default sort by name
  293. SortPropOrFieldAndDirection sortProp = GroupFilterHelper.GetSortDescription(GroupFilterSorting.SortName, GroupFilterSortDirection.Asc);
  294. sortCriteria.Add(sortProp);
  295. }
  296. allGroups = Sorting.MultiSort<AnimeGroupVM>(allGroups, sortCriteria);
  297. foreach (SortPropOrFieldAndDirection scrit in sortCriteria)
  298. {
  299. BaseConfig.MyAnimeLog.Write(string.Format("Sorting: {0} / {1} / {2}", scrit.sPropertyOrFieldName, scrit.fSortDescending, scrit.sortType));
  300. }
  301. TimeSpan ts = DateTime.Now - start;
  302. string msg = string.Format("JMMServerHelper: Got groups for filter: {0} - {1} in {2} ms", groupFilter.GroupFilterName, allGroups.Count, ts.TotalMilliseconds);
  303. BaseConfig.MyAnimeLog.Write(msg);
  304. }
  305. catch (Exception ex)
  306. {
  307. BaseConfig.MyAnimeLog.Write(ex.ToString());
  308. }
  309. return allGroups;
  310. }
  311. public static List<AnimeGroupVM> GetSubGroupsForGroup(AnimeGroupVM grp)
  312. {
  313. DateTime start = DateTime.Now;
  314. List<AnimeGroupVM> allGroups = new List<AnimeGroupVM>();
  315. try
  316. {
  317. List<JMMServerBinary.Contract_AnimeGroup> rawGroups = JMMServerVM.Instance.clientBinaryHTTP.GetSubGroupsForGroup(grp.AnimeGroupID,
  318. JMMServerVM.Instance.CurrentUser.JMMUserID);
  319. if (rawGroups == null) return allGroups;
  320. foreach (JMMServerBinary.Contract_AnimeGroup contract in rawGroups)
  321. allGroups.Add(new AnimeGroupVM(contract));
  322. TimeSpan ts = DateTime.Now - start;
  323. string msg = string.Format("Got sub groups for group: {0} - {1} in {2} ms", grp.GroupName, allGroups.Count, ts.TotalMilliseconds);
  324. BaseConfig.MyAnimeLog.Write(msg);
  325. }
  326. catch (Exception ex)
  327. {
  328. BaseConfig.MyAnimeLog.Write(ex.ToString());
  329. }
  330. return allGroups;
  331. }
  332. public static List<AnimeSeriesVM> GetAnimeSeriesForGroup(AnimeGroupVM grp)
  333. {
  334. DateTime start = DateTime.Now;
  335. List<AnimeSeriesVM> allSeries = new List<AnimeSeriesVM>();
  336. try
  337. {
  338. List<JMMServerBinary.Contract_AnimeSeries> rawSeries = JMMServerVM.Instance.clientBinaryHTTP.GetSeriesForGroup(grp.AnimeGroupID,
  339. JMMServerVM.Instance.CurrentUser.JMMUserID);
  340. if (rawSeries == null) return allSeries;
  341. foreach (JMMServerBinary.Contract_AnimeSeries contract in rawSeries)
  342. allSeries.Add(new AnimeSeriesVM(contract));
  343. TimeSpan ts = DateTime.Now - start;
  344. string msg = string.Format("Got series for group: {0} - {1} in {2} ms", grp.GroupName, allSeries.Count, ts.TotalMilliseconds);
  345. BaseConfig.MyAnimeLog.Write(msg);
  346. }
  347. catch (Exception ex)
  348. {
  349. BaseConfig.MyAnimeLog.Write(ex.ToString());
  350. }
  351. return allSeries;
  352. }
  353. public static List<AnimeSeriesVM> GetAnimeSeriesForGroupRecursive(AnimeGroupVM grp)
  354. {
  355. DateTime start = DateTime.Now;
  356. List<AnimeSeriesVM> allSeries = new List<AnimeSeriesVM>();
  357. try
  358. {
  359. List<JMMServerBinary.Contract_AnimeSeries> rawSeries = JMMServerVM.Instance.clientBinaryHTTP.GetSeriesForGroupRecursive(grp.AnimeGroupID,
  360. JMMServerVM.Instance.CurrentUser.JMMUserID);
  361. if (rawSeries == null) return allSeries;
  362. foreach (JMMServerBinary.Contract_AnimeSeries contract in rawSeries)
  363. allSeries.Add(new AnimeSeriesVM(contract));
  364. TimeSpan ts = DateTime.Now - start;
  365. //string msg = string.Format("Got series for group Recursive: {0} - {1} in {2} ms", grp.GroupName, allSeries.Count, ts.TotalMilliseconds);
  366. //BaseConfig.MyAnimeLog.Write(msg);
  367. }
  368. catch (Exception ex)
  369. {
  370. BaseConfig.MyAnimeLog.Write(ex.ToString());
  371. }
  372. return allSeries;
  373. }
  374. public static AnimeGroupVM GetGroup(int animeGroupID)
  375. {
  376. try
  377. {
  378. JMMServerBinary.Contract_AnimeGroup rawGroup = JMMServerVM.Instance.clientBinaryHTTP.GetGroup(animeGroupID, JMMServerVM.Instance.CurrentUser.JMMUserID);
  379. if (rawGroup == null) return null;
  380. return new AnimeGroupVM(rawGroup);
  381. }
  382. catch (Exception ex)
  383. {
  384. BaseConfig.MyAnimeLog.Write(ex.ToString());
  385. }
  386. return null;
  387. }
  388. public static AnimeSeriesVM GetSeries(int animeSeriesID)
  389. {
  390. try
  391. {
  392. JMMServerBinary.Contract_AnimeSeries rawSeries = JMMServerVM.Instance.clientBinaryHTTP.GetSeries(animeSeriesID, JMMServerVM.Instance.CurrentUser.JMMUserID);
  393. if (rawSeries == null) return null;
  394. return new AnimeSeriesVM(rawSeries);
  395. }
  396. catch (Exception ex)
  397. {
  398. BaseConfig.MyAnimeLog.Write(ex.ToString());
  399. }
  400. return null;
  401. }
  402. public static AnimeSeriesVM GetSeriesForAnime(int animeID)
  403. {
  404. try
  405. {
  406. JMMServerBinary.Contract_AnimeSeries rawSeries = JMMServerVM.Instance.clientBinaryHTTP.GetSeriesForAnime(animeID, JMMServerVM.Instance.CurrentUser.JMMUserID);
  407. if (rawSeries == null) return null;
  408. return new AnimeSeriesVM(rawSeries);
  409. }
  410. catch (Exception ex)
  411. {
  412. BaseConfig.MyAnimeLog.Write(ex.ToString());
  413. }
  414. return null;
  415. }
  416. public static List<JMMUserVM> GetAllUsers()
  417. {
  418. List<JMMUserVM> allusers = new List<JMMUserVM>();
  419. try
  420. {
  421. List<JMMServerBinary.Contract_JMMUser> users = JMMServerVM.Instance.clientBinaryHTTP.GetAllUsers();
  422. foreach (JMMServerBinary.Contract_JMMUser user in users)
  423. allusers.Add(new JMMUserVM(user));
  424. return allusers;
  425. }
  426. catch (Exception ex)
  427. {
  428. BaseConfig.MyAnimeLog.Write(ex.ToString());
  429. }
  430. return allusers;
  431. }
  432. public static List<AnimeEpisodeVM> GetEpisodesForSeries(int animeSeriesID)
  433. {
  434. List<AnimeEpisodeVM> allEps = new List<AnimeEpisodeVM>();
  435. try
  436. {
  437. List<JMMServerBinary.Contract_AnimeEpisode> eps = JMMServerVM.Instance.clientBinaryHTTP.GetEpisodesForSeries(animeSeriesID,
  438. JMMServerVM.Instance.CurrentUser.JMMUserID);
  439. foreach (JMMServerBinary.Contract_AnimeEpisode ep in eps)
  440. allEps.Add(new AnimeEpisodeVM(ep));
  441. return allEps;
  442. }
  443. catch (Exception ex)
  444. {
  445. BaseConfig.MyAnimeLog.Write(ex.ToString());
  446. }
  447. return allEps;
  448. }
  449. public static List<VideoLocalVM> GetUnlinkedVideos()
  450. {
  451. List<VideoLocalVM> unlinkedVideos = new List<VideoLocalVM>();
  452. try
  453. {
  454. List<JMMServerBinary.Contract_VideoLocal> vids = JMMServerVM.Instance.clientBinaryHTTP.GetUnrecognisedFiles(JMMServerVM.Instance.CurrentUser.JMMUserID);
  455. foreach (JMMServerBinary.Contract_VideoLocal vid in vids)
  456. {
  457. unlinkedVideos.Add(new VideoLocalVM(vid));
  458. }
  459. }
  460. catch (Exception ex)
  461. {
  462. BaseConfig.MyAnimeLog.Write(ex.ToString());
  463. }
  464. return unlinkedVideos;
  465. }
  466. public static bool LinkedFileToEpisode(int videoLocalID, int animeEpisodeID)
  467. {
  468. try
  469. {
  470. string result = JMMServerVM.Instance.clientBinaryHTTP.AssociateSingleFile(videoLocalID, animeEpisodeID);
  471. if (string.IsNullOrEmpty(result))
  472. return true;
  473. else
  474. {
  475. BaseConfig.MyAnimeLog.Write("Error in LinkedFileToEpisode: " + result);
  476. return false;
  477. }
  478. }
  479. catch (Exception ex)
  480. {
  481. BaseConfig.MyAnimeLog.Write(ex.ToString());
  482. }
  483. return false;
  484. }
  485. public static void SetWatchedStatusOnSeries(bool watchedStatus, int maxEpisodeNumber, int animeSeriesID)
  486. {
  487. AnimeSeriesVM series = GetSeries(animeSeriesID);
  488. if (series == null) return;
  489. foreach (AnimeEpisodeTypeVM epType in series.EpisodeTypes)
  490. {
  491. SetWatchedStatusOnSeries(watchedStatus, maxEpisodeNumber, animeSeriesID, epType.EpisodeType);
  492. }
  493. }
  494. public static void SetWatchedStatusOnSeries(bool watchedStatus, int maxEpisodeNumber, int animeSeriesID, enEpisodeType episodeType)
  495. {
  496. try
  497. {
  498. JMMServerVM.Instance.clientBinaryHTTP.SetWatchedStatusOnSeries(animeSeriesID, watchedStatus, maxEpisodeNumber,
  499. (int)episodeType, JMMServerVM.Instance.CurrentUser.JMMUserID);
  500. }
  501. catch (Exception ex)
  502. {
  503. BaseConfig.MyAnimeLog.Write("SetWatchedStatusOnSeries: " + ex.Message);
  504. }
  505. }
  506. public static void DeleteGroup(AnimeGroupVM grp)
  507. {
  508. }
  509. public static void SetDefaultPoster(bool isDefault, PosterContainer poster, int animeID)
  510. {
  511. if (!JMMServerVM.Instance.ServerOnline) return;
  512. try
  513. {
  514. switch (poster.ImageType)
  515. {
  516. case ImageEntityType.TvDB_Cover:
  517. TvDB_ImagePosterVM tvPoster = poster.PosterObject as TvDB_ImagePosterVM;
  518. JMMServerVM.Instance.clientBinaryHTTP.SetDefaultImage(isDefault, animeID,
  519. tvPoster.TvDB_ImagePosterID, (int)ImageEntityType.TvDB_Cover, (int)ImageSizeType.Poster);
  520. tvPoster.IsImageDefault = isDefault;
  521. break;
  522. case ImageEntityType.Trakt_Poster:
  523. Trakt_ImagePosterVM traktPoster = poster.PosterObject as Trakt_ImagePosterVM;
  524. JMMServerVM.Instance.clientBinaryHTTP.SetDefaultImage(isDefault, animeID,
  525. traktPoster.Trakt_ImagePosterID, (int)ImageEntityType.Trakt_Poster, (int)ImageSizeType.Poster);
  526. traktPoster.IsImageDefault = isDefault;
  527. break;
  528. case ImageEntityType.AniDB_Cover:
  529. AniDB_AnimeVM anime = poster.PosterObject as AniDB_AnimeVM;
  530. JMMServerVM.Instance.clientBinaryHTTP.SetDefaultImage(isDefault, animeID,
  531. anime.AnimeID, (int)ImageEntityType.AniDB_Cover, (int)ImageSizeType.Poster);
  532. anime.IsImageDefault = isDefault;
  533. break;
  534. case ImageEntityType.MovieDB_Poster:
  535. MovieDB_PosterVM moviePoster = poster.PosterObject as MovieDB_PosterVM;
  536. JMMServerVM.Instance.clientBinaryHTTP.SetDefaultImage(isDefault, animeID,
  537. moviePoster.MovieDB_PosterID, (int)ImageEntityType.MovieDB_Poster, (int)ImageSizeType.Poster);
  538. moviePoster.IsImageDefault = isDefault;
  539. break;
  540. }
  541. poster.IsImageDefault = isDefault;
  542. }
  543. catch (Exception ex)
  544. {
  545. BaseConfig.MyAnimeLog.Write("SetDefaultPoster: " + ex.Message);
  546. }
  547. }
  548. public static void EnableDisablePoster(bool enabled, PosterContainer poster, int animeID)
  549. {
  550. try
  551. {
  552. if (!enabled && poster.IsImageDefault)
  553. SetDefaultPoster(false, poster, animeID);
  554. switch (poster.ImageType)
  555. {
  556. case ImageEntityType.TvDB_Cover:
  557. TvDB_ImagePosterVM tvPoster = poster.PosterObject as TvDB_ImagePosterVM;
  558. JMMServerVM.Instance.clientBinaryHTTP.EnableDisableImage(enabled, tvPoster.TvDB_ImagePosterID, (int)ImageEntityType.TvDB_Cover);
  559. tvPoster.Enabled = enabled ? 1 : 0;
  560. break;
  561. case ImageEntityType.Trakt_Poster:
  562. Trakt_ImagePosterVM traktPoster = poster.PosterObject as Trakt_ImagePosterVM;
  563. JMMServerVM.Instance.clientBinaryHTTP.EnableDisableImage(enabled, traktPoster.Trakt_ImagePosterID, (int)ImageEntityType.Trakt_Poster);
  564. traktPoster.Enabled = enabled ? 1 : 0;
  565. break;
  566. case ImageEntityType.AniDB_Cover:
  567. AniDB_AnimeVM anime = poster.PosterObject as AniDB_AnimeVM;
  568. JMMServerVM.Instance.clientBinaryHTTP.EnableDisableImage(enabled, anime.AnimeID, (int)ImageEntityType.AniDB_Cover);
  569. anime.ImageEnabled = enabled ? 1 : 0;
  570. break;
  571. case ImageEntityType.MovieDB_Poster:
  572. MovieDB_PosterVM moviePoster = poster.PosterObject as MovieDB_PosterVM;
  573. JMMServerVM.Instance.clientBinaryHTTP.EnableDisableImage(enabled, moviePoster.MovieDB_PosterID, (int)ImageEntityType.MovieDB_Poster);
  574. moviePoster.Enabled = enabled ? 1 : 0;
  575. break;
  576. }
  577. poster.IsImageEnabled = enabled;
  578. }
  579. catch (Exception ex)
  580. {
  581. BaseConfig.MyAnimeLog.Write("SetDefaultPoster: " + ex.Message);
  582. }
  583. }
  584. public static void SetDefaultWideBanner(bool isDefault, TvDB_ImageWideBannerVM banner, int animeID)
  585. {
  586. if (!JMMServerVM.Instance.ServerOnline) return;
  587. try
  588. {
  589. JMMServerVM.Instance.clientBinaryHTTP.SetDefaultImage(isDefault, animeID,
  590. banner.TvDB_ImageWideBannerID, (int)ImageEntityType.TvDB_Banner, (int)ImageSizeType.WideBanner);
  591. banner.IsImageDefault = isDefault;
  592. }
  593. catch (Exception ex)
  594. {
  595. BaseConfig.MyAnimeLog.Write("SetDefaultPoster: " + ex.Message);
  596. }
  597. }
  598. public static void EnableDisableWideBanner(bool enabled, TvDB_ImageWideBannerVM banner, int animeID)
  599. {
  600. try
  601. {
  602. if (!enabled && banner.IsImageDefault)
  603. SetDefaultWideBanner(false, banner, animeID);
  604. JMMServerVM.Instance.clientBinaryHTTP.EnableDisableImage(enabled, banner.TvDB_ImageWideBannerID, (int)ImageEntityType.TvDB_Banner);
  605. banner.Enabled = enabled ? 1 : 0;
  606. }
  607. catch (Exception ex)
  608. {
  609. BaseConfig.MyAnimeLog.Write("SetDefaultPoster: " + ex.Message);
  610. }
  611. }
  612. public static void SetDefaultFanart(bool isDefault, FanartContainer fanart, int animeID)
  613. {
  614. if (!JMMServerVM.Instance.ServerOnline) return;
  615. try
  616. {
  617. switch (fanart.ImageType)
  618. {
  619. case ImageEntityType.TvDB_FanArt:
  620. TvDB_ImageFanartVM tvFanart = fanart.FanartObject as TvDB_ImageFanartVM;
  621. JMMServerVM.Instance.clientBinaryHTTP.SetDefaultImage(isDefault, animeID,
  622. tvFanart.TvDB_ImageFanartID, (int)ImageEntityType.TvDB_FanArt, (int)ImageSizeType.Fanart);
  623. tvFanart.IsImageDefault = isDefault;
  624. break;
  625. case ImageEntityType.Trakt_Fanart:
  626. Trakt_ImageFanartVM traktFanart = fanart.FanartObject as Trakt_ImageFanartVM;
  627. JMMServerVM.Instance.clientBinaryHTTP.SetDefaultImage(isDefault, animeID,
  628. traktFanart.Trakt_ImageFanartID, (int)ImageEntityType.Trakt_Fanart, (int)ImageSizeType.Fanart);
  629. traktFanart.IsImageDefault = isDefault;
  630. break;
  631. case ImageEntityType.MovieDB_FanArt:
  632. MovieDB_FanartVM movieFanart = fanart.FanartObject as MovieDB_FanartVM;
  633. JMMServerVM.Instance.clientBinaryHTTP.SetDefaultImage(isDefault, animeID,
  634. movieFanart.MovieDB_FanartID, (int)ImageEntityType.MovieDB_FanArt, (int)ImageSizeType.Fanart);
  635. movieFanart.IsImageDefault = isDefault;
  636. break;
  637. }
  638. fanart.IsImageDefault = isDefault;
  639. }
  640. catch (Exception ex)
  641. {
  642. BaseConfig.MyAnimeLog.Write("SetDefaultPoster: " + ex.Message);
  643. }
  644. }
  645. public static void EnableDisableFanart(bool enabled, FanartContainer fanart, int animeID)
  646. {
  647. try
  648. {
  649. if (!enabled && fanart.IsImageDefault)
  650. SetDefaultFanart(false, fanart, animeID);
  651. switch (fanart.ImageType)
  652. {
  653. case ImageEntityType.TvDB_FanArt:
  654. TvDB_ImageFanartVM tvFanart = fanart.FanartObject as TvDB_ImageFanartVM;
  655. JMMServerVM.Instance.clientBinaryHTTP.EnableDisableImage(enabled, tvFanart.TvDB_ImageFanartID, (int)ImageEntityType.TvDB_FanArt);
  656. tvFanart.Enabled = enabled ? 1 : 0;
  657. break;
  658. case ImageEntityType.Trakt_Fanart:
  659. Trakt_ImageFanartVM traktFanart = fanart.FanartObject as Trakt_ImageFanartVM;
  660. JMMServerVM.Instance.clientBinaryHTTP.EnableDisableImage(enabled, traktFanart.Trakt_ImageFanartID, (int)ImageEntityType.Trakt_Fanart);
  661. traktFanart.Enabled = enabled ? 1 : 0;
  662. break;
  663. case ImageEntityType.MovieDB_FanArt:
  664. MovieDB_FanartVM movieFanart = fanart.FanartObject as MovieDB_FanartVM;
  665. JMMServerVM.Instance.clientBinaryHTTP.EnableDisableImage(enabled, movieFanart.MovieDB_FanartID, (int)ImageEntityType.MovieDB_FanArt);
  666. movieFanart.Enabled = enabled ? 1 : 0;
  667. break;
  668. }
  669. fanart.IsImageEnabled = enabled;
  670. }
  671. catch (Exception ex)
  672. {
  673. BaseConfig.MyAnimeLog.Write("SetDefaultPoster: " + ex.Message);
  674. }
  675. }
  676. public static List<AniDBReleaseGroupVM> GetReleaseGroupsForAnime(int animeID)
  677. {
  678. List<AniDBReleaseGroupVM> grps = new List<AniDBReleaseGroupVM>();
  679. try
  680. {
  681. List<JMMServerBinary.Contract_AniDBReleaseGroup> grpsRaw = JMMServerVM.Instance.clientBinaryHTTP.GetReleaseGroupsForAnime(animeID);
  682. foreach (JMMServerBinary.Contract_AniDBReleaseGroup grp in grpsRaw)
  683. {
  684. grps.Add(new AniDBReleaseGroupVM(grp));
  685. }
  686. }
  687. catch (Exception ex)
  688. {
  689. BaseConfig.MyAnimeLog.Write(ex.ToString());
  690. }
  691. return grps;
  692. }
  693. public static List<AniDB_AnimeVM> GetAnimeForMonthYear(int month, int year)
  694. {
  695. List<AniDB_AnimeVM> allAnime = new List<AniDB_AnimeVM>();
  696. try
  697. {
  698. List<JMMServerBinary.Contract_AniDBAnime> rawAnime = JMMServerVM.Instance.clientBinaryHTTP.GetAnimeForMonth(JMMServerVM.Instance.CurrentUser.JMMUserID,
  699. month, year);
  700. if (rawAnime == null) return allAnime;
  701. foreach (JMMServerBinary.Contract_AniDBAnime contract in rawAnime)
  702. allAnime.Add(new AniDB_AnimeVM(contract));
  703. }
  704. catch (Exception ex)
  705. {
  706. BaseConfig.MyAnimeLog.Write(ex.ToString());
  707. }
  708. return allAnime;
  709. }
  710. public static List<AniDB_Anime_RelationVM> GetRelatedAnime(int animeID)
  711. {
  712. List<AniDB_Anime_RelationVM> allRelations = new List<AniDB_Anime_RelationVM>();
  713. try
  714. {
  715. List<JMMServerBinary.Contract_AniDB_Anime_Relation> links = JMMServerVM.Instance.clientBinaryHTTP.GetRelatedAnimeLinks(animeID,
  716. JMMServerVM.Instance.CurrentUser.JMMUserID);
  717. List<AniDB_Anime_RelationVM> tempList = new List<AniDB_Anime_RelationVM>();
  718. foreach (JMMServerBinary.Contract_AniDB_Anime_Relation link in links)
  719. {
  720. AniDB_Anime_RelationVM rel = new AniDB_Anime_RelationVM();
  721. rel.Populate(link);
  722. allRelations.Add(rel);
  723. }
  724. List<SortPropOrFieldAndDirection> sortCriteria = new List<SortPropOrFieldAndDirection>();
  725. sortCriteria.Add(new SortPropOrFieldAndDirection("SortPriority", false, SortType.eInteger));
  726. allRelations = Sorting.MultiSort<AniDB_Anime_RelationVM>(allRelations, sortCriteria);
  727. return allRelations;
  728. }
  729. catch (Exception ex)
  730. {
  731. BaseConfig.MyAnimeLog.Write(ex.ToString());
  732. }
  733. return allRelations;
  734. }
  735. public static List<AniDB_CharacterVM> GetCharactersForAnime(int animeID)
  736. {
  737. List<AniDB_CharacterVM> allCharacters = new List<AniDB_CharacterVM>();
  738. try
  739. {
  740. List<JMMServerBinary.Contract_AniDB_Character> chars = JMMServerVM.Instance.clientBinaryHTTP.GetCharactersForAnime(animeID);
  741. // first add all the main characters
  742. foreach (JMMServerBinary.Contract_AniDB_Character chr in chars)
  743. {
  744. if (chr.CharType.Equals(Constants.CharacterType.MAIN, StringComparison.InvariantCultureIgnoreCase))
  745. allCharacters.Add(new AniDB_CharacterVM(chr));
  746. }
  747. // now add all the character types
  748. foreach (JMMServerBinary.Contract_AniDB_Character chr in chars)
  749. {
  750. if (!chr.CharType.Equals(Constants.CharacterType.MAIN, StringComparison.InvariantCultureIgnoreCase))
  751. allCharacters.Add(new AniDB_CharacterVM(chr));
  752. }
  753. return allCharacters;
  754. }
  755. catch (Exception ex)
  756. {
  757. BaseConfig.MyAnimeLog.Write(ex.ToString());
  758. }
  759. return allCharacters;
  760. }
  761. }
  762. }