Horizon – Rev 11
?pathlinks?
using Horizon.Database;
using Serilog;
using System;
using System.Collections.Generic;
using System.Data.SQLite;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using TrackedFolders;
namespace Horizon
{
public static class Extensions
{
public static async Task TakeSnapshot(string path, TrackedFolders.TrackedFolders trackedFolders, SnapshotDatabase snapshotDatabase, CancellationToken cancellationToken)
{
foreach (var file in Directory.EnumerateFiles(path, "*.*", SearchOption.TopDirectoryOnly))
{
try
{
var fileName = Path.GetFileName(file);
var directory = Path.GetDirectoryName(fileName);
var color = Color.Empty;
if (trackedFolders.TryGet(directory, out var folder))
{
color = folder.Color;
}
await snapshotDatabase.CreateSnapshotAsync(fileName, file, color, cancellationToken);
}
catch (SQLiteException exception)
{
if (exception.ResultCode == SQLiteErrorCode.Constraint)
{
Log.Information(exception, "Snapshot already exists.");
}
}
catch (Exception exception)
{
Log.Error(exception, $"Could not take snapshot of file: {file}");
}
}
}
public static async Task TakeSnapshotRecursive(string path, TrackedFolders.TrackedFolders trackedFolders, SnapshotDatabase snapshotDatabase, CancellationToken cancellationToken)
{
foreach (var file in Directory.EnumerateFiles(path, "*.*", SearchOption.AllDirectories))
{
try
{
var fileName = Path.GetFileName(file);
var directory = Path.GetDirectoryName(fileName);
var color = Color.Empty;
if (trackedFolders.TryGet(directory, out var folder))
{
color = folder.Color;
}
await snapshotDatabase.CreateSnapshotAsync(fileName, file, color, cancellationToken);
}
catch (SQLiteException exception)
{
if (exception.ResultCode == SQLiteErrorCode.Constraint)
{
Log.Information(exception, "Snapshot already exists.");
}
}
catch (Exception exception)
{
Log.Error(exception, $"Could not take snapshot of file: {file}");
}
}
}
}
}