Track online szinkronizáció refraktorálása
This commit is contained in:
@@ -102,6 +102,16 @@ class TrackingController extends GetxController {
|
||||
super.onInit();
|
||||
_initForegroundTask();
|
||||
loadSavedTracks();
|
||||
|
||||
// A TrackingController permanent, egyszer indul az app életciklusában —
|
||||
// enélkül projektváltáskor a lista a réginél ragadna.
|
||||
ever(ProjectService.to.activeProject, (_) {
|
||||
loadSavedTracks();
|
||||
// Ne maradjon a térképen egy MÁSIK projekt track-overlaya.
|
||||
|
||||
overlayTrackIds.clear();
|
||||
_trackCoords.clear();
|
||||
});
|
||||
}
|
||||
|
||||
void _initForegroundTask() {
|
||||
@@ -130,11 +140,18 @@ class TrackingController extends GetxController {
|
||||
|
||||
/// Elindítja a rögzítést a megadott forrással (alapértelmezett: telefon GPS).
|
||||
Future<void> startRecording(
|
||||
{LocationSource? source,
|
||||
String? name,
|
||||
TrackSyncMode syncMode = TrackSyncMode.online}) async {
|
||||
{LocationSource? source, String? name, TrackSyncMode? syncMode}) async {
|
||||
if (isRecording.value) return;
|
||||
|
||||
// Alapértelmezés: a track kövesse az AKTÍV PROJEKT online/lokális
|
||||
// állapotát — eddig ez mindig 'online' volt, függetlenül a projekt
|
||||
// beállításától. Explicit paraméterrel felülírható.
|
||||
final activeProject = ProjectService.to.activeProject.value;
|
||||
final effectiveSyncMode = syncMode ??
|
||||
(activeProject?.isLocalOnly ?? true
|
||||
? TrackSyncMode.localOnly
|
||||
: TrackSyncMode.online);
|
||||
|
||||
_source = source ?? PhoneGpsSource(intervalMs: 1000, distanceFilter: 2.0);
|
||||
|
||||
// Track létrehozása az adatbázisban
|
||||
@@ -144,8 +161,8 @@ class TrackingController extends GetxController {
|
||||
name: trackName,
|
||||
startTime: now,
|
||||
source: _source!.displayName,
|
||||
projectId: ProjectService.to.activeProjectId,
|
||||
syncMode: syncMode));
|
||||
projectId: activeProject?.id,
|
||||
syncMode: effectiveSyncMode));
|
||||
currentTrack.value = await _db.getTrack(trackId);
|
||||
|
||||
// Állapot reset
|
||||
@@ -162,20 +179,11 @@ class TrackingController extends GetxController {
|
||||
callback: startTrackingCallback,
|
||||
);
|
||||
|
||||
if (!(currentTrack.value?.isLocalOnly ?? true)) {
|
||||
TrackSyncService.to
|
||||
.createRemoteTrack(currentTrack.value!)
|
||||
.then((supabaseId) async {
|
||||
if (supabaseId == null) return;
|
||||
final updated = currentTrack.value!.copyWith(supabaseId: supabaseId);
|
||||
await _db.updateTrack(updated);
|
||||
currentTrack.value = updated;
|
||||
TrackSyncService.to.startSession(updated);
|
||||
});
|
||||
} else {
|
||||
TrackSyncService.to.startSession(currentTrack.value!);
|
||||
}
|
||||
|
||||
// A TrackSyncService.startSession() maga dönti el (a track
|
||||
// isLocalOnly-ja alapján), hogy indítja-e a szinkron-időzítőket —
|
||||
// nincs többé külön "előbb hozzuk létre szerveroldalon" lépés, mert
|
||||
// az egységes (uuid-alapú) push maga hozza létre a sort a szerveren.
|
||||
TrackSyncService.to.startSession(currentTrack.value!);
|
||||
// GPS stream feliratkozás
|
||||
_positionSub = _source!.positionStream.listen(
|
||||
_onPosition,
|
||||
@@ -260,7 +268,8 @@ class TrackingController extends GetxController {
|
||||
}
|
||||
|
||||
Future<void> loadSavedTracks() async {
|
||||
savedTracks.value = await _db.listTracks();
|
||||
savedTracks.value =
|
||||
await _db.listTracks(projectId: ProjectService.to.activeProjectId);
|
||||
}
|
||||
|
||||
Future<void> deleteTrack(int id) async {
|
||||
|
||||
Reference in New Issue
Block a user