Horizon

Subversion Repositories:
Compare Path: Rev
With Path: Rev
?path1? @ 23  →  ?path2? @ 28
/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
};