start_ function
Future<SpaceData?>
start_({})
Implementation
Future<SpaceData?> start_({
String? accountAddress,
Signer? signer,
String? pgpPrivateKey,
required String spaceId,
required Function(ProgressHookType) progressHook,
required Function(Room?) updateRoom,
}) async {
try {
accountAddress ??= getCachedWallet()?.address;
signer ??= getCachedWallet()?.signer;
final space = await getSpaceById(spaceId: spaceId);
if (space.status != ChatStatus.PENDING) {
throw Exception(
'Unable to start the space as it is not in the pending state');
}
final convertedMembers =
getSpacesMembersList(space.members, space.pendingMembers);
final convertedAdmins =
getSpaceAdminsList(space.members, space.pendingMembers);
////Create Stream
final stream = await createStreamService(spaceName: space.spaceName);
///Create room
final roomId = await createLivePeerRoom();
///add local user as participant
final room = await addSpeakingParticipant(
roomId: roomId,
participantName: accountAddress ?? signer!.getAddress(),
);
updateRoom(room);
///connect room to stream
await startLiveStream(roomId: roomId, streamId: stream.streamId!);
final group = await updateGroup(
chatId: spaceId,
groupName: space.spaceName,
groupImage: space.spaceImage,
groupDescription: space.spaceDescription!,
members: convertedMembers,
admins: convertedAdmins,
signer: signer,
meta: jsonEncode({
"playbackId": stream.playbackId,
"roomId": roomId,
"streamId": stream.streamId!
}),
scheduleAt: space.scheduleAt,
scheduleEnd: space.scheduleEnd,
status: ChatStatus.ACTIVE,
isPublic: space.isPublic,
pgpPrivateKey: pgpPrivateKey,
);
if (group != null) {
final space = groupDtoToSpaceDto(group);
final liveSpaceData = LiveSpaceData(
host: AdminPeer(
address: accountAddress ?? signer!.getAddress(),
audio: false,
emojiReactions: EmojiReaction(),
),
speakers: [],
listeners: [],
);
String metaMessageContent = CHAT.META_SPACE_START;
sendLiveSpaceData(
messageType: MessageType.META,
updatedLiveSpaceData: liveSpaceData,
content: metaMessageContent,
affectedAddresses: [accountAddress ?? signer!.getAddress()],
spaceId: spaceId,
);
final result = SpaceData.fromSpaceDTO(space, liveSpaceData);
return result;
} else {
throw Exception('Error while updating Space : $spaceId');
}
} catch (e) {
print('[Push SDK] - API - Error - API update -: $e');
rethrow;
}
}