| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 | using System.IO;using System.Threading.Tasks;using System.Xml;using Jellyfin.Data.Enums;using MediaBrowser.Controller.Configuration;using MediaBrowser.Controller.Entities;using MediaBrowser.Controller.Library;using MediaBrowser.Controller.Playlists;using MediaBrowser.Model.IO;using Microsoft.Extensions.Logging;namespace MediaBrowser.LocalMetadata.Savers{    /// <summary>    /// Playlist xml saver.    /// </summary>    public class PlaylistXmlSaver : BaseXmlSaver    {        /// <summary>        /// The default file name to use when creating a new playlist.        /// </summary>        public const string DefaultPlaylistFilename = "playlist.xml";        /// <summary>        /// Initializes a new instance of the <see cref="PlaylistXmlSaver"/> class.        /// </summary>        /// <param name="fileSystem">Instance of the <see cref="IFileSystem"/> interface.</param>        /// <param name="configurationManager">Instance of the <see cref="IServerConfigurationManager"/> interface.</param>        /// <param name="libraryManager">Instance of the <see cref="ILibraryManager"/> interface.</param>        /// <param name="logger">Instance of the <see cref="ILogger{PlaylistXmlSaver}"/> interface.</param>        public PlaylistXmlSaver(IFileSystem fileSystem, IServerConfigurationManager configurationManager, ILibraryManager libraryManager, ILogger<PlaylistXmlSaver> logger)            : base(fileSystem, configurationManager, libraryManager, logger)        {        }        /// <inheritdoc />        public override bool IsEnabledFor(BaseItem item, ItemUpdateType updateType)        {            if (!item.SupportsLocalMetadata)            {                return false;            }            return item is Playlist && updateType >= ItemUpdateType.MetadataImport;        }        /// <inheritdoc />        protected override Task WriteCustomElementsAsync(BaseItem item, XmlWriter writer)        {            var game = (Playlist)item;            if (game.PlaylistMediaType == MediaType.Unknown)            {                return Task.CompletedTask;            }            return writer.WriteElementStringAsync(null, "PlaylistMediaType", null, game.PlaylistMediaType.ToString());        }        /// <inheritdoc />        protected override string GetLocalSavePath(BaseItem item)        {            return GetSavePath(item.Path);        }        /// <summary>        /// Get the save path.        /// </summary>        /// <param name="itemPath">The item path.</param>        /// <returns>The save path.</returns>        public static string GetSavePath(string itemPath)        {            var path = itemPath;            if (Playlist.IsPlaylistFile(path))            {                return Path.ChangeExtension(itemPath, ".xml");            }            return Path.Combine(path, DefaultPlaylistFilename);        }    }}
 |