|
|
|
@ -180,7 +180,7 @@ public class PlexServerApiClient : IPlexServerApiClient |
|
|
|
{ |
|
|
|
{ |
|
|
|
return xmlService.GetSeasonChildren(seasonMetadataKey, skip, pageSize, token.AuthToken) |
|
|
|
return xmlService.GetSeasonChildren(seasonMetadataKey, skip, pageSize, token.AuthToken) |
|
|
|
.Map(r => r.Metadata.Filter(m => m.Media.Count > 0 && m.Media[0].Part.Count > 0)) |
|
|
|
.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(list => list.Bind(metadata => ProjectToEpisodes(metadata, library.MediaSourceId))); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return GetPagedLibraryContents(connection, CountItems, GetItems); |
|
|
|
return GetPagedLibraryContents(connection, CountItems, GetItems); |
|
|
|
@ -814,45 +814,52 @@ public class PlexServerApiClient : IPlexServerApiClient |
|
|
|
return season; |
|
|
|
return season; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private PlexEpisode ProjectToEpisode(PlexXmlMetadataResponse response, int mediaSourceId) |
|
|
|
private IEnumerable<PlexEpisode> ProjectToEpisodes(PlexXmlMetadataResponse response, int mediaSourceId) |
|
|
|
{ |
|
|
|
{ |
|
|
|
PlexMediaResponse<PlexXmlPartResponse> media = response.Media.Head(); |
|
|
|
var result = new List<PlexEpisode>(); |
|
|
|
PlexXmlPartResponse part = media.Part.Head(); |
|
|
|
|
|
|
|
DateTime dateAdded = DateTimeOffset.FromUnixTimeSeconds(response.AddedAt).DateTime; |
|
|
|
|
|
|
|
DateTime lastWriteTime = DateTimeOffset.FromUnixTimeSeconds(response.UpdatedAt).DateTime; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
EpisodeMetadata metadata = ProjectToEpisodeMetadata(response, mediaSourceId); |
|
|
|
// TODO: actually use all media records
|
|
|
|
var version = new MediaVersion |
|
|
|
foreach (PlexMediaResponse<PlexXmlPartResponse> media in response.Media.HeadOrNone()) |
|
|
|
{ |
|
|
|
{ |
|
|
|
Name = "Main", |
|
|
|
PlexXmlPartResponse part = media.Part.Head(); |
|
|
|
Duration = TimeSpan.FromMilliseconds(media.Duration), |
|
|
|
DateTime dateAdded = DateTimeOffset.FromUnixTimeSeconds(response.AddedAt).DateTime; |
|
|
|
Width = media.Width, |
|
|
|
DateTime lastWriteTime = DateTimeOffset.FromUnixTimeSeconds(response.UpdatedAt).DateTime; |
|
|
|
Height = media.Height, |
|
|
|
|
|
|
|
DateAdded = dateAdded, |
|
|
|
EpisodeMetadata metadata = ProjectToEpisodeMetadata(response, mediaSourceId); |
|
|
|
DateUpdated = lastWriteTime, |
|
|
|
var version = new MediaVersion |
|
|
|
MediaFiles = new List<MediaFile> |
|
|
|
|
|
|
|
{ |
|
|
|
{ |
|
|
|
new PlexMediaFile |
|
|
|
Name = "Main", |
|
|
|
|
|
|
|
Duration = TimeSpan.FromMilliseconds(media.Duration), |
|
|
|
|
|
|
|
Width = media.Width, |
|
|
|
|
|
|
|
Height = media.Height, |
|
|
|
|
|
|
|
DateAdded = dateAdded, |
|
|
|
|
|
|
|
DateUpdated = lastWriteTime, |
|
|
|
|
|
|
|
MediaFiles = new List<MediaFile> |
|
|
|
{ |
|
|
|
{ |
|
|
|
PlexId = part.Id, |
|
|
|
new PlexMediaFile |
|
|
|
Key = part.Key, |
|
|
|
{ |
|
|
|
Path = part.File |
|
|
|
PlexId = part.Id, |
|
|
|
} |
|
|
|
Key = part.Key, |
|
|
|
}, |
|
|
|
Path = part.File |
|
|
|
// specifically omit stream details
|
|
|
|
} |
|
|
|
Streams = new List<MediaStream>() |
|
|
|
}, |
|
|
|
}; |
|
|
|
// specifically omit stream details
|
|
|
|
|
|
|
|
Streams = new List<MediaStream>() |
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
var episode = new PlexEpisode |
|
|
|
var episode = new PlexEpisode |
|
|
|
{ |
|
|
|
{ |
|
|
|
Key = response.Key, |
|
|
|
Key = response.Key, |
|
|
|
Etag = _plexEtag.ForEpisode(response), |
|
|
|
Etag = _plexEtag.ForEpisode(response), |
|
|
|
EpisodeMetadata = new List<EpisodeMetadata> { metadata }, |
|
|
|
EpisodeMetadata = new List<EpisodeMetadata> { metadata }, |
|
|
|
MediaVersions = new List<MediaVersion> { version }, |
|
|
|
MediaVersions = new List<MediaVersion> { version }, |
|
|
|
TraktListItems = new List<TraktListItem>() |
|
|
|
TraktListItems = new List<TraktListItem>() |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
result.Add(episode); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return episode; |
|
|
|
return result; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private EpisodeMetadata ProjectToEpisodeMetadata(PlexMetadataResponse response, int mediaSourceId) |
|
|
|
private EpisodeMetadata ProjectToEpisodeMetadata(PlexMetadataResponse response, int mediaSourceId) |
|
|
|
|