public Task StartAsync(CancellationToken cancellationToken) { _poll = _folderSource.CreateFileWatcher(_fileWatcherType, OnFileWatcher, nextItem: null, pollIntervalInSeconds: _pollIntervalInSeconds > 0 ? _pollIntervalInSeconds : DefaultPollIntervalInSeconds); if (_poll == null) { var errorText = string.Format("Path '{0}' is invalid. IFolderItem.RootPath must be set to a valid directory location.", _folderSource.Path); _trace.Error(errorText); throw new InvalidOperationException(errorText); } // TODO: need to decide what to do when _poll is null i.e. trigger folder does not exist. return(Task.FromResult(0)); }
private static async Task FileWatchTestsAsync(IFolderItem folder) { bool fileAddedTrigger = false; bool fileUpdatedTrigger = false; var poll = folder.CreateFileWatcher(FileWatcherType.Created, (fr, obj) => { Console.WriteLine("File {0} was added.", fr.Path); var uri = obj as Uri; if (uri != null) { Console.WriteLine("Next Uri: {0}", uri.AbsolutePath); } fileAddedTrigger = true; return(Task.FromResult(0)); }, null, 1); var poll2 = folder.CreateFileWatcher(FileWatcherType.Updated, (fr, obj) => { Console.WriteLine("File {0} was updated.", fr.Path); var uri = obj as Uri; if (uri != null) { Console.WriteLine("Next Uri: {0}", uri.AbsolutePath); } fileUpdatedTrigger = true; return(Task.FromResult(0)); }, null, 1); var newFile = folder.GetFileReference(Guid.NewGuid().ToString()); await newFile.WriteAsync(new byte[0]); // Adding some wait to make sure triggers are fired. await Task.Delay(1000); await newFile.WriteAsync(new byte[1] { 0 }); // Adding some wait to make sure triggers are fired. Console.WriteLine("Waiting for 20 seconds..."); await Task.Delay(20000); if (!fileAddedTrigger) { Console.WriteLine("Error: New file was not triggered when a new file was added."); } if (!fileUpdatedTrigger) { Console.WriteLine("Error: Update file was not triggered when an existing file was updated."); } var trigger = await folder.CheckForFileAsync(FileWatcherType.Updated); await newFile.WriteAsync(new byte[1] { 1 }); trigger = await folder.CheckForFileAsync(FileWatcherType.Updated, trigger.NextUri); if (trigger.FileItem != null) { Console.WriteLine("Updated file: {0}", trigger.FileItem.Path); } await newFile.DeleteAsync(); }