75 lines
2.2 KiB
JavaScript
75 lines
2.2 KiB
JavaScript
import BackgroundGeolocation from "react-native-background-geolocation";
|
|
|
|
import { ensureBackgroundGeolocationReady } from "~/location/backgroundGeolocationService";
|
|
import { BASE_GEOLOCATION_CONFIG } from "~/location/backgroundGeolocationConfig";
|
|
|
|
/**
|
|
* BGGeo diagnostics helpers.
|
|
*
|
|
* Intentionally lives outside UI code so we don't scatter direct BGGeo calls.
|
|
*
|
|
* NOTE: Calling these will execute `.ready()` (vendor requirement), but they do not start
|
|
* tracking by themselves.
|
|
*/
|
|
|
|
export async function bggeoGetStatusSnapshot() {
|
|
await ensureBackgroundGeolocationReady(BASE_GEOLOCATION_CONFIG);
|
|
const [state, count] = await Promise.all([
|
|
BackgroundGeolocation.getState(),
|
|
BackgroundGeolocation.getCount(),
|
|
]);
|
|
|
|
return {
|
|
enabled: !!state?.enabled,
|
|
isMoving: !!state?.isMoving,
|
|
trackingMode: state?.trackingMode ?? null,
|
|
schedulerEnabled: !!state?.schedulerEnabled,
|
|
pending: count ?? null,
|
|
};
|
|
}
|
|
|
|
export async function bggeoSyncNow() {
|
|
await ensureBackgroundGeolocationReady(BASE_GEOLOCATION_CONFIG);
|
|
const pendingBefore = await BackgroundGeolocation.getCount();
|
|
const records = await BackgroundGeolocation.sync();
|
|
const pendingAfter = await BackgroundGeolocation.getCount();
|
|
|
|
return {
|
|
pendingBefore: pendingBefore ?? null,
|
|
synced: records?.length ?? 0,
|
|
pendingAfter: pendingAfter ?? null,
|
|
};
|
|
}
|
|
|
|
export async function bggeoGetDiagnosticsSnapshot() {
|
|
await ensureBackgroundGeolocationReady(BASE_GEOLOCATION_CONFIG);
|
|
|
|
const [state, count, locations] = await Promise.all([
|
|
BackgroundGeolocation.getState(),
|
|
BackgroundGeolocation.getCount(),
|
|
BackgroundGeolocation.getLocations(),
|
|
]);
|
|
|
|
const last =
|
|
Array.isArray(locations) && locations.length
|
|
? locations[locations.length - 1]
|
|
: null;
|
|
|
|
return {
|
|
state: {
|
|
enabled: !!state?.enabled,
|
|
isMoving: !!state?.isMoving,
|
|
trackingMode: state?.trackingMode ?? null,
|
|
schedulerEnabled: !!state?.schedulerEnabled,
|
|
},
|
|
pending: count ?? null,
|
|
lastLocation: last
|
|
? {
|
|
latitude: last?.coords?.latitude ?? null,
|
|
longitude: last?.coords?.longitude ?? null,
|
|
accuracy: last?.coords?.accuracy ?? null,
|
|
timestamp: last?.timestamp ?? null,
|
|
}
|
|
: null,
|
|
};
|
|
}
|