mirror of
https://gitlab.com/mysocialportal/relatica
synced 2024-10-18 13:33:32 +00:00
129 lines
5.2 KiB
Dart
129 lines
5.2 KiB
Dart
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';
|
|
import 'friendica_client/friendica_client.dart';
|
|
import 'globals.dart';
|
|
import 'models/auth/profile.dart';
|
|
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';
|
|
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());
|
|
getIt.registerSingleton<FediverseServiceValidator>(
|
|
FediverseServiceValidator());
|
|
getIt.registerSingleton<FriendicaVersionChecker>(
|
|
const FriendicaVersionChecker());
|
|
|
|
final settingsService = SettingsService();
|
|
await settingsService.initialize();
|
|
getIt.registerSingleton<SettingsService>(settingsService);
|
|
|
|
getIt.registerSingleton<ActiveProfileSelector<IConnectionsRepo>>(
|
|
ActiveProfileSelector(null));
|
|
|
|
getIt.registerSingleton<ActiveProfileSelector<InstanceInfo>>(
|
|
ActiveProfileSelector(null));
|
|
|
|
final secretsService = SecretsService();
|
|
final serviceInit = await secretsService.initialize();
|
|
|
|
final accountsService = AccountsService(secretsService);
|
|
if (serviceInit.isFailure) {
|
|
_logger.severe('Error initializing credentials');
|
|
} else {
|
|
await accountsService.initialize();
|
|
}
|
|
getIt.registerSingleton<AccountsService>(accountsService);
|
|
getIt<ActiveProfileSelector<IConnectionsRepo>>().subscribeToProfileSwaps();
|
|
getIt<ActiveProfileSelector<InstanceInfo>>().subscribeToProfileSwaps();
|
|
|
|
getIt.registerSingleton<ActiveProfileSelector<IGroupsRepo>>(
|
|
ActiveProfileSelector((p) => MemoryGroupsRepo())
|
|
..subscribeToProfileSwaps());
|
|
|
|
getIt.registerSingleton<ActiveProfileSelector<ConnectionsManager>>(
|
|
ActiveProfileSelector(
|
|
(p) => ConnectionsManager(
|
|
getIt<ActiveProfileSelector<IConnectionsRepo>>().getForProfile(p).value,
|
|
getIt<ActiveProfileSelector<IGroupsRepo>>().getForProfile(p).value,
|
|
),
|
|
));
|
|
|
|
getIt.registerSingleton<ActiveProfileSelector<GalleryService>>(
|
|
ActiveProfileSelector((p) => GalleryService())
|
|
..subscribeToProfileSwaps());
|
|
getIt.registerSingleton<ActiveProfileSelector<EntryManagerService>>(
|
|
ActiveProfileSelector((p) => EntryManagerService())
|
|
..subscribeToProfileSwaps());
|
|
getIt.registerSingleton<ActiveProfileSelector<TimelineManager>>(
|
|
ActiveProfileSelector((p) => TimelineManager(
|
|
getIt<ActiveProfileSelector<IGroupsRepo>>().getForProfile(p).value,
|
|
getIt<ActiveProfileSelector<EntryManagerService>>()
|
|
.getForProfile(p)
|
|
.value,
|
|
))
|
|
..subscribeToProfileSwaps());
|
|
getIt.registerSingleton<ActiveProfileSelector<NotificationsManager>>(
|
|
ActiveProfileSelector((_) => NotificationsManager())
|
|
..subscribeToProfileSwaps());
|
|
getIt.registerSingleton<ActiveProfileSelector<FollowRequestsManager>>(
|
|
ActiveProfileSelector((_) => FollowRequestsManager())
|
|
..subscribeToProfileSwaps());
|
|
getIt.registerSingleton<ActiveProfileSelector<DirectMessageService>>(
|
|
ActiveProfileSelector((p) => DirectMessageService())
|
|
..subscribeToProfileSwaps());
|
|
getIt.registerSingleton<ActiveProfileSelector<InteractionsManager>>(
|
|
ActiveProfileSelector((p) => InteractionsManager())
|
|
..subscribeToProfileSwaps());
|
|
|
|
getIt.registerLazySingleton<MediaUploadAttachmentHelper>(
|
|
() => MediaUploadAttachmentHelper());
|
|
}
|
|
|
|
Future<void> updateProfileDependencyInjectors(Profile profile) async {
|
|
final objectBox = await ObjectBoxCache.create(
|
|
baseDir: 'profileboxcaches',
|
|
subDir: '${profile.id}_${profile.serverName}',
|
|
);
|
|
final connectionReposSelector =
|
|
getIt<ActiveProfileSelector<IConnectionsRepo>>();
|
|
connectionReposSelector.injectEntry(
|
|
profile, ObjectBoxConnectionsRepo(objectBox));
|
|
|
|
final instanceSelector = getIt<ActiveProfileSelector<InstanceInfo>>();
|
|
final instanceInfo = await InstanceDataClient(profile).getInstanceData();
|
|
instanceInfo.andThenSuccess(
|
|
(instanceInfo) => instanceSelector.injectEntry(
|
|
profile,
|
|
instanceInfo,
|
|
),
|
|
);
|
|
}
|