diff --git a/MediaBrowser.Controller/Entities/CollectionFolder.cs b/MediaBrowser.Controller/Entities/CollectionFolder.cs
index e120f2e23..597ecf973 100644
--- a/MediaBrowser.Controller/Entities/CollectionFolder.cs
+++ b/MediaBrowser.Controller/Entities/CollectionFolder.cs
@@ -106,6 +106,7 @@ namespace MediaBrowser.Controller.Entities
{
LibraryOptions[path] = options;
+ options.SchemaVersion = 1;
XmlSerializer.SerializeToFile(options, GetLibraryOptionsPath(path));
}
}
diff --git a/MediaBrowser.Model/Configuration/LibraryOptions.cs b/MediaBrowser.Model/Configuration/LibraryOptions.cs
index e15df37c1..3fe694553 100644
--- a/MediaBrowser.Model/Configuration/LibraryOptions.cs
+++ b/MediaBrowser.Model/Configuration/LibraryOptions.cs
@@ -4,10 +4,13 @@
{
public bool EnableArchiveMediaFiles { get; set; }
public bool EnablePhotos { get; set; }
+ public bool EnableRealtimeMonitor { get; set; }
+ public int SchemaVersion { get; set; }
public LibraryOptions()
{
EnablePhotos = true;
+ EnableRealtimeMonitor = true;
}
}
}
diff --git a/MediaBrowser.Server.Implementations/IO/LibraryMonitor.cs b/MediaBrowser.Server.Implementations/IO/LibraryMonitor.cs
index ea9e58ee4..7ed4dc71e 100644
--- a/MediaBrowser.Server.Implementations/IO/LibraryMonitor.cs
+++ b/MediaBrowser.Server.Implementations/IO/LibraryMonitor.cs
@@ -172,27 +172,29 @@ namespace MediaBrowser.Server.Implementations.IO
}
}
- public void Start()
+ private bool IsLibraryMonitorEnabaled(BaseItem item)
{
- if (EnableLibraryMonitor)
+ var options = LibraryManager.GetLibraryOptions(item);
+
+ if (options != null && options.SchemaVersion >= 1)
{
- StartInternal();
+ return options.EnableRealtimeMonitor;
}
+
+ return EnableLibraryMonitor;
}
- ///
- /// Starts this instance.
- ///
- private void StartInternal()
+ public void Start()
{
LibraryManager.ItemAdded += LibraryManager_ItemAdded;
LibraryManager.ItemRemoved += LibraryManager_ItemRemoved;
- var pathsToWatch = new List { LibraryManager.RootFolder.Path };
+ var pathsToWatch = new List { };
var paths = LibraryManager
.RootFolder
.Children
+ .Where(IsLibraryMonitorEnabaled)
.OfType()
.SelectMany(f => f.PhysicalLocations)
.Distinct(StringComparer.OrdinalIgnoreCase)
@@ -213,6 +215,14 @@ namespace MediaBrowser.Server.Implementations.IO
}
}
+ private void StartWatching(BaseItem item)
+ {
+ if (IsLibraryMonitorEnabaled(item))
+ {
+ StartWatchingPath(item.Path);
+ }
+ }
+
///
/// Handles the ItemRemoved event of the LibraryManager control.
///
@@ -235,7 +245,7 @@ namespace MediaBrowser.Server.Implementations.IO
{
if (e.Item.GetParent() is AggregateFolder)
{
- StartWatchingPath(e.Item.Path);
+ StartWatching(e.Item);
}
}
@@ -382,14 +392,6 @@ namespace MediaBrowser.Server.Implementations.IO
Logger.ErrorException("Error in Directory watcher for: " + dw.Path, ex);
DisposeWatcher(dw);
-
- if (ConfigurationManager.Configuration.EnableLibraryMonitor == AutoOnOff.Auto)
- {
- Logger.Info("Disabling realtime monitor to prevent future instability");
-
- ConfigurationManager.Configuration.EnableLibraryMonitor = AutoOnOff.Disabled;
- Stop();
- }
}
///
@@ -420,8 +422,8 @@ namespace MediaBrowser.Server.Implementations.IO
var filename = Path.GetFileName(path);
- var monitorPath = !string.IsNullOrEmpty(filename) &&
- !_alwaysIgnoreFiles.Contains(filename, StringComparer.OrdinalIgnoreCase) &&
+ var monitorPath = !string.IsNullOrEmpty(filename) &&
+ !_alwaysIgnoreFiles.Contains(filename, StringComparer.OrdinalIgnoreCase) &&
!_alwaysIgnoreExtensions.Contains(Path.GetExtension(path) ?? string.Empty, StringComparer.OrdinalIgnoreCase);
// Ignore certain files