< Summary - Jellyfin

Information
Class: Jellyfin.Api.Controllers.ItemRefreshController
Assembly: Jellyfin.Api
File(s): /srv/git/jellyfin/Jellyfin.Api/Controllers/ItemRefreshController.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 26
Coverable lines: 26
Total lines: 90
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 4
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Coverage history

Coverage history 0 25 50 75 100

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%210%
RefreshItem(...)0%2040%

File(s)

/srv/git/jellyfin/Jellyfin.Api/Controllers/ItemRefreshController.cs

#LineLine coverage
 1using System;
 2using System.ComponentModel;
 3using System.ComponentModel.DataAnnotations;
 4using Jellyfin.Api.Constants;
 5using Jellyfin.Api.Extensions;
 6using Jellyfin.Api.Helpers;
 7using MediaBrowser.Common.Api;
 8using MediaBrowser.Controller.Entities;
 9using MediaBrowser.Controller.Library;
 10using MediaBrowser.Controller.Providers;
 11using MediaBrowser.Model.IO;
 12using Microsoft.AspNetCore.Authorization;
 13using Microsoft.AspNetCore.Http;
 14using Microsoft.AspNetCore.Mvc;
 15
 16namespace Jellyfin.Api.Controllers;
 17
 18/// <summary>
 19/// Item Refresh Controller.
 20/// </summary>
 21[Route("Items")]
 22[Authorize(Policy = Policies.RequiresElevation)]
 23public class ItemRefreshController : BaseJellyfinApiController
 24{
 25    private readonly ILibraryManager _libraryManager;
 26    private readonly IProviderManager _providerManager;
 27    private readonly IFileSystem _fileSystem;
 28
 29    /// <summary>
 30    /// Initializes a new instance of the <see cref="ItemRefreshController"/> class.
 31    /// </summary>
 32    /// <param name="libraryManager">Instance of <see cref="ILibraryManager"/> interface.</param>
 33    /// <param name="providerManager">Instance of <see cref="IProviderManager"/> interface.</param>
 34    /// <param name="fileSystem">Instance of <see cref="IFileSystem"/> interface.</param>
 035    public ItemRefreshController(
 036        ILibraryManager libraryManager,
 037        IProviderManager providerManager,
 038        IFileSystem fileSystem)
 39    {
 040        _libraryManager = libraryManager;
 041        _providerManager = providerManager;
 042        _fileSystem = fileSystem;
 043    }
 44
 45    /// <summary>
 46    /// Refreshes metadata for an item.
 47    /// </summary>
 48    /// <param name="itemId">Item id.</param>
 49    /// <param name="metadataRefreshMode">(Optional) Specifies the metadata refresh mode.</param>
 50    /// <param name="imageRefreshMode">(Optional) Specifies the image refresh mode.</param>
 51    /// <param name="replaceAllMetadata">(Optional) Determines if metadata should be replaced. Only applicable if mode i
 52    /// <param name="replaceAllImages">(Optional) Determines if images should be replaced. Only applicable if mode is Fu
 53    /// <response code="204">Item metadata refresh queued.</response>
 54    /// <response code="404">Item to refresh not found.</response>
 55    /// <returns>An <see cref="NoContentResult"/> on success, or a <see cref="NotFoundResult"/> if the item could not be
 56    [HttpPost("{itemId}/Refresh")]
 57    [Description("Refreshes metadata for an item.")]
 58    [ProducesResponseType(StatusCodes.Status204NoContent)]
 59    [ProducesResponseType(StatusCodes.Status404NotFound)]
 60    public ActionResult RefreshItem(
 61        [FromRoute, Required] Guid itemId,
 62        [FromQuery] MetadataRefreshMode metadataRefreshMode = MetadataRefreshMode.None,
 63        [FromQuery] MetadataRefreshMode imageRefreshMode = MetadataRefreshMode.None,
 64        [FromQuery] bool replaceAllMetadata = false,
 65        [FromQuery] bool replaceAllImages = false)
 66    {
 067        var item = _libraryManager.GetItemById<BaseItem>(itemId, User.GetUserId());
 068        if (item is null)
 69        {
 070            return NotFound();
 71        }
 72
 073        var refreshOptions = new MetadataRefreshOptions(new DirectoryService(_fileSystem))
 074        {
 075            MetadataRefreshMode = metadataRefreshMode,
 076            ImageRefreshMode = imageRefreshMode,
 077            ReplaceAllImages = replaceAllImages,
 078            ReplaceAllMetadata = replaceAllMetadata,
 079            ForceSave = metadataRefreshMode == MetadataRefreshMode.FullRefresh
 080                || imageRefreshMode == MetadataRefreshMode.FullRefresh
 081                || replaceAllImages
 082                || replaceAllMetadata,
 083            IsAutomated = false,
 084            RemoveOldMetadata = replaceAllMetadata
 085        };
 86
 087        _providerManager.QueueRefresh(item.Id, refreshOptions, RefreshPriority.High);
 088        return NoContent();
 89    }
 90}