mirror of
				https://github.com/jellyfin/jellyfin.git
				synced 2025-11-04 03:27:21 -05:00 
			
		
		
		
	Move AttachmentsService to AttachmentsController
This commit is contained in:
		
							parent
							
								
									16401ec7ae
								
							
						
					
					
						commit
						a41d5fcea4
					
				
							
								
								
									
										86
									
								
								Jellyfin.Api/Controllers/AttachmentsController.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								Jellyfin.Api/Controllers/AttachmentsController.cs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,86 @@
 | 
			
		||||
using System;
 | 
			
		||||
using System.Threading;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using MediaBrowser.Common.Extensions;
 | 
			
		||||
using MediaBrowser.Controller.Library;
 | 
			
		||||
using MediaBrowser.Controller.MediaEncoding;
 | 
			
		||||
using MediaBrowser.Controller.Net;
 | 
			
		||||
using Microsoft.AspNetCore.Http;
 | 
			
		||||
using Microsoft.AspNetCore.Mvc;
 | 
			
		||||
 | 
			
		||||
namespace Jellyfin.Api.Controllers
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// Attachments controller.
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    [Route("Videos")]
 | 
			
		||||
    [Authenticated]
 | 
			
		||||
    public class AttachmentsController : Controller
 | 
			
		||||
    {
 | 
			
		||||
        private readonly ILibraryManager _libraryManager;
 | 
			
		||||
        private readonly IAttachmentExtractor _attachmentExtractor;
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Initializes a new instance of the <see cref="AttachmentsController"/> class.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="libraryManager">Instance of the <see cref="ILibraryManager"/> interface.</param>
 | 
			
		||||
        /// <param name="attachmentExtractor">Instance of the <see cref="IAttachmentExtractor"/> interface.</param>
 | 
			
		||||
        public AttachmentsController(
 | 
			
		||||
            ILibraryManager libraryManager,
 | 
			
		||||
            IAttachmentExtractor attachmentExtractor)
 | 
			
		||||
        {
 | 
			
		||||
            _libraryManager = libraryManager;
 | 
			
		||||
            _attachmentExtractor = attachmentExtractor;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Get video attachment.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="videoId">Video ID.</param>
 | 
			
		||||
        /// <param name="mediaSourceId">Media Source ID.</param>
 | 
			
		||||
        /// <param name="index">Attachment Index.</param>
 | 
			
		||||
        /// <returns>Attachment.</returns>
 | 
			
		||||
        [HttpGet("{VideoID}/{MediaSourceID}/Attachments/{Index}")]
 | 
			
		||||
        [Produces("application/octet-stream")]
 | 
			
		||||
        [ProducesResponseType(typeof(FileStreamResult), StatusCodes.Status200OK)]
 | 
			
		||||
        [ProducesResponseType(StatusCodes.Status404NotFound)]
 | 
			
		||||
        [ProducesResponseType(typeof(string), StatusCodes.Status500InternalServerError)]
 | 
			
		||||
        public async Task<IActionResult> GetAttachment(
 | 
			
		||||
            [FromRoute] Guid videoId,
 | 
			
		||||
            [FromRoute] string mediaSourceId,
 | 
			
		||||
            [FromRoute] int index)
 | 
			
		||||
        {
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                var item = _libraryManager.GetItemById(videoId);
 | 
			
		||||
                if (item == null)
 | 
			
		||||
                {
 | 
			
		||||
                    return NotFound();
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                var (attachment, stream) = await _attachmentExtractor.GetAttachment(
 | 
			
		||||
                        item,
 | 
			
		||||
                        mediaSourceId,
 | 
			
		||||
                        index,
 | 
			
		||||
                        CancellationToken.None)
 | 
			
		||||
                    .ConfigureAwait(false);
 | 
			
		||||
 | 
			
		||||
                var contentType = "application/octet-stream";
 | 
			
		||||
                if (string.IsNullOrWhiteSpace(attachment.MimeType))
 | 
			
		||||
                {
 | 
			
		||||
                    contentType = attachment.MimeType;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                return new FileStreamResult(stream, contentType);
 | 
			
		||||
            }
 | 
			
		||||
            catch (ResourceNotFoundException e)
 | 
			
		||||
            {
 | 
			
		||||
                return StatusCode(StatusCodes.Status404NotFound, e.Message);
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception e)
 | 
			
		||||
            {
 | 
			
		||||
                return StatusCode(StatusCodes.Status500InternalServerError, e.Message);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -1,63 +0,0 @@
 | 
			
		||||
using System;
 | 
			
		||||
using System.IO;
 | 
			
		||||
using System.Threading;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using MediaBrowser.Controller.Configuration;
 | 
			
		||||
using MediaBrowser.Controller.Library;
 | 
			
		||||
using MediaBrowser.Controller.MediaEncoding;
 | 
			
		||||
using MediaBrowser.Controller.Net;
 | 
			
		||||
using MediaBrowser.Model.Entities;
 | 
			
		||||
using MediaBrowser.Model.Services;
 | 
			
		||||
using Microsoft.Extensions.Logging;
 | 
			
		||||
 | 
			
		||||
namespace MediaBrowser.Api.Attachments
 | 
			
		||||
{
 | 
			
		||||
    [Route("/Videos/{Id}/{MediaSourceId}/Attachments/{Index}", "GET", Summary = "Gets specified attachment.")]
 | 
			
		||||
    public class GetAttachment
 | 
			
		||||
    {
 | 
			
		||||
        [ApiMember(Name = "Id", Description = "Item Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")]
 | 
			
		||||
        public Guid Id { get; set; }
 | 
			
		||||
 | 
			
		||||
        [ApiMember(Name = "MediaSourceId", Description = "MediaSourceId", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")]
 | 
			
		||||
        public string MediaSourceId { get; set; }
 | 
			
		||||
 | 
			
		||||
        [ApiMember(Name = "Index", Description = "The attachment stream index", IsRequired = true, DataType = "int", ParameterType = "path", Verb = "GET")]
 | 
			
		||||
        public int Index { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public class AttachmentService : BaseApiService
 | 
			
		||||
    {
 | 
			
		||||
        private readonly ILibraryManager _libraryManager;
 | 
			
		||||
        private readonly IAttachmentExtractor _attachmentExtractor;
 | 
			
		||||
 | 
			
		||||
        public AttachmentService(
 | 
			
		||||
            ILogger<AttachmentService> logger,
 | 
			
		||||
            IServerConfigurationManager serverConfigurationManager,
 | 
			
		||||
            IHttpResultFactory httpResultFactory,
 | 
			
		||||
            ILibraryManager libraryManager,
 | 
			
		||||
            IAttachmentExtractor attachmentExtractor)
 | 
			
		||||
            : base(logger, serverConfigurationManager, httpResultFactory)
 | 
			
		||||
        {
 | 
			
		||||
            _libraryManager = libraryManager;
 | 
			
		||||
            _attachmentExtractor = attachmentExtractor;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public async Task<object> Get(GetAttachment request)
 | 
			
		||||
        {
 | 
			
		||||
            var (attachment, attachmentStream) = await GetAttachment(request).ConfigureAwait(false);
 | 
			
		||||
            var mime = string.IsNullOrWhiteSpace(attachment.MimeType) ? "application/octet-stream" : attachment.MimeType;
 | 
			
		||||
 | 
			
		||||
            return ResultFactory.GetResult(Request, attachmentStream, mime);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private Task<(MediaAttachment, Stream)> GetAttachment(GetAttachment request)
 | 
			
		||||
        {
 | 
			
		||||
            var item = _libraryManager.GetItemById(request.Id);
 | 
			
		||||
 | 
			
		||||
            return _attachmentExtractor.GetAttachment(item,
 | 
			
		||||
                request.MediaSourceId,
 | 
			
		||||
                request.Index,
 | 
			
		||||
                CancellationToken.None);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -9,6 +9,10 @@
 | 
			
		||||
    <Compile Include="..\SharedVersion.cs" />
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <Folder Include="Attachments" />
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
 | 
			
		||||
  <PropertyGroup>
 | 
			
		||||
    <TargetFramework>netstandard2.1</TargetFramework>
 | 
			
		||||
    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user