2020-04-18 11:48:21 +00:00
|
|
|
import 'dart:async';
|
|
|
|
|
2020-04-18 14:35:53 +00:00
|
|
|
import 'package:comunic/models/comment.dart';
|
2020-04-19 11:58:24 +00:00
|
|
|
import 'package:comunic/models/conversation_message.dart';
|
2020-04-18 11:48:21 +00:00
|
|
|
import 'package:event_bus/event_bus.dart';
|
2021-02-07 16:09:08 +00:00
|
|
|
import 'package:flutter_webrtc/flutter_webrtc.dart';
|
2020-04-18 11:48:21 +00:00
|
|
|
|
|
|
|
/// Events helper
|
|
|
|
///
|
|
|
|
/// @author Pierre Hubert
|
|
|
|
|
2020-04-20 07:02:54 +00:00
|
|
|
/// Invalid login token
|
|
|
|
class InvalidLoginTokensEvent {}
|
|
|
|
|
2020-04-18 11:48:21 +00:00
|
|
|
/// Main WebSocket closed
|
|
|
|
class WSClosedEvent {}
|
|
|
|
|
2020-04-18 12:14:54 +00:00
|
|
|
/// New number of notifications
|
|
|
|
class NewNumberNotifsEvent {
|
|
|
|
final int newNum;
|
|
|
|
|
|
|
|
NewNumberNotifsEvent(this.newNum);
|
|
|
|
}
|
|
|
|
|
2020-04-18 12:33:07 +00:00
|
|
|
/// New number of unread conversations
|
|
|
|
class NewNumberUnreadConversations {
|
|
|
|
final int newNum;
|
|
|
|
|
|
|
|
NewNumberUnreadConversations(this.newNum);
|
|
|
|
}
|
|
|
|
|
2020-04-18 14:35:53 +00:00
|
|
|
/// New comment
|
|
|
|
class NewCommentEvent {
|
|
|
|
final Comment comment;
|
|
|
|
|
|
|
|
NewCommentEvent(this.comment);
|
|
|
|
}
|
|
|
|
|
2020-04-18 14:46:55 +00:00
|
|
|
/// Updated comment
|
|
|
|
class UpdatedCommentEvent {
|
|
|
|
final Comment comment;
|
|
|
|
|
|
|
|
UpdatedCommentEvent(this.comment);
|
|
|
|
}
|
|
|
|
|
2020-04-18 14:57:00 +00:00
|
|
|
/// Deleted comment
|
|
|
|
class DeletedCommentEvent {
|
|
|
|
final int commentID;
|
|
|
|
|
|
|
|
DeletedCommentEvent(this.commentID);
|
|
|
|
}
|
|
|
|
|
2021-03-13 08:29:54 +00:00
|
|
|
/// Writing message in conversation event
|
|
|
|
class WritingMessageInConversationEvent {
|
|
|
|
final int convID;
|
|
|
|
final int userID;
|
|
|
|
|
|
|
|
WritingMessageInConversationEvent(this.convID, this.userID);
|
|
|
|
}
|
|
|
|
|
2020-04-19 11:58:24 +00:00
|
|
|
/// New conversation message
|
|
|
|
class NewConversationMessageEvent {
|
|
|
|
final ConversationMessage msg;
|
|
|
|
|
|
|
|
NewConversationMessageEvent(this.msg);
|
|
|
|
}
|
|
|
|
|
2020-04-19 12:16:35 +00:00
|
|
|
/// Updated conversation message
|
|
|
|
class UpdatedConversationMessageEvent {
|
|
|
|
final ConversationMessage msg;
|
|
|
|
|
|
|
|
UpdatedConversationMessageEvent(this.msg);
|
|
|
|
}
|
|
|
|
|
2020-04-19 12:29:01 +00:00
|
|
|
/// Deleted conversation message
|
|
|
|
class DeletedConversationMessageEvent {
|
|
|
|
final ConversationMessage msg;
|
|
|
|
|
|
|
|
DeletedConversationMessageEvent(this.msg);
|
|
|
|
}
|
2020-04-18 14:57:00 +00:00
|
|
|
|
2021-03-13 11:16:57 +00:00
|
|
|
/// Remove user from conversation
|
2021-03-13 12:52:18 +00:00
|
|
|
class RemovedUserFromConversationEvent {
|
2021-03-13 11:16:57 +00:00
|
|
|
final int convID;
|
|
|
|
final int userID;
|
|
|
|
|
2021-03-13 12:52:18 +00:00
|
|
|
RemovedUserFromConversationEvent(this.convID, this.userID);
|
|
|
|
}
|
|
|
|
|
|
|
|
/// Deleted conversation
|
|
|
|
class DeletedConversationEvent {
|
|
|
|
final int convID;
|
|
|
|
|
|
|
|
DeletedConversationEvent(this.convID);
|
2021-03-13 11:16:57 +00:00
|
|
|
}
|
|
|
|
|
2020-04-20 12:24:35 +00:00
|
|
|
/// User joined call event
|
|
|
|
class UserJoinedCallEvent {
|
|
|
|
final int callID;
|
|
|
|
final int userID;
|
|
|
|
|
|
|
|
UserJoinedCallEvent(this.callID, this.userID);
|
|
|
|
}
|
|
|
|
|
|
|
|
/// User left call event
|
|
|
|
class UserLeftCallEvent {
|
|
|
|
final int callID;
|
|
|
|
final int userID;
|
|
|
|
|
|
|
|
UserLeftCallEvent(this.callID, this.userID);
|
|
|
|
}
|
|
|
|
|
2020-04-20 14:23:33 +00:00
|
|
|
/// New call signal event
|
|
|
|
class NewCallSignalEvent {
|
|
|
|
final int callID;
|
|
|
|
final int peerID;
|
|
|
|
final RTCSessionDescription sessionDescription;
|
|
|
|
final RTCIceCandidate candidate;
|
|
|
|
|
|
|
|
const NewCallSignalEvent({
|
|
|
|
this.callID,
|
|
|
|
this.peerID,
|
|
|
|
this.sessionDescription,
|
|
|
|
this.candidate,
|
|
|
|
}) : assert(callID != null),
|
|
|
|
assert(peerID != null),
|
|
|
|
assert(sessionDescription != null || candidate != null);
|
|
|
|
}
|
|
|
|
|
2020-04-20 12:58:23 +00:00
|
|
|
/// Call peer ready event
|
|
|
|
class CallPeerReadyEvent {
|
|
|
|
final int callID;
|
|
|
|
final int peerID;
|
|
|
|
|
|
|
|
CallPeerReadyEvent(this.callID, this.peerID);
|
|
|
|
}
|
|
|
|
|
|
|
|
/// Call peer interrupted streaming event
|
|
|
|
class CallPeerInterruptedStreamingEvent {
|
|
|
|
final int callID;
|
|
|
|
final int peerID;
|
|
|
|
|
|
|
|
CallPeerInterruptedStreamingEvent(this.callID, this.peerID);
|
|
|
|
}
|
|
|
|
|
2020-04-20 12:32:57 +00:00
|
|
|
/// Call closed event
|
|
|
|
class CallClosedEvent {
|
|
|
|
final int callID;
|
|
|
|
|
|
|
|
CallClosedEvent(this.callID);
|
|
|
|
}
|
|
|
|
|
2020-04-18 11:48:21 +00:00
|
|
|
class EventsHelper {
|
|
|
|
static EventBus _mgr = EventBus();
|
|
|
|
|
|
|
|
/// Listen to event
|
|
|
|
///
|
|
|
|
/// Do not use this method directly. You should instead prefer to use
|
|
|
|
/// [SafeState.listen] to handle safely widgets lifecycle...
|
|
|
|
///
|
|
|
|
/// You can not register to global events
|
|
|
|
static StreamSubscription<T> on<T>(void onData(T event)) {
|
|
|
|
if (T == dynamic) throw Exception("Do not register to all events!");
|
|
|
|
|
|
|
|
final stream = _mgr.on<T>();
|
|
|
|
return stream.listen(onData);
|
|
|
|
}
|
|
|
|
|
|
|
|
/// Propagate an event
|
|
|
|
static void emit<T>(T event) {
|
|
|
|
_mgr.fire(event);
|
|
|
|
}
|
|
|
|
}
|