diff --git a/src/Skybrud.VideoPicker.Skyfish/Controllers/SkyfishController.cs b/src/Skybrud.VideoPicker.Skyfish/Controllers/SkyfishController.cs new file mode 100644 index 0000000..7cdda45 --- /dev/null +++ b/src/Skybrud.VideoPicker.Skyfish/Controllers/SkyfishController.cs @@ -0,0 +1,45 @@ +using System.Linq; +using System.Net; +using System.Net.Http; +using System.Web.Http; +using Limbo.Integrations.Skyfish; +using Skybrud.VideoPicker.Exceptions; +using Skybrud.VideoPicker.Services; +using Skybrud.WebApi.Json; +using Umbraco.Web.WebApi; + +namespace Skybrud.VideoPicker.Skyfish.Controllers { + [JsonOnlyConfiguration] + public class SkyfishController : UmbracoApiController { + + private readonly VideoPickerService _videoPickerService; + + public SkyfishController(VideoPickerService videoPickerService) { + _videoPickerService = videoPickerService; + } + + [Route("umbraco/api/skyfish/GetThumbnail")] + public object GetThumbnail(string uniqueMediaId) { + + if (!_videoPickerService.Providers.TryGet(out SkyfishVideoProvider provider)) return Request.CreateResponse(HttpStatusCode.NotFound); + if (!_videoPickerService.Config.TryGetConfig(provider, out SkyfishConfig config)) return Request.CreateResponse(HttpStatusCode.NotFound); + + // Get the first credentials (or trigger an error if none) + SkyfishCredentials credentials = config.Credentials.FirstOrDefault(); + if (credentials == null) throw new VideosException("Skyfish provider is not configured (1)."); + if (credentials.IsConfigured == false) throw new VideosException("Skyfish provider is not configured (2)."); + + // Initialize a new service for the Skyfish API + SkyfishHttpService api = SkyfishHttpService.CreateFromKeys(credentials.PublicKey, credentials.SecretKey, credentials.Username, credentials.Password); + SkyfishHttpHelper skyHelper = new SkyfishHttpHelper(api); + + var thumbnailUrl = skyHelper.GetVideoByUniqueMediaId(int.Parse(uniqueMediaId)).ThumbnailUrl; + + if (!string.IsNullOrWhiteSpace(thumbnailUrl)) return Redirect(thumbnailUrl); + return Request.CreateResponse(HttpStatusCode.NotFound); + + } + + } + +} diff --git a/src/Skybrud.VideoPicker.Skyfish/Skybrud.VideoPicker.Skyfish.csproj b/src/Skybrud.VideoPicker.Skyfish/Skybrud.VideoPicker.Skyfish.csproj index c27e323..3357d5d 100644 --- a/src/Skybrud.VideoPicker.Skyfish/Skybrud.VideoPicker.Skyfish.csproj +++ b/src/Skybrud.VideoPicker.Skyfish/Skybrud.VideoPicker.Skyfish.csproj @@ -8,7 +8,7 @@ - 1.0.0-beta001 + 1.0.0-beta002 Limbo Skybrud.VideoPicker Jesper Mayntzhusen @@ -29,7 +29,7 @@ - + contentFiles diff --git a/src/Skybrud.VideoPicker.Skyfish/SkyfishVideoDetails.cs b/src/Skybrud.VideoPicker.Skyfish/SkyfishVideoDetails.cs index d6ce8df..621e4a5 100644 --- a/src/Skybrud.VideoPicker.Skyfish/SkyfishVideoDetails.cs +++ b/src/Skybrud.VideoPicker.Skyfish/SkyfishVideoDetails.cs @@ -1,4 +1,4 @@ -using Limbo.Integrations.Skyfish.Models; +using Limbo.Integrations.Skyfish.Models.Media; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Skybrud.Essentials.Json.Extensions; @@ -29,11 +29,11 @@ public class SkyfishVideoDetails : IVideoDetails { #region Constructors - public SkyfishVideoDetails(SkyfishVideo video, VideoThumbnail[] thumbnails) { - Id = video.VideoId.ToString(); - Title = string.IsNullOrWhiteSpace(video.VideoTitle) ? video.FileName : video.VideoTitle; - Description = video.VideoDescription; - EmbedUrl = video.EmbedUrl; + public SkyfishVideoDetails(SkyfishMediaItem video, VideoThumbnail[] thumbnails, string embedUrl) { + Id = video.UniqueMediaId.ToString(); + Title = string.IsNullOrWhiteSpace(video.Title) ? video.FileName : video.Title; + Description = video.Description; + EmbedUrl = embedUrl; Thumbnails = thumbnails; } diff --git a/src/Skybrud.VideoPicker.Skyfish/SkyfishVideoProvider.cs b/src/Skybrud.VideoPicker.Skyfish/SkyfishVideoProvider.cs index 9b8c605..e163129 100644 --- a/src/Skybrud.VideoPicker.Skyfish/SkyfishVideoProvider.cs +++ b/src/Skybrud.VideoPicker.Skyfish/SkyfishVideoProvider.cs @@ -3,10 +3,9 @@ using System.Text.RegularExpressions; using System.Xml.Linq; using Limbo.Integrations.Skyfish; -using Limbo.Integrations.Skyfish.Models; +using Limbo.Integrations.Skyfish.Models.Media; using Newtonsoft.Json.Linq; using Skybrud.Essentials.Json.Extensions; -using Skybrud.Essentials.Strings.Extensions; using Skybrud.VideoPicker.Exceptions; using Skybrud.VideoPicker.Models; using Skybrud.VideoPicker.Models.Config; @@ -57,15 +56,17 @@ public VideoPickerValue GetVideo(VideoPickerService service, IVideoOptions optio // Initialize a new service for the Skyfish API SkyfishHttpService api = SkyfishHttpService.CreateFromKeys(credentials.PublicKey, credentials.SecretKey, credentials.Username, credentials.Password); + SkyfishHttpHelper skyHelper = new SkyfishHttpHelper(api); - SkyfishVideo video = api.GetVideo(int.Parse(o.VideoId)); + SkyfishMediaItem video = skyHelper.GetVideoByMediaId(int.Parse(o.VideoId)); + string embedUrl = skyHelper.GetEmbedUrlByUniqueMediaId(video.UniqueMediaId); // As thumbnail URLs received from the Skyfish API expire over time, we need to create our own solution to handle thumbnails URLs - VideoThumbnail[] thumbnails = GetThumbnails(video, config, credentials); + VideoThumbnail[] thumbnails = GetThumbnails(video); VideoProviderDetails provider = new VideoProviderDetails(Alias, Name); - SkyfishVideoDetails details = new SkyfishVideoDetails(video, thumbnails); + SkyfishVideoDetails details = new SkyfishVideoDetails(video, thumbnails, embedUrl); SkyfishEmbedOptions embed = new SkyfishEmbedOptions(details); @@ -98,17 +99,22 @@ internal bool IsValidName(string videoName) { return videoName != null && Regex.IsMatch(videoName, "^([0-9_]+)$"); } - internal VideoThumbnail[] GetThumbnails(SkyfishVideo video, SkyfishConfig config, SkyfishCredentials credentials) { + internal VideoThumbnail[] GetThumbnails(SkyfishMediaItem video) { List thumbnails = new List(); - if (video.ThumbnailUrl.HasValue()) thumbnails.Add(new VideoThumbnail(0, 0, video.ThumbnailUrl)); - if (video.ThumbnailUrlSsl.HasValue()) thumbnails.Add(new VideoThumbnail(0, 0, video.ThumbnailUrlSsl)); + thumbnails.Add(GetThumbnail(video)); return thumbnails.ToArray(); } + private VideoThumbnail GetThumbnail(SkyfishMediaItem video) { + string url = $"/umbraco/api/Skyfish/GetThumbnail?uniqueMediaId={video.UniqueMediaId}"; + + return new VideoThumbnail(0, 0, url); + } + } } \ No newline at end of file