Skip to content

Commit de5e36e

Browse files
authored
chore: refactor chat model (#85)
1 parent 4bc10f2 commit de5e36e

File tree

49 files changed

+1068
-1006
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+1068
-1006
lines changed

lib/authentication/authentication_model.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,10 @@ class AuthenticationModel extends SafeChangeNotifier {
2020

2121
Stream<LoginState> get loginStateStream => _client.onLoginStateChanged.stream;
2222
bool get isLogged => _client.isLogged();
23+
String? get loggedInUserId => !_client.isLogged() ? null : _client.userID;
24+
String? get homeServerId => _client.homeserver?.host;
25+
String? get homeServerName =>
26+
_client.homeserver?.host.replaceAll('matrix-client.', '');
2327

2428
Stream<UiaRequest<dynamic>> get onUiaRequestStream =>
2529
_client.onUiaRequest.stream;

lib/chat_master/view/active_space_info.dart

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import 'package:flutter/material.dart';
22
import 'package:watch_it/watch_it.dart';
33
import 'package:yaru/yaru.dart';
4+
import '../../chat_room/create_or_edit/create_or_edit_room_model.dart';
45
import '../../common/chat_model.dart';
56
import '../../common/view/build_context_x.dart';
67
import '../../common/view/sliver_sticky_panel.dart';
@@ -20,6 +21,23 @@ class ActiveSpaceInfo extends StatelessWidget with WatchItMixin {
2021
return const SliverToBoxAdapter(child: SizedBox.shrink());
2122
}
2223

24+
final roomName =
25+
watchStream(
26+
(CreateOrEditRoomModel m) => m.getJoinedRoomNameStream(activeSpace),
27+
initialValue: activeSpace.name,
28+
preserveState: false,
29+
).data ??
30+
activeSpace.name;
31+
32+
final canonicalAlias =
33+
watchStream(
34+
(CreateOrEditRoomModel m) =>
35+
m.getJoinedRoomCanonicalAliasStream(activeSpace),
36+
initialValue: activeSpace.canonicalAlias,
37+
preserveState: false,
38+
).data ??
39+
activeSpace.canonicalAlias;
40+
2341
return SliverStickyPanel(
2442
padding: EdgeInsets.zero,
2543
child: Padding(
@@ -29,7 +47,7 @@ class ActiveSpaceInfo extends StatelessWidget with WatchItMixin {
2947
top: kSmallPadding,
3048
),
3149
child: ListTile(
32-
title: Text(activeSpace.getLocalizedDisplayname()),
50+
title: Text(roomName),
3351
subtitle: Align(
3452
alignment: Alignment.centerLeft,
3553
child: InkWell(
@@ -39,7 +57,7 @@ class ActiveSpaceInfo extends StatelessWidget with WatchItMixin {
3957
content: CopyClipboardContent(text: activeSpace.canonicalAlias),
4058
),
4159
child: Text(
42-
activeSpace.canonicalAlias,
60+
canonicalAlias,
4361
style: textTheme.labelMedium?.copyWith(
4462
color: theme.colorScheme.link,
4563
),

lib/chat_master/view/add_and_remove_from_space_dialog.dart

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@ import 'package:future_loading_dialog/future_loading_dialog.dart';
44
import 'package:matrix/matrix.dart';
55
import 'package:watch_it/watch_it.dart';
66

7+
import '../../chat_room/create_or_edit/create_or_edit_room_model.dart';
78
import '../../common/chat_model.dart';
89
import '../../common/room_x.dart';
910
import '../../common/view/confirm.dart';
10-
import '../../common/view/snackbars.dart';
1111
import '../../l10n/l10n.dart';
1212

1313
class RemoveFromSpaceDialog extends StatefulWidget
@@ -59,12 +59,10 @@ class _RemoveFromSpaceDialogState extends State<RemoveFromSpaceDialog> {
5959
confirmEnabled: _selectedSpace != null,
6060
onConfirm: () => showFutureLoadingDialog(
6161
context: context,
62-
future: () =>
63-
di<ChatModel>().removeFromSpace(widget.room, _selectedSpace!),
64-
onError: (error) {
65-
showErrorSnackBar(context, error.toString());
66-
return error.toString();
67-
},
62+
future: () => di<CreateOrEditRoomModel>().removeFromSpace(
63+
widget.room,
64+
_selectedSpace!,
65+
),
6866
),
6967
);
7068
}
@@ -110,11 +108,10 @@ class _AddToSpaceDialogState extends State<AddToSpaceDialog> {
110108
confirmEnabled: _selectedSpace != null,
111109
onConfirm: () => showFutureLoadingDialog(
112110
context: context,
113-
onError: (error) {
114-
showErrorSnackBar(context, error.toString());
115-
return error.toString();
116-
},
117-
future: () => di<ChatModel>().addToSpace(widget.room, _selectedSpace!),
111+
future: () => di<CreateOrEditRoomModel>().addToSpace(
112+
widget.room,
113+
_selectedSpace!,
114+
),
118115
),
119116
);
120117
}

lib/chat_master/view/chat_master_tile_menu.dart

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import '../../chat_room/titlebar/chat_room_notification_button.dart';
99
import '../../common/chat_model.dart';
1010
import '../../common/view/build_context_x.dart';
1111
import '../../common/view/confirm.dart';
12-
import '../../common/view/snackbars.dart';
1312
import '../../l10n/l10n.dart';
1413
import 'add_and_remove_from_space_dialog.dart';
1514

@@ -78,11 +77,7 @@ class _ChatMasterTileMenuState extends State<ChatMasterTileMenu> {
7877
onConfirm: () =>
7978
showFutureLoadingDialog(
8079
context: context,
81-
onError: (error) {
82-
showErrorSnackBar(context, error.toString());
83-
return error.toString();
84-
},
85-
future: () => di<ChatModel>().leaveRoom(
80+
future: () => di<CreateOrEditRoomModel>().leaveRoom(
8681
room: widget.room,
8782
forget: false,
8883
),

lib/chat_master/view/chat_new_chat_popup_menu_button.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import 'package:flutter/material.dart';
22
import 'package:yaru/yaru.dart';
33

4-
import '../../chat_room/create_or_edit/create_direct_chat_dialog.dart';
5-
import '../../chat_room/create_or_edit/create_or_edit_room_dialog.dart';
4+
import '../../chat_room/create_or_edit/view/create_direct_chat_dialog.dart';
5+
import '../../chat_room/create_or_edit/view/create_or_edit_room_dialog.dart';
66
import '../../l10n/l10n.dart';
77
import 'chat_rooms_or_spaces_search_dialog.dart';
88

lib/chat_master/view/chat_room_master_tile.dart

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@ import 'package:watch_it/watch_it.dart';
55
import 'package:yaru/yaru.dart';
66

77
import '../../chat_room/common/view/chat_invitation_dialog.dart';
8+
import '../../chat_room/create_or_edit/create_or_edit_room_model.dart';
89
import '../../chat_room/input/draft_model.dart';
910
import '../../chat_room/titlebar/chat_room_pin_button.dart';
1011
import '../../common/chat_model.dart';
1112
import '../../common/view/scaffold_state_x.dart';
12-
import '../../common/view/snackbars.dart';
1313
import '../../common/view/ui_constants.dart';
1414
import '../../l10n/l10n.dart';
1515
import 'chat_master_detail_page.dart';
@@ -70,11 +70,8 @@ class ChatRoomMasterTile extends StatelessWidget with WatchItMixin {
7070
} else {
7171
showFutureLoadingDialog(
7272
context: context,
73-
onError: (error) {
74-
showErrorSnackBar(context, error.toString());
75-
return error.toString();
76-
},
77-
future: () => chatModel.joinRoom(room),
73+
future: () =>
74+
di<CreateOrEditRoomModel>().joinRoom(room),
7875
).then((result) {
7976
if (result.asValue?.value != null) {
8077
chatModel.setSelectedRoom(

lib/chat_master/view/chat_space_control_panel.dart

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,13 @@ import 'package:future_loading_dialog/future_loading_dialog.dart';
33
import 'package:watch_it/watch_it.dart';
44
import 'package:yaru/yaru.dart';
55

6+
import '../../chat_room/create_or_edit/create_or_edit_room_model.dart';
67
import '../../common/view/confirm.dart';
78
import '../../common/view/sliver_sticky_panel.dart';
89
import '../../common/view/snackbars.dart';
910
import '../../common/view/ui_constants.dart';
1011
import '../../l10n/l10n.dart';
11-
import '../../chat_room/create_or_edit/create_or_edit_room_dialog.dart';
12+
import '../../chat_room/create_or_edit/view/create_or_edit_room_dialog.dart';
1213
import '../../common/chat_model.dart';
1314
import '../../common/search_model.dart';
1415

@@ -70,11 +71,7 @@ class ChatSpaceControlPanel extends StatelessWidget with WatchItMixin {
7071
Navigator.of(context).pop();
7172
showFutureLoadingDialog(
7273
context: context,
73-
onError: (error) {
74-
showErrorSnackBar(context, error.toString());
75-
return error.toString();
76-
},
77-
future: () => di<ChatModel>().leaveRoom(
74+
future: () => di<CreateOrEditRoomModel>().leaveRoom(
7875
room: activeSpace,
7976
forget: false,
8077
),

lib/chat_master/view/chat_spaces_search_list.dart

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@ import 'package:future_loading_dialog/future_loading_dialog.dart';
33
import 'package:watch_it/watch_it.dart';
44
import 'package:yaru/yaru.dart';
55

6+
import '../../chat_room/create_or_edit/create_or_edit_room_model.dart';
7+
import '../../common/chat_model.dart';
68
import '../../common/rooms_filter.dart';
9+
import '../../common/search_model.dart';
10+
import '../../common/view/chat_avatar.dart';
711
import '../../common/view/common_widgets.dart';
812
import '../../common/view/confirm.dart';
9-
import '../../common/view/snackbars.dart';
1013
import '../../common/view/ui_constants.dart';
11-
import '../../common/chat_model.dart';
12-
import '../../common/search_model.dart';
13-
import '../../common/view/chat_avatar.dart';
1414
import '../../l10n/l10n.dart';
1515

1616
class ChatSpacesSearchList extends StatelessWidget with WatchItMixin {
@@ -75,11 +75,8 @@ class ChatSpacesSearchList extends StatelessWidget with WatchItMixin {
7575
Navigator.of(context).pop();
7676
showFutureLoadingDialog(
7777
context: context,
78-
future: () => di<ChatModel>().knockOrJoinRoomChunk(chunk),
79-
onError: (error) {
80-
showErrorSnackBar(context, error.toString());
81-
return error.toString();
82-
},
78+
future: () =>
79+
di<CreateOrEditRoomModel>().knockOrJoinRoomChunk(chunk),
8380
).then((result) {
8481
if (result.asValue?.value != null) {
8582
di<ChatModel>().setSelectedRoom(result.asValue!.value!);

lib/chat_room/common/view/chat_invitation_dialog.dart

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ import 'package:future_loading_dialog/future_loading_dialog.dart';
33
import 'package:matrix/matrix.dart';
44
import 'package:watch_it/watch_it.dart';
55

6-
import '../../../common/view/confirm.dart';
7-
import '../../../common/view/snackbars.dart';
86
import '../../../common/chat_model.dart';
7+
import '../../../common/view/confirm.dart';
8+
import '../../create_or_edit/create_or_edit_room_model.dart';
99

1010
class ChatInvitationDialog extends StatelessWidget with WatchItMixin {
1111
const ChatInvitationDialog({super.key, required this.room});
@@ -18,11 +18,8 @@ class ChatInvitationDialog extends StatelessWidget with WatchItMixin {
1818
onCancel: () =>
1919
showFutureLoadingDialog(
2020
context: context,
21-
onError: (error) {
22-
showErrorSnackBar(context, error.toString());
23-
return error.toString();
24-
},
25-
future: () => di<ChatModel>().leaveRoom(room: room, forget: false),
21+
future: () =>
22+
di<CreateOrEditRoomModel>().leaveRoom(room: room, forget: false),
2623
).then((_) {
2724
if (context.mounted) {
2825
di<ChatModel>().setSelectedRoom(null);
@@ -31,11 +28,7 @@ class ChatInvitationDialog extends StatelessWidget with WatchItMixin {
3128
onConfirm: () =>
3229
showFutureLoadingDialog(
3330
context: context,
34-
onError: (error) {
35-
showErrorSnackBar(context, error.toString());
36-
return error.toString();
37-
},
38-
future: () => di<ChatModel>().joinRoom(room),
31+
future: () => di<CreateOrEditRoomModel>().joinRoom(room),
3932
).then((result) {
4033
if (result.asValue?.value != null) {
4134
di<ChatModel>().setSelectedRoom(result.asValue!.value);

lib/chat_room/common/view/chat_room_page.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import '../../../common/view/snackbars.dart';
1616
import '../../../common/view/theme.dart';
1717
import '../../../common/view/ui_constants.dart';
1818
import '../../../l10n/l10n.dart';
19+
import '../../create_or_edit/create_or_edit_room_model.dart';
1920
import '../../info_drawer/chat_room_info_drawer.dart';
2021
import '../../input/draft_model.dart';
2122
import '../../input/view/chat_input.dart';
@@ -86,7 +87,7 @@ class _ChatRoomPageState extends State<ChatRoomPage> {
8687
final unAcceptedDirectChat = !widget.room.isUnacceptedDirectChat
8788
? false
8889
: watchStream(
89-
(ChatModel m) => m
90+
(CreateOrEditRoomModel m) => m
9091
.getUsersStreamOfJoinedRoom(
9192
widget.room,
9293
membershipFilter: [Membership.invite],

0 commit comments

Comments
 (0)