feat: Implement migration for hive schema versions
This commit is contained in:
parent
16f1cb7456
commit
96d28a1b76
|
|
@ -18,6 +18,7 @@ import 'package:hive/hive.dart';
|
||||||
///
|
///
|
||||||
/// This database does not support file caching!
|
/// This database does not support file caching!
|
||||||
class FamedlySdkHiveDatabase extends DatabaseApi {
|
class FamedlySdkHiveDatabase extends DatabaseApi {
|
||||||
|
static const int version = 2;
|
||||||
final String name;
|
final String name;
|
||||||
Box _clientBox;
|
Box _clientBox;
|
||||||
Box _accountDataBox;
|
Box _accountDataBox;
|
||||||
|
|
@ -163,9 +164,18 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
|
||||||
_eventsBoxName,
|
_eventsBoxName,
|
||||||
encryptionCipher: encryptionCipher,
|
encryptionCipher: encryptionCipher,
|
||||||
);
|
);
|
||||||
|
final currentVersion = (await _clientBox.get('version') as int) ?? 0;
|
||||||
|
if (currentVersion != version) await _migrateFromVersion(currentVersion);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<void> _migrateFromVersion(int currentVersion) async {
|
||||||
|
Logs().i('Migrate Hive database from version $currentVersion to $version');
|
||||||
|
await clearCache(0);
|
||||||
|
await _clientBox.put('version', version);
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<void> clear(int clientId) async {
|
Future<void> clear(int clientId) async {
|
||||||
Logs().i('Clear and close hive database...');
|
Logs().i('Clear and close hive database...');
|
||||||
|
|
@ -185,6 +195,7 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
|
||||||
await _timelineFragmentsBox.deleteAll(_timelineFragmentsBox.keys);
|
await _timelineFragmentsBox.deleteAll(_timelineFragmentsBox.keys);
|
||||||
await _outboundGroupSessionsBox.deleteAll(_outboundGroupSessionsBox.keys);
|
await _outboundGroupSessionsBox.deleteAll(_outboundGroupSessionsBox.keys);
|
||||||
await _presencesBox.deleteAll(_presencesBox.keys);
|
await _presencesBox.deleteAll(_presencesBox.keys);
|
||||||
|
await _clientBox.delete('prev_batch');
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
|
@ -244,6 +255,7 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
|
||||||
Future<Map<String, dynamic>> getClient(String name) async {
|
Future<Map<String, dynamic>> getClient(String name) async {
|
||||||
final map = <String, dynamic>{};
|
final map = <String, dynamic>{};
|
||||||
for (final key in _clientBox.keys) {
|
for (final key in _clientBox.keys) {
|
||||||
|
if (key == 'version') continue;
|
||||||
map[key] = await _clientBox.get(key);
|
map[key] = await _clientBox.get(key);
|
||||||
}
|
}
|
||||||
if (map.isEmpty) return null;
|
if (map.isEmpty) return null;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue