Hook up fswatcher to csv parser, needs proper filename parsing.
This commit is contained in:
@ -1,41 +1,58 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Reactive.Linq;
|
||||
using System.Text.RegularExpressions;
|
||||
using ReactiveUI;
|
||||
using Splat;
|
||||
using StarsAssistant.Helpers;
|
||||
|
||||
namespace StarsAssistant.Services;
|
||||
|
||||
|
||||
public class CSVDataLoader
|
||||
public partial class CSVDataLoader : IEnableLogger
|
||||
{
|
||||
/// <summary>
|
||||
/// Reference to the game metadata, retrieved by DI
|
||||
/// </summary>
|
||||
protected Services.Game Game = Locator.Current.GetService<Services.Game>()!;
|
||||
|
||||
public void CSVDataLoader()
|
||||
[GeneratedRegex(@".*\.(?<type>[pf])(?<player>\d)+$")]
|
||||
private static partial Regex MyRegex();
|
||||
|
||||
protected Regex FileTypeRegEx = MyRegex();
|
||||
|
||||
public CSVDataLoader()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public void StartPlanetCSVWatcher()
|
||||
{
|
||||
// TODO: which scheduler for Throttle?
|
||||
var watcher = FsWatcher
|
||||
.ObserveFileSystem(Game.GamePath, new string[] { Game.PlanetFileSearchPattern });
|
||||
.ThrottleAndDistinct(2);
|
||||
|
||||
/*
|
||||
watcher.Subscribe(x =>
|
||||
{
|
||||
Console.WriteLine($"{DateTime.Now.ToLongTimeString()} got {x.Count()} events:");
|
||||
// string[] filters = { "*.p*", "*.f*", "*.map" };
|
||||
|
||||
foreach (var fsEvent in x)
|
||||
{
|
||||
Console.WriteLine($"{DateTime.Now.ToLongTimeString()} {i++} {fsEvent.FullPath} - {fsEvent.ChangeType}");
|
||||
}
|
||||
});
|
||||
*/
|
||||
var watcher = FsWatcher
|
||||
.ObserveFileSystem(Game.GamePath, [ Game.PlanetFileSearchPattern ])
|
||||
.ThrottleAndDistinct(2, RxApp.TaskpoolScheduler)
|
||||
.Log(this, $"{DateTime.Now.ToLongTimeString()} FsEvent", fsEvent => $"{fsEvent.FullPath} {fsEvent.ChangeType}")
|
||||
.ObserveOn(RxApp.TaskpoolScheduler);
|
||||
|
||||
watcher.Subscribe(fsEvent => this.LoadPlanetFile(fsEvent.FullPath));
|
||||
}
|
||||
|
||||
protected void LoadPlanetFile(string fileName)
|
||||
{
|
||||
Match m = FileTypeRegEx.Match(fileName);
|
||||
if (! m.Success)
|
||||
{
|
||||
this.Log().Error($"Failed to parse {fileName} to identify what we are looking at. Ignoring file.");
|
||||
return;
|
||||
}
|
||||
|
||||
string type = m.Groups["type"].Value;
|
||||
string player = m.Groups["player"].Value;
|
||||
|
||||
this.Log().Debug($"Got file type {type} for player {player}");
|
||||
var loader = new CSV.PlanetLoader();
|
||||
loader.ImportForRace(Model.Race.Player);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user