TvDbClientManager.cs 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. using System;
  2. using MediaBrowser.Controller.Library;
  3. using TvDbSharper;
  4. namespace MediaBrowser.Providers.TV
  5. {
  6. public sealed class TvDbClientManager
  7. {
  8. private static volatile TvDbClientManager instance;
  9. private static readonly object syncRoot = new object();
  10. private static TvDbClient tvDbClient;
  11. private static DateTime tokenCreatedAt;
  12. private TvDbClientManager()
  13. {
  14. tvDbClient = new TvDbClient();
  15. tvDbClient.Authentication.AuthenticateAsync(TVUtils.TvdbApiKey);
  16. tokenCreatedAt = DateTime.Now;
  17. }
  18. public static TvDbClientManager Instance
  19. {
  20. get
  21. {
  22. if (instance != null)
  23. {
  24. return instance;
  25. }
  26. lock (syncRoot)
  27. {
  28. if (instance == null)
  29. instance = new TvDbClientManager();
  30. }
  31. return instance;
  32. }
  33. }
  34. public TvDbClient TvDbClient
  35. {
  36. get
  37. {
  38. // Refresh if necessary
  39. if (tokenCreatedAt > DateTime.Now.Subtract(TimeSpan.FromHours(20)))
  40. {
  41. try
  42. {
  43. tvDbClient.Authentication.RefreshTokenAsync();
  44. }
  45. catch
  46. {
  47. tvDbClient.Authentication.AuthenticateAsync(TVUtils.TvdbApiKey);
  48. }
  49. tokenCreatedAt = DateTime.Now;
  50. }
  51. // Default to English
  52. tvDbClient.AcceptedLanguage = "en";
  53. return tvDbClient;
  54. }
  55. }
  56. }
  57. }