| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179 | using MediaBrowser.Common.Extensions;using MediaBrowser.Controller.Dlna;using MediaBrowser.Controller.Dto;using MediaBrowser.Controller.Library;using MediaBrowser.Controller.Net;using MediaBrowser.Model.Entities;using MediaBrowser.Model.Social;using System;using System.IO;using System.Threading.Tasks;using MediaBrowser.Model.Services;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; }    }    [Route("/Social/Shares/Public/{Id}/Item", "GET", Summary = "Gets a share")]    public class GetSharedLibraryItem    {        [ApiMember(Name = "Id", Description = "The id of the item", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")]        public string Id { get; set; }    }    public class SharingService : BaseApiService    {        private readonly ISharingManager _sharingManager;        private readonly ILibraryManager _libraryManager;        private readonly IDlnaManager _dlnaManager;        private readonly IDtoService _dtoService;        private readonly IHttpResultFactory _resultFactory;        public SharingService(ISharingManager sharingManager, IDlnaManager dlnaManager, ILibraryManager libraryManager, IDtoService dtoService, IHttpResultFactory resultFactory)        {            _sharingManager = sharingManager;            _dlnaManager = dlnaManager;            _libraryManager = libraryManager;            _dtoService = dtoService;            _resultFactory = resultFactory;        }        public object Get(GetSocialShareInfo request)        {            var info = _sharingManager.GetShareInfo(request.Id);            return ToOptimizedResult(info);        }        public object Get(GetSharedLibraryItem request)        {            var info = _sharingManager.GetShareInfo(request.Id);            if (info.ExpirationDate <= DateTime.UtcNow)            {                throw new ResourceNotFoundException();            }            var item = _libraryManager.GetItemById(info.ItemId);            var dto = _dtoService.GetBaseItemDto(item, new DtoOptions());            return ToOptimizedResult(dto);        }        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 async Task<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)            {                if (image.IsLocalFile)                {                    return await _resultFactory.GetStaticFileResult(Request, image.Path).ConfigureAwait(false);                }                try                {                    // Don't fail the request over this                    var updatedImage = await _libraryManager.ConvertImageToLocal(item, image, 0).ConfigureAwait(false);                    return await _resultFactory.GetStaticFileResult(Request, updatedImage.Path).ConfigureAwait(false);                }                catch                {                                    }            }            // 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());                }            }        }    }}
 |