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());
- }
- }
- }
- }
- }
|