aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Controller/Providers/DirectoryService.cs
diff options
context:
space:
mode:
authorAndrew Rabert <ar@nullsum.net>2018-12-27 18:27:57 -0500
committerAndrew Rabert <ar@nullsum.net>2018-12-27 18:27:57 -0500
commita86b71899ec52c44ddc6c3018e8cc5e9d7ff4d62 (patch)
treea74f6ea4a8abfa1664a605d31d48bc38245ccf58 /MediaBrowser.Controller/Providers/DirectoryService.cs
parent9bac3ac616b01f67db98381feb09d34ebe821f9a (diff)
Add GPL modules
Diffstat (limited to 'MediaBrowser.Controller/Providers/DirectoryService.cs')
-rw-r--r--MediaBrowser.Controller/Providers/DirectoryService.cs106
1 files changed, 106 insertions, 0 deletions
diff --git a/MediaBrowser.Controller/Providers/DirectoryService.cs b/MediaBrowser.Controller/Providers/DirectoryService.cs
new file mode 100644
index 000000000..65192671e
--- /dev/null
+++ b/MediaBrowser.Controller/Providers/DirectoryService.cs
@@ -0,0 +1,106 @@
+using MediaBrowser.Model.Logging;
+using System;
+using System.Collections.Concurrent;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.IO;
+
+namespace MediaBrowser.Controller.Providers
+{
+ public class DirectoryService : IDirectoryService
+ {
+ private readonly ILogger _logger;
+ private readonly IFileSystem _fileSystem;
+
+ private readonly Dictionary<string, FileSystemMetadata[]> _cache = new Dictionary<string, FileSystemMetadata[]>(StringComparer.OrdinalIgnoreCase);
+
+ private readonly Dictionary<string, FileSystemMetadata> _fileCache = new Dictionary<string, FileSystemMetadata>(StringComparer.OrdinalIgnoreCase);
+
+ private readonly Dictionary<string, List<string>> _filePathCache = new Dictionary<string, List<string>>(StringComparer.OrdinalIgnoreCase);
+
+ public DirectoryService(ILogger logger, IFileSystem fileSystem)
+ {
+ _logger = logger;
+ _fileSystem = fileSystem;
+ }
+
+ public DirectoryService(IFileSystem fileSystem)
+ : this(new NullLogger(), fileSystem)
+ {
+ }
+
+ public FileSystemMetadata[] GetFileSystemEntries(string path)
+ {
+ FileSystemMetadata[] entries;
+
+ if (!_cache.TryGetValue(path, out entries))
+ {
+ //_logger.Debug("Getting files for " + path);
+
+ entries = _fileSystem.GetFileSystemEntries(path).ToArray();
+
+ //_cache.TryAdd(path, entries);
+ _cache[path] = entries;
+ }
+
+ return entries;
+ }
+
+ public List<FileSystemMetadata> GetFiles(string path)
+ {
+ var list = new List<FileSystemMetadata>();
+ var items = GetFileSystemEntries(path);
+ foreach (var item in items)
+ {
+ if (!item.IsDirectory)
+ {
+ list.Add(item);
+ }
+ }
+ return list;
+ }
+
+ public FileSystemMetadata GetFile(string path)
+ {
+ FileSystemMetadata file;
+ if (!_fileCache.TryGetValue(path, out file))
+ {
+ file = _fileSystem.GetFileInfo(path);
+
+ if (file != null && file.Exists)
+ {
+ //_fileCache.TryAdd(path, file);
+ _fileCache[path] = file;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ return file;
+ //return _fileSystem.GetFileInfo(path);
+ }
+
+ public List<string> GetFilePaths(string path)
+ {
+ return GetFilePaths(path, false);
+ }
+
+ public List<string> GetFilePaths(string path, bool clearCache)
+ {
+ List<string> result;
+ if (clearCache || !_filePathCache.TryGetValue(path, out result))
+ {
+ result = _fileSystem.GetFilePaths(path).ToList();
+
+ _filePathCache[path] = result;
+ }
+
+ return result;
+ }
+
+ }
+}