diff options
| -rw-r--r-- | MediaBrowser.Api/Library/LibraryStructureService.cs | 25 | ||||
| -rw-r--r-- | MediaBrowser.Server.Implementations/IO/LibraryMonitor.cs | 41 |
2 files changed, 54 insertions, 12 deletions
diff --git a/MediaBrowser.Api/Library/LibraryStructureService.cs b/MediaBrowser.Api/Library/LibraryStructureService.cs index 56b0e01c3..d0d56c07b 100644 --- a/MediaBrowser.Api/Library/LibraryStructureService.cs +++ b/MediaBrowser.Api/Library/LibraryStructureService.cs @@ -167,6 +167,16 @@ namespace MediaBrowser.Api.Library public bool RefreshLibrary { get; set; } } + [Route("/Library/Changes/Path", "POST")] + public class ReportChangedPath : IReturnVoid + { + /// <summary> + /// Gets or sets the name. + /// </summary> + /// <value>The name.</value> + public string Path { get; set; } + } + /// <summary> /// Class LibraryStructureService /// </summary> @@ -215,6 +225,21 @@ namespace MediaBrowser.Api.Library } /// <summary> + /// Posts the specified request. + /// </summary> + /// <param name="request">The request.</param> + /// <exception cref="System.ArgumentException">Please supply a Path</exception> + public void Post(ReportChangedPath request) + { + if (string.IsNullOrEmpty(request.Path)) + { + throw new ArgumentException("Please supply a Path"); + } + + _libraryMonitor.ReportFileSystemChanged(request.Path); + } + + /// <summary> /// Gets the specified request. /// </summary> /// <param name="request">The request.</param> diff --git a/MediaBrowser.Server.Implementations/IO/LibraryMonitor.cs b/MediaBrowser.Server.Implementations/IO/LibraryMonitor.cs index e09e66765..bf90dc40e 100644 --- a/MediaBrowser.Server.Implementations/IO/LibraryMonitor.cs +++ b/MediaBrowser.Server.Implementations/IO/LibraryMonitor.cs @@ -1,4 +1,5 @@ -using MediaBrowser.Common.ScheduledTasks; +using MediaBrowser.Common.IO; +using MediaBrowser.Common.ScheduledTasks; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Library; @@ -72,11 +73,21 @@ namespace MediaBrowser.Server.Implementations.IO public void ReportFileSystemChangeBeginning(string path) { + if (string.IsNullOrEmpty(path)) + { + throw new ArgumentNullException("path"); + } + TemporarilyIgnore(path); } public void ReportFileSystemChangeComplete(string path, bool refreshPath) { + if (string.IsNullOrEmpty(path)) + { + throw new ArgumentNullException("path"); + } + RemoveTempIgnore(path); if (refreshPath) @@ -100,6 +111,8 @@ namespace MediaBrowser.Server.Implementations.IO private ILibraryManager LibraryManager { get; set; } private IServerConfigurationManager ConfigurationManager { get; set; } + private IFileSystem _fileSystem; + /// <summary> /// Initializes a new instance of the <see cref="LibraryMonitor" /> class. /// </summary> @@ -350,6 +363,11 @@ namespace MediaBrowser.Server.Implementations.IO public void ReportFileSystemChanged(string path) { + if (string.IsNullOrEmpty(path)) + { + throw new ArgumentNullException("path"); + } + var filename = Path.GetFileName(path); // Ignore certain files @@ -369,30 +387,29 @@ namespace MediaBrowser.Server.Implementations.IO return true; } - // Go up a level - var parent = Path.GetDirectoryName(i); - if (string.Equals(parent, path, StringComparison.OrdinalIgnoreCase)) + if (_fileSystem.ContainsSubPath(i, path)) { Logger.Debug("Ignoring change to {0}", path); return true; } - // Go up another level + // Go up a level + var parent = Path.GetDirectoryName(i); if (!string.IsNullOrEmpty(parent)) { - parent = Path.GetDirectoryName(i); if (string.Equals(parent, path, StringComparison.OrdinalIgnoreCase)) { Logger.Debug("Ignoring change to {0}", path); return true; } - } - if (i.StartsWith(path, StringComparison.OrdinalIgnoreCase) || - path.StartsWith(i, StringComparison.OrdinalIgnoreCase)) - { - Logger.Debug("Ignoring change to {0}", path); - return true; + // Go up another level + parent = Path.GetDirectoryName(i); + if (string.Equals(parent, path, StringComparison.OrdinalIgnoreCase)) + { + Logger.Debug("Ignoring change to {0}", path); + return true; + } } return false; |
