Ejemplo n.º 1
0
    public async Task <Either <BaseError, Tuple <EpisodeMetadata, MediaVersion> > > GetEpisodeMetadataAndStatistics(
        PlexLibrary library,
        string key,
        PlexConnection connection,
        PlexServerAuthToken token)
    {
        try
        {
            IPlexServerApi service = XmlServiceFor(connection.Uri);
            Option <PlexXmlVideoMetadataResponseContainer> maybeResponse = await service
                                                                           .GetVideoMetadata(key, token.AuthToken)
                                                                           .Map(Optional)
                                                                           .Map(r => r.Filter(m => m.Metadata.Media.Count > 0 && m.Metadata.Media[0].Part.Count > 0));

            return(maybeResponse.Match(
                       response =>
            {
                Option <MediaVersion> maybeVersion = ProjectToMediaVersion(response.Metadata);
                return maybeVersion.Match <Either <BaseError, Tuple <EpisodeMetadata, MediaVersion> > >(
                    version => Tuple(
                        ProjectToEpisodeMetadata(response.Metadata, library.MediaSourceId),
                        version),
                    () => BaseError.New("Unable to locate metadata"));
            },
                       () => BaseError.New("Unable to locate metadata")));
        }
        catch (Exception ex)
        {
            return(BaseError.New(ex.ToString()));
        }
    }
Ejemplo n.º 2
0
    public async Task <Either <BaseError, List <PlexLibrary> > > GetLibraries(
        PlexConnection connection,
        PlexServerAuthToken token)
    {
        try
        {
            IPlexServerApi service = RestService.For <IPlexServerApi>(
                new HttpClient
            {
                BaseAddress = new Uri(connection.Uri),
                Timeout     = TimeSpan.FromSeconds(10)
            });
            List <PlexLibraryResponse> directory =
                await service.GetLibraries(token.AuthToken).Map(r => r.MediaContainer.Directory);

            return(directory
                   // .Filter(l => l.Hidden == 0)
                   .Filter(l => l.Type.ToLowerInvariant() is "movie" or "show")
                   .Map(Project)
                   .Somes()
                   .ToList());
        }
        catch (Exception ex)
        {
            return(BaseError.New(ex.ToString()));
        }
    }
Ejemplo n.º 3
0
 public async Task <Either <BaseError, List <PlexShow> > > GetShowLibraryContents(
     PlexLibrary library,
     PlexConnection connection,
     PlexServerAuthToken token)
 {
     try
     {
         IPlexServerApi service = RestService.For <IPlexServerApi>(connection.Uri);
         return(await service.GetLibrarySectionContents(library.Key, token.AuthToken)
                .Map(r => r.MediaContainer.Metadata)
                .Map(list => list.Map(metadata => ProjectToShow(metadata, library.MediaSourceId)).ToList()));
     }
     catch (Exception ex)
     {
         return(BaseError.New(ex.ToString()));
     }
 }
Ejemplo n.º 4
0
 public async Task <Either <BaseError, List <PlexSeason> > > GetShowSeasons(
     PlexLibrary library,
     PlexShow show,
     PlexConnection connection,
     PlexServerAuthToken token)
 {
     try
     {
         IPlexServerApi service = XmlServiceFor(connection.Uri);
         return(await service.GetShowChildren(show.Key.Split("/").Reverse().Skip(1).Head(), token.AuthToken)
                .Map(r => r.Metadata)
                .Map(list => list.Map(metadata => ProjectToSeason(metadata, library.MediaSourceId)).ToList()));
     }
     catch (Exception ex)
     {
         return(BaseError.New(ex.ToString()));
     }
 }
Ejemplo n.º 5
0
 public async Task <Either <BaseError, ShowMetadata> > GetShowMetadata(
     PlexLibrary library,
     string key,
     PlexConnection connection,
     PlexServerAuthToken token)
 {
     try
     {
         IPlexServerApi service = XmlServiceFor(connection.Uri);
         return(await service.GetDirectoryMetadata(key, token.AuthToken)
                .Map(Optional)
                .MapT(response => ProjectToShowMetadata(response.Metadata, library.MediaSourceId))
                .Map(o => o.ToEither <BaseError>("Unable to locate metadata")));
     }
     catch (Exception ex)
     {
         return(BaseError.New(ex.ToString()));
     }
 }
Ejemplo n.º 6
0
 public async Task <Either <BaseError, List <PlexEpisode> > > GetSeasonEpisodes(
     PlexLibrary library,
     PlexSeason season,
     PlexConnection connection,
     PlexServerAuthToken token)
 {
     try
     {
         IPlexServerApi service = XmlServiceFor(connection.Uri);
         return(await service.GetSeasonChildren(season.Key.Split("/").Reverse().Skip(1).Head(), token.AuthToken)
                .Map(r => r.Metadata.Filter(m => m.Media.Count > 0 && m.Media[0].Part.Count > 0))
                .Map(list => list.Map(metadata => ProjectToEpisode(metadata, library.MediaSourceId)))
                .Map(ProcessMultiEpisodeFiles));
     }
     catch (Exception ex)
     {
         return(BaseError.New(ex.ToString()));
     }
 }
Ejemplo n.º 7
0
 public async Task <Either <BaseError, MovieMetadata> > GetMovieMetadata(
     PlexLibrary library,
     string key,
     PlexConnection connection,
     PlexServerAuthToken token)
 {
     try
     {
         IPlexServerApi service = XmlServiceFor(connection.Uri);
         return(await service.GetVideoMetadata(key, token.AuthToken)
                .Map(Optional)
                .Map(r => r.Filter(m => m.Metadata.Media.Count > 0 && m.Metadata.Media[0].Part.Count > 0))
                .MapT(response => ProjectToMovieMetadata(response.Metadata, library.MediaSourceId))
                .Map(o => o.ToEither <BaseError>("Unable to locate metadata")));
     }
     catch (Exception ex)
     {
         return(BaseError.New(ex.ToString()));
     }
 }
Ejemplo n.º 8
0
    public async Task <bool> Ping(
        PlexConnection connection,
        PlexServerAuthToken token)
    {
        try
        {
            IPlexServerApi service = RestService.For <IPlexServerApi>(
                new HttpClient
            {
                BaseAddress = new Uri(connection.Uri),
                Timeout     = TimeSpan.FromSeconds(5)
            });

            await service.Ping(token.AuthToken);

            return(true);
        }
        catch (Exception)
        {
            return(false);
        }
    }