aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Controller
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Controller')
-rw-r--r--MediaBrowser.Controller/Events/ItemResolveEventArgs.cs55
-rw-r--r--MediaBrowser.Controller/FFMpeg/FFProbeResult.cs3
-rw-r--r--MediaBrowser.Controller/IO/FileData.cs24
-rw-r--r--MediaBrowser.Controller/Library/ItemController.cs36
-rw-r--r--MediaBrowser.Controller/Providers/FolderProviderFromXml.cs4
-rw-r--r--MediaBrowser.Controller/Providers/ImageFromMediaLocationProvider.cs14
-rw-r--r--MediaBrowser.Controller/Providers/LocalTrailerProvider.cs2
-rw-r--r--MediaBrowser.Controller/Resolvers/BaseItemResolver.cs8
-rw-r--r--MediaBrowser.Controller/Resolvers/VideoResolver.cs4
-rw-r--r--MediaBrowser.Controller/Xml/XmlExtensions.cs1
10 files changed, 78 insertions, 73 deletions
diff --git a/MediaBrowser.Controller/Events/ItemResolveEventArgs.cs b/MediaBrowser.Controller/Events/ItemResolveEventArgs.cs
index ecb164455d..18df73b51d 100644
--- a/MediaBrowser.Controller/Events/ItemResolveEventArgs.cs
+++ b/MediaBrowser.Controller/Events/ItemResolveEventArgs.cs
@@ -1,5 +1,4 @@
using System;
-using System.Collections.Generic;
using System.IO;
using MediaBrowser.Controller.IO;
using MediaBrowser.Model.Entities;
@@ -11,55 +10,55 @@ namespace MediaBrowser.Controller.Events
/// </summary>
public class ItemResolveEventArgs : PreBeginResolveEventArgs
{
- public KeyValuePair<string, WIN32_FIND_DATA>[] FileSystemChildren { get; set; }
+ public LazyFileInfo[] FileSystemChildren { get; set; }
- public KeyValuePair<string, WIN32_FIND_DATA>? GetFileSystemEntry(string path, bool? isFolder)
+ public LazyFileInfo? GetFileSystemEntry(string path, bool? isFolder = null)
{
for (int i = 0; i < FileSystemChildren.Length; i++)
{
- KeyValuePair<string, WIN32_FIND_DATA> entry = FileSystemChildren[i];
+ LazyFileInfo entry = FileSystemChildren[i];
- if (isFolder.HasValue)
+ if (entry.Path.Equals(path, StringComparison.OrdinalIgnoreCase))
{
- if (isFolder.Value && !entry.Value.IsDirectory)
+ if (isFolder.HasValue)
{
- continue;
+ if (isFolder.Value && !entry.FileInfo.IsDirectory)
+ {
+ continue;
+ }
+ else if (!isFolder.Value && entry.FileInfo.IsDirectory)
+ {
+ continue;
+ }
}
- else if (!isFolder.Value && entry.Value.IsDirectory)
- {
- continue;
- }
- }
-
- if (entry.Key.Equals(path, StringComparison.OrdinalIgnoreCase))
- {
+
return entry;
}
}
return null;
}
-
- public KeyValuePair<string, WIN32_FIND_DATA>? GetFileSystemEntryByName(string name, bool? isFolder)
+
+ public LazyFileInfo? GetFileSystemEntryByName(string name, bool? isFolder = null)
{
for (int i = 0; i < FileSystemChildren.Length; i++)
{
- KeyValuePair<string, WIN32_FIND_DATA> entry = FileSystemChildren[i];
+ LazyFileInfo entry = FileSystemChildren[i];
- if (isFolder.HasValue)
+ if (System.IO.Path.GetFileName(entry.Path).Equals(name, StringComparison.OrdinalIgnoreCase))
{
- if (isFolder.Value && !entry.Value.IsDirectory)
- {
- continue;
- }
- else if (!isFolder.Value && entry.Value.IsDirectory)
+ if (isFolder.HasValue)
{
- continue;
+ if (isFolder.Value && !entry.FileInfo.IsDirectory)
+ {
+ continue;
+ }
+ else if (!isFolder.Value && entry.FileInfo.IsDirectory)
+ {
+ continue;
+ }
}
- }
- if (System.IO.Path.GetFileName(entry.Key).Equals(name, StringComparison.OrdinalIgnoreCase))
- {
return entry;
}
}
diff --git a/MediaBrowser.Controller/FFMpeg/FFProbeResult.cs b/MediaBrowser.Controller/FFMpeg/FFProbeResult.cs
index 3bb7dce131..c7ad1c3ed8 100644
--- a/MediaBrowser.Controller/FFMpeg/FFProbeResult.cs
+++ b/MediaBrowser.Controller/FFMpeg/FFProbeResult.cs
@@ -1,5 +1,4 @@
-using System;
-using System.Collections.Generic;
+using System.Collections.Generic;
namespace MediaBrowser.Controller.FFMpeg
{
diff --git a/MediaBrowser.Controller/IO/FileData.cs b/MediaBrowser.Controller/IO/FileData.cs
index 843a7e8fe3..92b4a69861 100644
--- a/MediaBrowser.Controller/IO/FileData.cs
+++ b/MediaBrowser.Controller/IO/FileData.cs
@@ -93,4 +93,28 @@ namespace MediaBrowser.Controller.IO
}
}
+ public struct LazyFileInfo
+ {
+ public string Path { get; set; }
+
+ private WIN32_FIND_DATA? _FileInfo { get; set; }
+
+ public WIN32_FIND_DATA FileInfo
+ {
+ get
+ {
+ if (_FileInfo == null)
+ {
+ _FileInfo = FileData.GetFileData(Path);
+ }
+
+ return _FileInfo.Value;
+ }
+ set
+ {
+ _FileInfo = value;
+ }
+ }
+ }
+
}
diff --git a/MediaBrowser.Controller/Library/ItemController.cs b/MediaBrowser.Controller/Library/ItemController.cs
index 208be8f0d5..e99fa94a0c 100644
--- a/MediaBrowser.Controller/Library/ItemController.cs
+++ b/MediaBrowser.Controller/Library/ItemController.cs
@@ -84,7 +84,7 @@ namespace MediaBrowser.Controller.Library
return null;
}
- KeyValuePair<string, WIN32_FIND_DATA>[] fileSystemChildren;
+ LazyFileInfo[] fileSystemChildren;
// Gather child folder and files
if (fileData.IsDirectory)
@@ -96,7 +96,7 @@ namespace MediaBrowser.Controller.Library
}
else
{
- fileSystemChildren = new KeyValuePair<string, WIN32_FIND_DATA>[] { };
+ fileSystemChildren = new LazyFileInfo[] { };
}
ItemResolveEventArgs args = new ItemResolveEventArgs()
@@ -135,7 +135,7 @@ namespace MediaBrowser.Controller.Library
/// <summary>
/// Finds child BaseItems for a given Folder
/// </summary>
- private async Task AttachChildren(Folder folder, KeyValuePair<string, WIN32_FIND_DATA>[] fileSystemChildren)
+ private async Task AttachChildren(Folder folder, LazyFileInfo[] fileSystemChildren)
{
int count = fileSystemChildren.Length;
@@ -145,7 +145,7 @@ namespace MediaBrowser.Controller.Library
{
var child = fileSystemChildren[i];
- tasks[i] = GetItem(child.Key, folder, child.Value);
+ tasks[i] = GetItem(child.Path, folder, child.FileInfo);
}
BaseItem[] baseItemChildren = await Task<BaseItem>.WhenAll(tasks).ConfigureAwait(false);
@@ -161,23 +161,19 @@ namespace MediaBrowser.Controller.Library
/// <summary>
/// Transforms shortcuts into their actual paths
/// </summary>
- private KeyValuePair<string, WIN32_FIND_DATA>[] FilterChildFileSystemEntries(KeyValuePair<string, WIN32_FIND_DATA>[] fileSystemChildren, bool flattenShortcuts)
+ private LazyFileInfo[] FilterChildFileSystemEntries(LazyFileInfo[] fileSystemChildren, bool flattenShortcuts)
{
- KeyValuePair<string, WIN32_FIND_DATA>[] returnArray = new KeyValuePair<string, WIN32_FIND_DATA>[fileSystemChildren.Length];
- List<KeyValuePair<string, WIN32_FIND_DATA>> resolvedShortcuts = new List<KeyValuePair<string, WIN32_FIND_DATA>>();
+ LazyFileInfo[] returnArray = new LazyFileInfo[fileSystemChildren.Length];
+ List<LazyFileInfo> resolvedShortcuts = new List<LazyFileInfo>();
for (int i = 0; i < fileSystemChildren.Length; i++)
{
- KeyValuePair<string, WIN32_FIND_DATA> file = fileSystemChildren[i];
+ LazyFileInfo file = fileSystemChildren[i];
- if (file.Value.IsDirectory)
- {
- returnArray[i] = file;
- }
// If it's a shortcut, resolve it
- else if (Shortcut.IsShortcut(file.Key))
+ if (Shortcut.IsShortcut(file.Path))
{
- string newPath = Shortcut.ResolveShortcut(file.Key);
+ string newPath = Shortcut.ResolveShortcut(file.Path);
WIN32_FIND_DATA newPathData = FileData.GetFileData(newPath);
// Find out if the shortcut is pointing to a directory or file
@@ -188,18 +184,18 @@ namespace MediaBrowser.Controller.Library
if (flattenShortcuts)
{
returnArray[i] = file;
- KeyValuePair<string, WIN32_FIND_DATA>[] newChildren = ConvertFileSystemEntries(Directory.GetFileSystemEntries(newPath, "*", SearchOption.TopDirectoryOnly));
+ LazyFileInfo[] newChildren = ConvertFileSystemEntries(Directory.GetFileSystemEntries(newPath, "*", SearchOption.TopDirectoryOnly));
resolvedShortcuts.AddRange(FilterChildFileSystemEntries(newChildren, false));
}
else
{
- returnArray[i] = new KeyValuePair<string, WIN32_FIND_DATA>(newPath, newPathData);
+ returnArray[i] = new LazyFileInfo() { Path = newPath, FileInfo = newPathData };
}
}
else
{
- returnArray[i] = new KeyValuePair<string, WIN32_FIND_DATA>(newPath, newPathData);
+ returnArray[i] = new LazyFileInfo() { Path = newPath, FileInfo = newPathData };
}
}
else
@@ -309,15 +305,15 @@ namespace MediaBrowser.Controller.Library
return item;
}
- private KeyValuePair<string, WIN32_FIND_DATA>[] ConvertFileSystemEntries(string[] files)
+ private LazyFileInfo[] ConvertFileSystemEntries(string[] files)
{
- KeyValuePair<string, WIN32_FIND_DATA>[] items = new KeyValuePair<string, WIN32_FIND_DATA>[files.Length];
+ LazyFileInfo[] items = new LazyFileInfo[files.Length];
for (int i = 0; i < files.Length; i++)
{
string file = files[i];
- items[i] = new KeyValuePair<string, WIN32_FIND_DATA>(file, FileData.GetFileData(file));
+ items[i] = new LazyFileInfo() { Path = file };
}
return items;
diff --git a/MediaBrowser.Controller/Providers/FolderProviderFromXml.cs b/MediaBrowser.Controller/Providers/FolderProviderFromXml.cs
index b23e8908d4..cba41f780a 100644
--- a/MediaBrowser.Controller/Providers/FolderProviderFromXml.cs
+++ b/MediaBrowser.Controller/Providers/FolderProviderFromXml.cs
@@ -21,11 +21,11 @@ namespace MediaBrowser.Controller.Providers
public async override Task Fetch(BaseEntity item, ItemResolveEventArgs args)
{
- var metadataFile = args.GetFileSystemEntryByName("folder.xml", false);
+ var metadataFile = args.GetFileSystemEntryByName("folder.xml");
if (metadataFile.HasValue)
{
- await Task.Run(() => { new FolderXmlParser().Fetch(item as Folder, metadataFile.Value.Key); }).ConfigureAwait(false);
+ await Task.Run(() => { new FolderXmlParser().Fetch(item as Folder, metadataFile.Value.Path); }).ConfigureAwait(false);
}
}
}
diff --git a/MediaBrowser.Controller/Providers/ImageFromMediaLocationProvider.cs b/MediaBrowser.Controller/Providers/ImageFromMediaLocationProvider.cs
index 7785a558a4..8e5364893c 100644
--- a/MediaBrowser.Controller/Providers/ImageFromMediaLocationProvider.cs
+++ b/MediaBrowser.Controller/Providers/ImageFromMediaLocationProvider.cs
@@ -50,12 +50,7 @@ namespace MediaBrowser.Controller.Providers
{
var file = args.FileSystemChildren[i];
- if (file.Value.IsDirectory)
- {
- continue;
- }
-
- string filePath = file.Key;
+ string filePath = file.Path;
string ext = Path.GetExtension(filePath);
@@ -85,12 +80,7 @@ namespace MediaBrowser.Controller.Providers
{
var file = args.FileSystemChildren[i];
- if (file.Value.IsDirectory)
- {
- continue;
- }
-
- string filePath = file.Key;
+ string filePath = file.Path;
string ext = Path.GetExtension(filePath);
diff --git a/MediaBrowser.Controller/Providers/LocalTrailerProvider.cs b/MediaBrowser.Controller/Providers/LocalTrailerProvider.cs
index 2476df7cd9..c023edb9af 100644
--- a/MediaBrowser.Controller/Providers/LocalTrailerProvider.cs
+++ b/MediaBrowser.Controller/Providers/LocalTrailerProvider.cs
@@ -28,7 +28,7 @@ namespace MediaBrowser.Controller.Providers
if (trailerPath.HasValue)
{
- string[] allFiles = Directory.GetFileSystemEntries(trailerPath.Value.Key, "*", SearchOption.TopDirectoryOnly);
+ string[] allFiles = Directory.GetFileSystemEntries(trailerPath.Value.Path, "*", SearchOption.TopDirectoryOnly);
List<Video> localTrailers = new List<Video>();
diff --git a/MediaBrowser.Controller/Resolvers/BaseItemResolver.cs b/MediaBrowser.Controller/Resolvers/BaseItemResolver.cs
index de967daa94..e91f5a6e8d 100644
--- a/MediaBrowser.Controller/Resolvers/BaseItemResolver.cs
+++ b/MediaBrowser.Controller/Resolvers/BaseItemResolver.cs
@@ -1,10 +1,8 @@
using System;
using System.IO;
-using System.Threading.Tasks;
using MediaBrowser.Controller.Events;
-using MediaBrowser.Model.Entities;
using MediaBrowser.Controller.IO;
-using System.Collections.Generic;
+using MediaBrowser.Model.Entities;
namespace MediaBrowser.Controller.Resolvers
{
@@ -88,11 +86,11 @@ namespace MediaBrowser.Controller.Resolvers
// See if a different path came out of the resolver than what went in
if (!args.Path.Equals(item.Path, StringComparison.OrdinalIgnoreCase))
{
- KeyValuePair<string, WIN32_FIND_DATA>? childData = args.GetFileSystemEntry(item.Path, null);
+ LazyFileInfo? childData = args.GetFileSystemEntry(item.Path);
if (childData != null)
{
- fileData = childData.Value.Value;
+ fileData = childData.Value.FileInfo;
}
else
{
diff --git a/MediaBrowser.Controller/Resolvers/VideoResolver.cs b/MediaBrowser.Controller/Resolvers/VideoResolver.cs
index 1342e8c1bc..bd676cb871 100644
--- a/MediaBrowser.Controller/Resolvers/VideoResolver.cs
+++ b/MediaBrowser.Controller/Resolvers/VideoResolver.cs
@@ -53,12 +53,12 @@ namespace MediaBrowser.Controller.Resolvers
{
var folder = args.FileSystemChildren[i];
- if (!folder.Value.IsDirectory)
+ if (!folder.FileInfo.IsDirectory)
{
continue;
}
- item = ResolveFromFolderName(folder.Key);
+ item = ResolveFromFolderName(folder.Path);
if (item != null)
{
diff --git a/MediaBrowser.Controller/Xml/XmlExtensions.cs b/MediaBrowser.Controller/Xml/XmlExtensions.cs
index 77a0c2baa6..e706baa614 100644
--- a/MediaBrowser.Controller/Xml/XmlExtensions.cs
+++ b/MediaBrowser.Controller/Xml/XmlExtensions.cs
@@ -1,5 +1,4 @@
using System.Globalization;
-using System.Threading.Tasks;
using System.Xml;
namespace MediaBrowser.Controller.Xml