ARCH: wire account and garage sync into authenticated cloud lifecycle
This commit is contained in:
parent
21012993dd
commit
7ca382d33a
|
|
@ -3,6 +3,7 @@ import '../../database/database.dart';
|
||||||
import '../../features/records/records_service.dart';
|
import '../../features/records/records_service.dart';
|
||||||
import '../auth/auth_providers.dart';
|
import '../auth/auth_providers.dart';
|
||||||
import '../auth/auth_state.dart';
|
import '../auth/auth_state.dart';
|
||||||
|
import '../cloud/firebase_account_sync_service.dart';
|
||||||
import '../github/github_auth_service.dart';
|
import '../github/github_auth_service.dart';
|
||||||
import '../github/github_sync_service.dart';
|
import '../github/github_sync_service.dart';
|
||||||
import 'firebase_sync_provider.dart';
|
import 'firebase_sync_provider.dart';
|
||||||
|
|
@ -23,6 +24,11 @@ final firebaseSyncProvider = Provider<FirebaseSyncProvider>((ref) => FirebaseSyn
|
||||||
r2UploadService: ref.watch(r2UploadServiceProvider),
|
r2UploadService: ref.watch(r2UploadServiceProvider),
|
||||||
));
|
));
|
||||||
|
|
||||||
|
final firebaseAccountSyncServiceProvider = Provider<FirebaseAccountSyncService>((ref) => FirebaseAccountSyncService(
|
||||||
|
db: ref.watch(databaseProvider),
|
||||||
|
auth: ref.watch(authServiceProvider),
|
||||||
|
));
|
||||||
|
|
||||||
final githubSyncProvider = Provider<GitHubSyncProvider>((ref) => GitHubSyncProvider(
|
final githubSyncProvider = Provider<GitHubSyncProvider>((ref) => GitHubSyncProvider(
|
||||||
service: ref.watch(githubSyncServiceProvider),
|
service: ref.watch(githubSyncServiceProvider),
|
||||||
auth: ref.watch(githubAuthServiceProvider),
|
auth: ref.watch(githubAuthServiceProvider),
|
||||||
|
|
@ -34,9 +40,15 @@ final syncManagerProvider = ChangeNotifierProvider<SyncManager>((ref) {
|
||||||
initialProviders: [ref.watch(firebaseSyncProvider), ref.watch(githubSyncProvider)],
|
initialProviders: [ref.watch(firebaseSyncProvider), ref.watch(githubSyncProvider)],
|
||||||
defaultProviderId: 'firebase',
|
defaultProviderId: 'firebase',
|
||||||
);
|
);
|
||||||
|
final accountSync = ref.watch(firebaseAccountSyncServiceProvider);
|
||||||
ref.listen<AuthState>(authNotifierProvider, (previous, next) {
|
ref.listen<AuthState>(authNotifierProvider, (previous, next) {
|
||||||
if (next.isAuthenticated && previous?.isAuthenticated != true) {
|
if (next.isAuthenticated && previous?.isAuthenticated != true) {
|
||||||
manager.retryAuthRequired();
|
manager.retryAuthRequired();
|
||||||
|
accountSync.syncAccount().catchError((error) {
|
||||||
|
// Profile/garage synchronization is downstream of riding and must
|
||||||
|
// never interrupt telemetry or ride persistence.
|
||||||
|
return Future<void>.value();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
ref.onDispose(manager.dispose);
|
ref.onDispose(manager.dispose);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue