Stockage du choix de précision de géolocalisation

This commit is contained in:
Emmy D'Anello 2024-12-19 17:33:17 +01:00
parent 590539a979
commit 956e9b6ffd
Signed by: ynerant
GPG Key ID: 3A75C55819C8CF85
4 changed files with 20 additions and 1 deletions

View File

@ -3,17 +3,21 @@ import React, { ReactNode, useEffect } from 'react'
import { Platform } from 'react-native' import { Platform } from 'react-native'
import { Constants } from '@/constants/Constants' import { Constants } from '@/constants/Constants'
import { useAuth } from '@/hooks/useAuth' import { useAuth } from '@/hooks/useAuth'
import { useSetLocationAccuracy } from '@/hooks/useGame'
import { useGeolocationMutation } from '@/hooks/mutations/useGeolocationMutation' import { useGeolocationMutation } from '@/hooks/mutations/useGeolocationMutation'
import { useQueuedLocations, useSetLastPlayerLocation, useSetLastPlayerLocations, useUnqueueLocation } from '@/hooks/useLocation' import { useQueuedLocations, useSetLastPlayerLocation, useSetLastPlayerLocations, useUnqueueLocation } from '@/hooks/useLocation'
import { isAuthValid } from '@/utils/features/auth/authSlice' import { isAuthValid } from '@/utils/features/auth/authSlice'
import { PlayerLocation } from '@/utils/features/location/locationSlice' import { PlayerLocation } from '@/utils/features/location/locationSlice'
import { useStartGeolocationServiceEffect } from '@/utils/geolocation' import { useStartGeolocationServiceEffect } from '@/utils/geolocation'
import * as SecureStore from '@/utils/SecureStore'
import { socket } from '@/utils/socket' import { socket } from '@/utils/socket'
import { Accuracy } from 'expo-location'
export default function GeolocationProvider({ children }: { children: ReactNode }) { export default function GeolocationProvider({ children }: { children: ReactNode }) {
useStartGeolocationServiceEffect() useStartGeolocationServiceEffect()
const auth = useAuth() const auth = useAuth()
const setLocationAccuracy = useSetLocationAccuracy()
const geolocationsQueue = useQueuedLocations() const geolocationsQueue = useQueuedLocations()
const unqueueLocation = useUnqueueLocation() const unqueueLocation = useUnqueueLocation()
const setLastPlayerLocations = useSetLastPlayerLocations() const setLastPlayerLocations = useSetLastPlayerLocations()
@ -24,6 +28,17 @@ export default function GeolocationProvider({ children }: { children: ReactNode
onError: ({ response, error }) => console.error(response, error), onError: ({ response, error }) => console.error(response, error),
}) })
useEffect(() => {
SecureStore.getItemAsync('locationAccuracy').then(locationAccuracyString => {
if (!locationAccuracyString)
setLocationAccuracy(Accuracy.Balanced)
else if (locationAccuracyString === 'null')
setLocationAccuracy(null)
else
setLocationAccuracy(+locationAccuracyString)
})
}, [])
if (Platform.OS !== "web") { if (Platform.OS !== "web") {
useEffect(() => { useEffect(() => {
if (geolocationsQueue.length === 0 || geolocationMutation.isPending || !isAuthValid(auth)) if (geolocationsQueue.length === 0 || geolocationMutation.isPending || !isAuthValid(auth))

View File

@ -1,5 +1,6 @@
import { createSlice, PayloadAction } from '@reduxjs/toolkit' import { createSlice, PayloadAction } from '@reduxjs/toolkit'
import { Accuracy } from 'expo-location' import { Accuracy } from 'expo-location'
import * as SecureStore from '@/utils/SecureStore'
export interface RunPayload { export interface RunPayload {
id: number id: number
@ -89,6 +90,7 @@ export const gameSlice = createSlice({
}, },
setLocationAccuracy: (state, action: PayloadAction<Accuracy | null>) => { setLocationAccuracy: (state, action: PayloadAction<Accuracy | null>) => {
state.settings.locationAccuracy = action.payload state.settings.locationAccuracy = action.payload
SecureStore.setItem('locationAccuracy', action.payload?.toString() ?? 'null')
} }
}, },
}) })

View File

@ -1,6 +1,7 @@
import { Constants } from '@/constants/Constants'
import { createSlice, PayloadAction } from '@reduxjs/toolkit' import { createSlice, PayloadAction } from '@reduxjs/toolkit'
import { LocationObject } from 'expo-location' import { LocationObject } from 'expo-location'
import { Constants } from '@/constants/Constants'
export type PlayerLocation = { export type PlayerLocation = {
id?: number id?: number

View File

@ -18,6 +18,7 @@ TaskManager.defineTask(LOCATION_TASK, async ({ data, error }: any) => {
} }
const { locations } = data const { locations } = data
const lastLoc: Location.LocationObject = locations.at(-1) const lastLoc: Location.LocationObject = locations.at(-1)
console.log("AAAAA", lastLoc)
store.dispatch(setLastLocation(lastLoc)) store.dispatch(setLastLocation(lastLoc))
const playerId = store.getState().game.playerId const playerId = store.getState().game.playerId
if (socket.active && playerId) { if (socket.active && playerId) {