public static IEnumerable <IFolderWatcher> GetFolderWatchers(this FoldersWatcherConfig config) { switch (config.IFolderWatcher) { case "Default": if (string.IsNullOrEmpty(config.FoldersConfigsPath)) { throw new ArgumentException("config.FoldersConfigsPath"); } IEnumerable <FolderConfig> foldersConfigs = config.FoldersConfigsPath.GetFolderConfigs(); switch (config.IFolderEventsHandler) { case "Default": switch (config.IOperationEventFactory) { case "Default": IOperationEventFactory operationEventFactory = new FileSystemOperationEventFactory(); if (config.LoggerTypes == null || config.LoggerTypes.Length == 0) { throw new ArgumentException("config.LoggerTypes"); } IFolderEventsLoggerFactory folderEventsLoggerFactory = new FolderEventsLoggerFactory(); IEnumerable <IFolderEventsHandler> folderEventsHandlers = foldersConfigs.GetFolderEventsHandlers(config.LoggerTypes, folderEventsLoggerFactory, operationEventFactory); IFoldersWatcherFactory foldersWatcherFactory = new FoldersWatcherFactoryViaFileSystemWatcher(); return(foldersWatcherFactory.CreateFoldersWatcher(folderEventsHandlers, foldersConfigs)); default: throw new ArgumentException("config.IOperationEventFactory"); } default: throw new ArgumentException("config.IFolderEventsHandler"); } default: throw new ArgumentException("config.IFolderWatcher"); } //string appid = "DVL_Sync_EventLogger"; //Windows10NotificationsHelper.TryCreateShortcut(appid); }
private static void Main(string[] args) { const string eventsInstructions = "Type Events that Occured in Directory{0}Events are: Delete, Rename, Create, Edit{0}"; const string navigationInstructions = "Use Navigate to Navigate in Folders (Navigate to 'somefilepath' (Case Nonsensitive)){0}"; const string example = "Example: Navigate to 'D:\\DVL_Sync_WatcherTestingFile'//By Default{0}Create newTextDocument.txt"; Console.WriteLine(eventsInstructions + navigationInstructions + example, Environment.NewLine); string currentDirectory = "D:\\DVL_Sync_WatcherTestingFile"; var events = new[] { "create", "edit", "delete", "rename" }; var fileTypes = new[] { "file", "directory" }; var operationEventsList = new List <OperationEvent>(); IFolderEventsLoggerFactory folderEventsLoggerFactory = new FolderEventsLoggerFactory(); while (true) { var command = Console.ReadLine()?.Trim().Split(' '); if (!(command?.Length >= 2)) { continue; } string fCom = command[0].ToLower(); string sCom = command[1].ToLower(); if (fCom == "navigate" && sCom == "to") { string path = string.Join(' ', command.Skip(2)); currentDirectory = path; } else if (events.Contains(fCom)) { OperationEvent opEvent; var filePaths = string.Join(' ', command.Skip(1)).Split(","); bool isRenameEvent = false; switch (fCom) { case "create": opEvent = new CreateOperationEvent(); break; case "edit": opEvent = new EditOperationEvent(); break; case "delete": opEvent = new DeleteOperationEvent(); break; case "rename": opEvent = new RenameOperationEvent() { OldFilePath = Path.Combine(currentDirectory, filePaths[0]), FilePath = Path.Combine(currentDirectory, filePaths[1]) }; isRenameEvent = true; break; default: throw new NotImplementedException($"{fCom} not implemented"); } opEvent.RaisedTime = DateTime.Now; if (!isRenameEvent) { opEvent.FilePath = Path.Combine(currentDirectory, filePaths[0]); } var folderConfig = new FolderConfig { FolderPath = currentDirectory, WatchHiddenFiles = true }; var loggerTypes = new [] { LoggerType.JsonFile }; var logger = new MultipleFolderEventsLogger(loggerTypes.GetFolderEventsLoggers(folderEventsLoggerFactory, folderConfig) .ToArray()); logger.LogOperation(opEvent); operationEventsList.Add(opEvent); } } }