aboutsummaryrefslogtreecommitdiff
path: root/xmpp-vala
diff options
context:
space:
mode:
authorfiaxh <git@lightrise.org>2026-08-22 21:02:05 +0200
committerfiaxh <git@lightrise.org>2026-10-23 16:22:06 +0200
commitdeea3cae8e848388ee962a92de58dc42b77915d1 (patch)
tree48cc3b5f2c2b1c71cdaeaac869ff8145d0fa1bd6 /xmpp-vala
parent8d49d83b3b45ab22d7b9d945c4b32296b07cb49e (diff)
Store MUC features only in EntityInfo (not in MucFlag), update on change
Diffstat (limited to 'xmpp-vala')
-rw-r--r--xmpp-vala/src/module/xep/0045_muc/flag.vala17
-rw-r--r--xmpp-vala/src/module/xep/0045_muc/module.vala71
-rw-r--r--xmpp-vala/src/module/xep/0115_entity_capabilities.vala5
3 files changed, 8 insertions, 85 deletions
diff --git a/xmpp-vala/src/module/xep/0045_muc/flag.vala b/xmpp-vala/src/module/xep/0045_muc/flag.vala
index d0d2c359..a72965b3 100644
--- a/xmpp-vala/src/module/xep/0045_muc/flag.vala
+++ b/xmpp-vala/src/module/xep/0045_muc/flag.vala
@@ -5,9 +5,6 @@ namespace Xmpp.Xep.Muc {
public class Flag : XmppStreamFlag {
public static FlagIdentity<Flag> IDENTITY = new FlagIdentity<Flag>(NS_URI, "muc");
- private HashMap<Jid, Gee.List<Feature>> room_features = new HashMap<Jid, Gee.List<Feature>>(Jid.hash_bare_func, Jid.equals_bare_func);
- private HashMap<Jid, string> room_names = new HashMap<Jid, string>(Jid.hash_bare_func, Jid.equals_bare_func);
-
private HashMap<Jid, string> enter_ids = new HashMap<Jid, string>(Jid.hash_bare_func, Jid.equals_bare_func);
public HashMap<Jid, Promise<JoinResult?>> enter_futures = new HashMap<Jid, Promise<JoinResult?>>(Jid.hash_func, Jid.equals_func);
private HashMap<Jid, string> own_nicks = new HashMap<Jid, string>(Jid.hash_bare_func, Jid.equals_bare_func);
@@ -18,12 +15,6 @@ public class Flag : XmppStreamFlag {
private HashMap<Jid, HashMap<Jid, Affiliation>> affiliations = new HashMap<Jid, HashMap<Jid, Affiliation>>(Jid.hash_bare_func, Jid.equals_bare_func);
private HashMap<Jid, Role> occupant_role = new HashMap<Jid, Role>(Jid.hash_func, Jid.equals_func);
- public string? get_room_name(Jid muc_jid) { return room_names.has_key(muc_jid.bare_jid) ? room_names[muc_jid.bare_jid] : null; }
-
- public bool has_room_feature(Jid muc_jid, Feature feature) {
- return room_features.has_key(muc_jid.bare_jid) && room_features[muc_jid.bare_jid].contains(feature);
- }
-
public Jid? get_real_jid(Jid full_jid) { return occupant_real_jids[full_jid]; }
public Jid? get_occupant_jid(Jid real_jid, Jid room) {
@@ -77,14 +68,6 @@ public class Flag : XmppStreamFlag {
public string? get_muc_subject(Jid muc_jid) { return subjects[muc_jid.bare_jid]; }
- internal void set_room_name(Jid muc_jid, string name) {
- room_names[muc_jid.bare_jid] = name;
- }
-
- internal void set_room_features(Jid muc_jid, Gee.List<Feature> features) {
- room_features[muc_jid.bare_jid] = features;
- }
-
internal void set_real_jid(Jid full_jid, Jid real_jid) { occupant_real_jids[full_jid] = real_jid; }
internal void set_offline_member(Jid muc_jid, Jid real_jid, Affiliation affiliation) {
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");
diff --git a/xmpp-vala/src/module/xep/0115_entity_capabilities.vala b/xmpp-vala/src/module/xep/0115_entity_capabilities.vala
index 8e15e0c2..e39dcbbd 100644
--- a/xmpp-vala/src/module/xep/0115_entity_capabilities.vala
+++ b/xmpp-vala/src/module/xep/0115_entity_capabilities.vala
@@ -35,11 +35,6 @@ namespace Xmpp.Xep.EntityCapabilities {
public static ModuleIdentity<Module> IDENTITY = new ModuleIdentity<Module>(NS_URI, "0115_entity_capabilities");
private string own_ver_hash;
- private Storage storage;
-
- public Module(Storage storage) {
- this.storage = storage;
- }
private string get_own_hash(XmppStream stream) {
if (own_ver_hash == null) {