aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfiaxh <git@lightrise.org>2020-11-11 11:27:31 +0100
committerfiaxh <git@lightrise.org>2020-11-11 11:27:31 +0100
commit10adf716f3b94073f099dfb18ecdaf41dafcab2d (patch)
treec732f058d30a86092be3d92d1e3fbf40c9d7c1ac
parentb2c7e9dfff2e00549fc23ad8e531d77daa6c2738 (diff)
downloaddino-10adf716f3b94073f099dfb18ecdaf41dafcab2d.tar.gz
dino-10adf716f3b94073f099dfb18ecdaf41dafcab2d.zip
Fix incoming muc voice request notification
-rw-r--r--libdino/src/service/muc_manager.vala6
-rw-r--r--libdino/src/service/notification_events.vala4
-rw-r--r--main/src/ui/application.vala9
-rw-r--r--main/src/ui/notifications.vala7
-rw-r--r--xmpp-vala/src/module/xep/0045_muc/module.vala20
5 files changed, 27 insertions, 19 deletions
diff --git a/libdino/src/service/muc_manager.vala b/libdino/src/service/muc_manager.vala
index 8eba524d..178cc8f9 100644
--- a/libdino/src/service/muc_manager.vala
+++ b/libdino/src/service/muc_manager.vala
@@ -14,7 +14,7 @@ public class MucManager : StreamInteractionModule, Object {
public signal void room_info_updated(Account account, Jid muc_jid);
public signal void private_room_occupant_updated(Account account, Jid room, Jid occupant);
public signal void invite_received(Account account, Jid room_jid, Jid from_jid, string? password, string? reason);
- public signal void voice_request_received(Account account, Jid room_jid, Jid from_jid, string? nick, string? role, string? label);
+ public signal void voice_request_received(Account account, Jid room_jid, Jid from_jid, string nick);
public signal void received_occupant_role(Account account, Jid jid, Xep.Muc.Role? role);
public signal void bookmarks_updated(Account account, Set<Conference> conferences);
public signal void conference_added(Account account, Conference conference);
@@ -364,8 +364,8 @@ public class MucManager : StreamInteractionModule, Object {
stream_interactor.module_manager.get_module(account, Xep.Muc.Module.IDENTITY).invite_received.connect( (stream, room_jid, from_jid, password, reason) => {
invite_received(account, room_jid, from_jid, password, reason);
});
- stream_interactor.module_manager.get_module(account, Xep.Muc.Module.IDENTITY).voice_request_received.connect( (stream, room_jid, from_jid, nick, role, label) => {
- voice_request_received(account, room_jid, from_jid, nick, role, label);
+ stream_interactor.module_manager.get_module(account, Xep.Muc.Module.IDENTITY).voice_request_received.connect( (stream, room_jid, from_jid, nick) => {
+ voice_request_received(account, room_jid, from_jid, nick);
});
stream_interactor.module_manager.get_module(account, Xep.Muc.Module.IDENTITY).received_occupant_role.connect( (stream, from_jid, role) => {
received_occupant_role(account, from_jid, role);
diff --git a/libdino/src/service/notification_events.vala b/libdino/src/service/notification_events.vala
index 19d61d0f..f6ef7019 100644
--- a/libdino/src/service/notification_events.vala
+++ b/libdino/src/service/notification_events.vala
@@ -13,7 +13,7 @@ public class NotificationEvents : StreamInteractionModule, Object {
public signal void notify_subscription_request(Conversation conversation);
public signal void notify_connection_error(Account account, ConnectionManager.ConnectionError error);
public signal void notify_muc_invite(Account account, Jid room_jid, Jid from_jid, string? password, string? reason);
- public signal void notify_voice_request(Account account, Jid room_jid, Jid from_jid, string? nick, string? role, string? label);
+ public signal void notify_voice_request(Account account, Jid room_jid, Jid from_jid, string nick);
private StreamInteractor stream_interactor;
@@ -28,7 +28,7 @@ public class NotificationEvents : StreamInteractionModule, Object {
stream_interactor.get_module(ContentItemStore.IDENTITY).new_item.connect(on_content_item_received);
stream_interactor.get_module(PresenceManager.IDENTITY).received_subscription_request.connect(on_received_subscription_request);
stream_interactor.get_module(MucManager.IDENTITY).invite_received.connect((account, room_jid, from_jid, password, reason) => notify_muc_invite(account, room_jid, from_jid, password, reason));
- stream_interactor.get_module(MucManager.IDENTITY).voice_request_received.connect((account, room_jid, from_jid, nick, role, label) => notify_voice_request(account, room_jid, from_jid, nick, role, label));
+ stream_interactor.get_module(MucManager.IDENTITY).voice_request_received.connect((account, room_jid, from_jid, nick) => notify_voice_request(account, room_jid, from_jid, nick));
stream_interactor.connection_manager.connection_error.connect((account, error) => notify_connection_error(account, error));
}
diff --git a/main/src/ui/application.vala b/main/src/ui/application.vala
index 90c83562..7c473d2f 100644
--- a/main/src/ui/application.vala
+++ b/main/src/ui/application.vala
@@ -138,11 +138,14 @@ public class Dino.Ui.Application : Gtk.Application, Dino.Application {
});
add_action(accept_muc_invite_action);
- SimpleAction accept_voice_request_action = new SimpleAction("accept-voice-request", VariantType.INT32);
+ SimpleAction accept_voice_request_action = new SimpleAction("accept-voice-request", new VariantType.tuple(new VariantType[]{VariantType.INT32, VariantType.STRING}));
accept_voice_request_action.activate.connect((variant) => {
- Conversation? conversation = stream_interactor.get_module(ConversationManager.IDENTITY).get_conversation_by_id(variant.get_int32());
+ int conversation_id = variant.get_child_value(0).get_int32();
+ Conversation? conversation = stream_interactor.get_module(ConversationManager.IDENTITY).get_conversation_by_id(conversation_id);
if (conversation == null) return;
- stream_interactor.get_module(MucManager.IDENTITY).change_role(conversation.account, conversation.counterpart, conversation.nickname, "participant");
+
+ string nick = variant.get_child_value(1).get_string();
+ stream_interactor.get_module(MucManager.IDENTITY).change_role(conversation.account, conversation.counterpart, nick, "participant");
});
add_action(accept_voice_request_action);
diff --git a/main/src/ui/notifications.vala b/main/src/ui/notifications.vala
index c68ab0ff..134c757a 100644
--- a/main/src/ui/notifications.vala
+++ b/main/src/ui/notifications.vala
@@ -141,7 +141,7 @@ public class Notifications : Object {
GLib.Application.get_default().send_notification(null, notification);
}
- private async void on_voice_request_received(Account account, Jid room_jid, Jid from_jid, string? nick, string? role, string? label) {
+ private async void on_voice_request_received(Account account, Jid room_jid, Jid from_jid, string nick) {
Conversation? conversation = stream_interactor.get_module(ConversationManager.IDENTITY).get_conversation(room_jid, account, Conversation.Type.GROUPCHAT);
if (conversation == null) return;
@@ -156,9 +156,10 @@ public class Notifications : Object {
notification.set_icon(get_pixbuf_icon(jid_avatar));
} catch (Error e) { }
- notification.set_default_action_and_target_value("app.accept-voice-request", new Variant.int32(conversation.id));
+ Variant variant = new Variant.tuple(new Variant[] {new Variant.int32(conversation.id), new Variant.string(nick)});
+ notification.set_default_action_and_target_value("app.accept-voice-request", variant);
notification.add_button_with_target_value(_("Deny"), "app.deny-voice-request", conversation.id);
- notification.add_button_with_target_value(_("Accept"), "app.accept-voice-request", conversation.id);
+ notification.add_button_with_target_value(_("Accept"), "app.accept-voice-request", variant);
GLib.Application.get_default().send_notification(null, notification);
}
diff --git a/xmpp-vala/src/module/xep/0045_muc/module.vala b/xmpp-vala/src/module/xep/0045_muc/module.vala
index aef3796b..dcfe8ace 100644
--- a/xmpp-vala/src/module/xep/0045_muc/module.vala
+++ b/xmpp-vala/src/module/xep/0045_muc/module.vala
@@ -69,7 +69,7 @@ public class Module : XmppStreamModule {
public signal void received_occupant_role(XmppStream stream, Jid jid, Role? role);
public signal void subject_set(XmppStream stream, string? subject, Jid jid);
public signal void invite_received(XmppStream stream, Jid room_jid, Jid from_jid, string? password, string? reason);
- public signal void voice_request_received(XmppStream stream, Jid room_jid, Jid from_jid, string? nick, string? role, string? label);
+ public signal void voice_request_received(XmppStream stream, Jid room_jid, Jid from_jid, string nick);
public signal void room_info_updated(XmppStream stream, Jid muc_jid);
public signal void self_removed_from_room(XmppStream stream, Jid jid, StatusCode code);
@@ -559,8 +559,6 @@ public class ReceivedPipelineListener : StanzaListener<MessageStanza> {
Gee.List<StanzaNode>? fields = x_field_node.get_subnodes("field", DataForms.NS_URI);
Jid? from_jid = null;
string? nick = null;
- string? role = null;
- string? label = null;
if (fields.size!=0){
foreach (var field_node in fields){
@@ -579,13 +577,19 @@ public class ReceivedPipelineListener : StanzaListener<MessageStanza> {
}
else if (var_ == "muc#role"){
StanzaNode? value_node = field_node.get_subnode("value", DataForms.NS_URI);
- if (value_node != null) role = value_node.get_string_content();
- }
- else if (var_ == "muc#request_allow"){
- label = field_node.get_attribute("label");
+ if (value_node != null) {
+ if (value_node.get_string_content() != "participant") {
+ warning("Voice request with role other than participant");
+ }
+ }
}
}
- outer.voice_request_received(stream, message.from, from_jid, nick, role, label);
+ if (from_jid == null || nick == null) {
+ warning("Voice request without from_jid or nick");
+ return false;
+ }
+
+ outer.voice_request_received(stream, message.from, from_jid, nick);
return true;
}
}