LyricManager.cs 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using System.Threading.Tasks;
  4. using MediaBrowser.Controller.Entities;
  5. using MediaBrowser.Controller.Lyrics;
  6. namespace MediaBrowser.Providers.Lyric;
  7. /// <summary>
  8. /// Lyric Manager.
  9. /// </summary>
  10. public class LyricManager : ILyricManager
  11. {
  12. private readonly ILyricProvider[] _lyricProviders;
  13. /// <summary>
  14. /// Initializes a new instance of the <see cref="LyricManager"/> class.
  15. /// </summary>
  16. /// <param name="lyricProviders">All found lyricProviders.</param>
  17. public LyricManager(IEnumerable<ILyricProvider> lyricProviders)
  18. {
  19. _lyricProviders = lyricProviders.OrderBy(i => i.Priority).ToArray();
  20. }
  21. /// <inheritdoc />
  22. public async Task<LyricResponse?> GetLyrics(BaseItem item)
  23. {
  24. foreach (ILyricProvider provider in _lyricProviders)
  25. {
  26. var results = await provider.GetLyrics(item).ConfigureAwait(false);
  27. if (results is not null)
  28. {
  29. return results;
  30. }
  31. }
  32. return null;
  33. }
  34. /// <inheritdoc />
  35. public bool HasLyricFile(BaseItem item)
  36. {
  37. foreach (ILyricProvider provider in _lyricProviders)
  38. {
  39. if (item is null)
  40. {
  41. continue;
  42. }
  43. if (provider.GetLyricFilePath(item.Path) is not null)
  44. {
  45. return true;
  46. }
  47. }
  48. return false;
  49. }
  50. }