Szinkronizáció javítása,
This commit is contained in:
@@ -4,6 +4,7 @@ import 'dart:convert';
|
||||
import 'package:connectivity_plus/connectivity_plus.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:supabase_flutter/supabase_flutter.dart';
|
||||
import 'package:terepi_seged/services/app_logger.dart';
|
||||
import 'package:terepi_seged/services/contact_service.dart';
|
||||
import 'package:terepi_seged/services/device_identity_service.dart';
|
||||
import 'package:terepi_seged/services/stakeout_sync_service.dart';
|
||||
@@ -81,31 +82,35 @@ class TsSyncService extends GetxService {
|
||||
lastError.value = '';
|
||||
|
||||
try {
|
||||
lastError.value = '';
|
||||
// Eszköz-regiszter frissítése (last_seen_at).
|
||||
if (Get.isRegistered<DeviceIdentityService>()) {
|
||||
await DeviceIdentityService.to.registerDevice();
|
||||
await _isolate(
|
||||
'eszköz regisztációja', DeviceIdentityService.to.registerDevice);
|
||||
}
|
||||
|
||||
await _discoverMemberProjects();
|
||||
await _push();
|
||||
await _pull();
|
||||
await _isolate('tagság felderítése', _discoverMemberProjects);
|
||||
await _isolate('feltöltés', _push);
|
||||
await _isolate('letöltés', _pull);
|
||||
|
||||
// Megosztott rétegek (5. lépés) — ha a service be van kötve.
|
||||
if (Get.isRegistered<LayerSyncService>()) {
|
||||
await LayerSyncService.to.pullAll();
|
||||
await _isolate('rétegek', LayerSyncService.to.pullAll);
|
||||
}
|
||||
|
||||
if (Get.isRegistered<StakeoutSyncService>()) {
|
||||
await StakeoutSyncService.to.sync();
|
||||
await _isolate('kitűzés', StakeoutSyncService.to.sync);
|
||||
}
|
||||
|
||||
if (Get.isRegistered<ContactService>()) {
|
||||
await ContactService.to.flush();
|
||||
await _isolate('kapcsolatok', () => ContactService.to.flush());
|
||||
}
|
||||
|
||||
lastSyncedAt.value = DateTime.now();
|
||||
} catch (e) {
|
||||
} catch (e, s) {
|
||||
lastError.value = e.toString();
|
||||
AppLogger.e('TsSyncService - SyncNow', lastError.value,
|
||||
error: e, stack: s);
|
||||
} finally {
|
||||
await refreshPendingCount();
|
||||
isSyncing.value = false;
|
||||
@@ -139,11 +144,11 @@ class TsSyncService extends GetxService {
|
||||
// ═════════════════════════════════════════════════════════════════
|
||||
|
||||
Future<void> _push() async {
|
||||
await _pushProjects();
|
||||
await _pushMeasuredPoints();
|
||||
await pushTracks();
|
||||
await pushTrackPoints();
|
||||
await _pushNoteItems();
|
||||
await _isolate('projektek push', _pushProjects);
|
||||
await _isolate('mérési pontok', _pushMeasuredPoints);
|
||||
await _isolate('track-ek push', pushTracks);
|
||||
await _isolate('track-pontok push', pushTrackPoints);
|
||||
await _isolate('jegyzetek push', _pushNoteItems);
|
||||
}
|
||||
|
||||
Future<void> _pushProjects() async {
|
||||
@@ -287,7 +292,7 @@ class TsSyncService extends GetxService {
|
||||
// Minden szinkronizált (nem lokális) projekt.
|
||||
final projects = await AppDatabase.instance.listProjects();
|
||||
for (final p in projects.where((p) => !p.isLocalOnly)) {
|
||||
await _pullProject(p.id!, p.uuid);
|
||||
await _isolate('letöltés (${p.name})', () => _pullProject(p.id!, p.uuid));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -446,4 +451,20 @@ class TsSyncService extends GetxService {
|
||||
if (localIso == null || localIso.isEmpty) return null;
|
||||
return DateTime.parse(localIso).toUtc().toIso8601String();
|
||||
}
|
||||
|
||||
/// Egy lépés elszigetelt futtatása: hiba vagy időtúllépés esetén NEM
|
||||
/// dobja tovább — csak feljegyzi és a szinkron a KÖVETKEZŐ lépéssel
|
||||
/// folytatódik. Enélkül egyetlen hibás sor (típushiba, FK-ütközés stb.)
|
||||
/// vagy egy beragadt hálózati hívás CSENDBEN leállítaná az összes
|
||||
/// további lépést, minden ciklusban, örökre.
|
||||
Future<void> _isolate(String label, Future<void> Function() fn,
|
||||
{Duration timeout = const Duration(seconds: 25)}) async {
|
||||
try {
|
||||
await fn().timeout(timeout);
|
||||
} catch (e) {
|
||||
lastError.value = lastError.value.isEmpty
|
||||
? '$label: $e'
|
||||
: '${lastError.value} · $label: $e';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user