MusicArtistProviderFromJson.cs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  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. cancellationToken.ThrowIfCancellationRequested();
  32. var entry = item.ResolveArgs.GetMetaFileByPath(Path.Combine(item.MetaLocation, LastfmHelper.LocalArtistMetaFileName));
  33. if (entry.HasValue)
  34. {
  35. // read in our saved meta and pass to processing function
  36. var data = JsonSerializer.DeserializeFromFile<LastfmArtist>(entry.Value.Path);
  37. cancellationToken.ThrowIfCancellationRequested();
  38. LastfmHelper.ProcessArtistData(item, data);
  39. item.SetProviderId(MetadataProviders.Musicbrainz, data.mbid);
  40. SetLastRefreshed(item, DateTime.UtcNow);
  41. return TrueTaskResult;
  42. }
  43. return FalseTaskResult;
  44. }
  45. public override MetadataProviderPriority Priority
  46. {
  47. get
  48. {
  49. return MetadataProviderPriority.First;
  50. }
  51. }
  52. public override bool Supports(BaseItem item)
  53. {
  54. return item is MusicArtist;
  55. }
  56. public override bool RequiresInternet
  57. {
  58. get
  59. {
  60. return false;
  61. }
  62. }
  63. protected override bool NeedsRefreshInternal(BaseItem item, BaseProviderInfo providerInfo)
  64. {
  65. if (!item.ResolveArgs.ContainsMetaFileByName(LastfmHelper.LocalArtistMetaFileName))
  66. {
  67. return false; // nothing to read
  68. }
  69. // Need to re-override to jump over intermediate implementation
  70. return CompareDate(item) > providerInfo.LastRefreshed;
  71. }
  72. /// <summary>
  73. /// Override this to return the date that should be compared to the last refresh date
  74. /// to determine if this provider should be re-fetched.
  75. /// </summary>
  76. /// <param name="item">The item.</param>
  77. /// <returns>DateTime.</returns>
  78. protected override DateTime CompareDate(BaseItem item)
  79. {
  80. var entry = item.ResolveArgs.GetMetaFileByPath(Path.Combine(item.MetaLocation, LastfmHelper.LocalArtistMetaFileName));
  81. return entry != null ? entry.Value.LastWriteTimeUtc : DateTime.MinValue;
  82. }
  83. }
  84. }