Hook up fswatcher to csv parser, needs proper filename parsing.
This commit is contained in:
@ -3,28 +3,8 @@ using System.Reactive.Concurrency;
|
||||
|
||||
namespace StarsAssistant.Helpers;
|
||||
|
||||
public class FsWatcher
|
||||
public static class FsWatcher
|
||||
{
|
||||
/// <summary>
|
||||
/// Throttle a FileSystemObserver and eliminate all duplicates.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Curtesy of https://endjin.com/blog/2024/05/observe-file-system-changes-with-rx-dotnet
|
||||
/// </remarks>
|
||||
/// <param name="watcher">An observer created with <c>ObserveFileSystem</c></param>
|
||||
/// <param name="inactivitySeconds">Throttling window, defaults to 1 second.</param>
|
||||
/// <param name="scheduler">Scheduler to user for throttling, default is set by <c>Quiescent</c></param>
|
||||
/// <returns>A throttled observer with duplicate elimination.</returns>
|
||||
public static IObservable<IEnumerable<FileSystemEventArgs>> ThrottleAndDistinctObserver (
|
||||
IObservable<FileSystemEventArgs> watcher,
|
||||
int inactivitySeconds = 1,
|
||||
IScheduler? scheduler = null)
|
||||
{
|
||||
return watcher
|
||||
.Quiescent(TimeSpan.FromSeconds(inactivitySeconds), scheduler)
|
||||
.Select(changes => changes.DistinctBy(x => (x.ChangeType, x.FullPath)));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Helper to convert a FileSystemWatcher into an obervable stream. See FileSystemWatcher
|
||||
/// documentation for further details on the parameters.
|
||||
@ -52,6 +32,7 @@ public class FsWatcher
|
||||
if (filters != null)
|
||||
foreach (string filter in filters)
|
||||
fsw.Filters.Add(filter);
|
||||
|
||||
if (notifyFilter != null)
|
||||
fsw.NotifyFilter = (NotifyFilters) notifyFilter;
|
||||
fsw.EnableRaisingEvents = true;
|
||||
@ -90,4 +71,29 @@ public class FsWatcher
|
||||
.RefCount();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Throttle a FileSystemObserver and eliminate all duplicates.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Curtesy of https://endjin.com/blog/2024/05/observe-file-system-changes-with-rx-dotnet
|
||||
/// </remarks>
|
||||
/// <param name="watcher">An observer created with <c>ObserveFileSystem</c></param>
|
||||
/// <param name="inactivitySeconds">Throttling window, defaults to 1 second.</param>
|
||||
/// <param name="scheduler">Scheduler to user for throttling, default is set by <c>Quiescent</c></param>
|
||||
/// <returns>A throttled observer with duplicate elimination.</returns>
|
||||
public static IObservable<FileSystemEventArgs> ThrottleAndDistinct (
|
||||
this IObservable<FileSystemEventArgs> watcher,
|
||||
int inactivitySeconds = 1,
|
||||
IScheduler? scheduler = null)
|
||||
{
|
||||
return watcher
|
||||
.Quiescent(TimeSpan.FromSeconds(inactivitySeconds), scheduler)
|
||||
.SelectMany(
|
||||
changes => changes
|
||||
.DistinctBy(x => (x.ChangeType, x.FullPath))
|
||||
.ToObservable()
|
||||
)
|
||||
;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -34,24 +34,4 @@ public static class RxExtensions
|
||||
|
||||
return src.Buffer(zeroCrossings);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Throttle a FileSystemObserver and eliminate all duplicates.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Curtesy of https://endjin.com/blog/2024/05/observe-file-system-changes-with-rx-dotnet
|
||||
/// </remarks>
|
||||
/// <param name="watcher">An observer created with <c>ObserveFileSystem</c></param>
|
||||
/// <param name="inactivitySeconds">Throttling window, defaults to 1 second.</param>
|
||||
/// <param name="scheduler">Scheduler to user for throttling, default is set by <c>Quiescent</c></param>
|
||||
/// <returns>A throttled observer with duplicate elimination.</returns>
|
||||
public static IObservable<IEnumerable<FileSystemEventArgs>> ThrottleAndDistinct (
|
||||
this IObservable<FileSystemEventArgs> watcher,
|
||||
int inactivitySeconds = 1,
|
||||
IScheduler? scheduler = null)
|
||||
{
|
||||
return watcher
|
||||
.Quiescent(TimeSpan.FromSeconds(inactivitySeconds), scheduler)
|
||||
.Select(changes => changes.DistinctBy(x => (x.ChangeType, x.FullPath)));
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user