mirror of https://github.com/ErsatzTV/ErsatzTV.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
1.8 KiB
58 lines
1.8 KiB
using System; |
|
using System.Collections.Generic; |
|
using System.Linq; |
|
using System.Threading.Tasks; |
|
using ErsatzTV.Core; |
|
using ErsatzTV.Core.Domain; |
|
using ErsatzTV.Core.Interfaces.Plex; |
|
using ErsatzTV.Core.Plex; |
|
using ErsatzTV.Infrastructure.Plex.Models; |
|
using LanguageExt; |
|
using Refit; |
|
using static LanguageExt.Prelude; |
|
|
|
namespace ErsatzTV.Infrastructure.Plex |
|
{ |
|
public class PlexServerApiClient : IPlexServerApiClient |
|
{ |
|
public async Task<Either<BaseError, List<PlexMediaSourceLibrary>>> GetLibraries( |
|
PlexMediaSourceConnection connection, |
|
PlexServerAuthToken token) |
|
{ |
|
try |
|
{ |
|
IPlexServerApi service = RestService.For<IPlexServerApi>(connection.Uri); |
|
List<PlexLibraryResponse> directory = |
|
await service.GetLibraries(token.AuthToken).Map(r => r.MediaContainer.Directory); |
|
return directory |
|
.Filter(l => l.Hidden == 0) |
|
.Map(Project) |
|
.Somes() |
|
.ToList(); |
|
} |
|
catch (Exception ex) |
|
{ |
|
return BaseError.New(ex.Message); |
|
} |
|
} |
|
|
|
private static Option<PlexMediaSourceLibrary> Project(PlexLibraryResponse response) => |
|
response.Type switch |
|
{ |
|
"show" => new PlexMediaSourceLibrary |
|
{ |
|
Key = response.Key, |
|
Name = response.Title, |
|
MediaType = MediaType.TvShow |
|
}, |
|
"movie" => new PlexMediaSourceLibrary |
|
{ |
|
Key = response.Key, |
|
Name = response.Title, |
|
MediaType = MediaType.Movie |
|
}, |
|
// TODO: "artist" for music libraries |
|
_ => None |
|
}; |
|
} |
|
}
|
|
|