63 lines
1.7 KiB
TypeScript
63 lines
1.7 KiB
TypeScript
import * as BackgroundTask from 'expo-background-task';
|
|
import * as TaskManager from 'expo-task-manager';
|
|
|
|
const BACKGROUND_UPLOAD_TASK = 'BACKGROUND_UPLOAD';
|
|
|
|
TaskManager.defineTask(BACKGROUND_UPLOAD_TASK, async () => {
|
|
try {
|
|
const { uploadQueue } = await import('./uploadQueue');
|
|
const { apiClient } = await import('../api/client');
|
|
const { tokenStorage } = await import('../api/secureStorage');
|
|
|
|
const pending = uploadQueue.getPendingCount();
|
|
if (pending === 0) {
|
|
return BackgroundTask.BackgroundTaskResult.Success;
|
|
}
|
|
|
|
const token = await tokenStorage.getAccessToken();
|
|
if (!token) {
|
|
return BackgroundTask.BackgroundTaskResult.Success;
|
|
}
|
|
apiClient.setAccessToken(token);
|
|
|
|
uploadQueue.retryAll();
|
|
|
|
await new Promise<void>((resolve) => {
|
|
const check = setInterval(() => {
|
|
if (uploadQueue.getPendingCount() === 0) {
|
|
clearInterval(check);
|
|
resolve();
|
|
}
|
|
}, 1000);
|
|
setTimeout(() => {
|
|
clearInterval(check);
|
|
resolve();
|
|
}, 25000);
|
|
});
|
|
|
|
return BackgroundTask.BackgroundTaskResult.Success;
|
|
} catch {
|
|
return BackgroundTask.BackgroundTaskResult.Failed;
|
|
}
|
|
});
|
|
|
|
let isRegistered = false;
|
|
|
|
export async function registerBackgroundUpload() {
|
|
if (isRegistered) return;
|
|
isRegistered = true;
|
|
|
|
const status = await BackgroundTask.getStatusAsync();
|
|
|
|
if (status === BackgroundTask.BackgroundTaskStatus.Restricted) {
|
|
console.warn('[BackgroundUpload] Permission refusée');
|
|
return;
|
|
}
|
|
|
|
await BackgroundTask.registerTaskAsync(BACKGROUND_UPLOAD_TASK, {
|
|
minimumInterval: 15,
|
|
});
|
|
|
|
console.log('[BackgroundUpload] Enregistré (intervalle: 15min)');
|
|
}
|