diff options
| author | fiaxh <git@lightrise.org> | 2026-08-22 21:02:05 +0200 |
|---|---|---|
| committer | fiaxh <git@lightrise.org> | 2026-10-23 16:22:06 +0200 |
| commit | deea3cae8e848388ee962a92de58dc42b77915d1 (patch) | |
| tree | 48cc3b5f2c2b1c71cdaeaac869ff8145d0fa1bd6 /xmpp-vala/src/module/xep/0045_muc/module.vala | |
| parent | 8d49d83b3b45ab22d7b9d945c4b32296b07cb49e (diff) | |
Store MUC features only in EntityInfo (not in MucFlag), update on change
Diffstat (limited to 'xmpp-vala/src/module/xep/0045_muc/module.vala')
| -rw-r--r-- | xmpp-vala/src/module/xep/0045_muc/module.vala | 71 |
1 files changed, 8 insertions, 63 deletions
diff --git a/xmpp-vala/src/module/xep/0045_muc/module.vala b/xmpp-vala/src/module/xep/0045_muc/module.vala index ad929b00..76045172 100644 --- a/xmpp-vala/src/module/xep/0045_muc/module.vala +++ b/xmpp-vala/src/module/xep/0045_muc/module.vala @@ -8,6 +8,12 @@ private const string NS_URI_OWNER = NS_URI + "#owner"; public const string NS_URI_USER = NS_URI + "#user"; private const string NS_URI_REQUEST = NS_URI + "#request"; +public const string FEATURE_STABLE_ID = "http://jabber.org/protocol/muc#stable_id"; +public const string FEATURE_MEMBERS_ONLY = "muc_membersonly"; +public const string FEATURE_MODERATED = "muc_moderated"; +public const string FEATURE_NON_ANONYMOUS = "muc_nonanonymous"; +public const string FEATURE_PASSWORD_PROTECTED = "muc_passwordprotected"; + public enum MucEnterError { PASSWORD_REQUIRED, BANNED, @@ -34,26 +40,6 @@ public enum Role { VISITOR } -public enum Feature { - REGISTER, - ROOMCONFIG, - ROOMINFO, - HIDDEN, - MEMBERS_ONLY, - MODERATED, - NON_ANONYMOUS, - OPEN, - PASSWORD_PROTECTED, - PERSISTENT, - PUBLIC, - ROOMS, - SEMI_ANONYMOUS, - STABLE_ID, - TEMPORARY, - UNMODERATED, - UNSECURED -} - public static void add_muc_pm_message_stanza_x_node(MessageStanza message_stanza) { StanzaNode x_node = new StanzaNode.build("x", "http://jabber.org/protocol/muc#user").add_self_xmlns(); message_stanza.stanza.put_node(x_node); @@ -74,6 +60,7 @@ public class Module : XmppStreamModule { 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); + public signal void room_info_changed(XmppStream stream, Jid muc_jid); public signal void room_info_updated(XmppStream stream, Jid muc_jid); public signal void self_removed_from_room(XmppStream stream, Jid jid, StatusCode code); @@ -299,7 +286,7 @@ public class Module : XmppStreamModule { if (status_codes.contains(StatusCode.CONFIG_CHANGE_NON_PRIVACY) || status_codes.contains(StatusCode.NON_ANONYMOUS) || status_codes.contains(StatusCode.SEMI_ANONYMOUS)) { - query_room_info.begin(stream, message.from.bare_jid); + room_info_changed(stream, message.from.bare_jid); } } } @@ -358,9 +345,6 @@ public class Module : XmppStreamModule { if (status_codes.contains(StatusCode.SELF_PRESENCE)) { Jid bare_jid = presence.from.bare_jid; if (flag.get_enter_id(bare_jid) != null) { - - query_room_info.begin(stream, bare_jid); - flag.finish_muc_enter(bare_jid); var join_result = new JoinResult() { nick=presence.from.resourcepart, newly_created=status_codes.contains(StatusCode.NEW_ROOM_CREATED) }; flag.enter_futures[bare_jid].set_value(join_result); @@ -430,45 +414,6 @@ public class Module : XmppStreamModule { } } - private async void query_room_info(XmppStream stream, Jid jid) { - ServiceDiscovery.InfoResult? info_result = yield stream.get_module(ServiceDiscovery.Module.IDENTITY).request_info(stream, jid); - if (info_result == null) return; - - Gee.List<Feature> features = new ArrayList<Feature>(); - - foreach (ServiceDiscovery.Identity identity in info_result.identities) { - if (identity.category == "conference" && identity.name != null) { - stream.get_flag(Flag.IDENTITY).set_room_name(jid, identity.name); - } - } - - foreach (string feature in info_result.features) { - Feature? parsed = null; - switch (feature) { - case "http://jabber.org/protocol/muc#register": parsed = Feature.REGISTER; break; - case "http://jabber.org/protocol/muc#roomconfig": parsed = Feature.ROOMCONFIG; break; - case "http://jabber.org/protocol/muc#roominfo": parsed = Feature.ROOMINFO; break; - case "http://jabber.org/protocol/muc#stable_id": parsed = Feature.STABLE_ID; break; - case "muc_hidden": parsed = Feature.HIDDEN; break; - case "muc_membersonly": parsed = Feature.MEMBERS_ONLY; break; - case "muc_moderated": parsed = Feature.MODERATED; break; - case "muc_nonanonymous": parsed = Feature.NON_ANONYMOUS; break; - case "muc_open": parsed = Feature.OPEN; break; - case "muc_passwordprotected": parsed = Feature.PASSWORD_PROTECTED; break; - case "muc_persistent": parsed = Feature.PERSISTENT; break; - case "muc_public": parsed = Feature.PUBLIC; break; - case "muc_rooms": parsed = Feature.ROOMS; break; - case "muc_semianonymous": parsed = Feature.SEMI_ANONYMOUS; break; - case "muc_temporary": parsed = Feature.TEMPORARY; break; - case "muc_unmoderated": parsed = Feature.UNMODERATED; break; - case "muc_unsecured": parsed = Feature.UNSECURED; break; - } - if (parsed != null) features.add(parsed); - } - stream.get_flag(Flag.IDENTITY).set_room_features(jid, features); - room_info_updated(stream, jid); - } - public async void fetch_affiliations(XmppStream stream, Jid muc_jid) { query_affiliation.begin(stream, muc_jid, "member"); query_affiliation.begin(stream, muc_jid, "admin"); |
