Skip to content

Commit def4988

Browse files
committed
actions [nfc]: Move logOutAccount and unregisterToken under lib/model
Signed-off-by: Zixuan James Li <[email protected]>
1 parent 28c179a commit def4988

File tree

5 files changed

+39
-35
lines changed

5 files changed

+39
-35
lines changed

lib/model/actions.dart

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import 'dart:async';
2+
3+
import '../notifications/receive.dart';
4+
import 'store.dart';
5+
6+
// TODO: Make this a part of GlobalStore
7+
Future<void> logOutAccount(GlobalStore globalStore, int accountId) async {
8+
final account = globalStore.getAccount(accountId);
9+
if (account == null) return; // TODO(log)
10+
11+
// Unawaited, to not block removing the account on this request.
12+
unawaited(unregisterToken(globalStore, accountId));
13+
14+
await globalStore.removeAccount(accountId);
15+
}
16+
17+
Future<void> unregisterToken(GlobalStore globalStore, int accountId) async {
18+
final account = globalStore.getAccount(accountId);
19+
if (account == null) return; // TODO(log)
20+
21+
// TODO(#322) use actual acked push token; until #322, this is just null.
22+
final token = account.ackedPushToken
23+
// Try the current token as a fallback; maybe the server has registered
24+
// it and we just haven't recorded that fact in the client.
25+
?? NotificationService.instance.token.value;
26+
if (token == null) return;
27+
28+
final connection = globalStore.apiConnectionFromAccount(account);
29+
try {
30+
await NotificationService.unregisterToken(connection, token: token);
31+
} catch (e) {
32+
// TODO retry? handle failures?
33+
} finally {
34+
connection.close();
35+
}
36+
}

lib/widgets/actions.dart

-33
Original file line numberDiff line numberDiff line change
@@ -15,42 +15,9 @@ import '../api/model/narrow.dart';
1515
import '../api/route/messages.dart';
1616
import '../generated/l10n/zulip_localizations.dart';
1717
import '../model/narrow.dart';
18-
import '../model/store.dart';
19-
import '../notifications/receive.dart';
2018
import 'dialog.dart';
2119
import 'store.dart';
2220

23-
Future<void> logOutAccount(GlobalStore globalStore, int accountId) async {
24-
final account = globalStore.getAccount(accountId);
25-
if (account == null) return; // TODO(log)
26-
27-
// Unawaited, to not block removing the account on this request.
28-
unawaited(unregisterToken(globalStore, accountId));
29-
30-
await globalStore.removeAccount(accountId);
31-
}
32-
33-
Future<void> unregisterToken(GlobalStore globalStore, int accountId) async {
34-
final account = globalStore.getAccount(accountId);
35-
if (account == null) return; // TODO(log)
36-
37-
// TODO(#322) use actual acked push token; until #322, this is just null.
38-
final token = account.ackedPushToken
39-
// Try the current token as a fallback; maybe the server has registered
40-
// it and we just haven't recorded that fact in the client.
41-
?? NotificationService.instance.token.value;
42-
if (token == null) return;
43-
44-
final connection = globalStore.apiConnectionFromAccount(account);
45-
try {
46-
await NotificationService.unregisterToken(connection, token: token);
47-
} catch (e) {
48-
// TODO retry? handle failures?
49-
} finally {
50-
connection.close();
51-
}
52-
}
53-
5421
Future<void> markNarrowAsRead(BuildContext context, Narrow narrow) async {
5522
final store = PerAccountStoreWidget.of(context);
5623
final connection = store.connection;

lib/widgets/app.dart

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@ import 'package:flutter/scheduler.dart';
66

77
import '../generated/l10n/zulip_localizations.dart';
88
import '../log.dart';
9+
import '../model/actions.dart';
910
import '../model/localizations.dart';
1011
import '../model/store.dart';
1112
import '../notifications/display.dart';
1213
import 'about_zulip.dart';
13-
import 'actions.dart';
1414
import 'dialog.dart';
1515
import 'home.dart';
1616
import 'login.dart';

test/widgets/actions_test.dart

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import 'package:zulip/api/model/initial_snapshot.dart';
1212
import 'package:zulip/api/model/model.dart';
1313
import 'package:zulip/api/model/narrow.dart';
1414
import 'package:zulip/api/route/messages.dart';
15+
import 'package:zulip/model/actions.dart';
1516
import 'package:zulip/model/localizations.dart';
1617
import 'package:zulip/model/narrow.dart';
1718
import 'package:zulip/model/store.dart';

test/widgets/home_test.dart

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@ import 'package:flutter/material.dart';
33
import 'package:flutter_checks/flutter_checks.dart';
44
import 'package:flutter_test/flutter_test.dart';
55
import 'package:zulip/api/model/events.dart';
6+
import 'package:zulip/model/actions.dart';
67
import 'package:zulip/model/narrow.dart';
78
import 'package:zulip/model/store.dart';
89
import 'package:zulip/widgets/about_zulip.dart';
9-
import 'package:zulip/widgets/actions.dart';
1010
import 'package:zulip/widgets/app.dart';
1111
import 'package:zulip/widgets/app_bar.dart';
1212
import 'package:zulip/widgets/home.dart';

0 commit comments

Comments
 (0)