VoIP v1 implementation (#1161)
* Initial commit for VoIP v1 implementation * Added draft of event handlers for voip methods * Added event handlers for VoIP events, added rejectCall, added version tracking for call version for V0 and V1 compatibility * Added call events to the general message pipeline. Modified Call Reject mechanism * Added message delegates for new events. Modified hidden events. Updated handle events. * Updated implementation to keep track of calls on other devices * Fixed linting * Fixed code warnings * Fixed minor bugs * fixed ci * Added acceptNegotiation method definition when missing gstreamer * Fixed warnings * Fixed linting
This commit is contained in:
parent
8a4bb32b4a
commit
ac48c33286
19 changed files with 583 additions and 79 deletions
|
|
@ -138,6 +138,20 @@ struct RoomEventType
|
|||
{
|
||||
return qml_mtx_events::EventType::CallCandidates;
|
||||
}
|
||||
qml_mtx_events::EventType
|
||||
operator()(const mtx::events::Event<mtx::events::voip::CallSelectAnswer> &)
|
||||
{
|
||||
return qml_mtx_events::EventType::CallSelectAnswer;
|
||||
}
|
||||
qml_mtx_events::EventType operator()(const mtx::events::Event<mtx::events::voip::CallReject> &)
|
||||
{
|
||||
return qml_mtx_events::EventType::CallReject;
|
||||
}
|
||||
qml_mtx_events::EventType
|
||||
operator()(const mtx::events::Event<mtx::events::voip::CallNegotiate> &)
|
||||
{
|
||||
return qml_mtx_events::EventType::CallNegotiate;
|
||||
}
|
||||
// ::EventType::Type operator()(const Event<mtx::events::msg::Location> &e) { return
|
||||
// ::EventType::LocationMessage; }
|
||||
};
|
||||
|
|
@ -258,6 +272,15 @@ qml_mtx_events::fromRoomEventType(qml_mtx_events::EventType t)
|
|||
/// m.call.candidates
|
||||
case qml_mtx_events::CallCandidates:
|
||||
return mtx::events::EventType::CallCandidates;
|
||||
/// m.call.select_answer
|
||||
case qml_mtx_events::CallSelectAnswer:
|
||||
return mtx::events::EventType::CallSelectAnswer;
|
||||
/// m.call.reject
|
||||
case qml_mtx_events::CallReject:
|
||||
return mtx::events::EventType::CallReject;
|
||||
/// m.call.negotiate
|
||||
case qml_mtx_events::CallNegotiate:
|
||||
return mtx::events::EventType::CallNegotiate;
|
||||
/// m.room.canonical_alias
|
||||
case qml_mtx_events::CanonicalAlias:
|
||||
return mtx::events::EventType::RoomCanonicalAlias;
|
||||
|
|
@ -922,16 +945,22 @@ TimelineModel::addEvents(const mtx::responses::Timeline &timeline)
|
|||
}
|
||||
|
||||
if (std::holds_alternative<RoomEvent<voip::CallCandidates>>(e) ||
|
||||
std::holds_alternative<RoomEvent<voip::CallNegotiate>>(e) ||
|
||||
std::holds_alternative<RoomEvent<voip::CallInvite>>(e) ||
|
||||
std::holds_alternative<RoomEvent<voip::CallAnswer>>(e) ||
|
||||
std::holds_alternative<RoomEvent<voip::CallSelectAnswer>>(e) ||
|
||||
std::holds_alternative<RoomEvent<voip::CallReject>>(e) ||
|
||||
std::holds_alternative<RoomEvent<voip::CallHangUp>>(e))
|
||||
std::visit(
|
||||
[this](auto &event) {
|
||||
event.room_id = room_id_.toStdString();
|
||||
if constexpr (std::is_same_v<std::decay_t<decltype(event)>,
|
||||
RoomEvent<voip::CallAnswer>> ||
|
||||
std::is_same_v<std::decay_t<decltype(event)>,
|
||||
RoomEvent<voip::CallHangUp>>)
|
||||
if constexpr (
|
||||
std::is_same_v<std::decay_t<decltype(event)>, RoomEvent<voip::CallAnswer>> ||
|
||||
std::is_same_v<std::decay_t<decltype(event)>, RoomEvent<voip::CallInvite>> ||
|
||||
std::is_same_v<std::decay_t<decltype(event)>,
|
||||
RoomEvent<voip::CallSelectAnswer>> ||
|
||||
std::is_same_v<std::decay_t<decltype(event)>, RoomEvent<voip::CallReject>> ||
|
||||
std::is_same_v<std::decay_t<decltype(event)>, RoomEvent<voip::CallHangUp>>)
|
||||
emit newCallEvent(event);
|
||||
else {
|
||||
if (event.sender != http::client()->user_id().to_string())
|
||||
|
|
@ -1007,6 +1036,17 @@ isMessage(const mtx::events::RoomEvent<mtx::events::voip::CallHangUp> &)
|
|||
return true;
|
||||
}
|
||||
|
||||
auto
|
||||
isMessage(const mtx::events::RoomEvent<mtx::events::voip::CallReject> &)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
auto
|
||||
isMessage(const mtx::events::RoomEvent<mtx::events::voip::CallSelectAnswer> &)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
// Workaround. We also want to see a room at the top, if we just joined it
|
||||
auto
|
||||
isYourJoin(const mtx::events::StateEvent<mtx::events::state::Member> &e)
|
||||
|
|
@ -1503,6 +1543,23 @@ struct SendMessageVisitor
|
|||
sendRoomEvent<mtx::events::voip::CallHangUp, mtx::events::EventType::CallHangUp>(event);
|
||||
}
|
||||
|
||||
void operator()(const mtx::events::RoomEvent<mtx::events::voip::CallSelectAnswer> &event)
|
||||
{
|
||||
sendRoomEvent<mtx::events::voip::CallSelectAnswer,
|
||||
mtx::events::EventType::CallSelectAnswer>(event);
|
||||
}
|
||||
|
||||
void operator()(const mtx::events::RoomEvent<mtx::events::voip::CallReject> &event)
|
||||
{
|
||||
sendRoomEvent<mtx::events::voip::CallReject, mtx::events::EventType::CallReject>(event);
|
||||
}
|
||||
|
||||
void operator()(const mtx::events::RoomEvent<mtx::events::voip::CallNegotiate> &event)
|
||||
{
|
||||
sendRoomEvent<mtx::events::voip::CallNegotiate, mtx::events::EventType::CallNegotiate>(
|
||||
event);
|
||||
}
|
||||
|
||||
void operator()(const mtx::events::RoomEvent<mtx::events::msg::KeyVerificationRequest> &msg)
|
||||
{
|
||||
sendRoomEvent<mtx::events::msg::KeyVerificationRequest,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue