Line data Source code
1 : import 'package:chatwoot_client_sdk/data/local/entity/chatwoot_user.dart'; 2 : import 'package:hive_flutter/hive_flutter.dart'; 3 : 4 : abstract class ChatwootUserDao { 5 : Future<void> saveUser(ChatwootUser user); 6 : ChatwootUser? getUser(); 7 : Future<void> deleteUser(); 8 : Future<void> onDispose(); 9 : Future<void> clearAll(); 10 : } 11 : 12 : //Only used when persistence is enabled 13 19 : enum ChatwootUserBoxNames { USERS, CLIENT_INSTANCE_TO_USER } 14 : 15 : class PersistedChatwootUserDao extends ChatwootUserDao { 16 : //box containing chat users 17 : Box<ChatwootUser> _box; 18 : //box with one to one relation between generated client instance id and user identifier 19 : final Box<String> _clientInstanceIdToUserIdentifierBox; 20 : 21 : final String _clientInstanceKey; 22 : 23 2 : PersistedChatwootUserDao(this._box, this._clientInstanceIdToUserIdentifierBox, 24 : this._clientInstanceKey); 25 : 26 : @override 27 1 : Future<void> deleteUser() async { 28 : final userIdentifier = 29 3 : _clientInstanceIdToUserIdentifierBox.get(_clientInstanceKey); 30 4 : await _clientInstanceIdToUserIdentifierBox.delete(_clientInstanceKey); 31 3 : await _box.delete(userIdentifier); 32 : } 33 : 34 : @override 35 1 : Future<void> saveUser(ChatwootUser user) async { 36 3 : await _clientInstanceIdToUserIdentifierBox.put( 37 3 : _clientInstanceKey, user.identifier.toString()); 38 4 : await _box.put(user.identifier, user); 39 : } 40 : 41 1 : @override 42 : ChatwootUser? getUser() { 43 4 : if (_box.values.length == 0) { 44 : return null; 45 : } 46 : final userIdentifier = 47 3 : _clientInstanceIdToUserIdentifierBox.get(_clientInstanceKey); 48 : 49 2 : return _box.get(userIdentifier); 50 : } 51 : 52 : @override 53 0 : Future<void> onDispose() async {} 54 : 55 : @override 56 1 : Future<void> clearAll() async { 57 3 : await _box.clear(); 58 3 : await _clientInstanceIdToUserIdentifierBox.clear(); 59 : } 60 : 61 3 : static Future<void> openDB() async { 62 12 : await Hive.openBox<ChatwootUser>(ChatwootUserBoxNames.USERS.toString()); 63 9 : await Hive.openBox<String>( 64 3 : ChatwootUserBoxNames.CLIENT_INSTANCE_TO_USER.toString()); 65 : } 66 : } 67 : 68 : class NonPersistedChatwootUserDao extends ChatwootUserDao { 69 : ChatwootUser? _user; 70 : 71 : @override 72 1 : Future<void> deleteUser() async { 73 1 : _user = null; 74 : } 75 : 76 1 : @override 77 : ChatwootUser? getUser() { 78 1 : return _user; 79 : } 80 : 81 : @override 82 1 : Future<void> onDispose() async { 83 1 : _user = null; 84 : } 85 : 86 : @override 87 1 : Future<void> saveUser(ChatwootUser user) async { 88 1 : _user = user; 89 : } 90 : 91 : @override 92 1 : Future<void> clearAll() async { 93 1 : _user = null; 94 : } 95 : }