small fixes
This commit is contained in:
parent
105006c5f1
commit
c656c7e9c2
|
@ -151,57 +151,70 @@ public class MucManager : StreamInteractionModule, Object {
|
||||||
}
|
}
|
||||||
|
|
||||||
public string? get_room_name(Account account, Jid jid) {
|
public string? get_room_name(Account account, Jid jid) {
|
||||||
XmppStream? stream = stream_interactor.get_stream(account);
|
Xep.Muc.Flag? flag = get_muc_flag(account);
|
||||||
return stream != null ? stream.get_flag(Xep.Muc.Flag.IDENTITY).get_room_name(jid) : null;
|
if (flag != null) {
|
||||||
|
return flag.get_room_name(jid);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public string? get_groupchat_subject(Jid jid, Account account) {
|
public string? get_groupchat_subject(Jid jid, Account account) {
|
||||||
XmppStream? stream = stream_interactor.get_stream(account);
|
Xep.Muc.Flag? flag = get_muc_flag(account);
|
||||||
if (stream != null) {
|
if (flag != null) {
|
||||||
return stream.get_flag(Xep.Muc.Flag.IDENTITY).get_muc_subject(jid.bare_jid);
|
return flag.get_muc_subject(jid.bare_jid);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Jid? get_real_jid(Jid jid, Account account) {
|
public Jid? get_real_jid(Jid jid, Account account) {
|
||||||
XmppStream? stream = stream_interactor.get_stream(account);
|
Xep.Muc.Flag? flag = get_muc_flag(account);
|
||||||
if (stream != null) {
|
if (flag != null) {
|
||||||
return stream.get_flag(Xep.Muc.Flag.IDENTITY).get_real_jid(jid);
|
return flag.get_real_jid(jid);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Xep.Muc.Role? get_role(Jid jid, Account account) {
|
public Xep.Muc.Role? get_role(Jid jid, Account account) {
|
||||||
XmppStream? stream = stream_interactor.get_stream(account);
|
Xep.Muc.Flag? flag = get_muc_flag(account);
|
||||||
if (stream != null) return stream.get_flag(Xep.Muc.Flag.IDENTITY).get_occupant_role(jid);
|
if (flag != null) {
|
||||||
|
return flag.get_occupant_role(jid);
|
||||||
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Xep.Muc.Affiliation? get_affiliation(Jid muc_jid, Jid jid, Account account) {
|
public Xep.Muc.Affiliation? get_affiliation(Jid muc_jid, Jid jid, Account account) {
|
||||||
XmppStream? stream = stream_interactor.get_stream(account);
|
Xep.Muc.Flag? flag = get_muc_flag(account);
|
||||||
if (stream != null) return stream.get_flag(Xep.Muc.Flag.IDENTITY).get_affiliation(muc_jid, jid);
|
if (flag != null) {
|
||||||
|
return flag.get_affiliation(muc_jid, jid);
|
||||||
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Gee.List<Jid>? get_offline_members(Jid jid, Account account) {
|
public Gee.List<Jid>? get_offline_members(Jid jid, Account account) {
|
||||||
XmppStream? stream = stream_interactor.get_stream(account);
|
Xep.Muc.Flag? flag = get_muc_flag(account);
|
||||||
if (stream != null) {
|
if (flag != null) {
|
||||||
return stream.get_flag(Xep.Muc.Flag.IDENTITY).get_offline_members(jid);
|
return flag.get_offline_members(jid);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Jid? get_own_jid(Jid muc_jid, Account account) {
|
public Jid? get_own_jid(Jid muc_jid, Account account) {
|
||||||
XmppStream? stream = stream_interactor.get_stream(account);
|
Xep.Muc.Flag? flag = get_muc_flag(account);
|
||||||
if (stream != null) {
|
if (flag != null) {
|
||||||
Xep.Muc.Flag? flag = stream.get_flag(Xep.Muc.Flag.IDENTITY);
|
|
||||||
if (flag == null) return null;
|
|
||||||
string? nick = flag.get_muc_nick(muc_jid);
|
string? nick = flag.get_muc_nick(muc_jid);
|
||||||
if (nick != null) return muc_jid.with_resource(nick);
|
if (nick != null) return muc_jid.with_resource(nick);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Xep.Muc.Flag? get_muc_flag(Account account) {
|
||||||
|
XmppStream? stream = stream_interactor.get_stream(account);
|
||||||
|
if (stream != null) {
|
||||||
|
return stream.get_flag(Xep.Muc.Flag.IDENTITY);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
public bool is_joined(Jid jid, Account account) {
|
public bool is_joined(Jid jid, Account account) {
|
||||||
return get_own_jid(jid, account) != null;
|
return get_own_jid(jid, account) != null;
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,9 +20,14 @@ public abstract class StanzaListener<T> : OrderedListener {
|
||||||
public class StanzaListenerHolder<T> : ListenerHolder {
|
public class StanzaListenerHolder<T> : ListenerHolder {
|
||||||
|
|
||||||
public async void run(XmppStream stream, T stanza) {
|
public async void run(XmppStream stream, T stanza) {
|
||||||
foreach (OrderedListener ol in listeners) {
|
|
||||||
|
// listeners can change e.g. when switching to another stream
|
||||||
|
ArrayList<OrderedListener> listeners_copy = new ArrayList<OrderedListener>();
|
||||||
|
listeners_copy.add_all(listeners);
|
||||||
|
|
||||||
|
foreach (OrderedListener ol in listeners_copy) {
|
||||||
StanzaListener<T> l = ol as StanzaListener<T>;
|
StanzaListener<T> l = ol as StanzaListener<T>;
|
||||||
bool stop = yield l.run(stream, stanza);
|
bool stop = yield l.run(stream, stanza);
|
||||||
if (stop) break;
|
if (stop) break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -173,7 +173,7 @@ public class Module : XmppStreamModule {
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void attach(XmppStream stream) {
|
public override void attach(XmppStream stream) {
|
||||||
stream.add_flag(new Muc.Flag());
|
stream.add_flag(new Flag());
|
||||||
stream.get_module(MessageModule.IDENTITY).received_message.connect(on_received_message);
|
stream.get_module(MessageModule.IDENTITY).received_message.connect(on_received_message);
|
||||||
stream.get_module(Presence.Module.IDENTITY).received_presence.connect(check_for_enter_error);
|
stream.get_module(Presence.Module.IDENTITY).received_presence.connect(check_for_enter_error);
|
||||||
stream.get_module(Presence.Module.IDENTITY).received_available.connect(on_received_available);
|
stream.get_module(Presence.Module.IDENTITY).received_available.connect(on_received_available);
|
||||||
|
@ -368,7 +368,7 @@ public class Module : XmppStreamModule {
|
||||||
Jid? jid_ = Jid.parse(item.get_attribute("jid"));
|
Jid? jid_ = Jid.parse(item.get_attribute("jid"));
|
||||||
string? affiliation_ = item.get_attribute("affiliation");
|
string? affiliation_ = item.get_attribute("affiliation");
|
||||||
if (jid_ != null && affiliation_ != null) {
|
if (jid_ != null && affiliation_ != null) {
|
||||||
stream.get_flag(Muc.Flag.IDENTITY).set_offline_member(iq.from, jid_, parse_affiliation(affiliation_));
|
stream.get_flag(Flag.IDENTITY).set_offline_member(iq.from, jid_, parse_affiliation(affiliation_));
|
||||||
ret_jids.add(jid_);
|
ret_jids.add(jid_);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue