@@ -46,26 +46,24 @@ Partial Public Class Watcher : Inherits ObservableRecipient : Implements IRecipi
4646 End Property
4747
4848
49- Sub New (excludedFiletypes As String (), logger As ILogger( Of Watcher), settingsService As ISettingsService)
49+ Sub New (logger As ILogger( Of Watcher), settingsService As ISettingsService, idleDetector As IdleDetector )
5050 _logger = logger
5151 _settingsService = settingsService
5252 _DataFolder = settingsService.DataFolder
5353 WatcherJSONFile = New IO.FileInfo(IO.Path.Combine(_DataFolder.FullName, "watcher.json" ))
5454
5555 IdleSettings = New IdleSettings
56- _idleDetector = New IdleDetector(IdleSettings)
56+ _idleDetector = idleDetector
5757
5858 WatcherLog.WatcherStarted(logger)
5959 IsActive = True
6060
61-
62- _idleDetector.Start()
6361 AddHandler _idleDetector.IsIdle, _idleHandler
6462 AddHandler _idleDetector.IsNotIdle, AddressOf OnSystemNotIdle
6563 AddHandler WatchedFolders.CollectionChanged, AddressOf WatchedFolders_CollectionChanged
6664
6765
68- BGCompactor = New BackgroundCompactor(excludedFiletypes , _logger)
66+ BGCompactor = New BackgroundCompactor(Array.Empty( Of String ) , _logger)
6967
7068
7169 AddHandler BGCompactor.IsCompactingEvent, Sub (sender, isCompacting)
@@ -83,6 +81,11 @@ Partial Public Class Watcher : Inherits ObservableRecipient : Implements IRecipi
8381 Private Async Sub OnSystemIdle()
8482 _isSystemIdle = True
8583 WatcherLog.SystemIdleDetected(_logger)
84+
85+ 'Skip idle analysis if the background mode is not set to IdleOnly
86+ Dim bgMode = _settingsService.AppSettings.BackgroundModeSelection
87+ If bgMode <> BackgroundMode.IdleOnly Then Return
88+
8689 BGCompactor.ResumeCompacting()
8790
8891 Await RunWatcher( False )
@@ -97,11 +100,13 @@ Partial Public Class Watcher : Inherits ObservableRecipient : Implements IRecipi
97100 Public Async Function RunWatcher( Optional runAll As Boolean = True ) As Task( Of Boolean )
98101 RemoveHandler _idleDetector.IsIdle, _idleHandler
99102
103+ Trace.WriteLine( "Watcher: RunWatcher called" )
100104 For Each watcher In WatchedFolders
101105 watcher.PauseMonitoring()
102106 Next
103107
104108 Try
109+ Dim now = DateTime.Now
105110 If Not IsWatchingEnabled Then Return False
106111 Dim recentThresholdDate As DateTime = DateTime.Now.AddSeconds(-IdleSettings.LastSystemModifiedTimeThresholdSeconds)
107112 If Not runAll AndAlso WatchedFolders.Any( Function (x) x.LastChangedDate > recentThresholdDate) Then Return False
@@ -112,6 +117,7 @@ Partial Public Class Watcher : Inherits ObservableRecipient : Implements IRecipi
112117 If _parseWatchersSemaphore.CurrentCount <> 0 AndAlso (IsBackgroundCompactingEnabled OrElse runAll) Then
113118 Await BackgroundCompact(runAll)
114119 End If
120+ _settingsService.AppSettings.ScheduledBackgroundLastRan = now
115121 Return True
116122 Finally
117123
@@ -129,6 +135,10 @@ Partial Public Class Watcher : Inherits ObservableRecipient : Implements IRecipi
129135 _isSystemIdle = False
130136 WatcherLog.SystemNotIdle(_logger)
131137
138+ 'Skip idle analysis if the background mode is not set to IdleOnly
139+ Dim bgMode = _settingsService.AppSettings.BackgroundModeSelection
140+ If bgMode <> BackgroundMode.IdleOnly Then Return
141+
132142 BGCompactor.PauseCompacting()
133143 End Sub
134144
@@ -464,7 +474,7 @@ Partial Public Class Watcher : Inherits ObservableRecipient : Implements IRecipi
464474 If (message.Sender.GetType() IsNot GetType (Settings)) Then Return
465475
466476 If message.PropertyName = NameOf (Settings.EnableBackgroundWatcher) Then : IsWatchingEnabled = message.NewValue
467- ElseIf message.PropertyName = NameOf (Settings.EnableBackgroundAutoCompression ) Then : IsBackgroundCompactingEnabled = message.NewValue
477+ ElseIf message.PropertyName = NameOf (Settings.BackgroundModeSelection ) Then : IsBackgroundCompactingEnabled = ( CType ( message.NewValue, BackgroundMode) = BackgroundMode.IdleOnly)
468478 End If
469479
470480
0 commit comments