aboutsummaryrefslogtreecommitdiff
path: root/Emby.Server.Implementations/Library/Resolvers/Books/BookResolver.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Emby.Server.Implementations/Library/Resolvers/Books/BookResolver.cs')
-rw-r--r--Emby.Server.Implementations/Library/Resolvers/Books/BookResolver.cs77
1 files changed, 77 insertions, 0 deletions
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
+ };
+ }
+ }
+}