internal static WebTVEpisodeDetailed EpisodeDetailed(MediaItem item, Guid?showId = null, Guid?seasonId = null) { WebTVEpisodeBasic episodeBasic = EpisodeBasic(item, showId, seasonId); MediaItemAspect episodeAspect = MediaItemAspect.GetAspect(item.Aspects, EpisodeAspect.Metadata); MediaItemAspect videoAspect = MediaItemAspect.GetAspect(item.Aspects, VideoAspect.Metadata); var writers = videoAspect.GetCollectionAttribute <string>(VideoAspect.ATTR_WRITERS)?.Distinct().ToList() ?? new List <string>(); var directors = videoAspect.GetCollectionAttribute <string>(VideoAspect.ATTR_DIRECTORS)?.Distinct().ToList() ?? new List <string>(); WebTVEpisodeDetailed webTvEpisodeDetailed = new WebTVEpisodeDetailed { EpisodeNumber = episodeBasic.EpisodeNumber, ExternalId = episodeBasic.ExternalId, FirstAired = episodeBasic.FirstAired, IsProtected = episodeBasic.IsProtected, Rating = episodeBasic.Rating, SeasonNumber = episodeBasic.SeasonNumber, ShowId = episodeBasic.ShowId, SeasonId = episodeBasic.SeasonId, Type = episodeBasic.Type, Watched = episodeBasic.Watched, Path = episodeBasic.Path, DateAdded = episodeBasic.DateAdded, Id = episodeBasic.Id, PID = episodeBasic.PID, Title = episodeBasic.Title, Artwork = episodeBasic.Artwork, Show = episodeAspect.GetAttributeValue <string>(EpisodeAspect.ATTR_SERIES_NAME), Summary = videoAspect.GetAttributeValue <string>(VideoAspect.ATTR_STORYPLOT), Writers = writers, Directors = directors }; return(webTvEpisodeDetailed); }
private bool CallShowAPI(WebTVEpisodeBasic episode, TraktWatchStatus state, int?progress) { WebTVShowDetailed show = MediaService.GetTVShowDetailedById(episode.PID, episode.ShowId); WebTVSeasonDetailed season = MediaService.GetTVSeasonDetailedById(episode.PID, episode.SeasonId); var data = new TraktEpisodeScrobbleData() { MediaCenter = TraktConfig.MediaCenter, MediaCenterBuildDate = TraktConfig.MediaCenterDate, MediaCenterVersion = TraktConfig.MediaCenterVersion, PluginVersion = TraktConfig.PluginVersion, Password = Configuration["passwordHash"], UserName = Configuration["username"], Duration = show.Runtime.ToString(), Episode = episode.EpisodeNumber.ToString(), Season = season.SeasonNumber.ToString(), Title = show.Title, Year = show.Year.ToString(), }; if (progress != null) { data.Progress = progress.Value.ToString(); } if (show.ExternalId.Count(x => x.Site == "IMDB") > 0) { data.IMDBID = show.ExternalId.First(x => x.Site == "IMDB").Id; } if (show.ExternalId.Count(x => x.Site == "TVDB") > 0) { data.TVDBID = show.ExternalId.First(x => x.Site == "TVDB").Id; } if (data.IMDBID == null && data.TVDBID == null) { Log.Info("Trakt: IMDB and TVDB unknown of episode {0}, not sending", episode.Title); return(false); } try { Log.Debug("Trakt: calling service for show {0} (episode {1}) with progress {2} and state {3}", data.Title, episode.Title, data.Progress, state.ToString()); TraktResponse response = TraktAPI.ScrobbleEpisode(data, state); if (response.Status != "success") { Log.Warn("Trakt: failed to update watch status of episode '{0}' ({1}): {2}", episode.Title, episode.Id, response.Error); return(false); } Log.Trace("Trakt: finished service call"); return(true); } catch (Exception ex) { Log.Warn("Trakt: failed to call service", ex); return(false); } }
public static Task <WebTVEpisodeBasic> ProcessAsync(IOwinContext context, string id) { MediaItem item = MediaLibraryAccess.GetMediaItemById(context, Guid.Parse(id), BasicNecessaryMIATypeIds, BasicOptionalMIATypeIds); if (item == null) { throw new NotFoundException(String.Format("GetTvEpisodeBasicById: No MediaItem found with id: {0}", id)); } WebTVEpisodeBasic webTvEpisodeBasic = EpisodeBasic(item); return(Task.FromResult(webTvEpisodeBasic)); }
public override string GetVideoUrl(VideoInfo video) { var type = MpExtendedStreamingService.WebMediaType.File; int providerId = 0; String itemId = null; bool live = false; if (video.Other is WebMovieBasic) { WebMovieBasic movie = video.Other as WebMovieBasic; type = MpExtendedStreamingService.WebMediaType.Movie; providerId = movie.PID; itemId = movie.Id; } else if (video.Other is WebTVEpisodeBasic) { WebTVEpisodeBasic ep = video.Other as WebTVEpisodeBasic; type = MpExtendedStreamingService.WebMediaType.TVEpisode; providerId = ep.PID; itemId = ep.Id; } else if (video.Other is WebChannelDetailed) { WebChannelDetailed channel = video.Other as WebChannelDetailed; type = MpExtendedStreamingService.WebMediaType.TV; providerId = 0; itemId = channel.Id.ToString(); live = true; } if (mediaStreaming.AuthorizeStreaming().Result == true) { video.PlaybackOptions = new Dictionary <string, string>(); foreach (var profile in mediaStreaming.GetTranscoderProfilesForTarget("pc-flash-video")) { video.PlaybackOptions.Add(profile.Name, new MPUrlSourceFilter.HttpUrl( string.Format("http://{0}:{1}/MPExtended/StreamingService/stream/DoStream?type={2}&provider={3}&itemId={4}&clientDescription={5}&profileName={6}&startPosition={7}", mServer, mPort, (int)type, providerId, HttpUtility.UrlEncode(itemId), HttpUtility.UrlEncode("OnlineVideos client"), HttpUtility.UrlEncode(profile.Name), 0)) /*{ LiveStream = live }*/.ToString()); } return(video.PlaybackOptions.Select(p => p.Value).FirstOrDefault()); } throw new OnlineVideosException("No authorization"); }
internal static WebTVEpisodeBasic EpisodeBasic(MediaItem item, Guid?showId = null, Guid?seasonId = null) { MediaItemAspect episodeAspect = item.GetAspect(EpisodeAspect.Metadata); MediaItemAspect importerAspect = item.GetAspect(ImporterAspect.Metadata); MediaItemAspect mediaAspect = item.GetAspect(MediaAspect.Metadata); IEnumerable <int> episodeNumbers = episodeAspect.GetCollectionAttribute <int>(EpisodeAspect.ATTR_EPISODE); int episodeNumber = episodeNumbers != null?episodeNumbers.FirstOrDefault() : 0; GetParentIds(item, ref showId, ref seasonId); WebTVEpisodeBasic webTvEpisodeBasic = new WebTVEpisodeBasic { Title = episodeAspect.GetAttributeValue <string>(EpisodeAspect.ATTR_EPISODE_NAME), EpisodeNumber = episodeNumber, Id = item.MediaItemId.ToString(), ShowId = showId.HasValue ? showId.Value.ToString() : null, SeasonId = seasonId.HasValue ? seasonId.Value.ToString() : null, Type = WebMediaType.TVEpisode, Path = ResourceAccessUtils.GetPaths(item), Watched = Convert.ToInt32(item.UserData.FirstOrDefault(d => d.Key == UserDataKeysKnown.KEY_PLAY_PERCENTAGE).Value ?? "0") >= 100, DateAdded = importerAspect.GetAttributeValue <DateTime>(ImporterAspect.ATTR_DATEADDED), SeasonNumber = episodeAspect.GetAttributeValue <int>(EpisodeAspect.ATTR_SEASON), FirstAired = mediaAspect.GetAttributeValue <DateTime>(MediaAspect.ATTR_RECORDINGTIME), Rating = Convert.ToSingle(episodeAspect.GetAttributeValue <double>(EpisodeAspect.ATTR_TOTAL_RATING)), Artwork = ResourceAccessUtils.GetWebArtwork(item), }; string TvDbId; MediaItemAspect.TryGetExternalAttribute(item.Aspects, ExternalIdentifierAspect.SOURCE_TVDB, ExternalIdentifierAspect.TYPE_SERIES, out TvDbId); if (TvDbId != null) { webTvEpisodeBasic.ExternalId.Add(new WebExternalId { Site = "TVDB", Id = TvDbId }); } string ImdbId; MediaItemAspect.TryGetExternalAttribute(item.Aspects, ExternalIdentifierAspect.SOURCE_IMDB, ExternalIdentifierAspect.TYPE_SERIES, out ImdbId); if (ImdbId != null) { webTvEpisodeBasic.ExternalId.Add(new WebExternalId { Site = "IMDB", Id = ImdbId }); } return(webTvEpisodeBasic); }