@@ -995,24 +995,27 @@ class UpdateMachine {
995
995
}
996
996
}
997
997
998
+ Future <void > updateZulipVersionData (ZulipVersionData data) async {
999
+ account = globalStore.getAccount (accountId)! ;
1000
+ if (data.zulipVersion != account.zulipVersion
1001
+ || data.zulipMergeBase != account.zulipMergeBase
1002
+ || data.zulipFeatureLevel != account.zulipFeatureLevel) {
1003
+ account = await globalStore.updateAccount (accountId, AccountsCompanion (
1004
+ zulipVersion: Value (data.zulipVersion),
1005
+ zulipMergeBase: Value (data.zulipMergeBase),
1006
+ zulipFeatureLevel: Value (data.zulipFeatureLevel)));
1007
+ connection.zulipFeatureLevel = data.zulipFeatureLevel;
1008
+ }
1009
+ }
1010
+
998
1011
final stopwatch = Stopwatch ()..start ();
999
1012
final initialSnapshot = await _registerQueueWithRetry (connection,
1000
1013
stopAndThrowIfNoAccount: stopAndThrowIfNoAccount);
1001
1014
final t = (stopwatch..stop ()).elapsed;
1002
1015
assert (debugLog ("initial fetch time: ${t .inMilliseconds }ms" ));
1003
1016
1004
- // `!` is OK because _registerQueueWithRetry would have thrown if no account
1005
- account = globalStore.getAccount (accountId)! ;
1006
- if (initialSnapshot.zulipVersion != account.zulipVersion
1007
- || initialSnapshot.zulipMergeBase != account.zulipMergeBase
1008
- || initialSnapshot.zulipFeatureLevel != account.zulipFeatureLevel) {
1009
- account = await globalStore.updateAccount (accountId, AccountsCompanion (
1010
- zulipVersion: Value (initialSnapshot.zulipVersion),
1011
- zulipMergeBase: Value (initialSnapshot.zulipMergeBase),
1012
- zulipFeatureLevel: Value (initialSnapshot.zulipFeatureLevel),
1013
- ));
1014
- connection.zulipFeatureLevel = initialSnapshot.zulipFeatureLevel;
1015
- }
1017
+ final zulipVersionData = ZulipVersionData .fromInitialSnapshot (initialSnapshot);
1018
+ await updateZulipVersionData (zulipVersionData);
1016
1019
1017
1020
final store = PerAccountStore .fromInitialSnapshot (
1018
1021
globalStore: globalStore,
@@ -1481,6 +1484,26 @@ class UpdateMachine {
1481
1484
String toString () => '${objectRuntimeType (this , 'UpdateMachine' )}#${shortHash (this )}' ;
1482
1485
}
1483
1486
1487
+ /// The fields 'zulip_version', 'zulip_merge_base', and 'zulip_feature_level'
1488
+ /// from a /register response.
1489
+ class ZulipVersionData {
1490
+ const ZulipVersionData ({
1491
+ required this .zulipVersion,
1492
+ required this .zulipMergeBase,
1493
+ required this .zulipFeatureLevel,
1494
+ });
1495
+
1496
+ factory ZulipVersionData .fromInitialSnapshot (InitialSnapshot initialSnapshot) =>
1497
+ ZulipVersionData (
1498
+ zulipVersion: initialSnapshot.zulipVersion,
1499
+ zulipMergeBase: initialSnapshot.zulipMergeBase,
1500
+ zulipFeatureLevel: initialSnapshot.zulipFeatureLevel);
1501
+
1502
+ final String zulipVersion;
1503
+ final String ? zulipMergeBase;
1504
+ final int zulipFeatureLevel;
1505
+ }
1506
+
1484
1507
class _EventHandlingException implements Exception {
1485
1508
final Object cause;
1486
1509
final Event event;
0 commit comments