/Horizon/MainForm.cs |
@@ -81,6 +81,8 @@ |
|
private WatsonTcpServer _horizonNetworkShare; |
|
private NotifyFilters _fileSystemWatchersNotifyFilters = NotifyFilters.LastWrite | NotifyFilters.Attributes; |
|
public bool MemorySinkEnabled { get; set; } |
|
#endregion |
@@ -161,7 +163,39 @@ |
#endregion |
|
#region Event Handlers |
private void attributesToolStripMenuItem_CheckStateChanged(object sender, EventArgs e) |
{ |
var toolStripMenuItem = (ToolStripMenuItem)sender; |
|
var text = toolStripMenuItem.Text; |
var state = toolStripMenuItem.CheckState; |
|
foreach (var flag in Enum.GetNames(typeof(NotifyFilters))) |
{ |
if (string.Equals(flag, text, StringComparison.OrdinalIgnoreCase)) |
{ |
if (Enum.TryParse<NotifyFilters>(flag, true, out var setting)) |
{ |
switch (state) |
{ |
case CheckState.Checked: |
_fileSystemWatchersNotifyFilters = _fileSystemWatchersNotifyFilters | setting; |
break; |
case CheckState.Unchecked: |
_fileSystemWatchersNotifyFilters = _fileSystemWatchersNotifyFilters & ~setting; |
break; |
} |
|
} |
} |
} |
|
Configuration.NotifyFilters = _fileSystemWatchersNotifyFilters; |
|
ChangedConfigurationContinuation.Schedule(TimeSpan.FromSeconds(1), |
async () => { await SaveConfiguration(); }, _cancellationToken); |
} |
|
private void networkSharingToolStripMenuItem_CheckStateChanged(object sender, EventArgs e) |
{ |
var toolStripMenuItem = (ToolStripMenuItem)sender; |
@@ -430,7 +464,16 @@ |
windowToolStripMenuItem.Checked = Configuration.CaptureMode == CaptureMode.Window; |
screenToolStripMenuItem.Checked = Configuration.CaptureMode == CaptureMode.Screen; |
networkSharingToolStripMenuItem.Checked = Configuration.NetworkSharing; |
foreach (var item in attributesToolStripMenuItem.DropDownItems.OfType<ToolStripMenuItem>()) |
{ |
var text = item.Text; |
|
if (Enum.TryParse<NotifyFilters>(text, out var notifyFilter)) |
{ |
item.Checked = Configuration.NotifyFilters.HasFlag(notifyFilter); |
} |
} |
|
// Load all tracked folders. |
var folders = await LoadFolders(); |
|
@@ -536,37 +579,43 @@ |
{ |
return; |
} |
|
await _changedFilesLock.WaitAsync(_cancellationToken); |
try |
#pragma warning disable CS4014 |
Task.Run(async () => |
#pragma warning restore CS4014 |
{ |
var delay = global::TrackedFolders.Constants.Delay; |
var color = Color.Empty; |
await _changedFilesLock.WaitAsync(_cancellationToken); |
try |
{ |
var delay = global::TrackedFolders.Constants.Delay; |
var color = Color.Empty; |
|
if (TrackedFolders.TryGet(e.FullPath, out var folder)) |
if (TrackedFolders.TryGet(e.FullPath, out var folder)) |
{ |
delay = folder.Delay; |
color = folder.Color; |
} |
|
if (_changedFiles.Contains(e.FullPath)) |
{ |
_changedFilesContinuation.Schedule(delay, |
async () => await TakeSnapshots(color, _cancellationToken), _cancellationToken); |
return; |
} |
|
_changedFiles.Add(e.FullPath); |
|
_changedFilesContinuation.Schedule(delay, |
async () => await TakeSnapshots(color, _cancellationToken), _cancellationToken); |
} |
catch (Exception exception) |
{ |
delay = folder.Delay; |
color = folder.Color; |
Log.Error(exception, "Could not process changed files."); |
} |
|
if (_changedFiles.Contains(e.FullPath)) |
finally |
{ |
_changedFilesContinuation.Schedule(delay, async () => await TakeSnapshots(color, _cancellationToken), _cancellationToken); |
return; |
_changedFilesLock.Release(); |
} |
|
_changedFiles.Add(e.FullPath); |
|
_changedFilesContinuation.Schedule(delay, async () => await TakeSnapshots(color, _cancellationToken), _cancellationToken); |
} |
catch (Exception exception) |
{ |
Log.Error(exception, "Could not process changed files."); |
} |
finally |
{ |
_changedFilesLock.Release(); |
} |
}, CancellationToken.None); |
} |
|
private void AboutToolStripMenuItem_Click(object sender, EventArgs e) |
@@ -830,7 +879,7 @@ |
var fileSystemWatcher = new FileSystemWatcher |
{ |
IncludeSubdirectories = recursive, |
NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.Attributes, |
NotifyFilter = _fileSystemWatchersNotifyFilters, |
Path = folder, |
EnableRaisingEvents = true |
}; |