@ -1,17 +1,14 @@
using System ;
using System.Collections.Generic ;
using System.ComponentModel.DataAnnotations ;
using System.IO ;
using System.Linq ;
using System.Threading ;
using System.Threading.Tasks ;
using Jellyfin.Api.Constants ;
using Jellyfin.Api.Extensions ;
using Jellyfin.Api.Helpers ;
using Jellyfin.Api.ModelBinders ;
using Jellyfin.Api.Models.UserDtos ;
using Jellyfin.Data.Enums ;
using Jellyfin.Extensions ;
using MediaBrowser.Controller.Dto ;
using MediaBrowser.Controller.Entities ;
using MediaBrowser.Controller.Entities.Audio ;
@ -40,6 +37,7 @@ namespace Jellyfin.Api.Controllers
private readonly IDtoService _dtoService ;
private readonly IUserViewManager _userViewManager ;
private readonly IFileSystem _fileSystem ;
private readonly IEnumerable < ILyricsProvider > _lyricProviders ;
/// <summary>
/// Initializes a new instance of the <see cref="UserLibraryController"/> class.
@ -50,13 +48,15 @@ namespace Jellyfin.Api.Controllers
/// <param name="dtoService">Instance of the <see cref="IDtoService"/> interface.</param>
/// <param name="userViewManager">Instance of the <see cref="IUserViewManager"/> interface.</param>
/// <param name="fileSystem">Instance of the <see cref="IFileSystem"/> interface.</param>
/// <param name="lyricProviders">Collection of all registered <see cref="ILyricsProvider"/> interfaces.</param>
public UserLibraryController (
IUserManager userManager ,
IUserDataManager userDataRepository ,
ILibraryManager libraryManager ,
IDtoService dtoService ,
IUserViewManager userViewManager ,
IFileSystem fileSystem )
IFileSystem fileSystem ,
IEnumerable < ILyricsProvider > lyricProviders )
{
_userManager = userManager ;
_userDataRepository = userDataRepository ;
@ -64,6 +64,7 @@ namespace Jellyfin.Api.Controllers
_dtoService = dtoService ;
_userViewManager = userViewManager ;
_fileSystem = fileSystem ;
_lyricProviders = lyricProviders ;
}
/// <summary>
@ -413,10 +414,14 @@ namespace Jellyfin.Api.Controllers
return NotFound ( ) ;
}
var result = ItemHelper . GetLyricData ( item ) ;
if ( result is not null )
// Super nieve implementation. I would suggest building a lyric service of some sort and doing this there.
foreach ( var provider in _lyricProviders )
{
return Ok ( result ) ;
provider . Process ( item ) ;
if ( provider . HasData )
{
return Ok ( provider . Data ) ;
}
}
return NotFound ( ) ;