< Summary - Jellyfin

Information
Class: MediaBrowser.LocalMetadata.BaseXmlProvider<T>
Assembly: MediaBrowser.LocalMetadata
File(s): /srv/git/jellyfin/MediaBrowser.LocalMetadata/BaseXmlProvider.cs
Line coverage
8%
Covered lines: 2
Uncovered lines: 22
Coverable lines: 24
Total lines: 109
Line coverage: 8.3%
Branch coverage
0%
Covered branches: 0
Total branches: 6
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%11100%
get_Name()100%210%
get_Order()100%210%
GetMetadata(...)0%620%
HasChanged(...)0%2040%

File(s)

/srv/git/jellyfin/MediaBrowser.LocalMetadata/BaseXmlProvider.cs

#LineLine coverage
 1using System.IO;
 2using System.Threading;
 3using System.Threading.Tasks;
 4using MediaBrowser.Controller.Entities;
 5using MediaBrowser.Controller.Providers;
 6using MediaBrowser.Model.IO;
 7
 8namespace MediaBrowser.LocalMetadata
 9{
 10    /// <summary>
 11    /// The BaseXmlProvider.
 12    /// </summary>
 13    /// <typeparam name="T">Type of provider.</typeparam>
 14    public abstract class BaseXmlProvider<T> : ILocalMetadataProvider<T>, IHasItemChangeMonitor, IHasOrder
 15        where T : BaseItem, new()
 16    {
 17        /// <summary>
 18        /// Initializes a new instance of the <see cref="BaseXmlProvider{T}"/> class.
 19        /// </summary>
 20        /// <param name="fileSystem">Instance of the <see cref="IFileSystem"/> interface.</param>
 21        protected BaseXmlProvider(IFileSystem fileSystem)
 22        {
 4423            this.FileSystem = fileSystem;
 4424        }
 25
 26        /// <inheritdoc />
 027        public string Name => XmlProviderUtils.Name;
 28
 29        /// After Nfo
 30        /// <inheritdoc />
 031        public virtual int Order => 1;
 32
 33        /// <summary>
 34        /// Gets the IFileSystem.
 35        /// </summary>
 36        protected IFileSystem FileSystem { get; }
 37
 38        /// <summary>
 39        /// Gets metadata for item.
 40        /// </summary>
 41        /// <param name="info">The item info.</param>
 42        /// <param name="directoryService">Instance of the <see cref="IDirectoryService"/> interface.</param>
 43        /// <param name="cancellationToken">The cancellation token.</param>
 44        /// <returns>The metadata for item.</returns>
 45        public Task<MetadataResult<T>> GetMetadata(
 46            ItemInfo info,
 47            IDirectoryService directoryService,
 48            CancellationToken cancellationToken)
 49        {
 050            var result = new MetadataResult<T>();
 51
 052            var file = GetXmlFile(info, directoryService);
 53
 054            if (file is null)
 55            {
 056                return Task.FromResult(result);
 57            }
 58
 059            var path = file.FullName;
 60
 61            try
 62            {
 063                result.Item = new T();
 64
 065                Fetch(result, path, cancellationToken);
 066                result.HasMetadata = true;
 067            }
 068            catch (FileNotFoundException)
 69            {
 070                result.HasMetadata = false;
 071            }
 072            catch (IOException)
 73            {
 074                result.HasMetadata = false;
 075            }
 76
 077            return Task.FromResult(result);
 78        }
 79
 80        /// <summary>
 81        /// Get metadata from path.
 82        /// </summary>
 83        /// <param name="result">Resulting metadata.</param>
 84        /// <param name="path">The path.</param>
 85        /// <param name="cancellationToken">The cancellation token.</param>
 86        protected abstract void Fetch(MetadataResult<T> result, string path, CancellationToken cancellationToken);
 87
 88        /// <summary>
 89        /// Get metadata from xml file.
 90        /// </summary>
 91        /// <param name="info">Item inf.</param>
 92        /// <param name="directoryService">Instance of the <see cref="IDirectoryService"/> interface.</param>
 93        /// <returns>The file system metadata.</returns>
 94        protected abstract FileSystemMetadata? GetXmlFile(ItemInfo info, IDirectoryService directoryService);
 95
 96        /// <inheritdoc />
 97        public bool HasChanged(BaseItem item, IDirectoryService directoryService)
 98        {
 099            var file = GetXmlFile(new ItemInfo(item), directoryService);
 100
 0101            if (file is null)
 102            {
 0103                return false;
 104            }
 105
 0106            return file.Exists && FileSystem.GetLastWriteTimeUtc(file) > item.DateLastSaved;
 107        }
 108    }
 109}