Add typed identity to manager modules and stream flags
This commit is contained in:
parent
233f2b35d0
commit
db57a97353
|
@ -7,7 +7,8 @@ using Dino.Entities;
|
||||||
namespace Dino {
|
namespace Dino {
|
||||||
|
|
||||||
public class AvatarManager : StreamInteractionModule, Object {
|
public class AvatarManager : StreamInteractionModule, Object {
|
||||||
public const string id = "avatar_manager";
|
public static ModuleIdentity<AvatarManager> IDENTITY = new ModuleIdentity<AvatarManager>("avatar_manager");
|
||||||
|
public string id { get { return IDENTITY.id; } }
|
||||||
|
|
||||||
public signal void received_avatar(Pixbuf avatar, Jid jid, Account account);
|
public signal void received_avatar(Pixbuf avatar, Jid jid, Account account);
|
||||||
|
|
||||||
|
@ -46,7 +47,7 @@ public class AvatarManager : StreamInteractionModule, Object {
|
||||||
|
|
||||||
public Pixbuf? get_avatar(Account account, Jid jid) {
|
public Pixbuf? get_avatar(Account account, Jid jid) {
|
||||||
Jid jid_ = jid;
|
Jid jid_ = jid;
|
||||||
if (!MucManager.get_instance(stream_interactor).is_groupchat_occupant(jid, account)) {
|
if (!stream_interactor.get_module(MucManager.IDENTITY).is_groupchat_occupant(jid, account)) {
|
||||||
jid_ = jid.bare_jid;
|
jid_ = jid.bare_jid;
|
||||||
}
|
}
|
||||||
string? user_avatars_id = user_avatars[jid_];
|
string? user_avatars_id = user_avatars[jid_];
|
||||||
|
@ -61,7 +62,6 @@ public class AvatarManager : StreamInteractionModule, Object {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void publish(Account account, string file) {
|
public void publish(Account account, string file) {
|
||||||
print(file + "\n");
|
|
||||||
try {
|
try {
|
||||||
Pixbuf pixbuf = new Pixbuf.from_file(file);
|
Pixbuf pixbuf = new Pixbuf.from_file(file);
|
||||||
if (pixbuf.width >= pixbuf.height && pixbuf.width > MAX_PIXEL) {
|
if (pixbuf.width >= pixbuf.height && pixbuf.width > MAX_PIXEL) {
|
||||||
|
@ -83,14 +83,6 @@ public class AvatarManager : StreamInteractionModule, Object {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static AvatarManager? get_instance(StreamInteractor stream_interaction) {
|
|
||||||
return (AvatarManager) stream_interaction.get_module(id);
|
|
||||||
}
|
|
||||||
|
|
||||||
internal string get_id() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void on_account_added(Account account) {
|
private void on_account_added(Account account) {
|
||||||
stream_interactor.module_manager.get_module(account, Xep.UserAvatars.Module.IDENTITY).received_avatar.connect((stream, jid, id) =>
|
stream_interactor.module_manager.get_module(account, Xep.UserAvatars.Module.IDENTITY).received_avatar.connect((stream, jid, id) =>
|
||||||
on_user_avatar_received(account, new Jid(jid), id)
|
on_user_avatar_received(account, new Jid(jid), id)
|
||||||
|
|
|
@ -6,7 +6,8 @@ using Dino.Entities;
|
||||||
namespace Dino {
|
namespace Dino {
|
||||||
|
|
||||||
public class ChatInteraction : StreamInteractionModule, Object {
|
public class ChatInteraction : StreamInteractionModule, Object {
|
||||||
private const string id = "chat_interaction";
|
public static ModuleIdentity<ChatInteraction> IDENTITY = new ModuleIdentity<ChatInteraction>("chat_interaction");
|
||||||
|
public string id { get { return IDENTITY.id; } }
|
||||||
|
|
||||||
public signal void conversation_read(Conversation conversation);
|
public signal void conversation_read(Conversation conversation);
|
||||||
public signal void conversation_unread(Conversation conversation);
|
public signal void conversation_unread(Conversation conversation);
|
||||||
|
@ -26,8 +27,8 @@ public class ChatInteraction : StreamInteractionModule, Object {
|
||||||
private ChatInteraction(StreamInteractor stream_interactor) {
|
private ChatInteraction(StreamInteractor stream_interactor) {
|
||||||
this.stream_interactor = stream_interactor;
|
this.stream_interactor = stream_interactor;
|
||||||
Timeout.add_seconds(30, update_interactions);
|
Timeout.add_seconds(30, update_interactions);
|
||||||
MessageManager.get_instance(stream_interactor).message_received.connect(on_message_received);
|
stream_interactor.get_module(MessageManager.IDENTITY).message_received.connect(on_message_received);
|
||||||
MessageManager.get_instance(stream_interactor).message_sent.connect(on_message_sent);
|
stream_interactor.get_module(MessageManager.IDENTITY).message_sent.connect(on_message_sent);
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool is_active_focus(Conversation? conversation = null) {
|
public bool is_active_focus(Conversation? conversation = null) {
|
||||||
|
@ -67,14 +68,6 @@ public class ChatInteraction : StreamInteractionModule, Object {
|
||||||
on_conversation_focused(conversation);
|
on_conversation_focused(conversation);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal string get_id() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static ChatInteraction? get_instance(StreamInteractor stream_interactor) {
|
|
||||||
return (ChatInteraction) stream_interactor.get_module(id);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void on_message_sent(Entities.Message message, Conversation conversation) {
|
private void on_message_sent(Entities.Message message, Conversation conversation) {
|
||||||
last_input_interaction.unset(conversation);
|
last_input_interaction.unset(conversation);
|
||||||
last_interface_interaction.unset(conversation);
|
last_interface_interaction.unset(conversation);
|
||||||
|
@ -86,7 +79,7 @@ public class ChatInteraction : StreamInteractionModule, Object {
|
||||||
if (conversation == null) return;
|
if (conversation == null) return;
|
||||||
conversation_read(selected_conversation);
|
conversation_read(selected_conversation);
|
||||||
check_send_read();
|
check_send_read();
|
||||||
selected_conversation.read_up_to = MessageManager.get_instance(stream_interactor).get_last_message(conversation);
|
selected_conversation.read_up_to = stream_interactor.get_module(MessageManager.IDENTITY).get_last_message(conversation);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void on_conversation_unfocused(Conversation? conversation) {
|
private void on_conversation_unfocused(Conversation? conversation) {
|
||||||
|
@ -100,7 +93,7 @@ public class ChatInteraction : StreamInteractionModule, Object {
|
||||||
|
|
||||||
private void check_send_read() {
|
private void check_send_read() {
|
||||||
if (selected_conversation == null || selected_conversation.type_ == Conversation.Type.GROUPCHAT) return;
|
if (selected_conversation == null || selected_conversation.type_ == Conversation.Type.GROUPCHAT) return;
|
||||||
Entities.Message? message = MessageManager.get_instance(stream_interactor).get_last_message(selected_conversation);
|
Entities.Message? message = stream_interactor.get_module(MessageManager.IDENTITY).get_last_message(selected_conversation);
|
||||||
if (message != null && message.direction == Entities.Message.DIRECTION_RECEIVED &&
|
if (message != null && message.direction == Entities.Message.DIRECTION_RECEIVED &&
|
||||||
message.stanza != null && !message.equals(selected_conversation.read_up_to)) {
|
message.stanza != null && !message.equals(selected_conversation.read_up_to)) {
|
||||||
selected_conversation.read_up_to = message;
|
selected_conversation.read_up_to = message;
|
||||||
|
|
|
@ -109,7 +109,7 @@ public class ConnectionManager {
|
||||||
if (!connection_todo.contains(account)) {
|
if (!connection_todo.contains(account)) {
|
||||||
stream_states.unset(account);
|
stream_states.unset(account);
|
||||||
} else {
|
} else {
|
||||||
interpret_reconnect_flags(account, StreamError.Flag.get_flag(stream) ??
|
interpret_reconnect_flags(account, stream.get_flag(StreamError.Flag.IDENTITY) ??
|
||||||
new StreamError.Flag() { reconnection_recomendation = StreamError.Flag.Reconnect.NOW });
|
new StreamError.Flag() { reconnection_recomendation = StreamError.Flag.Reconnect.NOW });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,8 +5,8 @@ using Dino.Entities;
|
||||||
|
|
||||||
namespace Dino {
|
namespace Dino {
|
||||||
public class ConversationManager : StreamInteractionModule, Object {
|
public class ConversationManager : StreamInteractionModule, Object {
|
||||||
|
public static ModuleIdentity<ConversationManager> IDENTITY = new ModuleIdentity<ConversationManager>("conversation_manager");
|
||||||
public const string id = "conversation_manager";
|
public string id { get { return IDENTITY.id; } }
|
||||||
|
|
||||||
public signal void conversation_activated(Conversation conversation);
|
public signal void conversation_activated(Conversation conversation);
|
||||||
|
|
||||||
|
@ -25,9 +25,9 @@ public class ConversationManager : StreamInteractionModule, Object {
|
||||||
this.stream_interactor = stream_interactor;
|
this.stream_interactor = stream_interactor;
|
||||||
stream_interactor.add_module(this);
|
stream_interactor.add_module(this);
|
||||||
stream_interactor.account_added.connect(on_account_added);
|
stream_interactor.account_added.connect(on_account_added);
|
||||||
MucManager.get_instance(stream_interactor).groupchat_joined.connect(on_groupchat_joined);
|
stream_interactor.get_module(MucManager.IDENTITY).groupchat_joined.connect(on_groupchat_joined);
|
||||||
MessageManager.get_instance(stream_interactor).pre_message_received.connect(on_message_received);
|
stream_interactor.get_module(MessageManager.IDENTITY).pre_message_received.connect(on_message_received);
|
||||||
MessageManager.get_instance(stream_interactor).message_sent.connect(on_message_sent);
|
stream_interactor.get_module(MessageManager.IDENTITY).message_sent.connect(on_message_sent);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Conversation? get_conversation(Jid jid, Account account) {
|
public Conversation? get_conversation(Jid jid, Account account) {
|
||||||
|
@ -55,14 +55,6 @@ public class ConversationManager : StreamInteractionModule, Object {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public string get_id() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static ConversationManager? get_instance(StreamInteractor stream_interaction) {
|
|
||||||
return (ConversationManager) stream_interaction.get_module(id);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void on_account_added(Account account) {
|
private void on_account_added(Account account) {
|
||||||
conversations[account] = new HashMap<Jid, Conversation>(Jid.hash_bare_func, Jid.equals_bare_func);
|
conversations[account] = new HashMap<Jid, Conversation>(Jid.hash_bare_func, Jid.equals_bare_func);
|
||||||
foreach (Conversation conversation in db.get_conversations(account)) {
|
foreach (Conversation conversation in db.get_conversations(account)) {
|
||||||
|
|
|
@ -5,7 +5,8 @@ using Dino.Entities;
|
||||||
|
|
||||||
namespace Dino {
|
namespace Dino {
|
||||||
public class CounterpartInteractionManager : StreamInteractionModule, Object {
|
public class CounterpartInteractionManager : StreamInteractionModule, Object {
|
||||||
public const string id = "counterpart_interaction_manager";
|
public static ModuleIdentity<CounterpartInteractionManager> IDENTITY = new ModuleIdentity<CounterpartInteractionManager>("counterpart_interaction_manager");
|
||||||
|
public string id { get { return IDENTITY.id; } }
|
||||||
|
|
||||||
public signal void received_state(Account account, Jid jid, string state);
|
public signal void received_state(Account account, Jid jid, string state);
|
||||||
public signal void received_marker(Account account, Jid jid, Entities.Message message, string marker);
|
public signal void received_marker(Account account, Jid jid, Entities.Message message, string marker);
|
||||||
|
@ -24,7 +25,7 @@ public class CounterpartInteractionManager : StreamInteractionModule, Object {
|
||||||
private CounterpartInteractionManager(StreamInteractor stream_interactor) {
|
private CounterpartInteractionManager(StreamInteractor stream_interactor) {
|
||||||
this.stream_interactor = stream_interactor;
|
this.stream_interactor = stream_interactor;
|
||||||
stream_interactor.account_added.connect(on_account_added);
|
stream_interactor.account_added.connect(on_account_added);
|
||||||
MessageManager.get_instance(stream_interactor).message_received.connect(on_message_received);
|
stream_interactor.get_module(MessageManager.IDENTITY).message_received.connect(on_message_received);
|
||||||
}
|
}
|
||||||
|
|
||||||
public string? get_chat_state(Account account, Jid jid) {
|
public string? get_chat_state(Account account, Jid jid) {
|
||||||
|
@ -35,14 +36,6 @@ public class CounterpartInteractionManager : StreamInteractionModule, Object {
|
||||||
return last_read[jid];
|
return last_read[jid];
|
||||||
}
|
}
|
||||||
|
|
||||||
public static CounterpartInteractionManager? get_instance(StreamInteractor stream_interactor) {
|
|
||||||
return (CounterpartInteractionManager) stream_interactor.get_module(id);
|
|
||||||
}
|
|
||||||
|
|
||||||
internal string get_id() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void on_account_added(Account account) {
|
private void on_account_added(Account account) {
|
||||||
stream_interactor.module_manager.get_module(account, Xep.ChatMarkers.Module.IDENTITY).marker_received.connect( (stream, jid, marker, id) => {
|
stream_interactor.module_manager.get_module(account, Xep.ChatMarkers.Module.IDENTITY).marker_received.connect( (stream, jid, marker, id) => {
|
||||||
on_chat_marker_received(account, new Jid(jid), marker, id);
|
on_chat_marker_received(account, new Jid(jid), marker, id);
|
||||||
|
@ -61,9 +54,9 @@ public class CounterpartInteractionManager : StreamInteractionModule, Object {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void on_chat_marker_received(Account account, Jid jid, string marker, string stanza_id) {
|
private void on_chat_marker_received(Account account, Jid jid, string marker, string stanza_id) {
|
||||||
Conversation? conversation = ConversationManager.get_instance(stream_interactor).get_conversation(jid, account);
|
Conversation? conversation = stream_interactor.get_module(ConversationManager.IDENTITY).get_conversation(jid, account);
|
||||||
if (conversation != null) {
|
if (conversation != null) {
|
||||||
Gee.List<Entities.Message>? messages = MessageManager.get_instance(stream_interactor).get_messages(conversation);
|
Gee.List<Entities.Message>? messages = stream_interactor.get_module(MessageManager.IDENTITY).get_messages(conversation);
|
||||||
if (messages != null) { // TODO not here
|
if (messages != null) { // TODO not here
|
||||||
foreach (Entities.Message message in messages) {
|
foreach (Entities.Message message in messages) {
|
||||||
if (message.stanza_id == stanza_id) {
|
if (message.stanza_id == stanza_id) {
|
||||||
|
|
|
@ -6,7 +6,8 @@ using Dino.Entities;
|
||||||
namespace Dino {
|
namespace Dino {
|
||||||
|
|
||||||
public class MessageManager : StreamInteractionModule, Object {
|
public class MessageManager : StreamInteractionModule, Object {
|
||||||
public const string ID = "message_manager";
|
public static ModuleIdentity<MessageManager> IDENTITY = new ModuleIdentity<MessageManager>("message_manager");
|
||||||
|
public string id { get { return IDENTITY.id; } }
|
||||||
|
|
||||||
public signal void pre_message_received(Entities.Message message, Xmpp.Message.Stanza message_stanza, Conversation conversation);
|
public signal void pre_message_received(Entities.Message message, Xmpp.Message.Stanza message_stanza, Conversation conversation);
|
||||||
public signal void message_received(Entities.Message message, Conversation conversation);
|
public signal void message_received(Entities.Message message, Conversation conversation);
|
||||||
|
@ -68,14 +69,6 @@ public class MessageManager : StreamInteractionModule, Object {
|
||||||
return db_messages;
|
return db_messages;
|
||||||
}
|
}
|
||||||
|
|
||||||
public string get_id() {
|
|
||||||
return ID;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static MessageManager? get_instance(StreamInteractor stream_interactor) {
|
|
||||||
return (MessageManager) stream_interactor.get_module(ID);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void on_account_added(Account account) {
|
private void on_account_added(Account account) {
|
||||||
stream_interactor.module_manager.get_module(account, Xmpp.Message.Module.IDENTITY).received_message.connect( (stream, message) => {
|
stream_interactor.module_manager.get_module(account, Xmpp.Message.Module.IDENTITY).received_message.connect( (stream, message) => {
|
||||||
on_message_received(account, message);
|
on_message_received(account, message);
|
||||||
|
@ -85,7 +78,7 @@ public class MessageManager : StreamInteractionModule, Object {
|
||||||
private void send_unsent_messages(Account account) {
|
private void send_unsent_messages(Account account) {
|
||||||
Gee.List<Entities.Message> unsend_messages = db.get_unsend_messages(account);
|
Gee.List<Entities.Message> unsend_messages = db.get_unsend_messages(account);
|
||||||
foreach (Entities.Message message in unsend_messages) {
|
foreach (Entities.Message message in unsend_messages) {
|
||||||
Conversation? conversation = ConversationManager.get_instance(stream_interactor).get_conversation(message.counterpart, account);
|
Conversation? conversation = stream_interactor.get_module(ConversationManager.IDENTITY).get_conversation(message.counterpart, account);
|
||||||
if (conversation != null) {
|
if (conversation != null) {
|
||||||
send_xmpp_message(message, conversation, true);
|
send_xmpp_message(message, conversation, true);
|
||||||
}
|
}
|
||||||
|
@ -100,7 +93,7 @@ public class MessageManager : StreamInteractionModule, Object {
|
||||||
new_message.stanza_id = message.id;
|
new_message.stanza_id = message.id;
|
||||||
Jid from_jid = new Jid(message.from);
|
Jid from_jid = new Jid(message.from);
|
||||||
if (!account.bare_jid.equals_bare(from_jid) ||
|
if (!account.bare_jid.equals_bare(from_jid) ||
|
||||||
MucManager.get_instance(stream_interactor).get_nick(from_jid.bare_jid, account) == from_jid.resourcepart) {
|
stream_interactor.get_module(MucManager.IDENTITY).get_nick(from_jid.bare_jid, account) == from_jid.resourcepart) {
|
||||||
new_message.direction = Entities.Message.DIRECTION_RECEIVED;
|
new_message.direction = Entities.Message.DIRECTION_RECEIVED;
|
||||||
} else {
|
} else {
|
||||||
new_message.direction = Entities.Message.DIRECTION_SENT;
|
new_message.direction = Entities.Message.DIRECTION_SENT;
|
||||||
|
@ -113,7 +106,7 @@ public class MessageManager : StreamInteractionModule, Object {
|
||||||
Xep.DelayedDelivery.MessageFlag? deleyed_delivery_flag = Xep.DelayedDelivery.MessageFlag.get_flag(message);
|
Xep.DelayedDelivery.MessageFlag? deleyed_delivery_flag = Xep.DelayedDelivery.MessageFlag.get_flag(message);
|
||||||
new_message.time = deleyed_delivery_flag != null ? deleyed_delivery_flag.datetime : new DateTime.now_utc();
|
new_message.time = deleyed_delivery_flag != null ? deleyed_delivery_flag.datetime : new DateTime.now_utc();
|
||||||
new_message.local_time = new DateTime.now_utc();
|
new_message.local_time = new DateTime.now_utc();
|
||||||
Conversation conversation = ConversationManager.get_instance(stream_interactor).get_add_conversation(new_message.counterpart, account);
|
Conversation conversation = stream_interactor.get_module(ConversationManager.IDENTITY).get_add_conversation(new_message.counterpart, account);
|
||||||
pre_message_received(new_message, message, conversation);
|
pre_message_received(new_message, message, conversation);
|
||||||
|
|
||||||
bool is_uuid = new_message.stanza_id != null && Regex.match_simple("""[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}""", new_message.stanza_id);
|
bool is_uuid = new_message.stanza_id != null && Regex.match_simple("""[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}""", new_message.stanza_id);
|
||||||
|
|
|
@ -5,7 +5,8 @@ using Dino.Entities;
|
||||||
|
|
||||||
namespace Dino {
|
namespace Dino {
|
||||||
public class MucManager : StreamInteractionModule, Object {
|
public class MucManager : StreamInteractionModule, Object {
|
||||||
public const string id = "muc_manager";
|
public static ModuleIdentity<MucManager> IDENTITY = new ModuleIdentity<MucManager>("muc_manager");
|
||||||
|
public string id { get { return IDENTITY.id; } }
|
||||||
|
|
||||||
public signal void groupchat_joined(Account account, Jid jid, string nick);
|
public signal void groupchat_joined(Account account, Jid jid, string nick);
|
||||||
public signal void groupchat_subject_set(Account account, Jid jid, string subject);
|
public signal void groupchat_subject_set(Account account, Jid jid, string subject);
|
||||||
|
@ -23,7 +24,7 @@ public class MucManager : StreamInteractionModule, Object {
|
||||||
this.stream_interactor = stream_interactor;
|
this.stream_interactor = stream_interactor;
|
||||||
stream_interactor.account_added.connect(on_account_added);
|
stream_interactor.account_added.connect(on_account_added);
|
||||||
stream_interactor.stream_negotiated.connect(on_stream_negotiated);
|
stream_interactor.stream_negotiated.connect(on_stream_negotiated);
|
||||||
MessageManager.get_instance(stream_interactor).pre_message_received.connect(on_pre_message_received);
|
stream_interactor.get_module(MessageManager.IDENTITY).pre_message_received.connect(on_pre_message_received);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void join(Account account, Jid jid, string nick, string? password = null) {
|
public void join(Account account, Jid jid, string nick, string? password = null) {
|
||||||
|
@ -52,7 +53,7 @@ public class MucManager : StreamInteractionModule, Object {
|
||||||
}
|
}
|
||||||
|
|
||||||
public ArrayList<Jid>? get_occupants(Jid jid, Account account) {
|
public ArrayList<Jid>? get_occupants(Jid jid, Account account) {
|
||||||
return PresenceManager.get_instance(stream_interactor).get_full_jids(jid, account);
|
return stream_interactor.get_module(PresenceManager.IDENTITY).get_full_jids(jid, account);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ArrayList<Jid>? get_other_occupants(Jid jid, Account account) {
|
public ArrayList<Jid>? get_other_occupants(Jid jid, Account account) {
|
||||||
|
@ -65,7 +66,7 @@ public class MucManager : StreamInteractionModule, Object {
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool is_groupchat(Jid jid, Account account) {
|
public bool is_groupchat(Jid jid, Account account) {
|
||||||
Conversation? conversation = ConversationManager.get_instance(stream_interactor).get_conversation(jid, account);
|
Conversation? conversation = stream_interactor.get_module(ConversationManager.IDENTITY).get_conversation(jid, account);
|
||||||
return !jid.is_full() && conversation != null && conversation.type_ == Conversation.Type.GROUPCHAT;
|
return !jid.is_full() && conversation != null && conversation.type_ == Conversation.Type.GROUPCHAT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -104,7 +105,7 @@ public class MucManager : StreamInteractionModule, Object {
|
||||||
public string? get_groupchat_subject(Jid jid, Account account) {
|
public string? get_groupchat_subject(Jid jid, Account account) {
|
||||||
Core.XmppStream? stream = stream_interactor.get_stream(account);
|
Core.XmppStream? stream = stream_interactor.get_stream(account);
|
||||||
if (stream != null) {
|
if (stream != null) {
|
||||||
return Xep.Muc.Flag.get_flag(stream).get_muc_subject(jid.bare_jid.to_string());
|
return stream.get_flag(Xep.Muc.Flag.IDENTITY).get_muc_subject(jid.bare_jid.to_string());
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -112,7 +113,7 @@ public class MucManager : StreamInteractionModule, Object {
|
||||||
public Jid? get_real_jid(Jid jid, Account account) {
|
public Jid? get_real_jid(Jid jid, Account account) {
|
||||||
Core.XmppStream? stream = stream_interactor.get_stream(account);
|
Core.XmppStream? stream = stream_interactor.get_stream(account);
|
||||||
if (stream != null) {
|
if (stream != null) {
|
||||||
string? real_jid = Xep.Muc.Flag.get_flag(stream).get_real_jid(jid.to_string());
|
string? real_jid = stream.get_flag(Xep.Muc.Flag.IDENTITY).get_real_jid(jid.to_string());
|
||||||
if (real_jid != null) {
|
if (real_jid != null) {
|
||||||
return new Jid(real_jid);
|
return new Jid(real_jid);
|
||||||
}
|
}
|
||||||
|
@ -130,20 +131,12 @@ public class MucManager : StreamInteractionModule, Object {
|
||||||
public string? get_nick(Jid jid, Account account) {
|
public string? get_nick(Jid jid, Account account) {
|
||||||
Core.XmppStream? stream = stream_interactor.get_stream(account);
|
Core.XmppStream? stream = stream_interactor.get_stream(account);
|
||||||
if (stream != null) {
|
if (stream != null) {
|
||||||
Xep.Muc.Flag? flag = Xep.Muc.Flag.get_flag(stream);
|
Xep.Muc.Flag? flag = stream.get_flag(Xep.Muc.Flag.IDENTITY);
|
||||||
if (flag != null) return flag.get_muc_nick(jid.bare_jid.to_string());
|
if (flag != null) return flag.get_muc_nick(jid.bare_jid.to_string());
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static MucManager? get_instance(StreamInteractor stream_interactor) {
|
|
||||||
return (MucManager) stream_interactor.get_module(id);
|
|
||||||
}
|
|
||||||
|
|
||||||
internal string get_id() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void on_account_added(Account account) {
|
private void on_account_added(Account account) {
|
||||||
stream_interactor.module_manager.get_module(account, Xep.Muc.Module.IDENTITY).subject_set.connect( (stream, subject, jid) => {
|
stream_interactor.module_manager.get_module(account, Xep.Muc.Module.IDENTITY).subject_set.connect( (stream, subject, jid) => {
|
||||||
on_subject_set(account, new Jid(jid), subject);
|
on_subject_set(account, new Jid(jid), subject);
|
||||||
|
@ -167,14 +160,14 @@ public class MucManager : StreamInteractionModule, Object {
|
||||||
Core.XmppStream stream = stream_interactor.get_stream(conversation.account);
|
Core.XmppStream stream = stream_interactor.get_stream(conversation.account);
|
||||||
if (stream == null) return;
|
if (stream == null) return;
|
||||||
if (Xep.DelayedDelivery.MessageFlag.get_flag(message.stanza) == null) {
|
if (Xep.DelayedDelivery.MessageFlag.get_flag(message.stanza) == null) {
|
||||||
string? real_jid = Xep.Muc.Flag.get_flag(stream).get_real_jid(message.counterpart.to_string());
|
string? real_jid = stream.get_flag(Xep.Muc.Flag.IDENTITY).get_real_jid(message.counterpart.to_string());
|
||||||
if (real_jid != null && real_jid != message.counterpart.to_string()) {
|
if (real_jid != null && real_jid != message.counterpart.to_string()) {
|
||||||
message.real_jid = real_jid;
|
message.real_jid = real_jid;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
string muc_nick = Xep.Muc.Flag.get_flag(stream).get_muc_nick(conversation.counterpart.bare_jid.to_string());
|
string muc_nick = stream.get_flag(Xep.Muc.Flag.IDENTITY).get_muc_nick(conversation.counterpart.bare_jid.to_string());
|
||||||
if (message.from.equals(new Jid(@"$(message.from.bare_jid)/$muc_nick"))) { // TODO better from own
|
if (message.from.equals(new Jid(@"$(message.from.bare_jid)/$muc_nick"))) { // TODO better from own
|
||||||
Gee.List<Entities.Message>? messages = MessageManager.get_instance(stream_interactor).get_messages(conversation);
|
Gee.List<Entities.Message>? messages = stream_interactor.get_module(MessageManager.IDENTITY).get_messages(conversation);
|
||||||
if (messages != null) { // TODO not here
|
if (messages != null) { // TODO not here
|
||||||
foreach (Entities.Message m in messages) {
|
foreach (Entities.Message m in messages) {
|
||||||
if (m.equals(message)) {
|
if (m.equals(message)) {
|
||||||
|
@ -207,4 +200,5 @@ public class MucManager : StreamInteractionModule, Object {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -5,7 +5,8 @@ using Dino.Entities;
|
||||||
|
|
||||||
namespace Dino {
|
namespace Dino {
|
||||||
public class PresenceManager : StreamInteractionModule, Object {
|
public class PresenceManager : StreamInteractionModule, Object {
|
||||||
public const string id = "presence_manager";
|
public static ModuleIdentity<PresenceManager> IDENTITY = new ModuleIdentity<PresenceManager>("presence_manager");
|
||||||
|
public string id { get { return IDENTITY.id; } }
|
||||||
|
|
||||||
public signal void show_received(Show show, Jid jid, Account account);
|
public signal void show_received(Show show, Jid jid, Account account);
|
||||||
public signal void received_subscription_request(Jid jid, Account account);
|
public signal void received_subscription_request(Jid jid, Account account);
|
||||||
|
@ -27,7 +28,7 @@ public class PresenceManager : StreamInteractionModule, Object {
|
||||||
public Show get_last_show(Jid jid, Account account) {
|
public Show get_last_show(Jid jid, Account account) {
|
||||||
Core.XmppStream? stream = stream_interactor.get_stream(account);
|
Core.XmppStream? stream = stream_interactor.get_stream(account);
|
||||||
if (stream != null) {
|
if (stream != null) {
|
||||||
Xmpp.Presence.Stanza? presence = Xmpp.Presence.Flag.get_flag(stream).get_presence(jid.to_string());
|
Xmpp.Presence.Stanza? presence = stream.get_flag(Presence.Flag.IDENTITY).get_presence(jid.to_string());
|
||||||
if (presence != null) {
|
if (presence != null) {
|
||||||
return new Show(jid, presence.show, new DateTime.now_local());
|
return new Show(jid, presence.show, new DateTime.now_local());
|
||||||
}
|
}
|
||||||
|
@ -42,7 +43,7 @@ public class PresenceManager : StreamInteractionModule, Object {
|
||||||
public ArrayList<Jid>? get_full_jids(Jid jid, Account account) {
|
public ArrayList<Jid>? get_full_jids(Jid jid, Account account) {
|
||||||
Core.XmppStream? stream = stream_interactor.get_stream(account);
|
Core.XmppStream? stream = stream_interactor.get_stream(account);
|
||||||
if (stream != null) {
|
if (stream != null) {
|
||||||
Xmpp.Presence.Flag flag = Xmpp.Presence.Flag.get_flag(stream);
|
Xmpp.Presence.Flag flag = stream.get_flag(Presence.Flag.IDENTITY);
|
||||||
if (flag == null) return null;
|
if (flag == null) return null;
|
||||||
Gee.List<string> resources = flag.get_resources(jid.bare_jid.to_string());
|
Gee.List<string> resources = flag.get_resources(jid.bare_jid.to_string());
|
||||||
if (resources == null) {
|
if (resources == null) {
|
||||||
|
@ -73,14 +74,6 @@ public class PresenceManager : StreamInteractionModule, Object {
|
||||||
if (stream != null) stream.get_module(Xmpp.Presence.Module.IDENTITY).deny_subscription(stream, jid.bare_jid.to_string());
|
if (stream != null) stream.get_module(Xmpp.Presence.Module.IDENTITY).deny_subscription(stream, jid.bare_jid.to_string());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static PresenceManager? get_instance(StreamInteractor stream_interactor) {
|
|
||||||
return (PresenceManager) stream_interactor.get_module(id);
|
|
||||||
}
|
|
||||||
|
|
||||||
internal string get_id() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void on_account_added(Account account) {
|
private void on_account_added(Account account) {
|
||||||
stream_interactor.module_manager.get_module(account, Presence.Module.IDENTITY).received_available_show.connect((stream, jid, show) =>
|
stream_interactor.module_manager.get_module(account, Presence.Module.IDENTITY).received_available_show.connect((stream, jid, show) =>
|
||||||
on_received_available_show(account, new Jid(jid), show)
|
on_received_available_show(account, new Jid(jid), show)
|
||||||
|
|
|
@ -4,8 +4,10 @@ using Xmpp;
|
||||||
using Dino.Entities;
|
using Dino.Entities;
|
||||||
|
|
||||||
namespace Dino {
|
namespace Dino {
|
||||||
public class RosterManager : StreamInteractionModule, Object {
|
|
||||||
public const string id = "roster_manager";
|
public class RosterManager : StreamInteractionModule, Object {
|
||||||
|
public static ModuleIdentity<RosterManager> IDENTITY = new ModuleIdentity<RosterManager>("roster_manager");
|
||||||
|
public string id { get { return IDENTITY.id; } }
|
||||||
|
|
||||||
public signal void removed_roster_item(Account account, Jid jid, Roster.Item roster_item);
|
public signal void removed_roster_item(Account account, Jid jid, Roster.Item roster_item);
|
||||||
public signal void updated_roster_item(Account account, Jid jid, Roster.Item roster_item);
|
public signal void updated_roster_item(Account account, Jid jid, Roster.Item roster_item);
|
||||||
|
@ -26,7 +28,7 @@ namespace Dino {
|
||||||
Core.XmppStream? stream = stream_interactor.get_stream(account);
|
Core.XmppStream? stream = stream_interactor.get_stream(account);
|
||||||
ArrayList<Roster.Item> ret = new ArrayList<Roster.Item>();
|
ArrayList<Roster.Item> ret = new ArrayList<Roster.Item>();
|
||||||
if (stream != null) {
|
if (stream != null) {
|
||||||
ret.add_all(Xmpp.Roster.Flag.get_flag(stream).get_roster());
|
ret.add_all(stream.get_flag(Roster.Flag.IDENTITY).get_roster());
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -34,7 +36,7 @@ namespace Dino {
|
||||||
public Roster.Item? get_roster_item(Account account, Jid jid) {
|
public Roster.Item? get_roster_item(Account account, Jid jid) {
|
||||||
Core.XmppStream? stream = stream_interactor.get_stream(account);
|
Core.XmppStream? stream = stream_interactor.get_stream(account);
|
||||||
if (stream != null) {
|
if (stream != null) {
|
||||||
return Xmpp.Roster.Flag.get_flag(stream).get_item(jid.bare_jid.to_string());
|
return stream.get_flag(Roster.Flag.IDENTITY).get_item(jid.bare_jid.to_string());
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -49,14 +51,6 @@ namespace Dino {
|
||||||
if (stream != null) stream.get_module(Xmpp.Roster.Module.IDENTITY).add_jid(stream, jid.bare_jid.to_string(), handle);
|
if (stream != null) stream.get_module(Xmpp.Roster.Module.IDENTITY).add_jid(stream, jid.bare_jid.to_string(), handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static RosterManager? get_instance(StreamInteractor stream_interactor) {
|
|
||||||
return (RosterManager) stream_interactor.get_module(id);
|
|
||||||
}
|
|
||||||
|
|
||||||
internal string get_id() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void on_account_added(Account account) {
|
private void on_account_added(Account account) {
|
||||||
stream_interactor.module_manager.get_module(account, Roster.Module.IDENTITY).received_roster.connect( (stream, roster) => {
|
stream_interactor.module_manager.get_module(account, Roster.Module.IDENTITY).received_roster.connect( (stream, roster) => {
|
||||||
on_roster_received(account, roster);
|
on_roster_received(account, roster);
|
||||||
|
@ -78,5 +72,6 @@ namespace Dino {
|
||||||
private void on_roster_item_updated(Account account, Roster.Item roster_item) {
|
private void on_roster_item_updated(Account account, Roster.Item roster_item) {
|
||||||
updated_roster_item(account, new Jid(roster_item.jid), roster_item);
|
updated_roster_item(account, new Jid(roster_item.jid), roster_item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -13,7 +13,7 @@ public class StreamInteractor {
|
||||||
|
|
||||||
public ModuleManager module_manager;
|
public ModuleManager module_manager;
|
||||||
public ConnectionManager connection_manager;
|
public ConnectionManager connection_manager;
|
||||||
private ArrayList<StreamInteractionModule> interaction_modules = new ArrayList<StreamInteractionModule>();
|
private ArrayList<StreamInteractionModule> modules = new ArrayList<StreamInteractionModule>();
|
||||||
|
|
||||||
public StreamInteractor(Database db) {
|
public StreamInteractor(Database db) {
|
||||||
module_manager = new ModuleManager(db);
|
module_manager = new ModuleManager(db);
|
||||||
|
@ -46,14 +46,13 @@ public class StreamInteractor {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void add_module(StreamInteractionModule module) {
|
public void add_module(StreamInteractionModule module) {
|
||||||
interaction_modules.add(module);
|
modules.add(module);
|
||||||
}
|
}
|
||||||
|
|
||||||
public StreamInteractionModule? get_module(string id) {
|
public T? get_module<T>(ModuleIdentity<T>? identity) {
|
||||||
foreach (StreamInteractionModule module in interaction_modules) {
|
if (identity == null) return null;
|
||||||
if (module.get_id() == id) {
|
foreach (StreamInteractionModule module in modules) {
|
||||||
return module;
|
if (identity.matches(module)) return identity.cast(module);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -65,8 +64,24 @@ public class StreamInteractor {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class ModuleIdentity<T> : Object {
|
||||||
|
public string id { get; private set; }
|
||||||
|
|
||||||
|
public ModuleIdentity(string id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public T? cast(StreamInteractionModule module) {
|
||||||
|
return (T?) module;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool matches(StreamInteractionModule module) {
|
||||||
|
return module.id== id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public interface StreamInteractionModule : Object {
|
public interface StreamInteractionModule : Object {
|
||||||
public abstract string get_id();
|
public abstract string id { get; }
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -41,9 +41,9 @@ protected class AddContactDialog : Gtk.Dialog {
|
||||||
account = account2;
|
account = account2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
RosterManager.get_instance(stream_interactor).add_jid(account, jid, alias);
|
stream_interactor.get_module(RosterManager.IDENTITY).add_jid(account, jid, alias);
|
||||||
if (subscribe_checkbutton.active) {
|
if (subscribe_checkbutton.active) {
|
||||||
PresenceManager.get_instance(stream_interactor).request_subscription(account, jid);
|
stream_interactor.get_module(PresenceManager.IDENTITY).request_subscription(account, jid);
|
||||||
}
|
}
|
||||||
close();
|
close();
|
||||||
}
|
}
|
||||||
|
|
|
@ -60,7 +60,7 @@ public class Dialog : Gtk.Dialog {
|
||||||
});
|
});
|
||||||
select_jid_fragment.remove_jid.connect((row) => {
|
select_jid_fragment.remove_jid.connect((row) => {
|
||||||
ListRow list_row = roster_list.get_selected_row() as ListRow;
|
ListRow list_row = roster_list.get_selected_row() as ListRow;
|
||||||
RosterManager.get_instance(stream_interactor).remove_jid(list_row.account, list_row.jid);
|
stream_interactor.get_module(RosterManager.IDENTITY).remove_jid(list_row.account, list_row.jid);
|
||||||
});
|
});
|
||||||
select_jid_fragment.notify["done"].connect(() => {
|
select_jid_fragment.notify["done"].connect(() => {
|
||||||
ok_button.sensitive = select_jid_fragment.done;
|
ok_button.sensitive = select_jid_fragment.done;
|
||||||
|
@ -72,8 +72,8 @@ public class Dialog : Gtk.Dialog {
|
||||||
ListRow? selected_row = roster_list.get_selected_row() as ListRow;
|
ListRow? selected_row = roster_list.get_selected_row() as ListRow;
|
||||||
if (selected_row != null) {
|
if (selected_row != null) {
|
||||||
// TODO move in list to front immediately
|
// TODO move in list to front immediately
|
||||||
ConversationManager.get_instance(stream_interactor).ensure_start_conversation(selected_row.jid, selected_row.account);
|
stream_interactor.get_module(ConversationManager.IDENTITY).ensure_start_conversation(selected_row.jid, selected_row.account);
|
||||||
Conversation conversation = ConversationManager.get_instance(stream_interactor).get_conversation(selected_row.jid, selected_row.account);
|
Conversation conversation = stream_interactor.get_module(ConversationManager.IDENTITY).get_conversation(selected_row.jid, selected_row.account);
|
||||||
conversation_opened(conversation);
|
conversation_opened(conversation);
|
||||||
}
|
}
|
||||||
close();
|
close();
|
||||||
|
|
|
@ -20,13 +20,13 @@ protected class RosterList : FilterableList {
|
||||||
set_header_func(header);
|
set_header_func(header);
|
||||||
set_sort_func(sort);
|
set_sort_func(sort);
|
||||||
|
|
||||||
RosterManager.get_instance(stream_interactor).removed_roster_item.connect( (account, jid, roster_item) => {
|
stream_interactor.get_module(RosterManager.IDENTITY).removed_roster_item.connect( (account, jid, roster_item) => {
|
||||||
Idle.add(() => { on_removed_roster_item(account, jid, roster_item); return false;});});
|
Idle.add(() => { on_removed_roster_item(account, jid, roster_item); return false;});});
|
||||||
RosterManager.get_instance(stream_interactor).updated_roster_item.connect( (account, jid, roster_item) => {
|
stream_interactor.get_module(RosterManager.IDENTITY).updated_roster_item.connect( (account, jid, roster_item) => {
|
||||||
Idle.add(() => { on_updated_roster_item(account, jid, roster_item); return false;});});
|
Idle.add(() => { on_updated_roster_item(account, jid, roster_item); return false;});});
|
||||||
|
|
||||||
foreach (Account account in stream_interactor.get_accounts()) {
|
foreach (Account account in stream_interactor.get_accounts()) {
|
||||||
foreach (Roster.Item roster_item in RosterManager.get_instance(stream_interactor).get_roster(account)) {
|
foreach (Roster.Item roster_item in stream_interactor.get_module(RosterManager.IDENTITY).get_roster(account)) {
|
||||||
on_updated_roster_item(account, new Jid(roster_item.jid), roster_item);
|
on_updated_roster_item(account, new Jid(roster_item.jid), roster_item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -80,9 +80,9 @@ protected class AddGroupchatDialog : Gtk.Dialog {
|
||||||
conference.name = alias_entry.text;
|
conference.name = alias_entry.text;
|
||||||
conference.autojoin = autojoin_checkbutton.active;
|
conference.autojoin = autojoin_checkbutton.active;
|
||||||
if (edit_confrence == null) {
|
if (edit_confrence == null) {
|
||||||
MucManager.get_instance(stream_interactor).add_bookmark(account, conference);
|
stream_interactor.get_module(MucManager.IDENTITY).add_bookmark(account, conference);
|
||||||
} else {
|
} else {
|
||||||
MucManager.get_instance(stream_interactor).replace_bookmark(account, edit_confrence, conference);
|
stream_interactor.get_module(MucManager.IDENTITY).replace_bookmark(account, edit_confrence, conference);
|
||||||
}
|
}
|
||||||
close();
|
close();
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,7 +20,7 @@ protected class ConferenceList : FilterableList {
|
||||||
set_header_func(header);
|
set_header_func(header);
|
||||||
set_sort_func(sort);
|
set_sort_func(sort);
|
||||||
|
|
||||||
MucManager.get_instance(stream_interactor).bookmarks_updated.connect((account, conferences) => {
|
stream_interactor.get_module(MucManager.IDENTITY).bookmarks_updated.connect((account, conferences) => {
|
||||||
Idle.add(() => {
|
Idle.add(() => {
|
||||||
lists[account] = conferences;
|
lists[account] = conferences;
|
||||||
refresh_conferences();
|
refresh_conferences();
|
||||||
|
@ -29,7 +29,7 @@ protected class ConferenceList : FilterableList {
|
||||||
});
|
});
|
||||||
|
|
||||||
foreach (Account account in stream_interactor.get_accounts()) {
|
foreach (Account account in stream_interactor.get_accounts()) {
|
||||||
MucManager.get_instance(stream_interactor).get_bookmarks(account, on_conference_bookmarks_received, Tuple.create(this, account));
|
stream_interactor.get_module(MucManager.IDENTITY).get_bookmarks(account, on_conference_bookmarks_received, Tuple.create(this, account));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -102,7 +102,7 @@ public class Dialog : Gtk.Dialog {
|
||||||
});
|
});
|
||||||
select_fragment.remove_jid.connect((row) => {
|
select_fragment.remove_jid.connect((row) => {
|
||||||
ConferenceListRow conference_row = row as ConferenceListRow;
|
ConferenceListRow conference_row = row as ConferenceListRow;
|
||||||
MucManager.get_instance(stream_interactor).remove_bookmark(conference_row.account, conference_row.bookmark);
|
stream_interactor.get_module(MucManager.IDENTITY).remove_bookmark(conference_row.account, conference_row.bookmark);
|
||||||
});
|
});
|
||||||
stack.add_named(select_fragment, "select");
|
stack.add_named(select_fragment, "select");
|
||||||
}
|
}
|
||||||
|
@ -137,7 +137,7 @@ public class Dialog : Gtk.Dialog {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void on_ok_button_clicked() {
|
private void on_ok_button_clicked() {
|
||||||
MucManager.get_instance(stream_interactor).join(details_fragment.account, new Jid(details_fragment.jid), details_fragment.nick, details_fragment.password);
|
stream_interactor.get_module(MucManager.IDENTITY).join(details_fragment.account, new Jid(details_fragment.jid), details_fragment.nick, details_fragment.password);
|
||||||
close();
|
close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -31,7 +31,7 @@ public class AvatarGenerator {
|
||||||
}
|
}
|
||||||
|
|
||||||
public Pixbuf draw_message(StreamInteractor stream_interactor, Message message) {
|
public Pixbuf draw_message(StreamInteractor stream_interactor, Message message) {
|
||||||
Jid? real_jid = MucManager.get_instance(stream_interactor).get_message_real_jid(message);
|
Jid? real_jid = stream_interactor.get_module(MucManager.IDENTITY).get_message_real_jid(message);
|
||||||
return draw_jid(stream_interactor, real_jid != null ? real_jid : message.from, message.account);
|
return draw_jid(stream_interactor, real_jid != null ? real_jid : message.from, message.account);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -73,7 +73,7 @@ public class AvatarGenerator {
|
||||||
}
|
}
|
||||||
|
|
||||||
private Pixbuf draw_tile(Jid jid, Account account, int width, int height) {
|
private Pixbuf draw_tile(Jid jid, Account account, int width, int height) {
|
||||||
if (MucManager.get_instance(stream_interactor).is_groupchat(jid, account)) {
|
if (stream_interactor.get_module(MucManager.IDENTITY).is_groupchat(jid, account)) {
|
||||||
return draw_groupchat_tile(jid, account, width, height);
|
return draw_groupchat_tile(jid, account, width, height);
|
||||||
} else {
|
} else {
|
||||||
return draw_chat_tile(jid, account, width, height);
|
return draw_chat_tile(jid, account, width, height);
|
||||||
|
@ -81,13 +81,13 @@ public class AvatarGenerator {
|
||||||
}
|
}
|
||||||
|
|
||||||
private Pixbuf draw_chat_tile(Jid jid, Account account, int width, int height) {
|
private Pixbuf draw_chat_tile(Jid jid, Account account, int width, int height) {
|
||||||
if (MucManager.get_instance(stream_interactor).is_groupchat_occupant(jid, account)) {
|
if (stream_interactor.get_module(MucManager.IDENTITY).is_groupchat_occupant(jid, account)) {
|
||||||
Jid? real_jid = MucManager.get_instance(stream_interactor).get_real_jid(jid, account);
|
Jid? real_jid = stream_interactor.get_module(MucManager.IDENTITY).get_real_jid(jid, account);
|
||||||
if (real_jid != null) {
|
if (real_jid != null) {
|
||||||
return draw_tile(real_jid, account, width, height);
|
return draw_tile(real_jid, account, width, height);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Pixbuf? avatar = AvatarManager.get_instance(stream_interactor).get_avatar(account, jid);
|
Pixbuf? avatar = stream_interactor.get_module(AvatarManager.IDENTITY).get_avatar(account, jid);
|
||||||
if (avatar != null) {
|
if (avatar != null) {
|
||||||
double desired_ratio = (double) width / height;
|
double desired_ratio = (double) width / height;
|
||||||
double avatar_ratio = (double) avatar.width / avatar.height;
|
double avatar_ratio = (double) avatar.width / avatar.height;
|
||||||
|
@ -109,7 +109,7 @@ public class AvatarGenerator {
|
||||||
}
|
}
|
||||||
|
|
||||||
private Pixbuf draw_groupchat_tile(Jid jid, Account account, int width, int height) {
|
private Pixbuf draw_groupchat_tile(Jid jid, Account account, int width, int height) {
|
||||||
ArrayList<Jid>? occupants = MucManager.get_instance(stream_interactor).get_other_occupants(jid, account);
|
ArrayList<Jid>? occupants = stream_interactor.get_module(MucManager.IDENTITY).get_other_occupants(jid, account);
|
||||||
if (stateless || occupants == null || occupants.size == 0) {
|
if (stateless || occupants == null || occupants.size == 0) {
|
||||||
return draw_chat_tile(jid, account, width, height);
|
return draw_chat_tile(jid, account, width, height);
|
||||||
}
|
}
|
||||||
|
|
|
@ -62,20 +62,20 @@ public class ChatInput : Box {
|
||||||
string[] token = text.split(" ", 2);
|
string[] token = text.split(" ", 2);
|
||||||
switch(token[0]) {
|
switch(token[0]) {
|
||||||
case "/kick":
|
case "/kick":
|
||||||
MucManager.get_instance(stream_interactor).kick(conversation.account, conversation.counterpart, token[1]);
|
stream_interactor.get_module(MucManager.IDENTITY).kick(conversation.account, conversation.counterpart, token[1]);
|
||||||
break;
|
break;
|
||||||
case "/me":
|
case "/me":
|
||||||
MessageManager.get_instance(stream_interactor).send_message(text, conversation);
|
stream_interactor.get_module(MessageManager.IDENTITY).send_message(text, conversation);
|
||||||
break;
|
break;
|
||||||
case "/nick":
|
case "/nick":
|
||||||
MucManager.get_instance(stream_interactor).change_nick(conversation.account, conversation.counterpart, token[1]);
|
stream_interactor.get_module(MucManager.IDENTITY).change_nick(conversation.account, conversation.counterpart, token[1]);
|
||||||
break;
|
break;
|
||||||
case "/topic":
|
case "/topic":
|
||||||
MucManager.get_instance(stream_interactor).change_subject(conversation.account, conversation.counterpart, token[1]);
|
stream_interactor.get_module(MucManager.IDENTITY).change_subject(conversation.account, conversation.counterpart, token[1]);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
MessageManager.get_instance(stream_interactor).send_message(text, conversation);
|
stream_interactor.get_module(MessageManager.IDENTITY).send_message(text, conversation);
|
||||||
}
|
}
|
||||||
text_input.buffer.text = "";
|
text_input.buffer.text = "";
|
||||||
}
|
}
|
||||||
|
@ -117,9 +117,9 @@ public class ChatInput : Box {
|
||||||
|
|
||||||
private void on_text_input_changed() {
|
private void on_text_input_changed() {
|
||||||
if (text_input.buffer.text != "") {
|
if (text_input.buffer.text != "") {
|
||||||
ChatInteraction.get_instance(stream_interactor).on_message_entered(conversation);
|
stream_interactor.get_module(ChatInteraction.IDENTITY).on_message_entered(conversation);
|
||||||
} else {
|
} else {
|
||||||
ChatInteraction.get_instance(stream_interactor).on_message_cleared(conversation);
|
stream_interactor.get_module(ChatInteraction.IDENTITY).on_message_cleared(conversation);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,7 +40,7 @@ public class ChatRow : ConversationRow {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void update_avatar() {
|
public void update_avatar() {
|
||||||
ArrayList<Jid> full_jids = PresenceManager.get_instance(stream_interactor).get_full_jids(conversation.counterpart, conversation.account);
|
ArrayList<Jid> full_jids = stream_interactor.get_module(PresenceManager.IDENTITY).get_full_jids(conversation.counterpart, conversation.account);
|
||||||
set_avatar((new AvatarGenerator(AVATAR_SIZE, AVATAR_SIZE, image.scale_factor))
|
set_avatar((new AvatarGenerator(AVATAR_SIZE, AVATAR_SIZE, image.scale_factor))
|
||||||
.set_greyscale(full_jids == null)
|
.set_greyscale(full_jids == null)
|
||||||
.draw_conversation(stream_interactor, conversation), image.scale_factor);
|
.draw_conversation(stream_interactor, conversation), image.scale_factor);
|
||||||
|
@ -54,12 +54,12 @@ public class ChatRow : ConversationRow {
|
||||||
|
|
||||||
jid_label.label = conversation.counterpart.to_string();
|
jid_label.label = conversation.counterpart.to_string();
|
||||||
|
|
||||||
ArrayList<Jid>? full_jids = PresenceManager.get_instance(stream_interactor).get_full_jids(conversation.counterpart, conversation.account);
|
ArrayList<Jid>? full_jids = stream_interactor.get_module(PresenceManager.IDENTITY).get_full_jids(conversation.counterpart, conversation.account);
|
||||||
if (full_jids != null) {
|
if (full_jids != null) {
|
||||||
for (int i = 0; i < full_jids.size; i++) {
|
for (int i = 0; i < full_jids.size; i++) {
|
||||||
Box box = new Box(Orientation.HORIZONTAL, 5);
|
Box box = new Box(Orientation.HORIZONTAL, 5);
|
||||||
|
|
||||||
Show show = PresenceManager.get_instance(stream_interactor).get_last_show(full_jids[i], conversation.account);
|
Show show = stream_interactor.get_module(PresenceManager.IDENTITY).get_last_show(full_jids[i], conversation.account);
|
||||||
Image image = new Image();
|
Image image = new Image();
|
||||||
if (show.as == Show.AWAY) {
|
if (show.as == Show.AWAY) {
|
||||||
image.set_from_icon_name("dino-status-away", IconSize.SMALL_TOOLBAR);
|
image.set_from_icon_name("dino-status-away", IconSize.SMALL_TOOLBAR);
|
||||||
|
|
|
@ -46,7 +46,7 @@ public abstract class ConversationRow : ListBoxRow {
|
||||||
x_button.clicked.connect(on_x_button_clicked);
|
x_button.clicked.connect(on_x_button_clicked);
|
||||||
|
|
||||||
update_name(Util.get_conversation_display_name(stream_interactor, conversation));
|
update_name(Util.get_conversation_display_name(stream_interactor, conversation));
|
||||||
Entities.Message message = MessageManager.get_instance(stream_interactor).get_last_message(conversation);
|
Entities.Message message = stream_interactor.get_module(MessageManager.IDENTITY).get_last_message(conversation);
|
||||||
if (message != null) {
|
if (message != null) {
|
||||||
message_received(message);
|
message_received(message);
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,12 +23,12 @@ public class GroupchatRow : ConversationRow {
|
||||||
public override void network_connection(bool connected) {
|
public override void network_connection(bool connected) {
|
||||||
set_avatar((new AvatarGenerator(AVATAR_SIZE, AVATAR_SIZE, image.scale_factor))
|
set_avatar((new AvatarGenerator(AVATAR_SIZE, AVATAR_SIZE, image.scale_factor))
|
||||||
.set_greyscale(!connected ||
|
.set_greyscale(!connected ||
|
||||||
MucManager.get_instance(stream_interactor).get_nick(conversation.counterpart, conversation.account) == null) // TODO better currently joined
|
stream_interactor.get_module(MucManager.IDENTITY).get_nick(conversation.counterpart, conversation.account) == null) // TODO better currently joined
|
||||||
.draw_conversation(stream_interactor, conversation), image.scale_factor);
|
.draw_conversation(stream_interactor, conversation), image.scale_factor);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void on_x_button_clicked() {
|
private void on_x_button_clicked() {
|
||||||
MucManager.get_instance(stream_interactor).part(conversation.account, conversation.counterpart);
|
stream_interactor.get_module(MucManager.IDENTITY).part(conversation.account, conversation.counterpart);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -22,31 +22,31 @@ public class List : ListBox {
|
||||||
set_header_func(header);
|
set_header_func(header);
|
||||||
set_sort_func(sort);
|
set_sort_func(sort);
|
||||||
|
|
||||||
ChatInteraction.get_instance(stream_interactor).conversation_read.connect((conversation) => {
|
stream_interactor.get_module(ChatInteraction.IDENTITY).conversation_read.connect((conversation) => {
|
||||||
Idle.add(() => {if (rows.has_key(conversation)) rows[conversation].mark_read(); return false;});
|
Idle.add(() => {if (rows.has_key(conversation)) rows[conversation].mark_read(); return false;});
|
||||||
});
|
});
|
||||||
ChatInteraction.get_instance(stream_interactor).conversation_unread.connect((conversation) => {
|
stream_interactor.get_module(ChatInteraction.IDENTITY).conversation_unread.connect((conversation) => {
|
||||||
Idle.add(() => {if (rows.has_key(conversation)) rows[conversation].mark_unread(); return false;});
|
Idle.add(() => {if (rows.has_key(conversation)) rows[conversation].mark_unread(); return false;});
|
||||||
});
|
});
|
||||||
ConversationManager.get_instance(stream_interactor).conversation_activated.connect((conversation) => {
|
stream_interactor.get_module(ConversationManager.IDENTITY).conversation_activated.connect((conversation) => {
|
||||||
Idle.add(() => {add_conversation(conversation); return false;});
|
Idle.add(() => {add_conversation(conversation); return false;});
|
||||||
});
|
});
|
||||||
MessageManager.get_instance(stream_interactor).message_received.connect((message, conversation) => {
|
stream_interactor.get_module(MessageManager.IDENTITY).message_received.connect((message, conversation) => {
|
||||||
Idle.add(() => {on_message_received(message, conversation); return false;});
|
Idle.add(() => {on_message_received(message, conversation); return false;});
|
||||||
});
|
});
|
||||||
MessageManager.get_instance(stream_interactor).message_sent.connect((message, conversation) => {
|
stream_interactor.get_module(MessageManager.IDENTITY).message_sent.connect((message, conversation) => {
|
||||||
Idle.add(() => {on_message_received(message, conversation); return false;});
|
Idle.add(() => {on_message_received(message, conversation); return false;});
|
||||||
});
|
});
|
||||||
PresenceManager.get_instance(stream_interactor).show_received.connect((show, jid, account) => {
|
stream_interactor.get_module(PresenceManager.IDENTITY).show_received.connect((show, jid, account) => {
|
||||||
Idle.add(() => {
|
Idle.add(() => {
|
||||||
Conversation? conversation = ConversationManager.get_instance(stream_interactor).get_conversation(jid, account);
|
Conversation? conversation = stream_interactor.get_module(ConversationManager.IDENTITY).get_conversation(jid, account);
|
||||||
if (conversation != null && rows.has_key(conversation)) rows[conversation].on_show_received(show);
|
if (conversation != null && rows.has_key(conversation)) rows[conversation].on_show_received(show);
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
RosterManager.get_instance(stream_interactor).updated_roster_item.connect((account, jid, roster_item) => {
|
stream_interactor.get_module(RosterManager.IDENTITY).updated_roster_item.connect((account, jid, roster_item) => {
|
||||||
Idle.add(() => {
|
Idle.add(() => {
|
||||||
Conversation? conversation = ConversationManager.get_instance(stream_interactor).get_conversation(jid, account);
|
Conversation? conversation = stream_interactor.get_module(ConversationManager.IDENTITY).get_conversation(jid, account);
|
||||||
if (conversation != null && rows.has_key(conversation)) {
|
if (conversation != null && rows.has_key(conversation)) {
|
||||||
ChatRow row = rows[conversation] as ChatRow;
|
ChatRow row = rows[conversation] as ChatRow;
|
||||||
if (row != null) row.on_updated_roster_item(roster_item);
|
if (row != null) row.on_updated_roster_item(roster_item);
|
||||||
|
@ -54,9 +54,9 @@ public class List : ListBox {
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
AvatarManager.get_instance(stream_interactor).received_avatar.connect((avatar, jid, account) => {
|
stream_interactor.get_module(AvatarManager.IDENTITY).received_avatar.connect((avatar, jid, account) => {
|
||||||
Idle.add(() => {
|
Idle.add(() => {
|
||||||
Conversation? conversation = ConversationManager.get_instance(stream_interactor).get_conversation(jid, account);
|
Conversation? conversation = stream_interactor.get_module(ConversationManager.IDENTITY).get_conversation(jid, account);
|
||||||
if (conversation != null && rows.has_key(conversation)) {
|
if (conversation != null && rows.has_key(conversation)) {
|
||||||
ChatRow row = rows[conversation] as ChatRow;
|
ChatRow row = rows[conversation] as ChatRow;
|
||||||
if (row != null) row.update_avatar();
|
if (row != null) row.update_avatar();
|
||||||
|
|
|
@ -32,16 +32,16 @@ public class View : Box {
|
||||||
scrolled.vadjustment.notify["upper"].connect_after(on_upper_notify);
|
scrolled.vadjustment.notify["upper"].connect_after(on_upper_notify);
|
||||||
scrolled.vadjustment.notify["value"].connect(on_value_notify);
|
scrolled.vadjustment.notify["value"].connect(on_value_notify);
|
||||||
|
|
||||||
CounterpartInteractionManager.get_instance(stream_interactor).received_state.connect((account, jid, state) => {
|
stream_interactor.get_module(CounterpartInteractionManager.IDENTITY).received_state.connect((account, jid, state) => {
|
||||||
Idle.add(() => { on_received_state(account, jid, state); return false; });
|
Idle.add(() => { on_received_state(account, jid, state); return false; });
|
||||||
});
|
});
|
||||||
MessageManager.get_instance(stream_interactor).message_received.connect((message, conversation) => {
|
stream_interactor.get_module(MessageManager.IDENTITY).message_received.connect((message, conversation) => {
|
||||||
Idle.add(() => { show_message(message, conversation, true); return false; });
|
Idle.add(() => { show_message(message, conversation, true); return false; });
|
||||||
});
|
});
|
||||||
MessageManager.get_instance(stream_interactor).message_sent.connect((message, conversation) => {
|
stream_interactor.get_module(MessageManager.IDENTITY).message_sent.connect((message, conversation) => {
|
||||||
Idle.add(() => { show_message(message, conversation, true); return false; });
|
Idle.add(() => { show_message(message, conversation, true); return false; });
|
||||||
});
|
});
|
||||||
PresenceManager.get_instance(stream_interactor).show_received.connect((show, jid, account) => {
|
stream_interactor.get_module(PresenceManager.IDENTITY).show_received.connect((show, jid, account) => {
|
||||||
Idle.add(() => { on_show_received(show, jid, account); return false; });
|
Idle.add(() => { on_show_received(show, jid, account); return false; });
|
||||||
});
|
});
|
||||||
Timeout.add_seconds(60, () => {
|
Timeout.add_seconds(60, () => {
|
||||||
|
@ -65,12 +65,12 @@ public class View : Box {
|
||||||
last_conversation_item = null;
|
last_conversation_item = null;
|
||||||
|
|
||||||
ArrayList<Object> objects = new ArrayList<Object>();
|
ArrayList<Object> objects = new ArrayList<Object>();
|
||||||
Gee.List<Entities.Message>? messages = MessageManager.get_instance(stream_interactor).get_messages(conversation);
|
Gee.List<Entities.Message>? messages = stream_interactor.get_module(MessageManager.IDENTITY).get_messages(conversation);
|
||||||
if (messages != null && messages.size > 0) {
|
if (messages != null && messages.size > 0) {
|
||||||
earliest_message = messages[0];
|
earliest_message = messages[0];
|
||||||
objects.add_all(messages);
|
objects.add_all(messages);
|
||||||
}
|
}
|
||||||
HashMap<Jid, ArrayList<Show>>? shows = PresenceManager.get_instance(stream_interactor).get_shows(conversation.counterpart, conversation.account);
|
HashMap<Jid, ArrayList<Show>>? shows = stream_interactor.get_module(PresenceManager.IDENTITY).get_shows(conversation.counterpart, conversation.account);
|
||||||
if (shows != null) {
|
if (shows != null) {
|
||||||
foreach (Jid jid in shows.keys) objects.add_all(shows[jid]);
|
foreach (Jid jid in shows.keys) objects.add_all(shows[jid]);
|
||||||
}
|
}
|
||||||
|
@ -109,7 +109,7 @@ public class View : Box {
|
||||||
private void update_chat_state(string? state = null) {
|
private void update_chat_state(string? state = null) {
|
||||||
string? state_ = state;
|
string? state_ = state;
|
||||||
if (state_ == null) {
|
if (state_ == null) {
|
||||||
state_ = CounterpartInteractionManager.get_instance(stream_interactor).get_chat_state(conversation.account, conversation.counterpart);
|
state_ = stream_interactor.get_module(CounterpartInteractionManager.IDENTITY).get_chat_state(conversation.account, conversation.counterpart);
|
||||||
}
|
}
|
||||||
if (typing_status != null) {
|
if (typing_status != null) {
|
||||||
main.remove(typing_status);
|
main.remove(typing_status);
|
||||||
|
@ -156,7 +156,7 @@ public class View : Box {
|
||||||
if(reloading) return;
|
if(reloading) return;
|
||||||
reloading = true;
|
reloading = true;
|
||||||
}
|
}
|
||||||
Gee.List<Entities.Message>? messages = MessageManager.get_instance(stream_interactor).get_messages_before(conversation, earliest_message);
|
Gee.List<Entities.Message>? messages = stream_interactor.get_module(MessageManager.IDENTITY).get_messages_before(conversation, earliest_message);
|
||||||
if (messages != null && messages.size > 0) {
|
if (messages != null && messages.size > 0) {
|
||||||
earliest_message = messages[0];
|
earliest_message = messages[0];
|
||||||
MergedMessageItem? current_item = null;
|
MergedMessageItem? current_item = null;
|
||||||
|
|
|
@ -20,7 +20,7 @@ public class ConversationTitlebar : Gtk.HeaderBar {
|
||||||
|
|
||||||
public ConversationTitlebar(StreamInteractor stream_interactor) {
|
public ConversationTitlebar(StreamInteractor stream_interactor) {
|
||||||
this.stream_interactor = stream_interactor;
|
this.stream_interactor = stream_interactor;
|
||||||
MucManager.get_instance(stream_interactor).groupchat_subject_set.connect((account, jid, subject) => {
|
stream_interactor.get_module(MucManager.IDENTITY).groupchat_subject_set.connect((account, jid, subject) => {
|
||||||
Idle.add(() => { on_groupchat_subject_set(account, jid, subject); return false; });
|
Idle.add(() => { on_groupchat_subject_set(account, jid, subject); return false; });
|
||||||
});
|
});
|
||||||
create_conversation_menu();
|
create_conversation_menu();
|
||||||
|
@ -77,7 +77,7 @@ public class ConversationTitlebar : Gtk.HeaderBar {
|
||||||
if (subtitle != null) {
|
if (subtitle != null) {
|
||||||
set_subtitle(subtitle);
|
set_subtitle(subtitle);
|
||||||
} else if (conversation.type_ == Conversation.Type.GROUPCHAT) {
|
} else if (conversation.type_ == Conversation.Type.GROUPCHAT) {
|
||||||
string subject = MucManager.get_instance(stream_interactor).get_groupchat_subject(conversation.counterpart, conversation.account);
|
string subject = stream_interactor.get_module(MucManager.IDENTITY).get_groupchat_subject(conversation.counterpart, conversation.account);
|
||||||
set_subtitle(subject != "" ? subject : null);
|
set_subtitle(subject != "" ? subject : null);
|
||||||
} else {
|
} else {
|
||||||
set_subtitle(null);
|
set_subtitle(null);
|
||||||
|
|
|
@ -78,7 +78,7 @@ public class Dialog : Gtk.Window {
|
||||||
add_account(account);
|
add_account(account);
|
||||||
}
|
}
|
||||||
|
|
||||||
AvatarManager.get_instance(stream_interactor).received_avatar.connect((pixbuf, jid, account) => {
|
stream_interactor.get_module(AvatarManager.IDENTITY).received_avatar.connect((pixbuf, jid, account) => {
|
||||||
Idle.add(() => {
|
Idle.add(() => {
|
||||||
on_received_avatar(pixbuf, jid, account);
|
on_received_avatar(pixbuf, jid, account);
|
||||||
return false;
|
return false;
|
||||||
|
@ -166,7 +166,7 @@ public class Dialog : Gtk.Window {
|
||||||
if (chooser.run() == Gtk.ResponseType.ACCEPT) {
|
if (chooser.run() == Gtk.ResponseType.ACCEPT) {
|
||||||
string uri = chooser.get_filename();
|
string uri = chooser.get_filename();
|
||||||
Account account = (account_list.get_selected_row() as AccountRow).account;
|
Account account = (account_list.get_selected_row() as AccountRow).account;
|
||||||
AvatarManager.get_instance(stream_interactor).publish(account, uri);
|
stream_interactor.get_module(AvatarManager.IDENTITY).publish(account, uri);
|
||||||
}
|
}
|
||||||
chooser.close();
|
chooser.close();
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,14 +13,14 @@ public class Notifications : GLib.Object {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void start() {
|
public void start() {
|
||||||
MessageManager.get_instance(stream_interactor).message_received.connect(on_message_received);
|
stream_interactor.get_module(MessageManager.IDENTITY).message_received.connect(on_message_received);
|
||||||
PresenceManager.get_instance(stream_interactor).received_subscription_request.connect(on_received_subscription_request);
|
stream_interactor.get_module(PresenceManager.IDENTITY).received_subscription_request.connect(on_received_subscription_request);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void on_message_received(Entities.Message message, Conversation conversation) {
|
private void on_message_received(Entities.Message message, Conversation conversation) {
|
||||||
if (!ChatInteraction.get_instance(stream_interactor).is_active_focus()) {
|
if (!stream_interactor.get_module(ChatInteraction.IDENTITY).is_active_focus()) {
|
||||||
string display_name = Util.get_conversation_display_name(stream_interactor, conversation);
|
string display_name = Util.get_conversation_display_name(stream_interactor, conversation);
|
||||||
if (MucManager.get_instance(stream_interactor).is_groupchat(conversation.counterpart, conversation.account)) {
|
if (stream_interactor.get_module(MucManager.IDENTITY).is_groupchat(conversation.counterpart, conversation.account)) {
|
||||||
string muc_occupant = Util.get_display_name(stream_interactor, message.from, conversation.account);
|
string muc_occupant = Util.get_display_name(stream_interactor, message.from, conversation.account);
|
||||||
display_name = muc_occupant + " in " + display_name;
|
display_name = muc_occupant + " in " + display_name;
|
||||||
}
|
}
|
||||||
|
@ -37,13 +37,13 @@ public class Notifications : GLib.Object {
|
||||||
Notify.Notification notification = new Notify.Notification("Subscription request", jid.bare_jid.to_string(), null);
|
Notify.Notification notification = new Notify.Notification("Subscription request", jid.bare_jid.to_string(), null);
|
||||||
notification.set_image_from_pixbuf((new AvatarGenerator(40, 40)).draw_jid(stream_interactor, jid, account));
|
notification.set_image_from_pixbuf((new AvatarGenerator(40, 40)).draw_jid(stream_interactor, jid, account));
|
||||||
notification.add_action("accept", "Accept", () => {
|
notification.add_action("accept", "Accept", () => {
|
||||||
PresenceManager.get_instance(stream_interactor).approve_subscription(account, jid);
|
stream_interactor.get_module(PresenceManager.IDENTITY).approve_subscription(account, jid);
|
||||||
try {
|
try {
|
||||||
notification.close();
|
notification.close();
|
||||||
} catch (Error error) { }
|
} catch (Error error) { }
|
||||||
});
|
});
|
||||||
notification.add_action("deny", "Deny", () => {
|
notification.add_action("deny", "Deny", () => {
|
||||||
PresenceManager.get_instance(stream_interactor).deny_subscription(account, jid);
|
stream_interactor.get_module(PresenceManager.IDENTITY).deny_subscription(account, jid);
|
||||||
try {
|
try {
|
||||||
notification.close();
|
notification.close();
|
||||||
} catch (Error error) { }
|
} catch (Error error) { }
|
||||||
|
|
|
@ -25,17 +25,17 @@ public class OccupantList : Box {
|
||||||
list_box.set_filter_func(filter);
|
list_box.set_filter_func(filter);
|
||||||
search_entry.search_changed.connect(search_changed);
|
search_entry.search_changed.connect(search_changed);
|
||||||
|
|
||||||
PresenceManager.get_instance(stream_interactor).show_received.connect((show, jid, account) => {
|
stream_interactor.get_module(PresenceManager.IDENTITY).show_received.connect((show, jid, account) => {
|
||||||
Idle.add(() => { on_show_received(show, jid, account); return false; });
|
Idle.add(() => { on_show_received(show, jid, account); return false; });
|
||||||
});
|
});
|
||||||
RosterManager.get_instance(stream_interactor).updated_roster_item.connect(on_updated_roster_item);
|
stream_interactor.get_module(RosterManager.IDENTITY).updated_roster_item.connect(on_updated_roster_item);
|
||||||
|
|
||||||
initialize_for_conversation(conversation);
|
initialize_for_conversation(conversation);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void initialize_for_conversation(Conversation conversation) {
|
public void initialize_for_conversation(Conversation conversation) {
|
||||||
this.conversation = conversation;
|
this.conversation = conversation;
|
||||||
ArrayList<Jid>? occupants = MucManager.get_instance(stream_interactor).get_occupants(conversation.counterpart, conversation.account);
|
ArrayList<Jid>? occupants = stream_interactor.get_module(MucManager.IDENTITY).get_occupants(conversation.counterpart, conversation.account);
|
||||||
if (occupants != null) {
|
if (occupants != null) {
|
||||||
foreach (Jid occupant in occupants) {
|
foreach (Jid occupant in occupants) {
|
||||||
add_occupant(occupant);
|
add_occupant(occupant);
|
||||||
|
|
|
@ -99,7 +99,7 @@ public class UnifiedWindow : Window {
|
||||||
|
|
||||||
private void on_conversation_selected(Conversation conversation) {
|
private void on_conversation_selected(Conversation conversation) {
|
||||||
this.conversation = conversation;
|
this.conversation = conversation;
|
||||||
ChatInteraction.get_instance(stream_interactor).on_conversation_selected(conversation);
|
stream_interactor.get_module(ChatInteraction.IDENTITY).on_conversation_selected(conversation);
|
||||||
conversation.active = true; // only for conversation_selected
|
conversation.active = true; // only for conversation_selected
|
||||||
filterable_conversation_list.conversation_list.on_conversation_selected(conversation); // only for conversation_opened
|
filterable_conversation_list.conversation_list.on_conversation_selected(conversation); // only for conversation_opened
|
||||||
|
|
||||||
|
@ -109,12 +109,12 @@ public class UnifiedWindow : Window {
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool on_focus_in_event() {
|
private bool on_focus_in_event() {
|
||||||
ChatInteraction.get_instance(stream_interactor).on_window_focus_in(conversation);
|
stream_interactor.get_module(ChatInteraction.IDENTITY).on_window_focus_in(conversation);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool on_focus_out_event() {
|
private bool on_focus_out_event() {
|
||||||
ChatInteraction.get_instance(stream_interactor).on_window_focus_out(conversation);
|
stream_interactor.get_module(ChatInteraction.IDENTITY).on_window_focus_out(conversation);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,7 +44,7 @@ public class Util : Object {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static string get_display_name(StreamInteractor stream_interactor, Jid jid, Account account) {
|
public static string get_display_name(StreamInteractor stream_interactor, Jid jid, Account account) {
|
||||||
if (MucManager.get_instance(stream_interactor).is_groupchat_occupant(jid, account)) {
|
if (stream_interactor.get_module(MucManager.IDENTITY).is_groupchat_occupant(jid, account)) {
|
||||||
return jid.resourcepart;
|
return jid.resourcepart;
|
||||||
} else {
|
} else {
|
||||||
if (jid.bare_jid.equals(account.bare_jid.bare_jid)) {
|
if (jid.bare_jid.equals(account.bare_jid.bare_jid)) {
|
||||||
|
@ -54,7 +54,7 @@ public class Util : Object {
|
||||||
return account.alias;
|
return account.alias;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Roster.Item roster_item = RosterManager.get_instance(stream_interactor).get_roster_item(account, jid);
|
Roster.Item roster_item = stream_interactor.get_module(RosterManager.IDENTITY).get_roster_item(account, jid);
|
||||||
if (roster_item != null && roster_item.name != null) {
|
if (roster_item != null && roster_item.name != null) {
|
||||||
return roster_item.name;
|
return roster_item.name;
|
||||||
}
|
}
|
||||||
|
@ -63,7 +63,7 @@ public class Util : Object {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static string get_message_display_name(StreamInteractor stream_interactor, Entities.Message message, Account account) {
|
public static string get_message_display_name(StreamInteractor stream_interactor, Entities.Message message, Account account) {
|
||||||
Jid? real_jid = MucManager.get_instance(stream_interactor).get_message_real_jid(message);
|
Jid? real_jid = stream_interactor.get_module(MucManager.IDENTITY).get_message_real_jid(message);
|
||||||
if (real_jid != null) {
|
if (real_jid != null) {
|
||||||
return get_display_name(stream_interactor, real_jid, account);
|
return get_display_name(stream_interactor, real_jid, account);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -16,7 +16,7 @@ public class EncryptionListEntry : Plugins.EncryptionListEntry, Object {
|
||||||
}}
|
}}
|
||||||
|
|
||||||
public bool can_encrypt(Entities.Conversation conversation) {
|
public bool can_encrypt(Entities.Conversation conversation) {
|
||||||
return Manager.get_instance(plugin.app.stream_interaction).can_encrypt(conversation);
|
return plugin.app.stream_interaction.get_module(Manager.IDENTITY).can_encrypt(conversation);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,8 @@ using Gee;
|
||||||
namespace Dino.Plugins.Omemo {
|
namespace Dino.Plugins.Omemo {
|
||||||
|
|
||||||
public class Manager : StreamInteractionModule, Object {
|
public class Manager : StreamInteractionModule, Object {
|
||||||
public const string id = "omemo_manager";
|
public static ModuleIdentity<Manager> IDENTITY = new ModuleIdentity<Manager>("omemo_manager");
|
||||||
|
public string id { get { return IDENTITY.id; } }
|
||||||
|
|
||||||
private StreamInteractor stream_interactor;
|
private StreamInteractor stream_interactor;
|
||||||
private Database db;
|
private Database db;
|
||||||
|
@ -64,8 +65,8 @@ public class Manager : StreamInteractionModule, Object {
|
||||||
|
|
||||||
stream_interactor.stream_negotiated.connect(on_stream_negotiated);
|
stream_interactor.stream_negotiated.connect(on_stream_negotiated);
|
||||||
stream_interactor.account_added.connect(on_account_added);
|
stream_interactor.account_added.connect(on_account_added);
|
||||||
MessageManager.get_instance(stream_interactor).pre_message_received.connect(on_pre_message_received);
|
stream_interactor.get_module(MessageManager.IDENTITY).pre_message_received.connect(on_pre_message_received);
|
||||||
MessageManager.get_instance(stream_interactor).pre_message_send.connect(on_pre_message_send);
|
stream_interactor.get_module(MessageManager.IDENTITY).pre_message_send.connect(on_pre_message_send);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void on_pre_message_received(Entities.Message message, Xmpp.Message.Stanza message_stanza, Conversation conversation) {
|
private void on_pre_message_received(Entities.Message message, Xmpp.Message.Stanza message_stanza, Conversation conversation) {
|
||||||
|
@ -143,8 +144,8 @@ public class Manager : StreamInteractionModule, Object {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
foreach (Entities.Message msg in send_now) {
|
foreach (Entities.Message msg in send_now) {
|
||||||
Entities.Conversation conv = ConversationManager.get_instance(stream_interactor).get_conversation(msg.counterpart, account);
|
Entities.Conversation conv = stream_interactor.get_module(ConversationManager.IDENTITY).get_conversation(msg.counterpart, account);
|
||||||
MessageManager.get_instance(stream_interactor).send_xmpp_message(msg, conv, true);
|
stream_interactor.get_module(MessageManager.IDENTITY).send_xmpp_message(msg, conv, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -167,8 +168,8 @@ public class Manager : StreamInteractionModule, Object {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
foreach (Entities.Message msg in send_now) {
|
foreach (Entities.Message msg in send_now) {
|
||||||
Entities.Conversation conv = ConversationManager.get_instance(stream_interactor).get_conversation(msg.counterpart, account);
|
Entities.Conversation conv = stream_interactor.get_module(ConversationManager.IDENTITY).get_conversation(msg.counterpart, account);
|
||||||
MessageManager.get_instance(stream_interactor).send_xmpp_message(msg, conv, true);
|
stream_interactor.get_module(MessageManager.IDENTITY).send_xmpp_message(msg, conv, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -222,18 +223,10 @@ public class Manager : StreamInteractionModule, Object {
|
||||||
return stream.get_module(StreamModule.IDENTITY).is_known_address(conversation.counterpart.bare_jid.to_string());
|
return stream.get_module(StreamModule.IDENTITY).is_known_address(conversation.counterpart.bare_jid.to_string());
|
||||||
}
|
}
|
||||||
|
|
||||||
internal string get_id() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void start(StreamInteractor stream_interactor, Database db) {
|
public static void start(StreamInteractor stream_interactor, Database db) {
|
||||||
Manager m = new Manager(stream_interactor, db);
|
Manager m = new Manager(stream_interactor, db);
|
||||||
stream_interactor.add_module(m);
|
stream_interactor.add_module(m);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Manager? get_instance(StreamInteractor stream_interactor) {
|
|
||||||
return (Manager) stream_interactor.get_module(id);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -14,8 +14,7 @@ private const string NODE_VERIFICATION = NS_URI + ".verification";
|
||||||
private const int NUM_KEYS_TO_PUBLISH = 100;
|
private const int NUM_KEYS_TO_PUBLISH = 100;
|
||||||
|
|
||||||
public class StreamModule : XmppStreamModule {
|
public class StreamModule : XmppStreamModule {
|
||||||
private const string ID = "omemo_module";
|
public static Core.ModuleIdentity<StreamModule> IDENTITY = new Core.ModuleIdentity<StreamModule>(NS_URI, "omemo_module");
|
||||||
public static ModuleIdentity<StreamModule> IDENTITY = new ModuleIdentity<StreamModule>(NS_URI, ID);
|
|
||||||
|
|
||||||
private Store store;
|
private Store store;
|
||||||
private ConcurrentSet<string> active_bundle_requests = new ConcurrentSet<string>();
|
private ConcurrentSet<string> active_bundle_requests = new ConcurrentSet<string>();
|
||||||
|
@ -189,7 +188,7 @@ public class StreamModule : XmppStreamModule {
|
||||||
|
|
||||||
public void on_devicelist(XmppStream stream, string jid, string id, StanzaNode? node_) {
|
public void on_devicelist(XmppStream stream, string jid, string id, StanzaNode? node_) {
|
||||||
StanzaNode? node = node_;
|
StanzaNode? node = node_;
|
||||||
if (jid == get_bare_jid(Bind.Flag.get_flag(stream).my_jid) && store.local_registration_id != 0) {
|
if (jid == get_bare_jid(stream.get_flag(Bind.Flag.IDENTITY).my_jid) && store.local_registration_id != 0) {
|
||||||
if (node == null) {
|
if (node == null) {
|
||||||
node = new StanzaNode.build("list", NS_URI).add_self_xmlns().put_node(new StanzaNode.build("device", NS_URI));
|
node = new StanzaNode.build("list", NS_URI).add_self_xmlns().put_node(new StanzaNode.build("device", NS_URI));
|
||||||
}
|
}
|
||||||
|
@ -422,7 +421,7 @@ public class StreamModule : XmppStreamModule {
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string get_id() {
|
public override string get_id() {
|
||||||
return ID;
|
return IDENTITY.id;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,7 @@ private class EncryptionListEntry : Plugins.EncryptionListEntry, Object {
|
||||||
}}
|
}}
|
||||||
|
|
||||||
public bool can_encrypt(Entities.Conversation conversation) {
|
public bool can_encrypt(Entities.Conversation conversation) {
|
||||||
return Manager.get_instance(stream_interactor).get_key_id(conversation.account, conversation.counterpart) != null;
|
return stream_interactor.get_module(Manager.IDENTITY).get_key_id(conversation.account, conversation.counterpart) != null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,8 @@ using Dino.Entities;
|
||||||
namespace Dino.Plugins.OpenPgp {
|
namespace Dino.Plugins.OpenPgp {
|
||||||
|
|
||||||
public class Manager : StreamInteractionModule, Object {
|
public class Manager : StreamInteractionModule, Object {
|
||||||
public const string id = "pgp_manager";
|
public static ModuleIdentity<Manager> IDENTITY = new ModuleIdentity<Manager>("pgp_manager");
|
||||||
|
public string id { get { return IDENTITY.id; } }
|
||||||
|
|
||||||
public const string MESSAGE_ENCRYPTED = "pgp";
|
public const string MESSAGE_ENCRYPTED = "pgp";
|
||||||
|
|
||||||
|
@ -25,8 +26,8 @@ namespace Dino.Plugins.OpenPgp {
|
||||||
this.db = db;
|
this.db = db;
|
||||||
|
|
||||||
stream_interactor.account_added.connect(on_account_added);
|
stream_interactor.account_added.connect(on_account_added);
|
||||||
MessageManager.get_instance(stream_interactor).pre_message_received.connect(on_pre_message_received);
|
stream_interactor.get_module(MessageManager.IDENTITY).pre_message_received.connect(on_pre_message_received);
|
||||||
MessageManager.get_instance(stream_interactor).pre_message_send.connect(on_pre_message_send);
|
stream_interactor.get_module(MessageManager.IDENTITY).pre_message_send.connect(on_pre_message_send);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void on_pre_message_received(Entities.Message message, Xmpp.Message.Stanza message_stanza, Conversation conversation) {
|
private void on_pre_message_received(Entities.Message message, Xmpp.Message.Stanza message_stanza, Conversation conversation) {
|
||||||
|
@ -40,7 +41,8 @@ namespace Dino.Plugins.OpenPgp {
|
||||||
string? key_id = get_key_id(conversation.account, message.counterpart);
|
string? key_id = get_key_id(conversation.account, message.counterpart);
|
||||||
bool encrypted = false;
|
bool encrypted = false;
|
||||||
if (key_id != null) {
|
if (key_id != null) {
|
||||||
encrypted = stream_interactor.get_stream(conversation.account).get_module(Module.IDENTITY).encrypt(message_stanza, key_id);
|
Core.XmppStream? stream = stream_interactor.get_stream(conversation.account);
|
||||||
|
if (stream != null) encrypted = stream.get_module(Module.IDENTITY).encrypt(message_stanza, key_id);
|
||||||
}
|
}
|
||||||
if (!encrypted) {
|
if (!encrypted) {
|
||||||
message.marked = Entities.Message.Marked.WONTSEND;
|
message.marked = Entities.Message.Marked.WONTSEND;
|
||||||
|
@ -52,14 +54,6 @@ namespace Dino.Plugins.OpenPgp {
|
||||||
return db.get_contact_key(jid);
|
return db.get_contact_key(jid);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Manager? get_instance(StreamInteractor stream_interactor) {
|
|
||||||
return (Manager) stream_interactor.get_module(id);
|
|
||||||
}
|
|
||||||
|
|
||||||
internal string get_id() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void on_account_added(Account account) {
|
private void on_account_added(Account account) {
|
||||||
stream_interactor.module_manager.get_module(account, Module.IDENTITY).received_jid_key_id.connect((stream, jid, key_id) => {
|
stream_interactor.module_manager.get_module(account, Module.IDENTITY).received_jid_key_id.connect((stream, jid, key_id) => {
|
||||||
on_jid_key_received(account, new Jid(jid), key_id);
|
on_jid_key_received(account, new Jid(jid), key_id);
|
||||||
|
@ -69,7 +63,7 @@ namespace Dino.Plugins.OpenPgp {
|
||||||
private void on_jid_key_received(Account account, Jid jid, string key_id) {
|
private void on_jid_key_received(Account account, Jid jid, string key_id) {
|
||||||
lock (pgp_key_ids) {
|
lock (pgp_key_ids) {
|
||||||
if (!pgp_key_ids.has_key(jid) || pgp_key_ids[jid] != key_id) {
|
if (!pgp_key_ids.has_key(jid) || pgp_key_ids[jid] != key_id) {
|
||||||
if (!MucManager.get_instance(stream_interactor).is_groupchat_occupant(jid, account)) {
|
if (!stream_interactor.get_module(MucManager.IDENTITY).is_groupchat_occupant(jid, account)) {
|
||||||
db.set_contact_key(jid.bare_jid, key_id);
|
db.set_contact_key(jid.bare_jid, key_id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,20 +6,17 @@ using Xmpp.Core;
|
||||||
namespace Dino.Plugins.OpenPgp {
|
namespace Dino.Plugins.OpenPgp {
|
||||||
|
|
||||||
public class Flag : XmppStreamFlag {
|
public class Flag : XmppStreamFlag {
|
||||||
public const string ID = "pgp";
|
public static FlagIdentity<Flag> IDENTITY = new FlagIdentity<Flag>(NS_URI, "pgp");
|
||||||
|
|
||||||
public HashMap<string, string> key_ids = new HashMap<string, string>();
|
public HashMap<string, string> key_ids = new HashMap<string, string>();
|
||||||
|
|
||||||
public string? get_key_id(string jid) { return key_ids[get_bare_jid(jid)]; }
|
public string? get_key_id(string jid) { return key_ids[get_bare_jid(jid)]; }
|
||||||
|
|
||||||
public void set_key_id(string jid, string key) { key_ids[get_bare_jid(jid)] = key; }
|
public void set_key_id(string jid, string key) { key_ids[get_bare_jid(jid)] = key; }
|
||||||
|
|
||||||
public static Flag? get_flag(XmppStream stream) { return (Flag?) stream.get_flag(NS_URI, ID); }
|
|
||||||
|
|
||||||
public static bool has_flag(XmppStream stream) { return get_flag(stream) != null; }
|
|
||||||
|
|
||||||
public override string get_ns() { return NS_URI; }
|
public override string get_ns() { return NS_URI; }
|
||||||
|
|
||||||
public override string get_id() { return ID; }
|
public override string get_id() { return IDENTITY.id; }
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -9,8 +9,7 @@ namespace Dino.Plugins.OpenPgp {
|
||||||
private const string NS_URI_SIGNED = NS_URI + ":signed";
|
private const string NS_URI_SIGNED = NS_URI + ":signed";
|
||||||
|
|
||||||
public class Module : XmppStreamModule {
|
public class Module : XmppStreamModule {
|
||||||
public const string ID = "0027_current_pgp_usage";
|
public static Core.ModuleIdentity<Module> IDENTITY = new Core.ModuleIdentity<Module>(NS_URI, "0027_current_pgp_usage");
|
||||||
public static ModuleIdentity<Module> IDENTITY = new ModuleIdentity<Module>(NS_URI, ID);
|
|
||||||
|
|
||||||
public signal void received_jid_key_id(XmppStream stream, string jid, string key_id);
|
public signal void received_jid_key_id(XmppStream stream, string jid, string key_id);
|
||||||
|
|
||||||
|
@ -69,7 +68,7 @@ namespace Dino.Plugins.OpenPgp {
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string get_ns() { return NS_URI; }
|
public override string get_ns() { return NS_URI; }
|
||||||
public override string get_id() { return ID; }
|
public override string get_id() { return IDENTITY.id; }
|
||||||
|
|
||||||
private void on_received_presence(XmppStream stream, Presence.Stanza presence) {
|
private void on_received_presence(XmppStream stream, Presence.Stanza presence) {
|
||||||
StanzaNode x_node = presence.stanza.get_subnode("x", NS_URI_SIGNED);
|
StanzaNode x_node = presence.stanza.get_subnode("x", NS_URI_SIGNED);
|
||||||
|
@ -79,7 +78,7 @@ namespace Dino.Plugins.OpenPgp {
|
||||||
string signed_data = presence.status == null ? "" : presence.status;
|
string signed_data = presence.status == null ? "" : presence.status;
|
||||||
string? key_id = get_sign_key(sig, signed_data);
|
string? key_id = get_sign_key(sig, signed_data);
|
||||||
if (key_id != null) {
|
if (key_id != null) {
|
||||||
Flag.get_flag(stream).set_key_id(presence.from, key_id);
|
stream.get_flag(Flag.IDENTITY).set_key_id(presence.from, key_id);
|
||||||
received_jid_key_id(stream, presence.from, key_id);
|
received_jid_key_id(stream, presence.from, key_id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -101,11 +101,14 @@ public class XmppStream {
|
||||||
flags.add(flag);
|
flags.add(flag);
|
||||||
}
|
}
|
||||||
|
|
||||||
public XmppStreamFlag? get_flag(string ns, string id) {
|
public bool has_flag<T>(FlagIdentity<T>? identity) {
|
||||||
foreach (var flag in flags) {
|
return get_flag(identity) != null;
|
||||||
if (flag.get_ns() == ns && flag.get_id() == id) {
|
|
||||||
return flag;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public T? get_flag<T>(FlagIdentity<T>? identity) {
|
||||||
|
if (identity == null) return null;
|
||||||
|
foreach (var flag in flags) {
|
||||||
|
if (identity.matches(flag)) return identity.cast(flag);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -225,6 +228,24 @@ public class XmppStream {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class FlagIdentity<T> : Object {
|
||||||
|
public string ns { get; private set; }
|
||||||
|
public string id { get; private set; }
|
||||||
|
|
||||||
|
public FlagIdentity(string ns, string id) {
|
||||||
|
this.ns = ns;
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public T? cast(XmppStreamFlag module) {
|
||||||
|
return (T?) module;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool matches(XmppStreamFlag module) {
|
||||||
|
return module.get_ns() == ns && module.get_id() == id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public abstract class XmppStreamFlag {
|
public abstract class XmppStreamFlag {
|
||||||
public abstract string get_ns();
|
public abstract string get_ns();
|
||||||
public abstract string get_id();
|
public abstract string get_id();
|
||||||
|
|
|
@ -5,8 +5,7 @@ namespace Xmpp.Bind {
|
||||||
|
|
||||||
/** The parties to a stream MUST consider resource binding as mandatory-to-negotiate. (RFC6120 7.3.1) */
|
/** The parties to a stream MUST consider resource binding as mandatory-to-negotiate. (RFC6120 7.3.1) */
|
||||||
public class Module : XmppStreamNegotiationModule {
|
public class Module : XmppStreamNegotiationModule {
|
||||||
public const string ID = "bind_module";
|
public static ModuleIdentity<Module> IDENTITY = new ModuleIdentity<Module>(NS_URI, "bind_module");
|
||||||
public static ModuleIdentity<Module> IDENTITY = new ModuleIdentity<Module>(NS_URI, ID);
|
|
||||||
|
|
||||||
private string requested_resource;
|
private string requested_resource;
|
||||||
|
|
||||||
|
@ -17,7 +16,7 @@ namespace Xmpp.Bind {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void iq_response_stanza(XmppStream stream, Iq.Stanza iq) {
|
public void iq_response_stanza(XmppStream stream, Iq.Stanza iq) {
|
||||||
var flag = Flag.get_flag(stream);
|
var flag = stream.get_flag(Flag.IDENTITY);
|
||||||
if (flag == null || flag.finished) return;
|
if (flag == null || flag.finished) return;
|
||||||
|
|
||||||
if (iq.type_ == Iq.Stanza.TYPE_RESULT) {
|
if (iq.type_ == Iq.Stanza.TYPE_RESULT) {
|
||||||
|
@ -54,15 +53,15 @@ namespace Xmpp.Bind {
|
||||||
}
|
}
|
||||||
|
|
||||||
public override bool mandatory_outstanding(XmppStream stream) {
|
public override bool mandatory_outstanding(XmppStream stream) {
|
||||||
return !Flag.has_flag(stream) || !Flag.get_flag(stream).finished;
|
return !stream.has_flag(Flag.IDENTITY) || !stream.get_flag(Flag.IDENTITY).finished;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override bool negotiation_active(XmppStream stream) {
|
public override bool negotiation_active(XmppStream stream) {
|
||||||
return Flag.has_flag(stream) && !Flag.get_flag(stream).finished;
|
return stream.has_flag(Flag.IDENTITY) && !stream.get_flag(Flag.IDENTITY).finished;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string get_ns() { return NS_URI; }
|
public override string get_ns() { return NS_URI; }
|
||||||
public override string get_id() { return ID; }
|
public override string get_id() { return IDENTITY.id; }
|
||||||
|
|
||||||
private static void on_bind_response(XmppStream stream, Iq.Stanza iq) {
|
private static void on_bind_response(XmppStream stream, Iq.Stanza iq) {
|
||||||
stream.get_module(Bind.Module.IDENTITY).iq_response_stanza(stream, iq);
|
stream.get_module(Bind.Module.IDENTITY).iq_response_stanza(stream, iq);
|
||||||
|
@ -70,19 +69,11 @@ namespace Xmpp.Bind {
|
||||||
}
|
}
|
||||||
|
|
||||||
public class Flag : XmppStreamFlag {
|
public class Flag : XmppStreamFlag {
|
||||||
public const string ID = "bind";
|
public static FlagIdentity<Flag> IDENTITY = new FlagIdentity<Flag>(NS_URI, "bind");
|
||||||
public string? my_jid;
|
public string? my_jid;
|
||||||
public bool finished = false;
|
public bool finished = false;
|
||||||
|
|
||||||
public static Flag? get_flag(XmppStream stream) {
|
|
||||||
return (Flag?) stream.get_flag(NS_URI, ID);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static bool has_flag(XmppStream stream) {
|
|
||||||
return get_flag(stream) != null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override string get_ns() { return NS_URI; }
|
public override string get_ns() { return NS_URI; }
|
||||||
public override string get_id() { return ID; }
|
public override string get_id() { return IDENTITY.id; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,8 +6,7 @@ namespace Xmpp.Iq {
|
||||||
private const string NS_URI = "jabber:client";
|
private const string NS_URI = "jabber:client";
|
||||||
|
|
||||||
public class Module : XmppStreamNegotiationModule {
|
public class Module : XmppStreamNegotiationModule {
|
||||||
public const string ID = "iq_module";
|
public static ModuleIdentity<Module> IDENTITY = new ModuleIdentity<Module>(NS_URI, "iq_module");
|
||||||
public static ModuleIdentity<Module> IDENTITY = new ModuleIdentity<Module>(NS_URI, ID);
|
|
||||||
|
|
||||||
private HashMap<string, ResponseListener> responseListeners = new HashMap<string, ResponseListener>();
|
private HashMap<string, ResponseListener> responseListeners = new HashMap<string, ResponseListener>();
|
||||||
private HashMap<string, ArrayList<Handler>> namespaceRegistrants = new HashMap<string, ArrayList<Handler>>();
|
private HashMap<string, ArrayList<Handler>> namespaceRegistrants = new HashMap<string, ArrayList<Handler>>();
|
||||||
|
@ -48,10 +47,10 @@ namespace Xmpp.Iq {
|
||||||
public override bool negotiation_active(XmppStream stream) { return false; }
|
public override bool negotiation_active(XmppStream stream) { return false; }
|
||||||
|
|
||||||
public override string get_ns() { return NS_URI; }
|
public override string get_ns() { return NS_URI; }
|
||||||
public override string get_id() { return ID; }
|
public override string get_id() { return IDENTITY.id; }
|
||||||
|
|
||||||
private void on_received_iq_stanza(XmppStream stream, StanzaNode node) {
|
private void on_received_iq_stanza(XmppStream stream, StanzaNode node) {
|
||||||
Iq.Stanza iq = new Iq.Stanza.from_stanza(node, Bind.Flag.has_flag(stream) ? Bind.Flag.get_flag(stream).my_jid : null);
|
Iq.Stanza iq = new Iq.Stanza.from_stanza(node, stream.has_flag(Bind.Flag.IDENTITY) ? stream.get_flag(Bind.Flag.IDENTITY).my_jid : null);
|
||||||
|
|
||||||
if (iq.type_ == Iq.Stanza.TYPE_RESULT || iq.is_error()) {
|
if (iq.type_ == Iq.Stanza.TYPE_RESULT || iq.is_error()) {
|
||||||
if (responseListeners.has_key(iq.id)) {
|
if (responseListeners.has_key(iq.id)) {
|
||||||
|
|
|
@ -6,8 +6,7 @@ namespace Xmpp.Message {
|
||||||
private const string NS_URI = "jabber:client";
|
private const string NS_URI = "jabber:client";
|
||||||
|
|
||||||
public class Module : XmppStreamModule {
|
public class Module : XmppStreamModule {
|
||||||
public const string ID = "message_module";
|
public static ModuleIdentity<Module> IDENTITY = new ModuleIdentity<Module>(NS_URI, "message_module");
|
||||||
public static ModuleIdentity<Module> IDENTITY = new ModuleIdentity<Module>(NS_URI, ID);
|
|
||||||
|
|
||||||
public signal void pre_send_message(XmppStream stream, Message.Stanza message);
|
public signal void pre_send_message(XmppStream stream, Message.Stanza message);
|
||||||
public signal void pre_received_message(XmppStream stream, Message.Stanza message);
|
public signal void pre_received_message(XmppStream stream, Message.Stanza message);
|
||||||
|
@ -19,7 +18,7 @@ namespace Xmpp.Message {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void received_message_stanza(XmppStream stream, StanzaNode node) {
|
public void received_message_stanza(XmppStream stream, StanzaNode node) {
|
||||||
Message.Stanza message = new Message.Stanza.from_stanza(node, Bind.Flag.get_flag(stream).my_jid);
|
Message.Stanza message = new Message.Stanza.from_stanza(node, stream.get_flag(Bind.Flag.IDENTITY).my_jid);
|
||||||
do {
|
do {
|
||||||
message.rerun_parsing = false;
|
message.rerun_parsing = false;
|
||||||
pre_received_message(stream, message);
|
pre_received_message(stream, message);
|
||||||
|
@ -41,7 +40,7 @@ namespace Xmpp.Message {
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string get_ns() { return NS_URI; }
|
public override string get_ns() { return NS_URI; }
|
||||||
public override string get_id() { return ID; }
|
public override string get_id() { return IDENTITY.id; }
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,7 @@ using Xmpp.Core;
|
||||||
namespace Xmpp.Presence {
|
namespace Xmpp.Presence {
|
||||||
|
|
||||||
public class Flag : XmppStreamFlag {
|
public class Flag : XmppStreamFlag {
|
||||||
public const string ID = "presence";
|
public static FlagIdentity<Flag> IDENTITY = new FlagIdentity<Flag>(NS_URI, "presence");
|
||||||
|
|
||||||
private HashMap<string, ConcurrentList<string>> resources = new HashMap<string, ConcurrentList<string>>();
|
private HashMap<string, ConcurrentList<string>> resources = new HashMap<string, ConcurrentList<string>>();
|
||||||
private HashMap<string, Presence.Stanza> presences = new HashMap<string, Presence.Stanza>();
|
private HashMap<string, Presence.Stanza> presences = new HashMap<string, Presence.Stanza>();
|
||||||
|
@ -52,13 +52,9 @@ public class Flag : XmppStreamFlag {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Flag? get_flag(XmppStream stream) { return (Flag?) stream.get_flag(NS_URI, ID); }
|
|
||||||
|
|
||||||
public static bool has_flag(XmppStream stream) { return get_flag(stream) != null; }
|
|
||||||
|
|
||||||
public override string get_ns() { return NS_URI; }
|
public override string get_ns() { return NS_URI; }
|
||||||
|
|
||||||
public override string get_id() { return ID; }
|
public override string get_id() { return IDENTITY.id; }
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -4,8 +4,7 @@ namespace Xmpp.Presence {
|
||||||
private const string NS_URI = "jabber:client";
|
private const string NS_URI = "jabber:client";
|
||||||
|
|
||||||
public class Module : XmppStreamModule {
|
public class Module : XmppStreamModule {
|
||||||
public const string ID = "presence_module";
|
public static ModuleIdentity<Module> IDENTITY = new ModuleIdentity<Module>(NS_URI, "presence_module");
|
||||||
public static ModuleIdentity<Module> IDENTITY = new ModuleIdentity<Module>(NS_URI, ID);
|
|
||||||
|
|
||||||
public signal void received_presence(XmppStream stream, Presence.Stanza presence);
|
public signal void received_presence(XmppStream stream, Presence.Stanza presence);
|
||||||
public signal void pre_send_presence_stanza(XmppStream stream, Presence.Stanza presence);
|
public signal void pre_send_presence_stanza(XmppStream stream, Presence.Stanza presence);
|
||||||
|
@ -67,16 +66,16 @@ namespace Xmpp.Presence {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void on_received_presence_stanza(XmppStream stream, StanzaNode node) {
|
private void on_received_presence_stanza(XmppStream stream, StanzaNode node) {
|
||||||
Presence.Stanza presence = new Presence.Stanza.from_stanza(node, Bind.Flag.get_flag(stream).my_jid);
|
Presence.Stanza presence = new Presence.Stanza.from_stanza(node, stream.get_flag(Bind.Flag.IDENTITY).my_jid);
|
||||||
received_presence(stream, presence);
|
received_presence(stream, presence);
|
||||||
switch (presence.type_) {
|
switch (presence.type_) {
|
||||||
case Presence.Stanza.TYPE_AVAILABLE:
|
case Presence.Stanza.TYPE_AVAILABLE:
|
||||||
Flag.get_flag(stream).add_presence(presence);
|
stream.get_flag(Flag.IDENTITY).add_presence(presence);
|
||||||
received_available(stream, presence);
|
received_available(stream, presence);
|
||||||
received_available_show(stream, presence.from, presence.show);
|
received_available_show(stream, presence.from, presence.show);
|
||||||
break;
|
break;
|
||||||
case Presence.Stanza.TYPE_UNAVAILABLE:
|
case Presence.Stanza.TYPE_UNAVAILABLE:
|
||||||
Flag.get_flag(stream).remove_presence(presence.from);
|
stream.get_flag(Flag.IDENTITY).remove_presence(presence.from);
|
||||||
received_unavailable(stream, presence.from);
|
received_unavailable(stream, presence.from);
|
||||||
break;
|
break;
|
||||||
case Presence.Stanza.TYPE_SUBSCRIBE:
|
case Presence.Stanza.TYPE_SUBSCRIBE:
|
||||||
|
@ -101,7 +100,7 @@ namespace Xmpp.Presence {
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string get_ns() { return NS_URI; }
|
public override string get_ns() { return NS_URI; }
|
||||||
public override string get_id() { return ID; }
|
public override string get_id() { return IDENTITY.id; }
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,9 +6,11 @@ namespace Xmpp.Roster {
|
||||||
|
|
||||||
public class Flag : XmppStreamFlag {
|
public class Flag : XmppStreamFlag {
|
||||||
public const string ID = "roster";
|
public const string ID = "roster";
|
||||||
|
public static FlagIdentity<Flag> IDENTITY = new FlagIdentity<Flag>(NS_URI, ID);
|
||||||
|
|
||||||
public HashMap<string, Item> roster_items = new HashMap<string, Item>();
|
public HashMap<string, Item> roster_items = new HashMap<string, Item>();
|
||||||
|
|
||||||
internal string? iq_id;
|
public string? iq_id;
|
||||||
|
|
||||||
public Collection<Item> get_roster() {
|
public Collection<Item> get_roster() {
|
||||||
return roster_items.values;
|
return roster_items.values;
|
||||||
|
@ -18,13 +20,8 @@ public class Flag : XmppStreamFlag {
|
||||||
return roster_items[jid];
|
return roster_items[jid];
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Flag? get_flag(XmppStream stream) { return (Flag?) stream.get_flag(NS_URI, ID); }
|
|
||||||
|
|
||||||
public static bool has_flag(XmppStream stream) { return get_flag(stream) != null; }
|
|
||||||
|
|
||||||
public override string get_ns() { return NS_URI; }
|
public override string get_ns() { return NS_URI; }
|
||||||
|
public override string get_id() { return IDENTITY.id; }
|
||||||
public override string get_id() { return ID; }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -6,8 +6,7 @@ namespace Xmpp.Roster {
|
||||||
private const string NS_URI = "jabber:iq:roster";
|
private const string NS_URI = "jabber:iq:roster";
|
||||||
|
|
||||||
public class Module : XmppStreamModule, Iq.Handler {
|
public class Module : XmppStreamModule, Iq.Handler {
|
||||||
public const string ID = "roster_module";
|
public static ModuleIdentity<Module> IDENTITY = new ModuleIdentity<Module>(NS_URI, "roster_module");
|
||||||
public static ModuleIdentity<Module> IDENTITY = new ModuleIdentity<Module>(NS_URI, ID);
|
|
||||||
|
|
||||||
public signal void received_roster(XmppStream stream, Collection<Item> roster);
|
public signal void received_roster(XmppStream stream, Collection<Item> roster);
|
||||||
public signal void item_removed(XmppStream stream, Item roster_item);
|
public signal void item_removed(XmppStream stream, Item roster_item);
|
||||||
|
@ -56,7 +55,7 @@ namespace Xmpp.Roster {
|
||||||
StanzaNode? query_node = iq.stanza.get_subnode("query", NS_URI);
|
StanzaNode? query_node = iq.stanza.get_subnode("query", NS_URI);
|
||||||
if (query_node == null) return;
|
if (query_node == null) return;
|
||||||
|
|
||||||
Flag flag = Flag.get_flag(stream);
|
Flag flag = stream.get_flag(Flag.IDENTITY);
|
||||||
Item item = new Item.from_stanza_node(query_node.get_subnode("item", NS_URI));
|
Item item = new Item.from_stanza_node(query_node.get_subnode("item", NS_URI));
|
||||||
switch (item.subscription) {
|
switch (item.subscription) {
|
||||||
case Item.SUBSCRIPTION_REMOVE:
|
case Item.SUBSCRIPTION_REMOVE:
|
||||||
|
@ -89,17 +88,17 @@ namespace Xmpp.Roster {
|
||||||
}
|
}
|
||||||
|
|
||||||
internal override string get_ns() { return NS_URI; }
|
internal override string get_ns() { return NS_URI; }
|
||||||
internal override string get_id() { return ID; }
|
internal override string get_id() { return IDENTITY.id; }
|
||||||
|
|
||||||
private void roster_get(XmppStream stream) {
|
private void roster_get(XmppStream stream) {
|
||||||
Flag.get_flag(stream).iq_id = random_uuid();
|
stream.get_flag(Flag.IDENTITY).iq_id = random_uuid();
|
||||||
StanzaNode query_node = new StanzaNode.build("query", NS_URI).add_self_xmlns();
|
StanzaNode query_node = new StanzaNode.build("query", NS_URI).add_self_xmlns();
|
||||||
Iq.Stanza iq = new Iq.Stanza.get(query_node, Flag.get_flag(stream).iq_id);
|
Iq.Stanza iq = new Iq.Stanza.get(query_node, stream.get_flag(Flag.IDENTITY).iq_id);
|
||||||
stream.get_module(Iq.Module.IDENTITY).send_iq(stream, iq, on_roster_get_received);
|
stream.get_module(Iq.Module.IDENTITY).send_iq(stream, iq, on_roster_get_received);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void on_roster_get_received(XmppStream stream, Iq.Stanza iq) {
|
private static void on_roster_get_received(XmppStream stream, Iq.Stanza iq) {
|
||||||
Flag flag = Flag.get_flag(stream);
|
Flag flag = stream.get_flag(Flag.IDENTITY);
|
||||||
if (iq.id == flag.iq_id) {
|
if (iq.id == flag.iq_id) {
|
||||||
StanzaNode? query_node = iq.stanza.get_subnode("query", NS_URI);
|
StanzaNode? query_node = iq.stanza.get_subnode("query", NS_URI);
|
||||||
foreach (StanzaNode item_node in query_node.sub_nodes) {
|
foreach (StanzaNode item_node in query_node.sub_nodes) {
|
||||||
|
|
|
@ -4,8 +4,7 @@ namespace Xmpp.PlainSasl {
|
||||||
private const string NS_URI = "urn:ietf:params:xml:ns:xmpp-sasl";
|
private const string NS_URI = "urn:ietf:params:xml:ns:xmpp-sasl";
|
||||||
|
|
||||||
public class Module : XmppStreamNegotiationModule {
|
public class Module : XmppStreamNegotiationModule {
|
||||||
public const string ID = "plain_module";
|
public static ModuleIdentity<Module> IDENTITY = new ModuleIdentity<Module>(NS_URI, "plain_module");
|
||||||
public static ModuleIdentity<Module> IDENTITY = new ModuleIdentity<Module>(NS_URI, ID);
|
|
||||||
private const string MECHANISM = "PLAIN";
|
private const string MECHANISM = "PLAIN";
|
||||||
|
|
||||||
private string name;
|
private string name;
|
||||||
|
@ -33,18 +32,18 @@ namespace Xmpp.PlainSasl {
|
||||||
if (node.ns_uri == NS_URI) {
|
if (node.ns_uri == NS_URI) {
|
||||||
if (node.name == "success") {
|
if (node.name == "success") {
|
||||||
stream.require_setup();
|
stream.require_setup();
|
||||||
Flag.get_flag(stream).finished = true;
|
stream.get_flag(Flag.IDENTITY).finished = true;
|
||||||
} else if (node.name == "failure") {
|
} else if (node.name == "failure") {
|
||||||
stream.remove_flag(Flag.get_flag(stream));
|
stream.remove_flag(stream.get_flag(Flag.IDENTITY));
|
||||||
received_auth_failure(stream, node);
|
received_auth_failure(stream, node);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void received_features_node(XmppStream stream) {
|
public void received_features_node(XmppStream stream) {
|
||||||
if (Flag.has_flag(stream)) return;
|
if (stream.has_flag(Flag.IDENTITY)) return;
|
||||||
if (stream.is_setup_needed()) return;
|
if (stream.is_setup_needed()) return;
|
||||||
if (!Tls.Flag.has_flag(stream) || !Tls.Flag.get_flag(stream).finished) return;
|
if (!stream.has_flag(Tls.Flag.IDENTITY) || !stream.get_flag(Tls.Flag.IDENTITY).finished) return;
|
||||||
|
|
||||||
var mechanisms = stream.features.get_subnode("mechanisms", NS_URI);
|
var mechanisms = stream.features.get_subnode("mechanisms", NS_URI);
|
||||||
if (mechanisms != null) {
|
if (mechanisms != null) {
|
||||||
|
@ -105,32 +104,24 @@ namespace Xmpp.PlainSasl {
|
||||||
}
|
}
|
||||||
|
|
||||||
public override bool mandatory_outstanding(XmppStream stream) {
|
public override bool mandatory_outstanding(XmppStream stream) {
|
||||||
return !Flag.has_flag(stream) || !Flag.get_flag(stream).finished;
|
return !stream.has_flag(Flag.IDENTITY) || !stream.get_flag(Flag.IDENTITY).finished;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override bool negotiation_active(XmppStream stream) {
|
public override bool negotiation_active(XmppStream stream) {
|
||||||
return Flag.has_flag(stream) && !Flag.get_flag(stream).finished;
|
return stream.has_flag(Flag.IDENTITY) && !stream.get_flag(Flag.IDENTITY).finished;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string get_ns() { return NS_URI; }
|
public override string get_ns() { return NS_URI; }
|
||||||
public override string get_id() { return ID; }
|
public override string get_id() { return IDENTITY.id; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class Flag : XmppStreamFlag {
|
public class Flag : XmppStreamFlag {
|
||||||
public const string ID = "sasl";
|
public static FlagIdentity<Flag> IDENTITY = new FlagIdentity<Flag>(NS_URI, "sasl");
|
||||||
public string mechanism;
|
public string mechanism;
|
||||||
public string name;
|
public string name;
|
||||||
public bool finished = false;
|
public bool finished = false;
|
||||||
|
|
||||||
public static Flag? get_flag(XmppStream stream) {
|
|
||||||
return (Flag?) stream.get_flag(NS_URI, ID);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static bool has_flag(XmppStream stream) {
|
|
||||||
return get_flag(stream) != null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override string get_ns() { return NS_URI; }
|
public override string get_ns() { return NS_URI; }
|
||||||
public override string get_id() { return ID; }
|
public override string get_id() { return IDENTITY.id; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,8 +7,7 @@ namespace Xmpp.StreamError {
|
||||||
private const string NS_ERROR = "urn:ietf:params:xml:ns:xmpp-streams";
|
private const string NS_ERROR = "urn:ietf:params:xml:ns:xmpp-streams";
|
||||||
|
|
||||||
public class Module : XmppStreamModule {
|
public class Module : XmppStreamModule {
|
||||||
public const string ID = "stream_error_module";
|
public static ModuleIdentity<Module> IDENTITY = new ModuleIdentity<Module>(NS_URI, "stream_error_module");
|
||||||
public static ModuleIdentity<Module> IDENTITY = new ModuleIdentity<Module>(NS_URI, ID);
|
|
||||||
|
|
||||||
public override void attach(XmppStream stream) {
|
public override void attach(XmppStream stream) {
|
||||||
stream.received_nonza.connect(on_received_nonstanza);
|
stream.received_nonza.connect(on_received_nonstanza);
|
||||||
|
@ -23,7 +22,7 @@ namespace Xmpp.StreamError {
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string get_ns() { return NS_URI; }
|
public override string get_ns() { return NS_URI; }
|
||||||
public override string get_id() { return ID; }
|
public override string get_id() { return IDENTITY.id; }
|
||||||
|
|
||||||
private void on_received_nonstanza(XmppStream stream, StanzaNode node) {
|
private void on_received_nonstanza(XmppStream stream, StanzaNode node) {
|
||||||
if (node.name == "error" && node.ns_uri == "http://etherx.jabber.org/streams") {
|
if (node.name == "error" && node.ns_uri == "http://etherx.jabber.org/streams") {
|
||||||
|
@ -89,7 +88,7 @@ namespace Xmpp.StreamError {
|
||||||
}
|
}
|
||||||
|
|
||||||
public class Flag : XmppStreamFlag {
|
public class Flag : XmppStreamFlag {
|
||||||
public const string ID = "stream_error";
|
public static FlagIdentity<Flag> IDENTITY = new FlagIdentity<Flag>(NS_URI, "stream_error");
|
||||||
|
|
||||||
public enum Reconnect {
|
public enum Reconnect {
|
||||||
UNKNOWN,
|
UNKNOWN,
|
||||||
|
@ -102,15 +101,7 @@ namespace Xmpp.StreamError {
|
||||||
public Reconnect reconnection_recomendation = Reconnect.UNKNOWN;
|
public Reconnect reconnection_recomendation = Reconnect.UNKNOWN;
|
||||||
public bool resource_rejected = false;
|
public bool resource_rejected = false;
|
||||||
|
|
||||||
public static Flag? get_flag(XmppStream stream) {
|
|
||||||
return (Flag?) stream.get_flag(NS_URI, ID);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static bool has_flag(XmppStream stream) {
|
|
||||||
return get_flag(stream) != null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override string get_ns() { return NS_URI; }
|
public override string get_ns() { return NS_URI; }
|
||||||
public override string get_id() { return ID; }
|
public override string get_id() { return IDENTITY.id; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,8 +4,7 @@ namespace Xmpp.Tls {
|
||||||
private const string NS_URI = "urn:ietf:params:xml:ns:xmpp-tls";
|
private const string NS_URI = "urn:ietf:params:xml:ns:xmpp-tls";
|
||||||
|
|
||||||
public class Module : XmppStreamNegotiationModule {
|
public class Module : XmppStreamNegotiationModule {
|
||||||
public const string ID = "tls_module";
|
public static ModuleIdentity<Module> IDENTITY = new ModuleIdentity<Module>(NS_URI, "tls_module");
|
||||||
public static ModuleIdentity<Module> IDENTITY = new ModuleIdentity<Module>(NS_URI, ID);
|
|
||||||
|
|
||||||
public bool require { get; set; default = true; }
|
public bool require { get; set; default = true; }
|
||||||
public bool server_supports_tls = false;
|
public bool server_supports_tls = false;
|
||||||
|
@ -34,7 +33,7 @@ namespace Xmpp.Tls {
|
||||||
// not allowed to continue in case that there is an error.
|
// not allowed to continue in case that there is an error.
|
||||||
stream.reset_stream(conn);
|
stream.reset_stream(conn);
|
||||||
|
|
||||||
var flag = Flag.get_flag(stream);
|
var flag = stream.get_flag(Flag.IDENTITY);
|
||||||
flag.peer_certificate = conn.get_peer_certificate();
|
flag.peer_certificate = conn.get_peer_certificate();
|
||||||
flag.finished = true;
|
flag.finished = true;
|
||||||
} catch (Error e) {
|
} catch (Error e) {
|
||||||
|
@ -44,7 +43,7 @@ namespace Xmpp.Tls {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void received_features_node(XmppStream stream) {
|
private void received_features_node(XmppStream stream) {
|
||||||
if (Flag.has_flag(stream)) return;
|
if (stream.has_flag(Flag.IDENTITY)) return;
|
||||||
if (stream.is_setup_needed()) return;
|
if (stream.is_setup_needed()) return;
|
||||||
|
|
||||||
var starttls = stream.features.get_subnode("starttls", NS_URI);
|
var starttls = stream.features.get_subnode("starttls", NS_URI);
|
||||||
|
@ -68,31 +67,23 @@ namespace Xmpp.Tls {
|
||||||
}
|
}
|
||||||
|
|
||||||
public override bool mandatory_outstanding(XmppStream stream) {
|
public override bool mandatory_outstanding(XmppStream stream) {
|
||||||
return require && (!Flag.has_flag(stream) || !Flag.get_flag(stream).finished);
|
return require && (!stream.has_flag(Flag.IDENTITY) || !stream.get_flag(Flag.IDENTITY).finished);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override bool negotiation_active(XmppStream stream) {
|
public override bool negotiation_active(XmppStream stream) {
|
||||||
return Flag.has_flag(stream) && !Flag.get_flag(stream).finished;
|
return stream.has_flag(Flag.IDENTITY) && !stream.get_flag(Flag.IDENTITY).finished;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string get_ns() { return NS_URI; }
|
public override string get_ns() { return NS_URI; }
|
||||||
public override string get_id() { return ID; }
|
public override string get_id() { return IDENTITY.id; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class Flag : XmppStreamFlag {
|
public class Flag : XmppStreamFlag {
|
||||||
public const string ID = "tls_flag";
|
public static FlagIdentity<Flag> IDENTITY = new FlagIdentity<Flag>(NS_URI, "tls");
|
||||||
public TlsCertificate? peer_certificate;
|
public TlsCertificate? peer_certificate;
|
||||||
public bool finished = false;
|
public bool finished = false;
|
||||||
|
|
||||||
public static Flag? get_flag(XmppStream stream) {
|
|
||||||
return (Flag?) stream.get_flag(NS_URI, ID);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static bool has_flag(XmppStream stream) {
|
|
||||||
return get_flag(stream) != null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override string get_ns() { return NS_URI; }
|
public override string get_ns() { return NS_URI; }
|
||||||
public override string get_id() { return ID; }
|
public override string get_id() { return IDENTITY.id; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,7 @@ using Xmpp.Core;
|
||||||
namespace Xmpp.Xep.ServiceDiscovery {
|
namespace Xmpp.Xep.ServiceDiscovery {
|
||||||
|
|
||||||
public class Flag : XmppStreamFlag {
|
public class Flag : XmppStreamFlag {
|
||||||
public const string ID = "service_discovery";
|
public static FlagIdentity<Flag> IDENTITY = new FlagIdentity<Flag>(NS_URI, "service_discovery");
|
||||||
|
|
||||||
private HashMap<string, ArrayList<string>> entity_features = new HashMap<string, ArrayList<string>>();
|
private HashMap<string, ArrayList<string>> entity_features = new HashMap<string, ArrayList<string>>();
|
||||||
public ArrayList<string> features = new ArrayList<string>();
|
public ArrayList<string> features = new ArrayList<string>();
|
||||||
|
@ -21,13 +21,9 @@ public class Flag : XmppStreamFlag {
|
||||||
|
|
||||||
public void add_own_feature(string feature) { features.add(feature); }
|
public void add_own_feature(string feature) { features.add(feature); }
|
||||||
|
|
||||||
public static Flag? get_flag(XmppStream stream) { return (Flag?) stream.get_flag(NS_URI, ID); }
|
|
||||||
|
|
||||||
public static bool has_flag(XmppStream stream) { return get_flag(stream) != null; }
|
|
||||||
|
|
||||||
public override string get_ns() { return NS_URI; }
|
public override string get_ns() { return NS_URI; }
|
||||||
|
|
||||||
public override string get_id() { return ID; }
|
public override string get_id() { return IDENTITY.id; }
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -8,8 +8,7 @@ namespace Xmpp.Xep.ServiceDiscovery {
|
||||||
public const string NS_URI_ITEMS = NS_URI + "#items";
|
public const string NS_URI_ITEMS = NS_URI + "#items";
|
||||||
|
|
||||||
public class Module : XmppStreamModule, Iq.Handler {
|
public class Module : XmppStreamModule, Iq.Handler {
|
||||||
public const string ID = "0030_service_discovery_module";
|
public static ModuleIdentity<Module> IDENTITY = new ModuleIdentity<Module>(NS_URI, "0030_service_discovery_module");
|
||||||
public static ModuleIdentity<Module> IDENTITY = new ModuleIdentity<Module>(NS_URI, ID);
|
|
||||||
|
|
||||||
public ArrayList<Identity> identities = new ArrayList<Identity>();
|
public ArrayList<Identity> identities = new ArrayList<Identity>();
|
||||||
|
|
||||||
|
@ -18,7 +17,7 @@ namespace Xmpp.Xep.ServiceDiscovery {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void add_feature(XmppStream stream, string feature) {
|
public void add_feature(XmppStream stream, string feature) {
|
||||||
Flag.get_flag(stream).add_own_feature(feature);
|
stream.get_flag(Flag.IDENTITY).add_own_feature(feature);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void add_feature_notify(XmppStream stream, string feature) {
|
public void add_feature_notify(XmppStream stream, string feature) {
|
||||||
|
@ -66,21 +65,21 @@ namespace Xmpp.Xep.ServiceDiscovery {
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string get_ns() { return NS_URI; }
|
public override string get_ns() { return NS_URI; }
|
||||||
public override string get_id() { return ID; }
|
public override string get_id() { return IDENTITY.id; }
|
||||||
|
|
||||||
private static void on_request_info_response(XmppStream stream, Iq.Stanza iq, Object o) {
|
private static void on_request_info_response(XmppStream stream, Iq.Stanza iq, Object o) {
|
||||||
Tuple<OnInfoResult, Object> tuple = o as Tuple<OnInfoResult, Object>;
|
Tuple<OnInfoResult, Object> tuple = o as Tuple<OnInfoResult, Object>;
|
||||||
OnInfoResult on_result = tuple.a;
|
OnInfoResult on_result = tuple.a;
|
||||||
InfoResult? result = InfoResult.create_from_iq(iq);
|
InfoResult? result = InfoResult.create_from_iq(iq);
|
||||||
if (result != null) {
|
if (result != null) {
|
||||||
Flag.get_flag(stream).set_entitiy_features(iq.from, result.features);
|
stream.get_flag(Flag.IDENTITY).set_entitiy_features(iq.from, result.features);
|
||||||
on_result(stream, result, tuple.b);
|
on_result(stream, result, tuple.b);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void send_query_result(XmppStream stream, Iq.Stanza iq_request) {
|
private void send_query_result(XmppStream stream, Iq.Stanza iq_request) {
|
||||||
InfoResult query_result = new ServiceDiscovery.InfoResult(iq_request);
|
InfoResult query_result = new ServiceDiscovery.InfoResult(iq_request);
|
||||||
query_result.features = Flag.get_flag(stream).features;
|
query_result.features = stream.get_flag(Flag.IDENTITY).features;
|
||||||
query_result.identities = identities;
|
query_result.identities = identities;
|
||||||
stream.get_module(Iq.Module.IDENTITY).send_iq(stream, query_result.iq);
|
stream.get_module(Iq.Module.IDENTITY).send_iq(stream, query_result.iq);
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,7 @@ using Xmpp.Core;
|
||||||
namespace Xmpp.Xep.Muc {
|
namespace Xmpp.Xep.Muc {
|
||||||
|
|
||||||
public class Flag : XmppStreamFlag {
|
public class Flag : XmppStreamFlag {
|
||||||
public const string ID = "muc";
|
public static FlagIdentity<Flag> IDENTITY = new FlagIdentity<Flag>(NS_URI, "muc");
|
||||||
|
|
||||||
private HashMap<string, ListenerHolder> enter_listeners = new HashMap<string, ListenerHolder>();
|
private HashMap<string, ListenerHolder> enter_listeners = new HashMap<string, ListenerHolder>();
|
||||||
private HashMap<string, string> enter_ids = new HashMap<string, string>();
|
private HashMap<string, string> enter_ids = new HashMap<string, string>();
|
||||||
|
@ -68,13 +68,9 @@ public class Flag : XmppStreamFlag {
|
||||||
occupant_role.unset(full_jid);
|
occupant_role.unset(full_jid);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Flag? get_flag(XmppStream stream) { return (Flag?) stream.get_flag(NS_URI, ID); }
|
|
||||||
|
|
||||||
public static bool has_flag(XmppStream stream) { return get_flag(stream) != null; }
|
|
||||||
|
|
||||||
public override string get_ns() { return NS_URI; }
|
public override string get_ns() { return NS_URI; }
|
||||||
|
|
||||||
public override string get_id() { return ID; }
|
public override string get_id() { return IDENTITY.id; }
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -29,8 +29,7 @@ public enum MucEnterError {
|
||||||
}
|
}
|
||||||
|
|
||||||
public class Module : XmppStreamModule {
|
public class Module : XmppStreamModule {
|
||||||
public const string ID = "0045_muc_module";
|
public static ModuleIdentity<Module> IDENTITY = new ModuleIdentity<Module>(NS_URI, "0045_muc_module");
|
||||||
public static ModuleIdentity<Module> IDENTITY = new ModuleIdentity<Module>(NS_URI, ID);
|
|
||||||
|
|
||||||
public signal void received_occupant_affiliation(XmppStream stream, string jid, string? affiliation);
|
public signal void received_occupant_affiliation(XmppStream stream, string jid, string? affiliation);
|
||||||
public signal void received_occupant_jid(XmppStream stream, string jid, string? real_jid);
|
public signal void received_occupant_jid(XmppStream stream, string jid, string? real_jid);
|
||||||
|
@ -46,13 +45,13 @@ public class Module : XmppStreamModule {
|
||||||
}
|
}
|
||||||
presence.stanza.put_node(x_node);
|
presence.stanza.put_node(x_node);
|
||||||
|
|
||||||
Muc.Flag.get_flag(stream).start_muc_enter(bare_jid, presence.id, new ListenerHolder(success_listener, error_listener, store));
|
stream.get_flag(Flag.IDENTITY).start_muc_enter(bare_jid, presence.id, new ListenerHolder(success_listener, error_listener, store));
|
||||||
|
|
||||||
stream.get_module(Presence.Module.IDENTITY).send_presence(stream, presence);
|
stream.get_module(Presence.Module.IDENTITY).send_presence(stream, presence);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void exit(XmppStream stream, string jid) {
|
public void exit(XmppStream stream, string jid) {
|
||||||
string nick = Flag.get_flag(stream).get_muc_nick(jid);
|
string nick = stream.get_flag(Flag.IDENTITY).get_muc_nick(jid);
|
||||||
Presence.Stanza presence = new Presence.Stanza();
|
Presence.Stanza presence = new Presence.Stanza();
|
||||||
presence.to = jid + "/" + nick;
|
presence.to = jid + "/" + nick;
|
||||||
presence.type_ = Presence.Stanza.TYPE_UNAVAILABLE;
|
presence.type_ = Presence.Stanza.TYPE_UNAVAILABLE;
|
||||||
|
@ -103,7 +102,7 @@ public class Module : XmppStreamModule {
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string get_ns() { return NS_URI; }
|
public override string get_ns() { return NS_URI; }
|
||||||
public override string get_id() { return ID; }
|
public override string get_id() { return IDENTITY.id; }
|
||||||
|
|
||||||
private void change_role(XmppStream stream, string jid, string nick, string new_role) {
|
private void change_role(XmppStream stream, string jid, string nick, string new_role) {
|
||||||
StanzaNode query = new StanzaNode.build("query", NS_URI_ADMIN).add_self_xmlns();
|
StanzaNode query = new StanzaNode.build("query", NS_URI_ADMIN).add_self_xmlns();
|
||||||
|
@ -118,14 +117,14 @@ public class Module : XmppStreamModule {
|
||||||
StanzaNode? subject_node = message.stanza.get_subnode("subject");
|
StanzaNode? subject_node = message.stanza.get_subnode("subject");
|
||||||
if (subject_node != null) {
|
if (subject_node != null) {
|
||||||
string subject = subject_node.get_string_content();
|
string subject = subject_node.get_string_content();
|
||||||
Muc.Flag.get_flag(stream).set_muc_subject(message.from, subject);
|
stream.get_flag(Flag.IDENTITY).set_muc_subject(message.from, subject);
|
||||||
subject_set(stream, subject, message.from);
|
subject_set(stream, subject, message.from);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void on_received_presence(XmppStream stream, Presence.Stanza presence) {
|
private void on_received_presence(XmppStream stream, Presence.Stanza presence) {
|
||||||
Flag flag = Flag.get_flag(stream);
|
Flag flag = stream.get_flag(Flag.IDENTITY);
|
||||||
if (presence.is_error() && flag.is_muc_enter_outstanding() && flag.is_occupant(presence.from)) {
|
if (presence.is_error() && flag.is_muc_enter_outstanding() && flag.is_occupant(presence.from)) {
|
||||||
string bare_jid = get_bare_jid(presence.from);
|
string bare_jid = get_bare_jid(presence.from);
|
||||||
ErrorStanza? error_stanza = presence.get_error();
|
ErrorStanza? error_stanza = presence.get_error();
|
||||||
|
@ -152,7 +151,7 @@ public class Module : XmppStreamModule {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void on_received_available(XmppStream stream, Presence.Stanza presence) {
|
private void on_received_available(XmppStream stream, Presence.Stanza presence) {
|
||||||
Flag flag = Flag.get_flag(stream);
|
Flag flag = stream.get_flag(Flag.IDENTITY);
|
||||||
if (flag.is_occupant(presence.from)) {
|
if (flag.is_occupant(presence.from)) {
|
||||||
StanzaNode? x_node = presence.stanza.get_subnode("x", NS_URI_USER);
|
StanzaNode? x_node = presence.stanza.get_subnode("x", NS_URI_USER);
|
||||||
if (x_node != null) {
|
if (x_node != null) {
|
||||||
|
@ -181,7 +180,7 @@ public class Module : XmppStreamModule {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void on_received_unavailable(XmppStream stream, string jid) {
|
private void on_received_unavailable(XmppStream stream, string jid) {
|
||||||
Flag flag = Flag.get_flag(stream);
|
Flag flag = stream.get_flag(Flag.IDENTITY);
|
||||||
if (flag.is_occupant(jid)) {
|
if (flag.is_occupant(jid)) {
|
||||||
flag.remove_occupant_info(jid);
|
flag.remove_occupant_info(jid);
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,8 +6,7 @@ namespace Xmpp.Xep.Bookmarks {
|
||||||
private const string NS_URI = "storage:bookmarks";
|
private const string NS_URI = "storage:bookmarks";
|
||||||
|
|
||||||
public class Module : XmppStreamModule {
|
public class Module : XmppStreamModule {
|
||||||
public const string ID = "0048_bookmarks_module";
|
public static ModuleIdentity<Module> IDENTITY = new ModuleIdentity<Module>(NS_URI, "0048_bookmarks_module");
|
||||||
public static ModuleIdentity<Module> IDENTITY = new ModuleIdentity<Module>(NS_URI, ID);
|
|
||||||
|
|
||||||
public signal void conferences_updated(XmppStream stream, ArrayList<Conference> conferences);
|
public signal void conferences_updated(XmppStream stream, ArrayList<Conference> conferences);
|
||||||
|
|
||||||
|
@ -91,7 +90,7 @@ public class Module : XmppStreamModule {
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string get_ns() { return NS_URI; }
|
public override string get_ns() { return NS_URI; }
|
||||||
public override string get_id() { return ID; }
|
public override string get_id() { return IDENTITY.id; }
|
||||||
|
|
||||||
private static ArrayList<Conference> get_conferences_from_stanza(StanzaNode node) {
|
private static ArrayList<Conference> get_conferences_from_stanza(StanzaNode node) {
|
||||||
ArrayList<Conference> conferences = new ArrayList<Conference>();
|
ArrayList<Conference> conferences = new ArrayList<Conference>();
|
||||||
|
|
|
@ -6,8 +6,7 @@ namespace Xmpp.Xep.PrivateXmlStorage {
|
||||||
private const string NS_URI = "jabber:iq:private";
|
private const string NS_URI = "jabber:iq:private";
|
||||||
|
|
||||||
public class Module : XmppStreamModule {
|
public class Module : XmppStreamModule {
|
||||||
public const string ID = "0049_private_xml_storage";
|
public static ModuleIdentity<Module> IDENTITY = new ModuleIdentity<Module>(NS_URI, "0049_private_xml_storage");
|
||||||
public static ModuleIdentity<Module> IDENTITY = new ModuleIdentity<Module>(NS_URI, ID);
|
|
||||||
|
|
||||||
[CCode (has_target = false)] public delegate void OnSuccess(XmppStream stream, Object? reference);
|
[CCode (has_target = false)] public delegate void OnSuccess(XmppStream stream, Object? reference);
|
||||||
public void store(XmppStream stream, StanzaNode node, OnSuccess listener, Object? reference) {
|
public void store(XmppStream stream, StanzaNode node, OnSuccess listener, Object? reference) {
|
||||||
|
@ -34,7 +33,7 @@ namespace Xmpp.Xep.PrivateXmlStorage {
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string get_ns() { return NS_URI; }
|
public override string get_ns() { return NS_URI; }
|
||||||
public override string get_id() { return ID; }
|
public override string get_id() { return IDENTITY.id; }
|
||||||
|
|
||||||
private static void on_store_response(XmppStream stream, Iq.Stanza iq, Object o) {
|
private static void on_store_response(XmppStream stream, Iq.Stanza iq, Object o) {
|
||||||
Tuple<OnSuccess, Object> tuple = o as Tuple<OnSuccess, Object>;
|
Tuple<OnSuccess, Object> tuple = o as Tuple<OnSuccess, Object>;
|
||||||
|
|
|
@ -5,8 +5,7 @@ private const string NS_URI = "vcard-temp";
|
||||||
private const string NS_URI_UPDATE = NS_URI + ":x:update";
|
private const string NS_URI_UPDATE = NS_URI + ":x:update";
|
||||||
|
|
||||||
public class Module : XmppStreamModule {
|
public class Module : XmppStreamModule {
|
||||||
public const string ID = "0027_current_pgp_usage";
|
public static ModuleIdentity<Module> IDENTITY = new ModuleIdentity<Module>(NS_URI, "0027_current_pgp_usage");
|
||||||
public static ModuleIdentity<Module> IDENTITY = new ModuleIdentity<Module>(NS_URI, ID);
|
|
||||||
|
|
||||||
public signal void received_avatar(XmppStream stream, string jid, string id);
|
public signal void received_avatar(XmppStream stream, string jid, string id);
|
||||||
|
|
||||||
|
@ -31,7 +30,7 @@ public class Module : XmppStreamModule {
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string get_ns() { return NS_URI; }
|
public override string get_ns() { return NS_URI; }
|
||||||
public override string get_id() { return ID; }
|
public override string get_id() { return IDENTITY.id; }
|
||||||
|
|
||||||
private void on_received_presence(XmppStream stream, Presence.Stanza presence) {
|
private void on_received_presence(XmppStream stream, Presence.Stanza presence) {
|
||||||
StanzaNode? update_node = presence.stanza.get_subnode("x", NS_URI_UPDATE);
|
StanzaNode? update_node = presence.stanza.get_subnode("x", NS_URI_UPDATE);
|
||||||
|
@ -41,14 +40,14 @@ public class Module : XmppStreamModule {
|
||||||
string? sha1 = photo_node.get_string_content();
|
string? sha1 = photo_node.get_string_content();
|
||||||
if (sha1 == null) return;
|
if (sha1 == null) return;
|
||||||
if (storage.has_image(sha1)) {
|
if (storage.has_image(sha1)) {
|
||||||
if (Muc.Flag.get_flag(stream).is_occupant(presence.from)) {
|
if (stream.get_flag(Muc.Flag.IDENTITY).is_occupant(presence.from)) {
|
||||||
received_avatar(stream, presence.from, sha1);
|
received_avatar(stream, presence.from, sha1);
|
||||||
} else {
|
} else {
|
||||||
received_avatar(stream, get_bare_jid(presence.from), sha1);
|
received_avatar(stream, get_bare_jid(presence.from), sha1);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Iq.Stanza iq = new Iq.Stanza.get(new StanzaNode.build("vCard", NS_URI).add_self_xmlns());
|
Iq.Stanza iq = new Iq.Stanza.get(new StanzaNode.build("vCard", NS_URI).add_self_xmlns());
|
||||||
if (Muc.Flag.get_flag(stream).is_occupant(presence.from)) {
|
if (stream.get_flag(Muc.Flag.IDENTITY).is_occupant(presence.from)) {
|
||||||
iq.to = presence.from;
|
iq.to = presence.from;
|
||||||
} else {
|
} else {
|
||||||
iq.to = get_bare_jid(presence.from);
|
iq.to = get_bare_jid(presence.from);
|
||||||
|
|
|
@ -7,8 +7,7 @@ namespace Xmpp.Xep.Pubsub {
|
||||||
private const string NS_URI_EVENT = NS_URI + "#event";
|
private const string NS_URI_EVENT = NS_URI + "#event";
|
||||||
|
|
||||||
public class Module : XmppStreamModule {
|
public class Module : XmppStreamModule {
|
||||||
public const string ID = "0060_pubsub_module";
|
public static ModuleIdentity<Module> IDENTITY = new ModuleIdentity<Module>(NS_URI, "0060_pubsub_module");
|
||||||
public static ModuleIdentity<Module> IDENTITY = new ModuleIdentity<Module>(NS_URI, ID);
|
|
||||||
|
|
||||||
private HashMap<string, EventListenerDelegate> event_listeners = new HashMap<string, EventListenerDelegate>();
|
private HashMap<string, EventListenerDelegate> event_listeners = new HashMap<string, EventListenerDelegate>();
|
||||||
|
|
||||||
|
@ -51,7 +50,7 @@ namespace Xmpp.Xep.Pubsub {
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string get_ns() { return NS_URI; }
|
public override string get_ns() { return NS_URI; }
|
||||||
public override string get_id() { return ID; }
|
public override string get_id() { return IDENTITY.id; }
|
||||||
|
|
||||||
private void on_received_message(XmppStream stream, Message.Stanza message) {
|
private void on_received_message(XmppStream stream, Message.Stanza message) {
|
||||||
StanzaNode event_node = message.stanza.get_subnode("event", NS_URI_EVENT); if (event_node == null) return;
|
StanzaNode event_node = message.stanza.get_subnode("event", NS_URI_EVENT); if (event_node == null) return;
|
||||||
|
|
|
@ -6,8 +6,7 @@ namespace Xmpp.Xep.UserAvatars {
|
||||||
private const string NS_URI_METADATA = NS_URI + ":metadata";
|
private const string NS_URI_METADATA = NS_URI + ":metadata";
|
||||||
|
|
||||||
public class Module : XmppStreamModule {
|
public class Module : XmppStreamModule {
|
||||||
public const string ID = "0084_user_avatars";
|
public static ModuleIdentity<Module> IDENTITY = new ModuleIdentity<Module>(NS_URI, "0084_user_avatars");
|
||||||
public static ModuleIdentity<Module> IDENTITY = new ModuleIdentity<Module>(NS_URI, ID);
|
|
||||||
|
|
||||||
public signal void received_avatar(XmppStream stream, string jid, string id);
|
public signal void received_avatar(XmppStream stream, string jid, string id);
|
||||||
|
|
||||||
|
@ -58,7 +57,7 @@ namespace Xmpp.Xep.UserAvatars {
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string get_ns() { return NS_URI; }
|
public override string get_ns() { return NS_URI; }
|
||||||
public override string get_id() { return ID; }
|
public override string get_id() { return IDENTITY.id; }
|
||||||
|
|
||||||
private static void on_pubsub_data_response(XmppStream stream, string jid, string? id, StanzaNode? node, Object? o) {
|
private static void on_pubsub_data_response(XmppStream stream, string jid, string? id, StanzaNode? node, Object? o) {
|
||||||
if (node == null) return;
|
if (node == null) return;
|
||||||
|
|
|
@ -14,8 +14,7 @@ public const string STATE_PAUSED = "paused";
|
||||||
private const string[] STATES = {STATE_ACTIVE, STATE_INACTIVE, STATE_GONE, STATE_COMPOSING, STATE_PAUSED};
|
private const string[] STATES = {STATE_ACTIVE, STATE_INACTIVE, STATE_GONE, STATE_COMPOSING, STATE_PAUSED};
|
||||||
|
|
||||||
public class Module : XmppStreamModule {
|
public class Module : XmppStreamModule {
|
||||||
public const string ID = "0085_chat_state_notifications";
|
public static ModuleIdentity<Module> IDENTITY = new ModuleIdentity<Module>(NS_URI, "0085_chat_state_notifications");
|
||||||
public static ModuleIdentity<Module> IDENTITY = new ModuleIdentity<Module>(NS_URI, ID);
|
|
||||||
|
|
||||||
public signal void chat_state_received(XmppStream stream, string jid, string state);
|
public signal void chat_state_received(XmppStream stream, string jid, string state);
|
||||||
|
|
||||||
|
@ -47,7 +46,7 @@ public class Module : XmppStreamModule {
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string get_ns() { return NS_URI; }
|
public override string get_ns() { return NS_URI; }
|
||||||
public override string get_id() { return ID; }
|
public override string get_id() { return IDENTITY.id; }
|
||||||
|
|
||||||
private void on_pre_send_message(XmppStream stream, Message.Stanza message) {
|
private void on_pre_send_message(XmppStream stream, Message.Stanza message) {
|
||||||
if (message.body == null) return;
|
if (message.body == null) return;
|
||||||
|
|
|
@ -6,8 +6,7 @@ namespace Xmpp.Xep.EntityCapabilities {
|
||||||
private const string NS_URI = "http://jabber.org/protocol/caps";
|
private const string NS_URI = "http://jabber.org/protocol/caps";
|
||||||
|
|
||||||
public class Module : XmppStreamModule {
|
public class Module : XmppStreamModule {
|
||||||
public const string ID = "0115_entity_capabilities";
|
public static ModuleIdentity<Module> IDENTITY = new ModuleIdentity<Module>(NS_URI, "0115_entity_capabilities");
|
||||||
public static ModuleIdentity<Module> IDENTITY = new ModuleIdentity<Module>(NS_URI, ID);
|
|
||||||
|
|
||||||
private string own_ver_hash;
|
private string own_ver_hash;
|
||||||
private Storage storage;
|
private Storage storage;
|
||||||
|
@ -18,7 +17,7 @@ namespace Xmpp.Xep.EntityCapabilities {
|
||||||
|
|
||||||
private string get_own_hash(XmppStream stream) {
|
private string get_own_hash(XmppStream stream) {
|
||||||
if (own_ver_hash == null) {
|
if (own_ver_hash == null) {
|
||||||
own_ver_hash = compute_hash(stream.get_module(ServiceDiscovery.Module.IDENTITY).identities, ServiceDiscovery.Flag.get_flag(stream).features);
|
own_ver_hash = compute_hash(stream.get_module(ServiceDiscovery.Module.IDENTITY).identities, stream.get_flag(ServiceDiscovery.Flag.IDENTITY).features);
|
||||||
}
|
}
|
||||||
return own_ver_hash;
|
return own_ver_hash;
|
||||||
}
|
}
|
||||||
|
@ -41,7 +40,7 @@ namespace Xmpp.Xep.EntityCapabilities {
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string get_ns() { return NS_URI; }
|
public override string get_ns() { return NS_URI; }
|
||||||
public override string get_id() { return ID; }
|
public override string get_id() { return IDENTITY.id; }
|
||||||
|
|
||||||
private void on_pre_send_presence_stanza(XmppStream stream, Presence.Stanza presence) {
|
private void on_pre_send_presence_stanza(XmppStream stream, Presence.Stanza presence) {
|
||||||
if (presence.type_ == Presence.Stanza.TYPE_AVAILABLE) {
|
if (presence.type_ == Presence.Stanza.TYPE_AVAILABLE) {
|
||||||
|
@ -60,7 +59,7 @@ namespace Xmpp.Xep.EntityCapabilities {
|
||||||
if (capabilities.size == 0) {
|
if (capabilities.size == 0) {
|
||||||
stream.get_module(ServiceDiscovery.Module.IDENTITY).request_info(stream, presence.from, on_received_info_response, Tuple.create(storage, ver_attribute));
|
stream.get_module(ServiceDiscovery.Module.IDENTITY).request_info(stream, presence.from, on_received_info_response, Tuple.create(storage, ver_attribute));
|
||||||
} else {
|
} else {
|
||||||
ServiceDiscovery.Flag.get_flag(stream).set_entitiy_features(presence.from, capabilities);
|
stream.get_flag(ServiceDiscovery.Flag.IDENTITY).set_entitiy_features(presence.from, capabilities);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,8 +6,7 @@ namespace Xmpp.Xep.MessageDeliveryReceipts {
|
||||||
private const string NS_URI = "urn:xmpp:receipts";
|
private const string NS_URI = "urn:xmpp:receipts";
|
||||||
|
|
||||||
public class Module : XmppStreamModule {
|
public class Module : XmppStreamModule {
|
||||||
public const string ID = "0184_message_delivery_receipts";
|
public static ModuleIdentity<Module> IDENTITY = new ModuleIdentity<Module>(NS_URI, "0184_message_delivery_receipts");
|
||||||
public static ModuleIdentity<Module> IDENTITY = new ModuleIdentity<Module>(NS_URI, ID);
|
|
||||||
|
|
||||||
public signal void receipt_received(XmppStream stream, string jid, string id);
|
public signal void receipt_received(XmppStream stream, string jid, string id);
|
||||||
|
|
||||||
|
@ -30,7 +29,7 @@ namespace Xmpp.Xep.MessageDeliveryReceipts {
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string get_ns() { return NS_URI; }
|
public override string get_ns() { return NS_URI; }
|
||||||
public override string get_id() { return ID; }
|
public override string get_id() { return IDENTITY.id; }
|
||||||
|
|
||||||
private void received_message(XmppStream stream, Message.Stanza message) {
|
private void received_message(XmppStream stream, Message.Stanza message) {
|
||||||
StanzaNode? received_node = message.stanza.get_subnode("received", NS_URI);
|
StanzaNode? received_node = message.stanza.get_subnode("received", NS_URI);
|
||||||
|
|
|
@ -6,8 +6,7 @@ namespace Xmpp.Xep.Ping {
|
||||||
private const string NS_URI = "urn:xmpp:ping";
|
private const string NS_URI = "urn:xmpp:ping";
|
||||||
|
|
||||||
public class Module : XmppStreamModule {
|
public class Module : XmppStreamModule {
|
||||||
public const string ID = "0199_ping";
|
public static ModuleIdentity<Module> IDENTITY = new ModuleIdentity<Module>(NS_URI, "0199_ping");
|
||||||
public static ModuleIdentity<Module> IDENTITY = new ModuleIdentity<Module>(NS_URI, ID);
|
|
||||||
|
|
||||||
public void send_ping(XmppStream stream, string jid, ResponseListener listener) {
|
public void send_ping(XmppStream stream, string jid, ResponseListener listener) {
|
||||||
Iq.Stanza iq = new Iq.Stanza.get(new StanzaNode.build("ping", NS_URI).add_self_xmlns());
|
Iq.Stanza iq = new Iq.Stanza.get(new StanzaNode.build("ping", NS_URI).add_self_xmlns());
|
||||||
|
@ -27,7 +26,7 @@ namespace Xmpp.Xep.Ping {
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string get_ns() { return NS_URI; }
|
public override string get_ns() { return NS_URI; }
|
||||||
public override string get_id() { return ID; }
|
public override string get_id() { return IDENTITY.id; }
|
||||||
|
|
||||||
private class IqHandlerImpl : Iq.Handler, Object {
|
private class IqHandlerImpl : Iq.Handler, Object {
|
||||||
public void on_iq_get(XmppStream stream, Iq.Stanza iq) {
|
public void on_iq_get(XmppStream stream, Iq.Stanza iq) {
|
||||||
|
|
|
@ -4,8 +4,7 @@ namespace Xmpp.Xep.DelayedDelivery {
|
||||||
private const string NS_URI = "urn:xmpp:delay";
|
private const string NS_URI = "urn:xmpp:delay";
|
||||||
|
|
||||||
public class Module : XmppStreamModule {
|
public class Module : XmppStreamModule {
|
||||||
public const string ID = "0203_delayed_delivery";
|
public static ModuleIdentity<Module> IDENTITY = new ModuleIdentity<Module>(NS_URI, "0203_delayed_delivery");
|
||||||
public static ModuleIdentity<Module> IDENTITY = new ModuleIdentity<Module>(NS_URI, ID);
|
|
||||||
|
|
||||||
public static void set_message_delay(Message.Stanza message, DateTime datetime) {
|
public static void set_message_delay(Message.Stanza message, DateTime datetime) {
|
||||||
StanzaNode delay_node = (new StanzaNode.build("delay", NS_URI)).add_self_xmlns();
|
StanzaNode delay_node = (new StanzaNode.build("delay", NS_URI)).add_self_xmlns();
|
||||||
|
@ -34,7 +33,7 @@ namespace Xmpp.Xep.DelayedDelivery {
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string get_ns() { return NS_URI; }
|
public override string get_ns() { return NS_URI; }
|
||||||
public override string get_id() { return ID; }
|
public override string get_id() { return IDENTITY.id; }
|
||||||
|
|
||||||
private void on_pre_received_message(XmppStream stream, Message.Stanza message) {
|
private void on_pre_received_message(XmppStream stream, Message.Stanza message) {
|
||||||
DateTime? datetime = get_send_time(message);
|
DateTime? datetime = get_send_time(message);
|
||||||
|
|
|
@ -4,8 +4,7 @@ namespace Xmpp.Xep.MessageCarbons {
|
||||||
private const string NS_URI = "urn:xmpp:carbons:2";
|
private const string NS_URI = "urn:xmpp:carbons:2";
|
||||||
|
|
||||||
public class Module : XmppStreamModule {
|
public class Module : XmppStreamModule {
|
||||||
public const string ID = "0280_message_carbons_module";
|
public static ModuleIdentity<Module> IDENTITY = new ModuleIdentity<Module>(NS_URI, "0280_message_carbons_module");
|
||||||
public static ModuleIdentity<Module> IDENTITY = new ModuleIdentity<Module>(NS_URI, ID);
|
|
||||||
|
|
||||||
public void enable(XmppStream stream) {
|
public void enable(XmppStream stream) {
|
||||||
Iq.Stanza iq = new Iq.Stanza.set(new StanzaNode.build("enable", NS_URI).add_self_xmlns());
|
Iq.Stanza iq = new Iq.Stanza.set(new StanzaNode.build("enable", NS_URI).add_self_xmlns());
|
||||||
|
@ -38,7 +37,7 @@ namespace Xmpp.Xep.MessageCarbons {
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string get_ns() { return NS_URI; }
|
public override string get_ns() { return NS_URI; }
|
||||||
public override string get_id() { return ID; }
|
public override string get_id() { return IDENTITY.id; }
|
||||||
|
|
||||||
private void pre_received_message(XmppStream stream, Message.Stanza message) {
|
private void pre_received_message(XmppStream stream, Message.Stanza message) {
|
||||||
StanzaNode? received_node = message.stanza.get_subnode("received", NS_URI);
|
StanzaNode? received_node = message.stanza.get_subnode("received", NS_URI);
|
||||||
|
@ -51,7 +50,7 @@ namespace Xmpp.Xep.MessageCarbons {
|
||||||
string? from_attribute = message_node.get_attribute("from", Message.NS_URI);
|
string? from_attribute = message_node.get_attribute("from", Message.NS_URI);
|
||||||
// The security model assumed by this document is that all of the resources for a single user are in the same trust boundary.
|
// The security model assumed by this document is that all of the resources for a single user are in the same trust boundary.
|
||||||
// Any forwarded copies received by a Carbons-enabled client MUST be from that user's bare JID; any copies that do not meet this requirement MUST be ignored.
|
// Any forwarded copies received by a Carbons-enabled client MUST be from that user's bare JID; any copies that do not meet this requirement MUST be ignored.
|
||||||
if (from_attribute != null && from_attribute == get_bare_jid(Bind.Flag.get_flag(stream).my_jid)) {
|
if (from_attribute != null && from_attribute == get_bare_jid(stream.get_flag(Bind.Flag.IDENTITY).my_jid)) {
|
||||||
if (received_node != null) {
|
if (received_node != null) {
|
||||||
message.add_flag(new MessageFlag(MessageFlag.TYPE_RECEIVED));
|
message.add_flag(new MessageFlag(MessageFlag.TYPE_RECEIVED));
|
||||||
} else if (sent_node != null) {
|
} else if (sent_node != null) {
|
||||||
|
@ -68,7 +67,7 @@ namespace Xmpp.Xep.MessageCarbons {
|
||||||
}
|
}
|
||||||
|
|
||||||
public class MessageFlag : Message.MessageFlag {
|
public class MessageFlag : Message.MessageFlag {
|
||||||
public const string id = "message_carbons";
|
public const string ID = "message_carbons";
|
||||||
|
|
||||||
public const string TYPE_RECEIVED = "received";
|
public const string TYPE_RECEIVED = "received";
|
||||||
public const string TYPE_SENT = "sent";
|
public const string TYPE_SENT = "sent";
|
||||||
|
@ -79,10 +78,10 @@ namespace Xmpp.Xep.MessageCarbons {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static MessageFlag? get_flag(Message.Stanza message) {
|
public static MessageFlag? get_flag(Message.Stanza message) {
|
||||||
return (MessageFlag) message.get_flag(NS_URI, id);
|
return (MessageFlag) message.get_flag(NS_URI, ID);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string get_ns() { return NS_URI; }
|
public override string get_ns() { return NS_URI; }
|
||||||
public override string get_id() { return id; }
|
public override string get_id() { return ID; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,8 +12,7 @@ public const string MARKER_ACKNOWLEDGED = "acknowledged";
|
||||||
private const string[] MARKERS = {MARKER_RECEIVED, MARKER_DISPLAYED, MARKER_ACKNOWLEDGED};
|
private const string[] MARKERS = {MARKER_RECEIVED, MARKER_DISPLAYED, MARKER_ACKNOWLEDGED};
|
||||||
|
|
||||||
public class Module : XmppStreamModule {
|
public class Module : XmppStreamModule {
|
||||||
public const string ID = "0333_chat_markers";
|
public static ModuleIdentity<Module> IDENTITY = new ModuleIdentity<Module>(NS_URI, "0333_chat_markers");
|
||||||
public static ModuleIdentity<Module> IDENTITY = new ModuleIdentity<Module>(NS_URI, ID);
|
|
||||||
|
|
||||||
public signal void marker_received(XmppStream stream, string jid, string marker, string id);
|
public signal void marker_received(XmppStream stream, string jid, string marker, string id);
|
||||||
|
|
||||||
|
@ -50,7 +49,7 @@ public class Module : XmppStreamModule {
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string get_ns() { return NS_URI; }
|
public override string get_ns() { return NS_URI; }
|
||||||
public override string get_id() { return ID; }
|
public override string get_id() { return IDENTITY.id; }
|
||||||
|
|
||||||
private void on_received_message(XmppStream stream, Message.Stanza message) {
|
private void on_received_message(XmppStream stream, Message.Stanza message) {
|
||||||
if (message.type_ != Message.Stanza.TYPE_CHAT) return;
|
if (message.type_ != Message.Stanza.TYPE_CHAT) return;
|
||||||
|
|
Loading…
Reference in a new issue