mirror of
https://github.com/jellyfin/jellyfin.git
synced 2025-07-09 03:04:24 -04:00
Merge pull request #2491 from mark-monteiro/2425-fix-playlists
Fix Playlist Deletion
This commit is contained in:
commit
464039043d
@ -1,43 +1,35 @@
|
|||||||
#pragma warning disable CS1591
|
|
||||||
#pragma warning disable SA1600
|
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using MediaBrowser.Controller.Library;
|
using MediaBrowser.Controller.Library;
|
||||||
using MediaBrowser.Controller.Playlists;
|
using MediaBrowser.Controller.Playlists;
|
||||||
|
using MediaBrowser.Controller.Resolvers;
|
||||||
|
using MediaBrowser.LocalMetadata.Savers;
|
||||||
using MediaBrowser.Model.Entities;
|
using MediaBrowser.Model.Entities;
|
||||||
|
|
||||||
namespace Emby.Server.Implementations.Library.Resolvers
|
namespace Emby.Server.Implementations.Library.Resolvers
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// <see cref="IItemResolver"/> for <see cref="Playlist"/> library items.
|
||||||
|
/// </summary>
|
||||||
public class PlaylistResolver : FolderResolver<Playlist>
|
public class PlaylistResolver : FolderResolver<Playlist>
|
||||||
{
|
{
|
||||||
private string[] SupportedCollectionTypes = new string[] {
|
private string[] _musicPlaylistCollectionTypes = new string[] {
|
||||||
|
|
||||||
string.Empty,
|
string.Empty,
|
||||||
CollectionType.Music
|
CollectionType.Music
|
||||||
};
|
};
|
||||||
|
|
||||||
/// <summary>
|
/// <inheritdoc/>
|
||||||
/// Resolves the specified args.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="args">The args.</param>
|
|
||||||
/// <returns>BoxSet.</returns>
|
|
||||||
protected override Playlist Resolve(ItemResolveArgs args)
|
protected override Playlist Resolve(ItemResolveArgs args)
|
||||||
{
|
{
|
||||||
// It's a boxset if all of the following conditions are met:
|
|
||||||
// Is a Directory
|
|
||||||
// Contains [playlist] in the path
|
|
||||||
if (args.IsDirectory)
|
if (args.IsDirectory)
|
||||||
{
|
{
|
||||||
var filename = Path.GetFileName(args.Path);
|
// It's a boxset if the path is a directory with [playlist] in it's the name
|
||||||
|
// TODO: Should this use Path.GetDirectoryName() instead?
|
||||||
if (string.IsNullOrEmpty(filename))
|
bool isBoxSet = Path.GetFileName(args.Path)
|
||||||
{
|
?.Contains("[playlist]", StringComparison.OrdinalIgnoreCase)
|
||||||
return null;
|
?? false;
|
||||||
}
|
if (isBoxSet)
|
||||||
|
|
||||||
if (filename.IndexOf("[playlist]", StringComparison.OrdinalIgnoreCase) != -1)
|
|
||||||
{
|
{
|
||||||
return new Playlist
|
return new Playlist
|
||||||
{
|
{
|
||||||
@ -45,21 +37,32 @@ namespace Emby.Server.Implementations.Library.Resolvers
|
|||||||
Name = Path.GetFileName(args.Path).Replace("[playlist]", string.Empty, StringComparison.OrdinalIgnoreCase).Trim()
|
Name = Path.GetFileName(args.Path).Replace("[playlist]", string.Empty, StringComparison.OrdinalIgnoreCase).Trim()
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else
|
// It's a directory-based playlist if the directory contains a playlist file
|
||||||
{
|
var filePaths = Directory.EnumerateFiles(args.Path);
|
||||||
if (SupportedCollectionTypes.Contains(args.CollectionType ?? string.Empty, StringComparer.OrdinalIgnoreCase))
|
if (filePaths.Any(f => f.EndsWith(PlaylistXmlSaver.DefaultPlaylistFilename, StringComparison.OrdinalIgnoreCase)))
|
||||||
{
|
{
|
||||||
var extension = Path.GetExtension(args.Path);
|
return new Playlist
|
||||||
if (Playlist.SupportedExtensions.Contains(extension ?? string.Empty, StringComparer.OrdinalIgnoreCase))
|
|
||||||
{
|
{
|
||||||
return new Playlist
|
Path = args.Path,
|
||||||
{
|
Name = Path.GetFileName(args.Path)
|
||||||
Path = args.Path,
|
};
|
||||||
Name = Path.GetFileNameWithoutExtension(args.Path),
|
}
|
||||||
IsInMixedFolder = true
|
}
|
||||||
};
|
|
||||||
}
|
// Check if this is a music playlist file
|
||||||
|
// It should have the correct collection type and a supported file extension
|
||||||
|
else if (_musicPlaylistCollectionTypes.Contains(args.CollectionType ?? string.Empty, StringComparer.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
var extension = Path.GetExtension(args.Path);
|
||||||
|
if (Playlist.SupportedExtensions.Contains(extension ?? string.Empty, StringComparer.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
return new Playlist
|
||||||
|
{
|
||||||
|
Path = args.Path,
|
||||||
|
Name = Path.GetFileNameWithoutExtension(args.Path),
|
||||||
|
IsInMixedFolder = true
|
||||||
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11,6 +11,11 @@ namespace MediaBrowser.LocalMetadata.Savers
|
|||||||
{
|
{
|
||||||
public class PlaylistXmlSaver : BaseXmlSaver
|
public class PlaylistXmlSaver : BaseXmlSaver
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// The default file name to use when creating a new playlist.
|
||||||
|
/// </summary>
|
||||||
|
public const string DefaultPlaylistFilename = "playlist.xml";
|
||||||
|
|
||||||
public override bool IsEnabledFor(BaseItem item, ItemUpdateType updateType)
|
public override bool IsEnabledFor(BaseItem item, ItemUpdateType updateType)
|
||||||
{
|
{
|
||||||
if (!item.SupportsLocalMetadata)
|
if (!item.SupportsLocalMetadata)
|
||||||
@ -45,7 +50,7 @@ namespace MediaBrowser.LocalMetadata.Savers
|
|||||||
return Path.ChangeExtension(itemPath, ".xml");
|
return Path.ChangeExtension(itemPath, ".xml");
|
||||||
}
|
}
|
||||||
|
|
||||||
return Path.Combine(path, "playlist.xml");
|
return Path.Combine(path, DefaultPlaylistFilename);
|
||||||
}
|
}
|
||||||
|
|
||||||
public PlaylistXmlSaver(IFileSystem fileSystem, IServerConfigurationManager configurationManager, ILibraryManager libraryManager, IUserManager userManager, IUserDataManager userDataManager, ILogger logger)
|
public PlaylistXmlSaver(IFileSystem fileSystem, IServerConfigurationManager configurationManager, ILibraryManager libraryManager, IUserManager userManager, IUserDataManager userDataManager, ILogger logger)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user