diff options
Diffstat (limited to 'MediaBrowser.Api/Social/SharingService.cs')
| -rw-r--r-- | MediaBrowser.Api/Social/SharingService.cs | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/MediaBrowser.Api/Social/SharingService.cs b/MediaBrowser.Api/Social/SharingService.cs new file mode 100644 index 000000000..93540f8ca --- /dev/null +++ b/MediaBrowser.Api/Social/SharingService.cs @@ -0,0 +1,138 @@ +using MediaBrowser.Common.Extensions; +using MediaBrowser.Controller.Dlna; +using MediaBrowser.Controller.Library; +using MediaBrowser.Controller.Net; +using MediaBrowser.Controller.Social; +using MediaBrowser.Model.Entities; +using MediaBrowser.Model.Social; +using ServiceStack; +using System; +using System.IO; +using System.Threading.Tasks; + +namespace MediaBrowser.Api.Social +{ + [Route("/Social/Shares/{Id}", "GET", Summary = "Gets a share")] + [Authenticated] + public class GetSocialShareInfo : IReturn<SocialShareInfo> + { + [ApiMember(Name = "Id", Description = "The id of the item", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")] + public string Id { get; set; } + } + + [Route("/Social/Shares/Public/{Id}", "GET", Summary = "Gets a share")] + public class GetPublicSocialShareInfo : IReturn<SocialShareInfo> + { + [ApiMember(Name = "Id", Description = "The id of the item", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")] + public string Id { get; set; } + } + + [Route("/Social/Shares/Public/{Id}/Image", "GET", Summary = "Gets a share")] + public class GetShareImage + { + [ApiMember(Name = "Id", Description = "The id of the item", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")] + public string Id { get; set; } + } + + [Route("/Social/Shares", "POST", Summary = "Creates a share")] + [Authenticated] + public class CreateShare : IReturn<SocialShareInfo> + { + [ApiMember(Name = "ItemId", Description = "The id of the item", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "POST")] + public string ItemId { get; set; } + + [ApiMember(Name = "UserId", Description = "The user id", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "POST")] + public string UserId { get; set; } + } + + [Route("/Social/Shares/{Id}", "DELETE", Summary = "Deletes a share")] + [Authenticated] + public class DeleteShare : IReturnVoid + { + [ApiMember(Name = "Id", Description = "The id of the item", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "DELETE")] + public string Id { get; set; } + } + + public class SharingService : BaseApiService + { + private readonly ISharingManager _sharingManager; + private readonly ILibraryManager _libraryManager; + private readonly IDlnaManager _dlnaManager; + + public SharingService(ISharingManager sharingManager, IDlnaManager dlnaManager, ILibraryManager libraryManager) + { + _sharingManager = sharingManager; + _dlnaManager = dlnaManager; + _libraryManager = libraryManager; + } + + public object Get(GetSocialShareInfo request) + { + var info = _sharingManager.GetShareInfo(request.Id); + + return ToOptimizedResult(info); + } + + public object Get(GetPublicSocialShareInfo request) + { + var info = _sharingManager.GetShareInfo(request.Id); + + if (info.ExpirationDate >= DateTime.UtcNow) + { + throw new ResourceNotFoundException(); + } + + return ToOptimizedResult(info); + } + + public async Task<object> Post(CreateShare request) + { + var info = await _sharingManager.CreateShare(request.ItemId, request.UserId).ConfigureAwait(false); + + return ToOptimizedResult(info); + } + + public void Delete(DeleteShare request) + { + var task = _sharingManager.DeleteShare(request.Id); + Task.WaitAll(task); + } + + public object Get(GetShareImage request) + { + var share = _sharingManager.GetShareInfo(request.Id); + + if (share == null) + { + throw new ResourceNotFoundException(); + } + if (share.ExpirationDate >= DateTime.UtcNow) + { + throw new ResourceNotFoundException(); + } + + var item = _libraryManager.GetItemById(share.ItemId); + + var image = item.GetImageInfo(ImageType.Primary, 0); + + if (image != null) + { + return ToStaticFileResult(image.Path); + } + + // Grab a dlna icon if nothing else is available + using (var response = _dlnaManager.GetIcon("logo240.jpg")) + { + using (var ms = new MemoryStream()) + { + response.Stream.CopyTo(ms); + + ms.Position = 0; + var bytes = ms.ToArray(); + return ResultFactory.GetResult(bytes, "image/" + response.Format.ToString().ToLower()); + } + } + + } + } +} |
