feat(S2-b): connect durable MQTT sync to capture workflow
This commit is contained in:
@@ -4,6 +4,7 @@ using CommunityToolkit.Mvvm.Input;
|
||||
using FieldLogger.Models;
|
||||
using FieldLogger.Services;
|
||||
using FieldLogger.Services.Data;
|
||||
using FieldLogger.Services.Sync;
|
||||
|
||||
namespace FieldLogger.ViewModels;
|
||||
|
||||
@@ -14,6 +15,7 @@ public sealed partial class HomeViewModel : ObservableObject
|
||||
private readonly PointLogger _pointLogger;
|
||||
private readonly AppDatabase _database;
|
||||
private readonly SettingsService _settings;
|
||||
private readonly IMqttSyncService _sync;
|
||||
|
||||
public DeviceConnectionManager Manager => _manager;
|
||||
|
||||
@@ -35,20 +37,27 @@ public sealed partial class HomeViewModel : ObservableObject
|
||||
[ObservableProperty]
|
||||
private string _fixAccuracy = "";
|
||||
|
||||
[ObservableProperty]
|
||||
private string _syncStatus = "";
|
||||
|
||||
public ObservableCollection<LoggedPoint> RecentPoints { get; } = new();
|
||||
|
||||
public HomeViewModel(DeviceConnectionManager manager, MaglinkService gps,
|
||||
PointLogger pointLogger, AppDatabase database, SettingsService settings)
|
||||
PointLogger pointLogger, AppDatabase database, SettingsService settings, IMqttSyncService sync)
|
||||
{
|
||||
_manager = manager;
|
||||
_gps = gps;
|
||||
_pointLogger = pointLogger;
|
||||
_database = database;
|
||||
_settings = settings;
|
||||
_sync = sync;
|
||||
SyncStatus = sync.Status;
|
||||
|
||||
_gps.FixReceived += OnFixReceived;
|
||||
_pointLogger.PointSaved += OnPointSaved;
|
||||
_pointLogger.PacketIgnoredNoJob += OnPacketIgnoredNoJob;
|
||||
_sync.StatusChanged += OnSyncStatusChanged;
|
||||
_sync.PointRejected += OnPointRejected;
|
||||
}
|
||||
|
||||
/// <summary>Called from the page's OnAppearing.</summary>
|
||||
@@ -146,4 +155,14 @@ public sealed partial class HomeViewModel : ObservableObject
|
||||
"A point was logged on the receiver, but no job is active so it was not saved. Create or select a job first.",
|
||||
"OK");
|
||||
}
|
||||
|
||||
private void OnSyncStatusChanged(object? sender, string status) =>
|
||||
MainThread.BeginInvokeOnMainThread(() => SyncStatus = status);
|
||||
|
||||
private void OnPointRejected(object? sender, PointSyncFailureEventArgs e) =>
|
||||
MainThread.BeginInvokeOnMainThread(async () =>
|
||||
await Shell.Current.DisplayAlert(
|
||||
"Point Saved Locally — Sync Needs Attention",
|
||||
$"Point #{e.Point.Id} remains on this device and was not uploaded. Reason: {e.ReasonCode}.",
|
||||
"OK"));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user