diff --git a/Stars Assistant/Services/CSVDataLoader.cs b/Stars Assistant/Services/CSVDataLoader.cs index e7c41a0..c844293 100644 --- a/Stars Assistant/Services/CSVDataLoader.cs +++ b/Stars Assistant/Services/CSVDataLoader.cs @@ -96,6 +96,7 @@ public partial class CSVDataLoader : IEnableLogger FleetManager.PostProcessImportedData(); FleetManager fleetManager = Locator.Current.GetService()!; + fleetManager.InitFromDatabase(); break; default: diff --git a/Stars Assistant/Services/FleetManager.cs b/Stars Assistant/Services/FleetManager.cs index 24e0d8a..6100d34 100644 --- a/Stars Assistant/Services/FleetManager.cs +++ b/Stars Assistant/Services/FleetManager.cs @@ -1,16 +1,21 @@ using System; +using System.Collections.Immutable; +using System.Collections.ObjectModel; using System.ComponentModel; +using System.Reactive; using System.Reactive.Linq; using System.Text.RegularExpressions; +using Avalonia.Controls.Platform; using DynamicData; using DynamicData.Binding; +using ReactiveUI; using Splat; using StarsAssistant.Model; using StarsAssistant.ViewModels; namespace StarsAssistant.Services; -public class FleetManager +public class FleetManager : IEnableLogger { protected Services.Game Game = Locator.Current.GetService()!; @@ -28,31 +33,75 @@ public class FleetManager public int TotalBoranium { get; set; } public int TotalGermanium { get; set; } public int TotalColonists { get; set; } + + public override string ToString() => $"To {Destination}: {TotalIronium}I/{TotalBoranium}B/{TotalGermanium}G/{TotalColonists}C"; } - private IObservable>? _fleetSummaries; + private IObservable>? _fleetSummaries; + + private ReadOnlyObservableCollection? summaries; + + private IDisposable? d1; + + private IDisposable? d2; + public void test() { - var xxxxx = _fleets.Connect() + _fleetSummaries = _fleets.Connect() + .Filter(fleet => fleet.TrueDestination != "-- ") .GroupOn(fleet => fleet.TrueDestination) - .Transform(group => - group.List.Connect() - .ToCollection() - .Select(query => + .Log(this, $"{DateTime.Now.ToLongTimeString()} fleetWatcher", grp => $"{grp.TotalChanges} detected") + .Transform(group => new FleetSummary + { + Destination = group.GroupKey, + TotalIronium = group.List.Items.Sum(f => f.Ironium), + TotalBoranium = group.List.Items.Sum(f => f.Boranium), + TotalGermanium = group.List.Items.Sum(f => f.Germanium), + TotalColonists = group.List.Items.Sum(f => f.Colonists) + }) + // .Transform(group => + // group.List.Connect() + // .QueryWhenChanged(query => + // { + // var iro = query.Sum(f => f.Ironium); + // var bor = query.Sum(f => f.Boranium); + // var ger = query.Sum(f => f.Germanium); + // var col = query.Sum(f => f.Colonists); + // return new FleetSummary + // { + // Destination = group.GroupKey, + // TotalIronium = iro, + // TotalBoranium = bor, + // TotalGermanium = ger, + // TotalColonists = col + // }; + // }) + // ) + ; + + _fleetSummaries + .ObserveOn(RxApp.MainThreadScheduler) + .Bind(out summaries) + .DisposeMany() + .Subscribe(); + + d1 = summaries + .Subscribe(Observer.Create(f => { - var iro = query.Sum(f => f.Ironium); - var bor = query.Sum(f => f.Boranium); - var ger = query.Sum(f => f.Germanium); - var col = query.Sum(f => f.Colonists); - return new FleetSummary - { - Destination = group.GroupKey, - TotalIronium = iro, - TotalBoranium = bor, - TotalGermanium = ger, - TotalColonists = col - }; - }) + this.Log().Debug($"FleetSummary observed: {f}"); + } + )); + + d2 = _fleetSummaries + .ObserveOn(RxApp.MainThreadScheduler) + .Subscribe(x => + { + var lst = x.ToList(); + foreach (var f in lst) + { + this.Log().Debug($"Reason {f.Reason}, Type {f.Type}: {f.Item.Current}"); + } + } ); } diff --git a/Stars Assistant/Services/Game.cs b/Stars Assistant/Services/Game.cs index e7ecd95..dd8c5e5 100644 --- a/Stars Assistant/Services/Game.cs +++ b/Stars Assistant/Services/Game.cs @@ -145,6 +145,8 @@ public class Game __createTestData(); PlanetManager.InitFromDatabase(); + FleetManager.InitFromDatabase(); + FleetManager.test(); } ///