LyricManager.cs 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  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. private readonly ILyricParser[] _lyricParsers;
  14. /// <summary>
  15. /// Initializes a new instance of the <see cref="LyricManager"/> class.
  16. /// </summary>
  17. /// <param name="lyricProviders">All found lyricProviders.</param>
  18. /// <param name="lyricParsers">All found lyricParsers.</param>
  19. public LyricManager(IEnumerable<ILyricProvider> lyricProviders, IEnumerable<ILyricParser> lyricParsers)
  20. {
  21. _lyricProviders = lyricProviders.OrderBy(i => i.Priority).ToArray();
  22. _lyricParsers = lyricParsers.OrderBy(i => i.Priority).ToArray();
  23. }
  24. /// <inheritdoc />
  25. public async Task<LyricResponse?> GetLyrics(BaseItem item)
  26. {
  27. foreach (ILyricProvider provider in _lyricProviders)
  28. {
  29. var lyrics = await provider.GetLyrics(item).ConfigureAwait(false);
  30. if (lyrics is null)
  31. {
  32. continue;
  33. }
  34. foreach (ILyricParser parser in _lyricParsers)
  35. {
  36. var result = parser.ParseLyrics(lyrics);
  37. if (result is not null)
  38. {
  39. return result;
  40. }
  41. }
  42. }
  43. return null;
  44. }
  45. /// <inheritdoc />
  46. public bool HasLyricFile(BaseItem item)
  47. {
  48. foreach (ILyricProvider provider in _lyricProviders)
  49. {
  50. if (item is null)
  51. {
  52. continue;
  53. }
  54. if (provider.HasLyrics(item))
  55. {
  56. return true;
  57. }
  58. }
  59. return false;
  60. }
  61. }