aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Server.Implementations/Library/LibraryManager.cs
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2014-12-02 22:13:03 -0500
committerLuke Pulverenti <luke.pulverenti@gmail.com>2014-12-02 22:13:03 -0500
commit56f6b0335ce40aeab275f1038b96a8ecc642f18f (patch)
tree92d8a4c47dec99f1be6e1aca0bb59bd64b48911b /MediaBrowser.Server.Implementations/Library/LibraryManager.cs
parentc48458f215bd5ea1da3ef3636f801a4652e77aa0 (diff)
updated nuget
Diffstat (limited to 'MediaBrowser.Server.Implementations/Library/LibraryManager.cs')
-rw-r--r--MediaBrowser.Server.Implementations/Library/LibraryManager.cs150
1 files changed, 65 insertions, 85 deletions
diff --git a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs
index dfddae24d..9c3255833 100644
--- a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs
+++ b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs
@@ -17,6 +17,7 @@ using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
using MediaBrowser.Naming.Audio;
using MediaBrowser.Naming.Common;
+using MediaBrowser.Naming.IO;
using MediaBrowser.Naming.Video;
using MediaBrowser.Server.Implementations.Library.Resolvers.TV;
using MediaBrowser.Server.Implementations.Library.Validators;
@@ -1700,82 +1701,40 @@ namespace MediaBrowser.Server.Implementations.Library
};
}
- public IEnumerable<FileSystemInfo> GetAdditionalParts(string file,
- VideoType type,
- IEnumerable<FileSystemInfo> files)
- {
- var resolver = new StackResolver(new ExtendedNamingOptions(), new Naming.Logging.NullLogger());
-
- StackResult result;
- List<FileSystemInfo> filteredFiles;
-
- if (type == VideoType.BluRay || type == VideoType.Dvd)
- {
- filteredFiles = files.Where(i => (i.Attributes & FileAttributes.Directory) == FileAttributes.Directory)
- .ToList();
-
- result = resolver.ResolveDirectories(filteredFiles.Select(i => i.FullName));
- }
- else
- {
- filteredFiles = files.Where(i => (i.Attributes & FileAttributes.Directory) != FileAttributes.Directory)
- .ToList();
-
- result = resolver.ResolveFiles(filteredFiles.Select(i => i.FullName));
- }
-
- var stack = result.Stacks
- .FirstOrDefault(i => i.Files.Contains(file, StringComparer.OrdinalIgnoreCase));
-
- if (stack != null)
- {
- return stack.Files.Where(i => !string.Equals(i, file, StringComparison.OrdinalIgnoreCase))
- .Select(i => filteredFiles.FirstOrDefault(f => string.Equals(i, f.FullName, StringComparison.OrdinalIgnoreCase)))
- .Where(i => i != null);
- }
-
- return new List<FileSystemInfo>();
- }
-
- public IEnumerable<Trailer> FindTrailers(BaseItem owner, List<FileSystemInfo> fileSystemChildren, IDirectoryService directoryService)
+ public IEnumerable<Video> FindTrailers(BaseItem owner, List<FileSystemInfo> fileSystemChildren, IDirectoryService directoryService)
{
var files = fileSystemChildren.OfType<DirectoryInfo>()
.Where(i => string.Equals(i.Name, BaseItem.TrailerFolderName, StringComparison.OrdinalIgnoreCase))
.SelectMany(i => i.EnumerateFiles("*", SearchOption.TopDirectoryOnly))
.ToList();
- var extraTypes = new List<ExtraType> { ExtraType.Trailer };
- var suffixes = BaseItem.ExtraSuffixes.Where(i => extraTypes.Contains(i.Value))
- .Select(i => i.Key)
- .ToList();
+ var videoListResolver = new VideoListResolver(new ExtendedNamingOptions(), new Naming.Logging.NullLogger());
- files.AddRange(fileSystemChildren.OfType<FileInfo>()
- .Where(i =>
- {
- var nameEithoutExtension = _fileSystem.GetFileNameWithoutExtension(i);
+ var videos = videoListResolver.Resolve(fileSystemChildren.Select(i => new PortableFileInfo
+ {
+ FullName = i.FullName,
+ Type = GetFileType(i)
- if (!suffixes.Any(s => nameEithoutExtension.EndsWith(s, StringComparison.OrdinalIgnoreCase)))
- {
- return false;
- }
+ }).ToList());
- return !string.Equals(owner.Path, i.FullName, StringComparison.OrdinalIgnoreCase);
- }));
+ var currentVideo = videos.FirstOrDefault(i => string.Equals(owner.Path, i.Files.First().Path, StringComparison.OrdinalIgnoreCase));
- return ResolvePaths<Trailer>(files, directoryService, null).Select(video =>
+ if (currentVideo != null)
+ {
+ files.AddRange(currentVideo.Extras.Where(i => string.Equals(i.ExtraType, "trailer", StringComparison.OrdinalIgnoreCase)).Select(i => new FileInfo(i.Path)));
+ }
+
+ return ResolvePaths<Video>(files, directoryService, null).Select(video =>
{
// Try to retrieve it from the db. If we don't find it, use the resolved version
- var dbItem = GetItemById(video.Id) as Trailer;
+ var dbItem = GetItemById(video.Id) as Video;
if (dbItem != null)
{
video = dbItem;
}
- if (video != null)
- {
- video.ExtraType = ExtraType.Trailer;
- }
+ video.ExtraType = ExtraType.Trailer;
return video;
@@ -1783,6 +1742,16 @@ namespace MediaBrowser.Server.Implementations.Library
}).OrderBy(i => i.Path).ToList();
}
+ private FileInfoType GetFileType(FileSystemInfo info)
+ {
+ if ((info.Attributes & FileAttributes.Directory) == FileAttributes.Directory)
+ {
+ return FileInfoType.Directory;
+ }
+
+ return FileInfoType.File;
+ }
+
public IEnumerable<Video> FindExtras(BaseItem owner, List<FileSystemInfo> fileSystemChildren, IDirectoryService directoryService)
{
var files = fileSystemChildren.OfType<DirectoryInfo>()
@@ -1790,23 +1759,21 @@ namespace MediaBrowser.Server.Implementations.Library
.SelectMany(i => i.EnumerateFiles("*", SearchOption.TopDirectoryOnly))
.ToList();
- var extraTypes = new List<ExtraType> { ExtraType.BehindTheScenes, ExtraType.DeletedScene, ExtraType.Interview, ExtraType.Sample, ExtraType.Scene, ExtraType.Clip };
- var suffixes = BaseItem.ExtraSuffixes.Where(i => extraTypes.Contains(i.Value))
- .Select(i => i.Key)
- .ToList();
+ var videoListResolver = new VideoListResolver(new ExtendedNamingOptions(), new Naming.Logging.NullLogger());
- files.AddRange(fileSystemChildren.OfType<FileInfo>()
- .Where(i =>
- {
- var nameEithoutExtension = _fileSystem.GetFileNameWithoutExtension(i);
+ var videos = videoListResolver.Resolve(fileSystemChildren.Select(i => new PortableFileInfo
+ {
+ FullName = i.FullName,
+ Type = GetFileType(i)
- if (!suffixes.Any(s => nameEithoutExtension.EndsWith(s, StringComparison.OrdinalIgnoreCase)))
- {
- return false;
- }
+ }).ToList());
- return !string.Equals(owner.Path, i.FullName, StringComparison.OrdinalIgnoreCase);
- }));
+ var currentVideo = videos.FirstOrDefault(i => string.Equals(owner.Path, i.Files.First().Path, StringComparison.OrdinalIgnoreCase));
+
+ if (currentVideo != null)
+ {
+ files.AddRange(currentVideo.Extras.Where(i => !string.Equals(i.ExtraType, "trailer", StringComparison.OrdinalIgnoreCase)).Select(i => new FileInfo(i.Path)));
+ }
return ResolvePaths<Video>(files, directoryService, null).Select(video =>
{
@@ -1818,10 +1785,7 @@ namespace MediaBrowser.Server.Implementations.Library
video = dbItem;
}
- if (video != null)
- {
- SetExtraTypeFromFilename(video);
- }
+ SetExtraTypeFromFilename(video);
return video;
@@ -1831,18 +1795,34 @@ namespace MediaBrowser.Server.Implementations.Library
private void SetExtraTypeFromFilename(Video item)
{
- var name = System.IO.Path.GetFileNameWithoutExtension(item.Path) ?? string.Empty;
+ var resolver = new ExtraResolver(new ExtendedNamingOptions(), new Naming.Logging.NullLogger());
- foreach (var suffix in BaseItem.ExtraSuffixes)
+ var result = resolver.GetExtraInfo(item.Path);
+
+ if (string.Equals(result.ExtraType, "deletedscene", StringComparison.OrdinalIgnoreCase))
{
- if (name.EndsWith(suffix.Key, StringComparison.OrdinalIgnoreCase))
- {
- item.ExtraType = suffix.Value;
- return;
- }
+ item.ExtraType = ExtraType.DeletedScene;
+ }
+ else if (string.Equals(result.ExtraType, "behindthescenes", StringComparison.OrdinalIgnoreCase))
+ {
+ item.ExtraType = ExtraType.BehindTheScenes;
+ }
+ else if (string.Equals(result.ExtraType, "interview", StringComparison.OrdinalIgnoreCase))
+ {
+ item.ExtraType = ExtraType.Interview;
+ }
+ else if (string.Equals(result.ExtraType, "scene", StringComparison.OrdinalIgnoreCase))
+ {
+ item.ExtraType = ExtraType.Scene;
+ }
+ else if (string.Equals(result.ExtraType, "sample", StringComparison.OrdinalIgnoreCase))
+ {
+ item.ExtraType = ExtraType.Sample;
+ }
+ else
+ {
+ item.ExtraType = ExtraType.Clip;
}
-
- item.ExtraType = ExtraType.Clip;
}
}
}