Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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));
        }
Esempio n. 4
0
        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");
        }
Esempio n. 5
0
        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);
        }