Horizon – Rev 11

Subversion Repositories:
Rev:
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}");
                }
            }
        }
    }
}