< Summary - Jellyfin

Information
Class: MediaBrowser.XbmcMetadata.Savers.AlbumNfoSaver
Assembly: MediaBrowser.XbmcMetadata
File(s): /srv/git/jellyfin/MediaBrowser.XbmcMetadata/Savers/AlbumNfoSaver.cs
Line coverage
13%
Covered lines: 3
Uncovered lines: 20
Coverable lines: 23
Total lines: 111
Line coverage: 13%
Branch coverage
18%
Covered branches: 3
Total branches: 16
Branch coverage: 18.7%
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%
GetLocalSavePath(...)100%210%
GetRootElementName(...)100%210%
IsEnabledFor(...)75%44100%
WriteCustomElements(...)0%2040%
AddTracks(...)0%7280%

File(s)

/srv/git/jellyfin/MediaBrowser.XbmcMetadata/Savers/AlbumNfoSaver.cs

#LineLine coverage
 1using System;
 2using System.Collections.Generic;
 3using System.Globalization;
 4using System.IO;
 5using System.Linq;
 6using System.Xml;
 7using MediaBrowser.Controller.Configuration;
 8using MediaBrowser.Controller.Entities;
 9using MediaBrowser.Controller.Entities.Audio;
 10using MediaBrowser.Controller.Library;
 11using MediaBrowser.Model.IO;
 12using Microsoft.Extensions.Logging;
 13
 14namespace MediaBrowser.XbmcMetadata.Savers
 15{
 16    /// <summary>
 17    /// Nfo saver for albums.
 18    /// </summary>
 19    public class AlbumNfoSaver : BaseNfoSaver
 20    {
 21        /// <summary>
 22        /// Initializes a new instance of the <see cref="AlbumNfoSaver"/> class.
 23        /// </summary>
 24        /// <param name="fileSystem">The file system.</param>
 25        /// <param name="configurationManager">the server configuration manager.</param>
 26        /// <param name="libraryManager">The library manager.</param>
 27        /// <param name="userManager">The user manager.</param>
 28        /// <param name="userDataManager">The user data manager.</param>
 29        /// <param name="logger">The logger.</param>
 30        public AlbumNfoSaver(
 31            IFileSystem fileSystem,
 32            IServerConfigurationManager configurationManager,
 33            ILibraryManager libraryManager,
 34            IUserManager userManager,
 35            IUserDataManager userDataManager,
 36            ILogger<AlbumNfoSaver> logger)
 2237            : base(fileSystem, configurationManager, libraryManager, userManager, userDataManager, logger)
 38        {
 2239        }
 40
 41        /// <inheritdoc />
 42        protected override string GetLocalSavePath(BaseItem item)
 043            => Path.Combine(item.Path, "album.nfo");
 44
 45        /// <inheritdoc />
 46        protected override string GetRootElementName(BaseItem item)
 047            => "album";
 48
 49        /// <inheritdoc />
 50        public override bool IsEnabledFor(BaseItem item, ItemUpdateType updateType)
 10451            => item.SupportsLocalMetadata && item is MusicAlbum && updateType >= MinimumUpdateType;
 52
 53        /// <inheritdoc />
 54        protected override void WriteCustomElements(BaseItem item, XmlWriter writer)
 55        {
 056            var album = (MusicAlbum)item;
 57
 058            foreach (var artist in album.Artists)
 59            {
 060                writer.WriteElementString("artist", artist);
 61            }
 62
 063            foreach (var artist in album.AlbumArtists)
 64            {
 065                writer.WriteElementString("albumartist", artist);
 66            }
 67
 068            AddTracks(album.Tracks, writer);
 069        }
 70
 71        private void AddTracks(IEnumerable<BaseItem> tracks, XmlWriter writer)
 72        {
 073            foreach (var track in tracks.OrderBy(i => i.ParentIndexNumber ?? 0).ThenBy(i => i.IndexNumber ?? 0))
 74            {
 075                writer.WriteStartElement("track");
 76
 077                if (track.IndexNumber.HasValue)
 78                {
 079                    writer.WriteElementString("position", track.IndexNumber.Value.ToString(CultureInfo.InvariantCulture)
 80                }
 81
 082                if (!string.IsNullOrEmpty(track.Name))
 83                {
 084                    writer.WriteElementString("title", track.Name);
 85                }
 86
 087                if (track.RunTimeTicks.HasValue)
 88                {
 089                    var time = TimeSpan.FromTicks(track.RunTimeTicks.Value).ToString(@"mm\:ss", CultureInfo.InvariantCul
 90
 091                    writer.WriteElementString("duration", time);
 92                }
 93
 094                writer.WriteEndElement();
 95            }
 096        }
 97
 98        /// <inheritdoc />
 99        protected override IEnumerable<string> GetTagsUsed(BaseItem item)
 100        {
 101            foreach (var tag in base.GetTagsUsed(item))
 102            {
 103                yield return tag;
 104            }
 105
 106            yield return "track";
 107            yield return "artist";
 108            yield return "albumartist";
 109        }
 110    }
 111}