Esempio n. 1
0
        protected override void OnActivated()
        {
            base.OnActivated();
            var objectSpaceCreated = Observable.FromEventPattern <DetailViewCreatedEventArgs>(h => Application.DetailViewCreated += h, h => Application.DetailViewCreated -= h)
                                     .Where(pattern => pattern.EventArgs.View.ObjectTypeInfo.Type == typeof(ExcelImport))
                                     .Select(pattern => pattern.EventArgs.View.ObjectSpace);

            var modifiedExcelImports = objectSpaceCreated
                                       .SelectMany(space => Observable.FromEventPattern <CancelEventArgs>(h => space.Committing += h, h => space.Committing -= h)
                                                   .SelectMany(pattern => ((IObjectSpace)pattern.Sender).ModifiedObjects.OfType <ExcelImport>()))
                                       .Where(import => {
                if (CanAutoImport(import))
                {
                    if (!_fileDropWatchers.ContainsKey(import.Oid))
                    {
                        _fileDropWatchers.Add(import.Oid, null);
                        return(true);
                    }
                }
                else
                {
                    if (_fileDropWatchers.ContainsKey(import.Oid))
                    {
                        StopWatching(import);
                    }
                }

                return(false);
            }).Delay(TimeSpan.FromSeconds(5));

            objectSpaceCreated
            .SelectMany(space => Observable.FromEventPattern <ObjectsManipulatingEventArgs>(h => space.ObjectDeleted += h, h => space.ObjectDeleted -= h)
                        .SelectMany(pattern => pattern.EventArgs.Objects.OfType <ExcelImport>()))
            .Subscribe(import => {
                if (_fileDropWatchers.ContainsKey(import.Oid))
                {
                    StopWatching(import);
                }
            });

            var objectSpace          = Application.CreateObjectSpace();
            var existingExcelImports = objectSpace.GetObjectsQuery <ExcelImport>()
                                       .ToArray()
                                       .Where(CanAutoImport)
                                       .ToObservable()
                                       .Do(import => _fileDropWatchers.Add(import.Oid, null));

            existingExcelImports.Merge(modifiedExcelImports)
            .Subscribe(import => {
                var fileDropWatcher           = new FileDropWatcher(GetFullPath(import), import.AutoImportRegex, import.AutoImportSearchType);
                _fileDropWatchers[import.Oid] = fileDropWatcher;
                fileDropWatcher.Start();
                fileDropWatcher.Dropped.ObserveOn(Scheduler.Default).Subscribe(dropped => Import(dropped, (import.Oid, fileDropWatcher)));
                fileDropWatcher.PollExisting();
            });
        }
        public async Task PollExisting_FileBeforeStart_StreamsDropped()
        {
            using (var watcher = new FileDropWatcher(TempPath, "Monitored.Txt"))
            {
                var firstDropped  = watcher.Dropped.FirstAsync().ToTask();
                var monitoredFile = Path.Combine(TempPath, "Monitored.Txt");
                File.WriteAllText(monitoredFile, "foo");

                watcher.PollExisting();

                var dropped = await firstDropped;
                Assert.That(dropped.Name, Is.EqualTo("Monitored.Txt"));
                Assert.That(dropped.FullPath, Is.EqualTo(monitoredFile));
            }
        }
Esempio n. 3
0
        public async Task FileDropped_NoExistingFile_StreamsDropped()
        {
            using (var watcher = new FileDropWatcher(TempPath, "Monitored.Txt"))
            {
                var firstDropped = watcher.Dropped.FirstAsync().ToTask();
                watcher.Start();

                var monitoredFile = Path.Combine(TempPath, "Monitored.Txt");
                File.WriteAllText(monitoredFile, "foo");

                var dropped = await firstDropped;
                Assert.Equal("Monitored.Txt", dropped.Name);
                Assert.Equal(monitoredFile, dropped.FullPath);
            }
        }
        public async Task PollExisting_SecondTime_StreamsSecondTime()
        {
            using (var watcher = new FileDropWatcher(TempPath, "Monitored.Txt"))
            {
                var secondDropped = watcher.Dropped.Skip(1).FirstAsync().ToTask();
                var monitoredFile = Path.Combine(TempPath, "Monitored.Txt");
                File.WriteAllText(monitoredFile, "foo");

                watcher.PollExisting();
                watcher.PollExisting();

                var dropped = await secondDropped;
                Assert.That(dropped.Name, Is.EqualTo("Monitored.Txt"));
                Assert.That(dropped.FullPath, Is.EqualTo(monitoredFile));
            }
        }
Esempio n. 5
0
        public async Task Overwrite_ExistingFile_StreamsDropped()
        {
            using (var watcher = new FileDropWatcher(TempPath, "Monitored.Txt"))
            {
                var firstDropped  = watcher.Dropped.FirstAsync().ToTask();
                var monitoredFile = Path.Combine(TempPath, "Monitored.Txt");
                File.WriteAllText(monitoredFile, "foo");
                watcher.Start();

                File.WriteAllText(monitoredFile, "bar");

                var dropped = await firstDropped;
                Expect(dropped.Name, Is.EqualTo("Monitored.Txt"));
                Expect(dropped.FullPath, Is.EqualTo(monitoredFile));
            }
        }
        public async Task FileRenamed_NoExistingFile_StreamsDropped()
        {
            using (var watcher = new FileDropWatcher(TempPath, "Monitored.Txt"))
            {
                var firstDropped = watcher.Dropped.FirstAsync().ToTask();
                var otherFile    = Path.Combine(TempPath, "Other.Txt");
                File.WriteAllText(otherFile, "foo");
                watcher.Start();

                var monitoredFile = Path.Combine(TempPath, "Monitored.Txt");
                File.Move(otherFile, monitoredFile);

                var dropped = await firstDropped;
                Assert.That(dropped.Name, Is.EqualTo("Monitored.Txt"));
                Assert.That(dropped.FullPath, Is.EqualTo(monitoredFile));
            }
        }
Esempio n. 7
0
        public static async Task Main(string[] args)
        {
            var cts = new CancellationTokenSource();

            Console.CancelKeyPress += (s, e) =>
            {
                cts.Cancel();
            };

            var rxWatcher = new FileDropWatcher(@".", "*.txt");

            rxWatcher.Dropped.Subscribe(droppedFiled =>
            {
                Console.ForegroundColor = ConsoleColor.Green;
                Console.WriteLine($"{droppedFiled.DroppedType} \t {droppedFiled.Name}");
                Console.ForegroundColor = ConsoleColor.Gray;
            },
                                        ex =>
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine($"Error happened while watching :{ex.Message}");
                Console.ForegroundColor = ConsoleColor.Gray;
            },
                                        () =>
            {
                Console.ForegroundColor = ConsoleColor.DarkYellow;
                Console.WriteLine($"Done watching ...");
                Console.ForegroundColor = ConsoleColor.Gray;
            },
                                        cts.Token);
            rxWatcher.Start();
            rxWatcher.PollExisting();

            while (!cts.IsCancellationRequested)
            {
                try
                {
                    await Task.Delay(500, cts.Token);

                    if (!File.Exists("foobar.txt"))
                    {
                        File.Create("foobar.txt");
                    }
                    else
                    {
                        Console.WriteLine("Writing to file ...");
                        await File.AppendAllTextAsync("foobar.txt", $"{DateTime.Now.ToLongTimeString()}\r\n", cts.Token);
                    }
                }
                catch
                {
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine("Could not write to file ...");
                    Console.ForegroundColor = ConsoleColor.Gray;
                }
            }
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine("Stopping watcher ...");
            Console.ForegroundColor = ConsoleColor.Gray;

            rxWatcher.Stop();
        }