Inheritance: MediaPortal.UI.Presentation.DataObjects.ListItem
コード例 #1
0
        public PlaylistItem(VideoViewModel videoInfo, string resolvedPlaybackUrl)
            : base(Guid.Empty, new Dictionary <Guid, MediaItemAspect>()
        {
            { ProviderResourceAspect.ASPECT_ID, new MediaItemAspect(ProviderResourceAspect.Metadata) },
            { MediaAspect.ASPECT_ID, new MediaItemAspect(MediaAspect.Metadata) },
            { VideoAspect.ASPECT_ID, new MediaItemAspect(VideoAspect.Metadata) }
        })
        {
            SiteName = videoInfo.SiteName;

            Aspects[ProviderResourceAspect.ASPECT_ID].SetAttribute(ProviderResourceAspect.ATTR_SYSTEM_ID, ServiceRegistration.Get <ISystemResolver>().LocalSystemId);
            if (videoInfo.SiteUtilName == "DownloadedVideo")
            {
                Aspects[ProviderResourceAspect.ASPECT_ID].SetAttribute(ProviderResourceAspect.ATTR_RESOURCE_ACCESSOR_PATH, LocalFsResourceProviderBase.ToResourcePath(resolvedPlaybackUrl).Serialize());
                Aspects[MediaAspect.ASPECT_ID].SetAttribute(MediaAspect.ATTR_MIME_TYPE, "video/unknown");
            }
            else
            {
                Aspects[ProviderResourceAspect.ASPECT_ID].SetAttribute(ProviderResourceAspect.ATTR_RESOURCE_ACCESSOR_PATH, RawUrlResourceProvider.ToProviderResourcePath(resolvedPlaybackUrl).Serialize());
                Aspects[MediaAspect.ASPECT_ID].SetAttribute(MediaAspect.ATTR_MIME_TYPE, OnlineVideosPlayer.ONLINEVIDEOS_MIMETYPE);
            }

            Aspects[MediaAspect.ASPECT_ID].SetAttribute(MediaAspect.ATTR_TITLE, videoInfo.Title);

            Aspects[VideoAspect.ASPECT_ID].SetAttribute(VideoAspect.ATTR_STORYPLOT, videoInfo.Description);

            DateTime parsedAirDate;

            if (DateTime.TryParse(videoInfo.VideoInfo.Airdate, out parsedAirDate))
            {
                Aspects[MediaAspect.ASPECT_ID].SetAttribute(MediaAspect.ATTR_RECORDINGTIME, parsedAirDate);
            }
        }
コード例 #2
0
        public PlaylistItem(VideoViewModel videoInfo, string resolvedPlaybackUrl)
            : base(Guid.Empty, new Dictionary <Guid, IList <MediaItemAspect> >
        {
            { ProviderResourceAspect.ASPECT_ID, new MediaItemAspect[] { new MultipleMediaItemAspect(ProviderResourceAspect.Metadata) } },
            { MediaAspect.ASPECT_ID, new MediaItemAspect[] { new SingleMediaItemAspect(MediaAspect.Metadata) } },
            { VideoAspect.ASPECT_ID, new MediaItemAspect[] { new SingleMediaItemAspect(VideoAspect.Metadata) } },
            { OnlineVideosAspect.ASPECT_ID, new MediaItemAspect[] { new SingleMediaItemAspect(OnlineVideosAspect.Metadata) } },
        })
        {
            SiteName  = videoInfo.SiteName;
            VideoInfo = videoInfo.VideoInfo;

            Aspects[OnlineVideosAspect.ASPECT_ID].First().SetAttribute(OnlineVideosAspect.ATTR_SITEUTIL, SiteName);

            ISystemResolver systemResolver = ServiceRegistration.Get <ISystemResolver>();

            IList <MultipleMediaItemAspect> providerResourceAspects;

            MediaItemAspect.TryGetAspects(Aspects, ProviderResourceAspect.Metadata, out providerResourceAspects);
            MultipleMediaItemAspect providerResourceAspect = providerResourceAspects.First();

            providerResourceAspect.SetAttribute(ProviderResourceAspect.ATTR_PRIMARY, true);
            providerResourceAspect.SetAttribute(ProviderResourceAspect.ATTR_SYSTEM_ID, systemResolver.LocalSystemId);

            if (videoInfo.SiteUtilName == "DownloadedVideo")
            {
                providerResourceAspect.SetAttribute(ProviderResourceAspect.ATTR_RESOURCE_ACCESSOR_PATH, LocalFsResourceProviderBase.ToResourcePath(resolvedPlaybackUrl).Serialize());
                providerResourceAspect.SetAttribute(ProviderResourceAspect.ATTR_MIME_TYPE, "video/unknown");
            }
            else
            {
                Uri uri;
                // Test if the resolved "url" is a real Uri (Sites can provide any content here)
                var isUriSource = Uri.TryCreate(resolvedPlaybackUrl, UriKind.Absolute, out uri);

                var value = isUriSource
                    ? RawUrlResourceProvider.ToProviderResourcePath(resolvedPlaybackUrl).Serialize()
                    : RawTokenResourceProvider.ToProviderResourcePath(resolvedPlaybackUrl).Serialize();
                providerResourceAspect.SetAttribute(ProviderResourceAspect.ATTR_RESOURCE_ACCESSOR_PATH, value);
                Aspects[OnlineVideosAspect.ASPECT_ID].First().SetAttribute(OnlineVideosAspect.ATTR_LONGURL, value);

                var isBrowser = videoInfo.SiteSettings.Player == PlayerType.Browser;
                providerResourceAspect.SetAttribute(ProviderResourceAspect.ATTR_MIME_TYPE,
                                                    isBrowser
                        ? WebBrowserVideoPlayer.ONLINEVIDEOSBROWSER_MIMETYPE
                        : OnlineVideosPlayer.ONLINEVIDEOS_MIMETYPE);
            }

            MediaItemAspect.SetAttribute(Aspects, MediaAspect.ATTR_TITLE, videoInfo.Title);

            // TODO: Restore line after story plot was moved back to VideoAspect!
            // MediaItemAspect.SetAttribute(aspects, VideoAspect.ATTR_STORYPLOT, videoInfo.Description);

            DateTime parsedAirDate;

            if (DateTime.TryParse(videoInfo.VideoInfo.Airdate, out parsedAirDate))
            {
                MediaItemAspect.SetAttribute(Aspects, MediaAspect.ATTR_RECORDINGTIME, parsedAirDate);
            }
        }
コード例 #3
0
 public void SelectDetailsVideo(VideoViewModel videoModel)
 {
     if (BackgroundTask.Instance.IsExecuting)
     {
         return;
     }
     BackgroundTask.Instance.Start <List <string> >(
         () =>
     {
         return(SelectedSite.Site.GetMultipleVideoUrls(videoModel.VideoInfo));
     },
         (success, urls) =>
     {
         if (success)
         {
             if (SelectedSite.Site.Settings.Player != PlayerType.Browser)
             {
                 Helpers.UriUtils.RemoveInvalidUrls(urls);
             }
             // if no valid urls were returned show error msg
             if (urls == null || urls.Count == 0)
             {
                 ServiceRegistration.Get <IDialogManager>().ShowDialog("[OnlineVideos.Error]", "[OnlineVideos.UnableToPlayVideo]", DialogType.OkDialog, false, DialogButtonType.Ok);
             }
             else
             {
                 SelectedDetailsVideo = videoModel;
                 SelectedDetailsVideo.ChoosePlaybackOptions(urls[0], (url) => { urls[0] = url; SelectedDetailsVideo.Play(urls); });
             }
         }
     },
         Translation.Instance.GettingPlaybackUrlsForVideo);
 }
コード例 #4
0
		public PlaylistItem(VideoViewModel videoInfo, string resolvedPlaybackUrl)
			: base(Guid.Empty, new Dictionary<Guid, MediaItemAspect>()
			{
				{ ProviderResourceAspect.ASPECT_ID, new MediaItemAspect(ProviderResourceAspect.Metadata)},
				{ MediaAspect.ASPECT_ID, new MediaItemAspect(MediaAspect.Metadata) },
				{ VideoAspect.ASPECT_ID, new MediaItemAspect(VideoAspect.Metadata) }
			})
		{
            SiteName = videoInfo.SiteName;

			Aspects[ProviderResourceAspect.ASPECT_ID].SetAttribute(ProviderResourceAspect.ATTR_SYSTEM_ID, ServiceRegistration.Get<ISystemResolver>().LocalSystemId);
			if (videoInfo.SiteUtilName == "DownloadedVideo")
			{
				Aspects[ProviderResourceAspect.ASPECT_ID].SetAttribute(ProviderResourceAspect.ATTR_RESOURCE_ACCESSOR_PATH, LocalFsResourceProviderBase.ToResourcePath(resolvedPlaybackUrl).Serialize());
				Aspects[MediaAspect.ASPECT_ID].SetAttribute(MediaAspect.ATTR_MIME_TYPE, "video/unknown");
			}
			else
			{
				Aspects[ProviderResourceAspect.ASPECT_ID].SetAttribute(ProviderResourceAspect.ATTR_RESOURCE_ACCESSOR_PATH, RawUrlResourceProvider.ToProviderResourcePath(resolvedPlaybackUrl).Serialize());
				Aspects[MediaAspect.ASPECT_ID].SetAttribute(MediaAspect.ATTR_MIME_TYPE, OnlineVideosPlayer.ONLINEVIDEOS_MIMETYPE);
			}
			
			Aspects[MediaAspect.ASPECT_ID].SetAttribute(MediaAspect.ATTR_TITLE, videoInfo.Title);
			
			Aspects[VideoAspect.ASPECT_ID].SetAttribute(VideoAspect.ATTR_STORYPLOT, videoInfo.Description);

			DateTime parsedAirDate;
			if (DateTime.TryParse(videoInfo.VideoInfo.Airdate, out parsedAirDate))
				Aspects[MediaAspect.ASPECT_ID].SetAttribute(MediaAspect.ATTR_RECORDINGTIME, parsedAirDate);

		}
コード例 #5
0
        public PlaylistItem(VideoViewModel videoInfo, string resolvedPlaybackUrl)
            : base(Guid.Empty, new Dictionary<Guid, IList<MediaItemAspect>>
            {
                { ProviderResourceAspect.ASPECT_ID, new MediaItemAspect[]{ new MultipleMediaItemAspect(ProviderResourceAspect.Metadata) }},
                { MediaAspect.ASPECT_ID, new MediaItemAspect[]{ new SingleMediaItemAspect(MediaAspect.Metadata) }},
                { VideoAspect.ASPECT_ID, new MediaItemAspect[]{ new SingleMediaItemAspect(VideoAspect.Metadata) }},
                { OnlineVideosAspect.ASPECT_ID, new MediaItemAspect[]{ new SingleMediaItemAspect(OnlineVideosAspect.Metadata) }},
            })
        {
            SiteName = videoInfo.SiteName;
            VideoInfo = videoInfo.VideoInfo;

            Aspects[OnlineVideosAspect.ASPECT_ID].First().SetAttribute(OnlineVideosAspect.ATTR_SITEUTIL, SiteName);

            ISystemResolver systemResolver = ServiceRegistration.Get<ISystemResolver>();

            IList<MultipleMediaItemAspect> providerResourceAspects;
            MediaItemAspect.TryGetAspects(Aspects, ProviderResourceAspect.Metadata, out providerResourceAspects);
            MultipleMediaItemAspect providerResourceAspect = providerResourceAspects.First();

            providerResourceAspect.SetAttribute(ProviderResourceAspect.ATTR_PRIMARY, true);
            providerResourceAspect.SetAttribute(ProviderResourceAspect.ATTR_SYSTEM_ID, systemResolver.LocalSystemId);

            if (videoInfo.SiteUtilName == "DownloadedVideo")
            {
                providerResourceAspect.SetAttribute(ProviderResourceAspect.ATTR_RESOURCE_ACCESSOR_PATH, LocalFsResourceProviderBase.ToResourcePath(resolvedPlaybackUrl).Serialize());
                providerResourceAspect.SetAttribute(ProviderResourceAspect.ATTR_MIME_TYPE, "video/unknown");
            }
            else
            {
                Uri uri;
                // Test if the resolved "url" is a real Uri (Sites can provide any content here)
                var isUriSource = Uri.TryCreate(resolvedPlaybackUrl, UriKind.Absolute, out uri);

                var value = isUriSource
                    ? RawUrlResourceProvider.ToProviderResourcePath(resolvedPlaybackUrl).Serialize()
                    : RawTokenResourceProvider.ToProviderResourcePath(resolvedPlaybackUrl).Serialize();
                providerResourceAspect.SetAttribute(ProviderResourceAspect.ATTR_RESOURCE_ACCESSOR_PATH, value);
                Aspects[OnlineVideosAspect.ASPECT_ID].First().SetAttribute(OnlineVideosAspect.ATTR_LONGURL, value);

                var isBrowser = videoInfo.SiteSettings.Player == PlayerType.Browser;
                providerResourceAspect.SetAttribute(ProviderResourceAspect.ATTR_MIME_TYPE,
                    isBrowser
                        ? WebBrowserVideoPlayer.ONLINEVIDEOSBROWSER_MIMETYPE
                        : OnlineVideosPlayer.ONLINEVIDEOS_MIMETYPE);
            }

            MediaItemAspect.SetAttribute(Aspects, MediaAspect.ATTR_TITLE, videoInfo.Title);

            // TODO: Restore line after story plot was moved back to VideoAspect!
            // MediaItemAspect.SetAttribute(aspects, VideoAspect.ATTR_STORYPLOT, videoInfo.Description);

            DateTime parsedAirDate;
            if (DateTime.TryParse(videoInfo.VideoInfo.Airdate, out parsedAirDate))
                MediaItemAspect.SetAttribute(Aspects, MediaAspect.ATTR_RECORDINGTIME, parsedAirDate);

        }
コード例 #6
0
        static void SaveVideo_Step2(DownloadList saveItems, List <String> urls, bool?enque)
        {
            Helpers.UriUtils.RemoveInvalidUrls(urls);

            // if no valid urls were returned show error msg
            if (urls == null || urls.Count == 0)
            {
                ServiceRegistration.Get <IDialogManager>().ShowDialog("[OnlineVideos.Error]", "[OnlineVideos.UnableToDownloadVideo]", DialogType.OkDialog, false, DialogButtonType.Ok);
                return;
            }

            // create download list if more than one url
            if (urls.Count > 1)
            {
                saveItems.DownloadItems = new List <DownloadInfo>();
                foreach (string url in urls)
                {
                    VideoInfo vi      = saveItems.CurrentItem.VideoInfo.CloneForPlaylist(url, url == urls[0]);
                    string    url_new = url;
                    if (url == urls[0])
                    {
                        url_new = saveItems.CurrentItem.Util.GetPlaylistItemVideoUrl(vi, string.Empty);
                    }
                    DownloadInfo pli = DownloadInfo.Create(vi, saveItems.CurrentItem.Category, saveItems.CurrentItem.Util);
                    pli.Title            = string.Format("{0} - {1} / {2}", vi.Title, (saveItems.DownloadItems.Count + 1).ToString(), urls.Count);
                    pli.Url              = url_new;
                    pli.OverrideFolder   = saveItems.CurrentItem.OverrideFolder;
                    pli.OverrideFileName = saveItems.CurrentItem.OverrideFileName;
                    saveItems.DownloadItems.Add(pli);
                }
                // make the first item the current to be saved now
                saveItems.CurrentItem = saveItems.DownloadItems[0];
                urls = new List <string>(new string[] { saveItems.CurrentItem.Url });
            }
            // show selection dialog for playback options
            VideoViewModel tempVi = new VideoViewModel(saveItems.CurrentItem.VideoInfo, saveItems.CurrentItem.Category, saveItems.CurrentItem.Util.Settings.Name, saveItems.CurrentItem.Util.Settings.UtilName, false);

            tempVi.ChoosePlaybackOptions(urls[0], (url) => { SaveVideo_Step3(saveItems, url, enque); }, enque == null);             // skip dialog when downloading an item of a queue
        }
コード例 #7
0
		static void SaveVideo_Step2(DownloadList saveItems, List<String> urls, bool? enque)
		{
            Helpers.UriUtils.RemoveInvalidUrls(urls);

			// if no valid urls were returned show error msg
			if (urls == null || urls.Count == 0)
			{				
				ServiceRegistration.Get<IDialogManager>().ShowDialog("[OnlineVideos.Error]", "[OnlineVideos.UnableToDownloadVideo]", DialogType.OkDialog, false, DialogButtonType.Ok);
				return;
			}

			// create download list if more than one url
			if (urls.Count > 1)
			{
				saveItems.DownloadItems = new List<DownloadInfo>();
				foreach (string url in urls)
				{
					VideoInfo vi = saveItems.CurrentItem.VideoInfo.CloneForPlaylist(url, url == urls[0]);
					string url_new = url;
					if (url == urls[0])
					{
						url_new = saveItems.CurrentItem.Util.GetPlaylistItemVideoUrl(vi, string.Empty);
					}
					DownloadInfo pli = DownloadInfo.Create(vi, saveItems.CurrentItem.Category, saveItems.CurrentItem.Util);
					pli.Title = string.Format("{0} - {1} / {2}", vi.Title, (saveItems.DownloadItems.Count + 1).ToString(), urls.Count);
					pli.Url = url_new;
					pli.OverrideFolder = saveItems.CurrentItem.OverrideFolder;
					pli.OverrideFileName = saveItems.CurrentItem.OverrideFileName;
					saveItems.DownloadItems.Add(pli);
				}
				// make the first item the current to be saved now
				saveItems.CurrentItem = saveItems.DownloadItems[0];
				urls = new List<string>(new string[] { saveItems.CurrentItem.Url });
			}
			// show selection dialog for playback options
			VideoViewModel tempVi = new VideoViewModel(saveItems.CurrentItem.VideoInfo, saveItems.CurrentItem.Category, saveItems.CurrentItem.Util.Settings.Name, saveItems.CurrentItem.Util.Settings.UtilName, false);
			tempVi.ChoosePlaybackOptions(urls[0], (url) => { SaveVideo_Step3(saveItems, url, enque); }, enque == null); // skip dialog when downloading an item of a queue
		}
コード例 #8
0
        public void SelectDetailsVideo(VideoViewModel videoModel)
        {
			if (BackgroundTask.Instance.IsExecuting) return;
			BackgroundTask.Instance.Start<List<string>>(
				() =>
                {
					return SelectedSite.Site.GetMultipleVideoUrls(videoModel.VideoInfo);
                },
				(success, urls) =>
                {
					if (success)
					{
						Helpers.UriUtils.RemoveInvalidUrls(urls);
						// if no valid urls were returned show error msg
						if (urls == null || urls.Count == 0)
						{
							ServiceRegistration.Get<IDialogManager>().ShowDialog("[OnlineVideos.Error]", "[OnlineVideos.UnableToPlayVideo]", DialogType.OkDialog, false, DialogButtonType.Ok);
						}
						else
						{
							SelectedDetailsVideo = videoModel;
							SelectedDetailsVideo.ChoosePlaybackOptions(urls[0], (url) => { urls[0] = url; SelectedDetailsVideo.Play(urls); });
						}
					}
                },
                Translation.Instance.GettingPlaybackUrlsForVideo);
        }
コード例 #9
0
		public void SelectVideo(VideoViewModel videoModel)
        {
			if (BackgroundTask.Instance.IsExecuting) return;
			if (videoModel.VideoInfo == null)
            {
                // discover and append next page videos
				BackgroundTask.Instance.Start<List<VideoInfo>>(
					() =>
					{
						return SelectedSite.Site.GetNextPageVideos();
					},
					(success, nextPageVideos) =>
					{
						if (success)
						{
							VideosList.Remove(videoModel);
							int selectNr = VideosList.Count;
							nextPageVideos.ForEach(r => { r.CleanDescriptionAndTitle(); VideosList.Add(new VideoViewModel(r, SelectedCategory != null ? SelectedCategory.Category : null, SelectedSite.Name, SelectedSite.Site.Settings.UtilName, false) { Selected = VideosList.Count == selectNr }); });
							if (SelectedSite.Site.HasNextPage) VideosList.Add(new VideoViewModel(Translation.Instance.NextPage, "NextPage.png"));
							VideosList.FireChange();
							ImageDownloader.GetImages<VideoInfo>(nextPageVideos);
						}
					},
                    Translation.Instance.GettingNextPageVideos);
            }
            else
            {
				if (SelectedSite.Site is Sites.IChoice && videoModel.VideoInfo.HasDetails)
                {
                    // get details videos and show details view
                    BackgroundTask.Instance.Start<List<DetailVideoInfo>>(
						() =>
						{
                            return ((Sites.IChoice)SelectedSite.Site).GetVideoChoices(videoModel.VideoInfo);
                        },
						(success, choices) =>
                        {
							if (success)
							{
								SelectedVideo = videoModel;
								ShowDetails(choices);
							}
                        },
                        Translation.Instance.GettingVideoDetails);
                }
                else
                {
					// get playback urls and play or show dialog to select playback options
					BackgroundTask.Instance.Start<List<string>>(
						() =>
                        {
							return SelectedSite.Site.GetMultipleVideoUrls(videoModel.VideoInfo);
                        },
						(success, urls) =>
						{
							if (success)
							{
								Helpers.UriUtils.RemoveInvalidUrls(urls);
								// if no valid urls were returned show error msg
								if (urls == null || urls.Count == 0)
								{
									ServiceRegistration.Get<IDialogManager>().ShowDialog("[OnlineVideos.Error]", "[OnlineVideos.UnableToPlayVideo]", DialogType.OkDialog, false, DialogButtonType.Ok);
								}
								else
								{
									SelectedVideo = videoModel;
									SelectedVideo.ChoosePlaybackOptions(urls[0], (url) => { urls[0] = url; SelectedVideo.Play(urls); });
								}
							}
						},
                        Translation.Instance.GettingPlaybackUrlsForVideo);
                }
            }
        }
コード例 #10
0
 public void SelectVideo(VideoViewModel videoModel)
 {
     if (BackgroundTask.Instance.IsExecuting)
     {
         return;
     }
     if (videoModel.VideoInfo == null)
     {
         // discover and append next page videos
         BackgroundTask.Instance.Start <List <VideoInfo> >(
             () =>
         {
             return(SelectedSite.Site.GetNextPageVideos());
         },
             (success, nextPageVideos) =>
         {
             if (success)
             {
                 VideosList.Remove(videoModel);
                 int selectNr = VideosList.Count;
                 nextPageVideos.ForEach(r => { r.CleanDescriptionAndTitle(); VideosList.Add(new VideoViewModel(r, SelectedCategory != null ? SelectedCategory.Category : null, SelectedSite.Site.Settings, false)
                     {
                         Selected = VideosList.Count == selectNr
                     }); });
                 if (SelectedSite.Site.HasNextPage)
                 {
                     VideosList.Add(new VideoViewModel(Translation.Instance.NextPage, "NextPage.png"));
                 }
                 VideosList.FireChange();
                 ImageDownloader.GetImages <VideoInfo>(nextPageVideos);
             }
         },
             Translation.Instance.GettingNextPageVideos);
     }
     else
     {
         if (SelectedSite.Site is Sites.IChoice && videoModel.VideoInfo.HasDetails)
         {
             // get details videos and show details view
             BackgroundTask.Instance.Start <List <DetailVideoInfo> >(
                 () =>
             {
                 return(((Sites.IChoice)SelectedSite.Site).GetVideoChoices(videoModel.VideoInfo));
             },
                 (success, choices) =>
             {
                 if (success)
                 {
                     SelectedVideo = videoModel;
                     ShowDetails(choices);
                 }
             },
                 Translation.Instance.GettingVideoDetails);
         }
         else
         {
             // get playback urls and play or show dialog to select playback options
             BackgroundTask.Instance.Start <List <string> >(
                 () =>
             {
                 return(SelectedSite.Site.GetMultipleVideoUrls(videoModel.VideoInfo));
             },
                 (success, urls) =>
             {
                 if (success)
                 {
                     if (SelectedSite.Site.Settings.Player != PlayerType.Browser)
                     {
                         Helpers.UriUtils.RemoveInvalidUrls(urls);
                     }
                     // if no valid urls were returned show error msg
                     if (urls == null || urls.Count == 0)
                     {
                         ServiceRegistration.Get <IDialogManager>().ShowDialog("[OnlineVideos.Error]", "[OnlineVideos.UnableToPlayVideo]", DialogType.OkDialog, false, DialogButtonType.Ok);
                     }
                     else
                     {
                         SelectedVideo = videoModel;
                         SelectedVideo.ChoosePlaybackOptions(urls[0], (url) => { urls[0] = url; SelectedVideo.Play(urls); });
                     }
                 }
             },
                 Translation.Instance.GettingPlaybackUrlsForVideo);
         }
     }
 }