Adjust JMI vs direct calling order
This commit is contained in:
parent
4c6664a365
commit
6b976cdb66
|
@ -83,7 +83,19 @@ namespace Dino {
|
||||||
we_should_send_video[call] = video;
|
we_should_send_video[call] = video;
|
||||||
we_should_send_audio[call] = true;
|
we_should_send_audio[call] = true;
|
||||||
|
|
||||||
if (has_jmi_resources(conversation)) {
|
Gee.List<Jid> call_resources = yield get_call_resources(conversation);
|
||||||
|
|
||||||
|
bool do_jmi = false;
|
||||||
|
Jid? jid_for_direct = null;
|
||||||
|
if (yield contains_jmi_resources(conversation.account, call_resources)) {
|
||||||
|
do_jmi = true;
|
||||||
|
} else if (!call_resources.is_empty) {
|
||||||
|
jid_for_direct = call_resources[0];
|
||||||
|
} else if (has_jmi_resources(conversation)) {
|
||||||
|
do_jmi = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (do_jmi) {
|
||||||
XmppStream? stream = stream_interactor.get_stream(conversation.account);
|
XmppStream? stream = stream_interactor.get_stream(conversation.account);
|
||||||
jmi_call[conversation.account] = call;
|
jmi_call[conversation.account] = call;
|
||||||
jmi_video[conversation.account] = video;
|
jmi_video[conversation.account] = video;
|
||||||
|
@ -92,19 +104,14 @@ namespace Dino {
|
||||||
call_by_sid[call.account][jmi_sid[conversation.account]] = call;
|
call_by_sid[call.account][jmi_sid[conversation.account]] = call;
|
||||||
|
|
||||||
var descriptions = new ArrayList<StanzaNode>();
|
var descriptions = new ArrayList<StanzaNode>();
|
||||||
descriptions.add(new StanzaNode.build("description", "urn:xmpp:jingle:apps:rtp:1").add_self_xmlns().put_attribute("media", "audio"));
|
descriptions.add(new StanzaNode.build("description", Xep.JingleRtp.NS_URI).add_self_xmlns().put_attribute("media", "audio"));
|
||||||
if (video) {
|
if (video) {
|
||||||
descriptions.add(new StanzaNode.build("description", "urn:xmpp:jingle:apps:rtp:1").add_self_xmlns().put_attribute("media", "video"));
|
descriptions.add(new StanzaNode.build("description", Xep.JingleRtp.NS_URI).add_self_xmlns().put_attribute("media", "video"));
|
||||||
}
|
}
|
||||||
|
|
||||||
stream.get_module(Xmpp.Xep.JingleMessageInitiation.Module.IDENTITY).send_session_propose_to_peer(stream, conversation.counterpart, jmi_sid[call.account], descriptions);
|
stream.get_module(Xmpp.Xep.JingleMessageInitiation.Module.IDENTITY).send_session_propose_to_peer(stream, conversation.counterpart, jmi_sid[call.account], descriptions);
|
||||||
} else {
|
} else if (jid_for_direct != null) {
|
||||||
Gee.List<Jid> call_resources = yield get_call_resources(conversation);
|
yield call_resource(conversation.account, jid_for_direct, call, video);
|
||||||
if (call_resources.size == 0) {
|
|
||||||
warning("No call resources");
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
yield call_resource(conversation.account, call_resources[0], call, video);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
conversation.last_active = call.time;
|
conversation.last_active = call.time;
|
||||||
|
@ -286,6 +293,17 @@ namespace Dino {
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async bool contains_jmi_resources(Account account, Gee.List<Jid> full_jids) {
|
||||||
|
XmppStream? stream = stream_interactor.get_stream(account);
|
||||||
|
if (stream == null) return false;
|
||||||
|
|
||||||
|
foreach (Jid full_jid in full_jids) {
|
||||||
|
bool does_jmi = yield stream_interactor.get_module(EntityInfo.IDENTITY).has_feature(account, full_jid, Xep.JingleMessageInitiation.NS_URI);
|
||||||
|
if (does_jmi) return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
private bool has_jmi_resources(Conversation conversation) {
|
private bool has_jmi_resources(Conversation conversation) {
|
||||||
int64 jmi_resources = db.entity.select()
|
int64 jmi_resources = db.entity.select()
|
||||||
.with(db.entity.jid_id, "=", db.get_jid_id(conversation.counterpart))
|
.with(db.entity.jid_id, "=", db.get_jid_id(conversation.counterpart))
|
||||||
|
|
Loading…
Reference in a new issue