MusicArtistProviderFromJson.cs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. using MediaBrowser.Controller.Configuration;
  2. using MediaBrowser.Controller.Entities;
  3. using MediaBrowser.Controller.Entities.Audio;
  4. using MediaBrowser.Model.Entities;
  5. using MediaBrowser.Model.Logging;
  6. using MediaBrowser.Model.Serialization;
  7. using System;
  8. using System.IO;
  9. using System.Threading;
  10. using System.Threading.Tasks;
  11. namespace MediaBrowser.Controller.Providers.Music
  12. {
  13. public class MusicArtistProviderFromJson : BaseMetadataProvider
  14. {
  15. /// <summary>
  16. /// Gets the json serializer.
  17. /// </summary>
  18. /// <value>The json serializer.</value>
  19. protected IJsonSerializer JsonSerializer { get; private set; }
  20. public MusicArtistProviderFromJson(IJsonSerializer jsonSerializer, ILogManager logManager, IServerConfigurationManager configurationManager)
  21. : base(logManager, configurationManager)
  22. {
  23. if (jsonSerializer == null)
  24. {
  25. throw new ArgumentNullException("jsonSerializer");
  26. }
  27. JsonSerializer = jsonSerializer;
  28. }
  29. public override Task<bool> FetchAsync(BaseItem item, bool force, CancellationToken cancellationToken)
  30. {
  31. return Task.Run(() =>
  32. {
  33. cancellationToken.ThrowIfCancellationRequested();
  34. var entry = item.ResolveArgs.GetMetaFileByPath(Path.Combine(item.MetaLocation, LastfmHelper.LocalArtistMetaFileName));
  35. if (entry.HasValue)
  36. {
  37. // read in our saved meta and pass to processing function
  38. var data = JsonSerializer.DeserializeFromFile<LastfmArtist>(entry.Value.Path);
  39. cancellationToken.ThrowIfCancellationRequested();
  40. LastfmHelper.ProcessArtistData(item, data);
  41. item.SetProviderId(MetadataProviders.Musicbrainz, data.mbid);
  42. SetLastRefreshed(item, DateTime.UtcNow);
  43. return true;
  44. }
  45. return false;
  46. });
  47. }
  48. public override MetadataProviderPriority Priority
  49. {
  50. get
  51. {
  52. return MetadataProviderPriority.First;
  53. }
  54. }
  55. public override bool Supports(BaseItem item)
  56. {
  57. return item is MusicArtist;
  58. }
  59. public override bool RequiresInternet
  60. {
  61. get
  62. {
  63. return false;
  64. }
  65. }
  66. protected override bool NeedsRefreshInternal(BaseItem item, BaseProviderInfo providerInfo)
  67. {
  68. if (!item.ResolveArgs.ContainsMetaFileByName(LastfmHelper.LocalArtistMetaFileName))
  69. {
  70. return false; // nothing to read
  71. }
  72. // Need to re-override to jump over intermediate implementation
  73. return CompareDate(item) > providerInfo.LastRefreshed;
  74. }
  75. /// <summary>
  76. /// Override this to return the date that should be compared to the last refresh date
  77. /// to determine if this provider should be re-fetched.
  78. /// </summary>
  79. /// <param name="item">The item.</param>
  80. /// <returns>DateTime.</returns>
  81. protected override DateTime CompareDate(BaseItem item)
  82. {
  83. var entry = item.ResolveArgs.GetMetaFileByPath(Path.Combine(item.MetaLocation, LastfmHelper.LocalArtistMetaFileName));
  84. return entry != null ? entry.Value.LastWriteTimeUtc : DateTime.MinValue;
  85. }
  86. }
  87. }