diff options
Diffstat (limited to 'Emby.Server.Implementations/Library')
3 files changed, 84 insertions, 1 deletions
diff --git a/Emby.Server.Implementations/Library/Resolvers/Audio/AudioResolver.cs b/Emby.Server.Implementations/Library/Resolvers/Audio/AudioResolver.cs index d8805355a..2e3d81474 100644 --- a/Emby.Server.Implementations/Library/Resolvers/Audio/AudioResolver.cs +++ b/Emby.Server.Implementations/Library/Resolvers/Audio/AudioResolver.cs @@ -2,6 +2,7 @@ using MediaBrowser.Controller.Resolvers; using MediaBrowser.Model.Entities; using System; +using MediaBrowser.Controller.Entities; namespace Emby.Server.Implementations.Library.Resolvers.Audio { @@ -59,6 +60,11 @@ namespace Emby.Server.Implementations.Library.Resolvers.Audio { return new MediaBrowser.Controller.Entities.Audio.Audio(); } + + if (string.Equals(collectionType, CollectionType.Books, StringComparison.OrdinalIgnoreCase)) + { + return new AudioBook(); + } } } diff --git a/Emby.Server.Implementations/Library/Resolvers/Books/BookResolver.cs b/Emby.Server.Implementations/Library/Resolvers/Books/BookResolver.cs new file mode 100644 index 000000000..4852c3c6a --- /dev/null +++ b/Emby.Server.Implementations/Library/Resolvers/Books/BookResolver.cs @@ -0,0 +1,77 @@ +using System; +using System.IO; +using System.Linq; +using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Library; +using MediaBrowser.Model.Entities; + +namespace Emby.Server.Implementations.Library.Resolvers.Books +{ + /// <summary> + /// + /// </summary> + public class BookResolver : MediaBrowser.Controller.Resolvers.ItemResolver<Book> + { + private readonly string[] _validExtensions = {".pdf", ".epub", ".mobi", ".cbr", ".cbz"}; + + /// <summary> + /// + /// </summary> + /// <param name="args"></param> + /// <returns></returns> + protected override Book Resolve(ItemResolveArgs args) + { + var collectionType = args.GetCollectionType(); + + // Only process items that are in a collection folder containing books + if (!string.Equals(collectionType, CollectionType.Books, StringComparison.OrdinalIgnoreCase)) + return null; + + if (args.IsDirectory) + { + return GetBook(args); + } + + var extension = Path.GetExtension(args.Path); + + if (extension != null && _validExtensions.Contains(extension, StringComparer.OrdinalIgnoreCase)) + { + // It's a book + return new Book + { + Path = args.Path, + IsInMixedFolder = true + }; + } + + return null; + } + + /// <summary> + /// + /// </summary> + /// <param name="args"></param> + /// <returns></returns> + private Book GetBook(ItemResolveArgs args) + { + var bookFiles = args.FileSystemChildren.Where(f => + { + var fileExtension = Path.GetExtension(f.FullName) ?? + string.Empty; + + return _validExtensions.Contains(fileExtension, + StringComparer + .OrdinalIgnoreCase); + }).ToList(); + + // Don't return a Book if there is more (or less) than one document in the directory + if (bookFiles.Count != 1) + return null; + + return new Book + { + Path = bookFiles[0].FullName + }; + } + } +} diff --git a/Emby.Server.Implementations/Library/UserDataManager.cs b/Emby.Server.Implementations/Library/UserDataManager.cs index c8dde1287..f4a30fc00 100644 --- a/Emby.Server.Implementations/Library/UserDataManager.cs +++ b/Emby.Server.Implementations/Library/UserDataManager.cs @@ -274,7 +274,7 @@ namespace Emby.Server.Implementations.Library positionTicks = 0; data.Played = false; } - if (item is Audio) + if (!item.SupportsPositionTicksResume) { positionTicks = 0; } |
