Line data Source code
1 : import 'package:at_client/at_client.dart';
2 : import 'package:at_client/src/listener/at_sign_change_listener.dart';
3 : import 'package:at_client/src/listener/switch_at_sign_event.dart';
4 : import 'package:at_client/src/service/notification_service.dart';
5 : import 'package:at_client/src/service/notification_service_impl.dart';
6 : import 'package:at_client/src/service/sync_service.dart';
7 : import 'package:at_client/src/service/sync_service_impl.dart';
8 :
9 : /// Factory class for creating [AtClient], [SyncService] and [NotificationService] instances
10 : ///
11 : /// Usage
12 : /// ```
13 : /// final atClientManager = AtClientManager.getInstance().setCurrentAtSign(<current_atsign>, <app_namespace>, <preferences>)
14 : /// Apps have to call the above method again while switching atsign.
15 : /// ```
16 : /// atClientManager.atClient - for at client method calls
17 : /// atClientManager.syncService - for invoking sync. Refer [SyncService] for detailed usage
18 : /// atClientManager.notificationService - for notification methods. Refer [NotificationService] for detailed usage
19 : class AtClientManager {
20 : late String _atSign;
21 : AtClient? _previousAtClient;
22 : late AtClient _currentAtClient;
23 :
24 0 : AtClient get atClient => _currentAtClient;
25 : late SyncService syncService;
26 : late NotificationService notificationService;
27 : final _changeListeners = <AtSignChangeListener>[];
28 :
29 0 : static final AtClientManager _singleton = AtClientManager._internal();
30 :
31 0 : AtClientManager._internal();
32 :
33 0 : factory AtClientManager.getInstance() {
34 0 : return _singleton;
35 : }
36 :
37 2 : AtClientManager(_atSign);
38 :
39 0 : Future<AtClientManager> setCurrentAtSign(
40 : String atSign, String? namespace, AtClientPreference preference) async {
41 0 : if (_previousAtClient != null &&
42 0 : _previousAtClient?.getCurrentAtSign() == atSign) {
43 : return this;
44 : }
45 0 : _atSign = atSign;
46 0 : _currentAtClient = await AtClientImpl.create(_atSign, namespace, preference,
47 : atClientManager: this);
48 : final switchAtSignEvent =
49 0 : SwitchAtSignEvent(_previousAtClient, _currentAtClient);
50 0 : notificationService =
51 0 : await NotificationServiceImpl.create(_currentAtClient);
52 0 : syncService =
53 0 : await SyncServiceImpl.create(_currentAtClient, atClientManager: this);
54 0 : _previousAtClient = _currentAtClient;
55 0 : _notifyListeners(switchAtSignEvent);
56 : return this;
57 : }
58 :
59 0 : void listenToAtSignChange(AtSignChangeListener listener) {
60 0 : _changeListeners.add(listener);
61 : }
62 :
63 0 : void _notifyListeners(SwitchAtSignEvent switchAtSignEvent) {
64 0 : for (var listener in _changeListeners) {
65 0 : listener.listenToAtSignChange(switchAtSignEvent);
66 : }
67 : }
68 : }
|