diff --git a/lib/helpers/calls_helper.dart b/lib/helpers/calls_helper.dart index f02e673..1208ac4 100644 --- a/lib/helpers/calls_helper.dart +++ b/lib/helpers/calls_helper.dart @@ -1,5 +1,7 @@ import 'package:comunic/helpers/websocket_helper.dart'; +import 'package:comunic/lists/call_members_list.dart'; import 'package:comunic/models/call_config.dart'; +import 'package:comunic/models/call_member.dart'; /// Calls helper /// @@ -21,4 +23,15 @@ class CallsHelper { iceServers: response["iceServers"].cast(), ); } + + /// Get current call members + static Future getMembers(int callID) async => + CallMembersList() + ..addAll((await ws("calls/members", {"callID": callID})) + .map((f) => CallMember( + id: f["userID"], + status: f["ready"] ? MemberStatus.READY : MemberStatus.JOINED, + )) + .toList() + .cast()); } diff --git a/lib/lists/call_members_list.dart b/lib/lists/call_members_list.dart new file mode 100644 index 0000000..2692d48 --- /dev/null +++ b/lib/lists/call_members_list.dart @@ -0,0 +1,8 @@ +import 'package:comunic/lists/abstract_list.dart'; +import 'package:comunic/models/call_member.dart'; + +/// Call members list +/// +/// @author Pierre Hubert + +class CallMembersList extends AbstractList {} \ No newline at end of file diff --git a/lib/models/call_member.dart b/lib/models/call_member.dart new file mode 100644 index 0000000..e077507 --- /dev/null +++ b/lib/models/call_member.dart @@ -0,0 +1,18 @@ +import 'package:flutter/material.dart'; + +/// Single call member information +/// +/// @author Pierre Hubert + +enum MemberStatus { JOINED, READY } + +class CallMember { + final int id; + final MemberStatus status; + + const CallMember({ + @required this.id, + @required this.status, + }) : assert(id != null), + assert(status != null); +} diff --git a/lib/ui/screens/call_screen.dart b/lib/ui/screens/call_screen.dart index 44d7b87..f83ba16 100644 --- a/lib/ui/screens/call_screen.dart +++ b/lib/ui/screens/call_screen.dart @@ -1,5 +1,6 @@ import 'package:comunic/helpers/calls_helper.dart'; import 'package:comunic/helpers/conversations_helper.dart'; +import 'package:comunic/lists/call_members_list.dart'; import 'package:comunic/models/call_config.dart'; import 'package:comunic/models/conversation.dart'; import 'package:comunic/ui/widgets/comunic_back_button_widget.dart'; @@ -33,6 +34,7 @@ class _CallScreenState extends SafeState { String _convName; CallConfig _conf; var _error = false; + CallMembersList _membersList; @override void initState() { @@ -63,6 +65,9 @@ class _CallScreenState extends SafeState { // Get call configuration _conf = await CallsHelper.getConfig(); + + // Get current members of the call + _membersList = await CallsHelper.getMembers(convID); } catch (e, stack) { print("Could not initialize call! $e\n$stack"); setState(() => _error = true); @@ -92,8 +97,8 @@ class _CallScreenState extends SafeState { /// Build widget body Widget _buildBody() { + // Handle errors if (_error) - // Handle errors return buildErrorCard(tr("Could not initialize call!"), actions: [ MaterialButton( onPressed: () => _initCall(),