relatica/lib/di_initialization.dart

194 wiersze
7.3 KiB
Dart
Czysty Zwykły widok Historia

import 'dart:async';
import 'package:logging/logging.dart';
import 'data/interfaces/connections_repo_intf.dart';
import 'data/interfaces/groups_repo.intf.dart';
import 'data/interfaces/hashtag_repo_intf.dart';
import 'data/memory/memory_groups_repo.dart';
import 'data/objectbox/objectbox_cache.dart';
import 'data/objectbox/objectbox_connections_repo.dart';
import 'data/objectbox/objectbox_hashtag_repo.dart';
2023-03-17 20:08:25 +00:00
import 'friendica_client/friendica_client.dart';
import 'globals.dart';
2023-03-12 01:50:31 +00:00
import 'models/auth/profile.dart';
2023-03-17 20:08:25 +00:00
import 'models/instance_info.dart';
import 'services/auth_service.dart';
import 'services/connections_manager.dart';
import 'services/direct_message_service.dart';
import 'services/entry_manager_service.dart';
import 'services/feature_version_checker.dart';
2023-03-22 04:16:23 +00:00
import 'services/fediverse_server_validator.dart';
import 'services/follow_requests_manager.dart';
import 'services/gallery_service.dart';
import 'services/hashtag_service.dart';
import 'services/interactions_manager.dart';
import 'services/media_upload_attachment_helper.dart';
import 'services/network_status_service.dart';
import 'services/notifications_manager.dart';
import 'services/secrets_service.dart';
import 'services/setting_service.dart';
import 'services/timeline_manager.dart';
import 'utils/active_profile_selector.dart';
final _logger = Logger('DI_Init');
Future<void> dependencyInjectionInitialization() async {
final objectBoxCache = await ObjectBoxCache.create();
getIt.registerSingleton<ObjectBoxCache>(objectBoxCache);
getIt.registerSingleton<IHashtagRepo>(ObjectBoxHashtagRepo());
getIt.registerSingleton<HashtagService>(HashtagService());
getIt.registerSingleton<NetworkStatusService>(NetworkStatusService());
2023-03-22 04:16:23 +00:00
getIt.registerSingleton<FediverseServiceValidator>(
FediverseServiceValidator());
getIt.registerSingleton<FriendicaVersionChecker>(
const FriendicaVersionChecker());
final settingsService = SettingsService();
await settingsService.initialize();
getIt.registerSingleton<SettingsService>(settingsService);
2023-03-12 01:50:31 +00:00
getIt.registerSingleton<ActiveProfileSelector<IConnectionsRepo>>(
ActiveProfileSelector(null));
2023-03-17 20:08:25 +00:00
getIt.registerSingleton<ActiveProfileSelector<InstanceInfo>>(
ActiveProfileSelector(null));
final secretsService = SecretsService();
final serviceInit = await secretsService.initialize();
2023-03-21 20:27:04 +00:00
final accountsService = AccountsService(secretsService);
if (serviceInit.isFailure) {
_logger.severe('Error initializing credentials');
} else {
2023-03-21 20:27:04 +00:00
await accountsService.initialize();
}
2023-03-21 20:27:04 +00:00
getIt.registerSingleton<AccountsService>(accountsService);
getIt<ActiveProfileSelector<IConnectionsRepo>>().subscribeToProfileSwaps();
getIt<ActiveProfileSelector<InstanceInfo>>().subscribeToProfileSwaps();
2023-03-12 01:50:31 +00:00
getIt.registerSingleton<ActiveProfileSelector<IGroupsRepo>>(
2023-03-21 20:27:04 +00:00
ActiveProfileSelector((p) => MemoryGroupsRepo())
..subscribeToProfileSwaps());
2023-03-12 01:50:31 +00:00
getIt.registerSingleton<ActiveProfileSelector<ConnectionsManager>>(
ActiveProfileSelector(
(p) {
final manager = ConnectionsManager(
getIt<ActiveProfileSelector<IConnectionsRepo>>().getForProfile(p).value,
getIt<ActiveProfileSelector<IGroupsRepo>>().getForProfile(p).value,
);
Future.delayed(Duration.zero, () async {
if (!settingsService.lowBandwidthMode) {
await manager.updateAllContacts();
}
});
Timer.periodic(const Duration(hours: 8), (_) async {
if (!settingsService.lowBandwidthMode) {
await manager.updateAllContacts();
}
});
return manager;
},
2023-03-12 01:50:31 +00:00
));
getIt.registerSingleton<ActiveProfileSelector<GalleryService>>(
2023-03-21 20:27:04 +00:00
ActiveProfileSelector((p) => GalleryService())
..subscribeToProfileSwaps());
getIt.registerSingleton<ActiveProfileSelector<EntryManagerService>>(
2023-03-21 20:27:04 +00:00
ActiveProfileSelector((p) => EntryManagerService())
..subscribeToProfileSwaps());
getIt.registerSingleton<ActiveProfileSelector<TimelineManager>>(
ActiveProfileSelector((p) => TimelineManager(
getIt<ActiveProfileSelector<IGroupsRepo>>().getForProfile(p).value,
getIt<ActiveProfileSelector<EntryManagerService>>()
.getForProfile(p)
.value,
2023-03-21 20:27:04 +00:00
))
..subscribeToProfileSwaps());
getIt.registerSingleton<ActiveProfileSelector<NotificationsManager>>(
2023-03-21 20:27:04 +00:00
ActiveProfileSelector((_) => NotificationsManager())
..subscribeToProfileSwaps());
getIt.registerSingleton<ActiveProfileSelector<FollowRequestsManager>>(
2023-03-21 20:27:04 +00:00
ActiveProfileSelector((_) => FollowRequestsManager())
..subscribeToProfileSwaps());
getIt.registerSingleton<ActiveProfileSelector<DirectMessageService>>(
2023-03-21 20:27:04 +00:00
ActiveProfileSelector((p) => DirectMessageService())
..subscribeToProfileSwaps());
getIt.registerSingleton<ActiveProfileSelector<InteractionsManager>>(
2023-03-21 20:27:04 +00:00
ActiveProfileSelector((p) => InteractionsManager())
..subscribeToProfileSwaps());
getIt.registerLazySingleton<MediaUploadAttachmentHelper>(
() => MediaUploadAttachmentHelper());
}
2023-03-12 01:50:31 +00:00
Future<void> updateProfileDependencyInjectors(Profile profile) async {
final objectBox = await ObjectBoxCache.create(
baseDir: 'profileboxcaches',
subDir: profile.id,
2023-03-12 01:50:31 +00:00
);
final connectionReposSelector =
getIt<ActiveProfileSelector<IConnectionsRepo>>();
connectionReposSelector.injectEntry(
profile, ObjectBoxConnectionsRepo(objectBox));
2023-03-17 20:08:25 +00:00
final instanceSelector = getIt<ActiveProfileSelector<InstanceInfo>>();
final instanceInfo = await InstanceDataClient(profile).getInstanceData();
instanceInfo.andThenSuccess(
(instanceInfo) => instanceSelector.injectEntry(
profile,
instanceInfo,
),
);
2023-03-12 01:50:31 +00:00
}
void clearCaches() {
getIt<ActiveProfileSelector<IConnectionsRepo>>().activeEntry.match(
onSuccess: (repo) => repo.clear(),
onError: (error) =>
_logger.severe('Error clearing IConnections Repo: $error'),
);
getIt<ActiveProfileSelector<DirectMessageService>>().activeEntry.match(
onSuccess: (service) => service.clear(),
onError: (error) =>
_logger.severe('Error clearing DirectMessageService Repo: $error'),
);
getIt<ActiveProfileSelector<EntryManagerService>>().activeEntry.match(
onSuccess: (service) => service.clear(),
onError: (error) =>
_logger.severe('Error clearing EntryManagerService Repo: $error'),
);
getIt<ActiveProfileSelector<FollowRequestsManager>>().activeEntry.match(
onSuccess: (manager) => manager.clear(),
onError: (error) =>
_logger.severe('Error clearing FollowRequestsManager Repo: $error'),
);
getIt<ActiveProfileSelector<GalleryService>>().activeEntry.match(
onSuccess: (service) => service.clear(),
onError: (error) =>
_logger.severe('Error clearing GalleryService Repo: $error'),
);
getIt<HashtagService>().clear();
getIt<ActiveProfileSelector<NotificationsManager>>().activeEntry.match(
onSuccess: (manager) => manager.clear(),
onError: (error) =>
_logger.severe('Error clearing NotificationsManager Repo: $error'),
);
getIt<ActiveProfileSelector<TimelineManager>>().activeEntry.match(
onSuccess: (manager) => manager.clear(),
onError: (error) =>
_logger.severe('Error clearing TimelineManager Repo: $error'),
);
}