aboutsummaryrefslogtreecommitdiff
path: root/libdino
diff options
context:
space:
mode:
authorMarvin W <git@larma.de>2018-01-12 21:03:09 +0100
committerfiaxh <git@mx.ax.lt>2018-01-28 00:38:47 +0100
commit782ae4c049e2b6fab13d7453cbb0e74610e7d200 (patch)
tree1b4cd0a1689cee0c2e2cac2ae9a5fb8ebbe63621 /libdino
parentd46d071e57e599e8cfb1780597cbecb36881c4d8 (diff)
downloaddino-782ae4c049e2b6fab13d7453cbb0e74610e7d200.tar.gz
dino-782ae4c049e2b6fab13d7453cbb0e74610e7d200.zip
Move Jid class to xmpp-vala, partially refactor namespace
Diffstat (limited to 'libdino')
-rw-r--r--libdino/CMakeLists.txt1
-rw-r--r--libdino/src/entity/account.vala1
-rw-r--r--libdino/src/entity/conversation.vala14
-rw-r--r--libdino/src/entity/file_transfer.vala7
-rw-r--r--libdino/src/entity/jid.vala89
-rw-r--r--libdino/src/entity/message.vala21
-rw-r--r--libdino/src/plugin/interfaces.vala1
-rw-r--r--libdino/src/service/avatar_manager.vala68
-rw-r--r--libdino/src/service/blocking_manager.vala8
-rw-r--r--libdino/src/service/chat_interaction.vala10
-rw-r--r--libdino/src/service/connection_manager.vala26
-rw-r--r--libdino/src/service/conversation_manager.vala14
-rw-r--r--libdino/src/service/counterpart_interaction_manager.vala6
-rw-r--r--libdino/src/service/database.vala16
-rw-r--r--libdino/src/service/message_processor.vala49
-rw-r--r--libdino/src/service/module_manager.vala18
-rw-r--r--libdino/src/service/muc_manager.vala141
-rw-r--r--libdino/src/service/presence_manager.vala41
-rw-r--r--libdino/src/service/roster_manager.vala26
-rw-r--r--libdino/src/service/stream_interactor.vala8
20 files changed, 225 insertions, 340 deletions
diff --git a/libdino/CMakeLists.txt b/libdino/CMakeLists.txt
index a3fb176f..93ece7e9 100644
--- a/libdino/CMakeLists.txt
+++ b/libdino/CMakeLists.txt
@@ -17,7 +17,6 @@ SOURCES
src/entity/conversation.vala
src/entity/encryption.vala
src/entity/file_transfer.vala
- src/entity/jid.vala
src/entity/message.vala
src/entity/settings.vala
diff --git a/libdino/src/entity/account.vala b/libdino/src/entity/account.vala
index f0628ca4..111fbf08 100644
--- a/libdino/src/entity/account.vala
+++ b/libdino/src/entity/account.vala
@@ -1,4 +1,5 @@
using Gee;
+using Xmpp;
namespace Dino.Entities {
diff --git a/libdino/src/entity/conversation.vala b/libdino/src/entity/conversation.vala
index 83c5ac22..fe9cf9ad 100644
--- a/libdino/src/entity/conversation.vala
+++ b/libdino/src/entity/conversation.vala
@@ -1,3 +1,5 @@
+using Xmpp;
+
namespace Dino.Entities {
public class Conversation : Object {
@@ -11,6 +13,7 @@ public class Conversation : Object {
}
public int id { get; set; }
+ public Type type_ { get; set; }
public Account account { get; private set; }
public Jid counterpart { get; private set; }
public bool active { get; set; default = false; }
@@ -25,7 +28,6 @@ public class Conversation : Object {
}
}
public Encryption encryption { get; set; default = Encryption.NONE; }
- public Type type_ { get; set; }
public Message? read_up_to { get; set; }
public enum NotifySetting { DEFAULT, ON, OFF, HIGHLIGHT }
@@ -48,14 +50,14 @@ public class Conversation : Object {
this.db = db;
id = row[db.conversation.id];
+ type_ = (Conversation.Type) row[db.conversation.type_];
account = db.get_account_by_id(row[db.conversation.account_id]);
string? resource = row[db.conversation.resource];
- string jid = db.get_jid_by_id(row[db.conversation.jid_id]);
- counterpart = resource != null ? new Jid.with_resource(jid, resource) : new Jid(jid);
+ counterpart = Jid.parse(db.get_jid_by_id(row[db.conversation.jid_id]));
+ if (type_ == Conversation.Type.GROUPCHAT_PM) counterpart = counterpart.with_resource(resource);
active = row[db.conversation.active];
int64? last_active = row[db.conversation.last_active];
if (last_active != null) this.last_active = new DateTime.from_unix_utc(last_active);
- type_ = (Conversation.Type) row[db.conversation.type_];
encryption = (Encryption) row[db.conversation.encryption];
int? read_up_to = row[db.conversation.read_up_to];
if (read_up_to != null) this.read_up_to = db.get_message_by_id(read_up_to);
@@ -95,10 +97,10 @@ public class Conversation : Object {
}
public NotifySetting get_notification_default_setting(StreamInteractor stream_interactor) {
- Xmpp.Core.XmppStream? stream = stream_interactor.get_stream(account);
+ Xmpp.XmppStream? stream = stream_interactor.get_stream(account);
if (!Application.get_default().settings.notifications) return NotifySetting.OFF;
if (type_ == Type.GROUPCHAT) {
- bool members_only = stream.get_flag(Xmpp.Xep.Muc.Flag.IDENTITY).has_room_feature(counterpart.bare_jid.to_string(), Xmpp.Xep.Muc.Feature.MEMBERS_ONLY);
+ bool members_only = stream.get_flag(Xmpp.Xep.Muc.Flag.IDENTITY).has_room_feature(counterpart.bare_jid, Xmpp.Xep.Muc.Feature.MEMBERS_ONLY);
return members_only ? NotifySetting.ON : NotifySetting.HIGHLIGHT;
}
return NotifySetting.ON;
diff --git a/libdino/src/entity/file_transfer.vala b/libdino/src/entity/file_transfer.vala
index 120d3b38..22474396 100644
--- a/libdino/src/entity/file_transfer.vala
+++ b/libdino/src/entity/file_transfer.vala
@@ -1,3 +1,5 @@
+using Xmpp;
+
namespace Dino.Entities {
public class FileTransfer : Object {
@@ -48,11 +50,12 @@ public class FileTransfer : Object {
string counterpart_jid = db.get_jid_by_id(row[db.file_transfer.counterpart_id]);
string counterpart_resource = row[db.file_transfer.counterpart_resource];
- counterpart = counterpart_resource != null ? new Jid.with_resource(counterpart_jid, counterpart_resource) : new Jid(counterpart_jid);
+ counterpart = Jid.parse(counterpart_jid);
+ if (counterpart_resource != null) counterpart = counterpart.with_resource(counterpart_resource);
string our_resource = row[db.file_transfer.our_resource];
if (our_resource != null) {
- ourpart = new Jid.with_resource(account.bare_jid.to_string(), our_resource);
+ ourpart = account.bare_jid.with_resource(our_resource);
} else {
ourpart = account.bare_jid;
}
diff --git a/libdino/src/entity/jid.vala b/libdino/src/entity/jid.vala
deleted file mode 100644
index 42218fb2..00000000
--- a/libdino/src/entity/jid.vala
+++ /dev/null
@@ -1,89 +0,0 @@
-public class Dino.Entities.Jid : Object {
- public string? localpart { get; set; }
- public string domainpart { get; set; }
- public string? resourcepart { get; set; }
-
- public Jid bare_jid {
- owned get { return localpart != null ? new Jid(@"$localpart@$domainpart") : new Jid(domainpart); }
- }
-
- private string jid { get; private set; }
-
- public Jid(string jid) {
- Jid? parsed = Jid.parse(jid);
- string? localpart = parsed != null ? parsed.localpart : null;
- string domainpart = parsed != null ? parsed.domainpart : jid;
- string? resourcepart = parsed != null ? parsed.resourcepart : null;
- this.components(localpart, domainpart, resourcepart);
- }
-
- public Jid.with_resource(string bare_jid, string resource) {
- Jid? parsed = Jid.parse(bare_jid);
- this.components(parsed.localpart, parsed.domainpart, resource);
- }
-
- public Jid.components(string? localpart, string domainpart, string? resourcepart) {
- string jid = domainpart;
- if (localpart != null) {
- jid = @"$localpart@$jid";
- }
- if (resourcepart != null) {
- jid = @"$jid/$resourcepart";
- }
- this.jid = jid;
- this.localpart = localpart;
- this.domainpart = domainpart;
- this.resourcepart = resourcepart;
- }
-
- public static Jid? parse(string jid) {
- int slash_index = jid.index_of("/");
- string resourcepart = slash_index == -1 ? null : jid.slice(slash_index + 1, jid.length);
- string bare_jid = slash_index == -1 ? jid : jid.slice(0, slash_index);
- int at_index = bare_jid.index_of("@");
- string localpart = at_index == -1 ? null : bare_jid.slice(0, at_index);
- string domainpart = at_index == -1 ? bare_jid : bare_jid.slice(at_index + 1, bare_jid.length);
-
- if (domainpart == "") return null;
- if (slash_index != -1 && resourcepart == "") return null;
- if (at_index != -1 && localpart == "") return null;
-
- return new Jid.components(localpart, domainpart, resourcepart);
- }
-
- public bool is_bare() {
- return localpart != null && resourcepart == null;
- }
-
- public bool is_full() {
- return localpart != null && resourcepart != null;
- }
-
- public string to_string() {
- return jid;
- }
-
- public bool equals_bare(Jid? jid) {
- return jid != null && equals_bare_func(this, jid);
- }
-
- public bool equals(Jid? jid) {
- return jid != null && equals_func(this, jid);
- }
-
- public static new bool equals_bare_func(Jid jid1, Jid jid2) {
- return jid1.bare_jid.to_string() == jid2.bare_jid.to_string();
- }
-
- public static bool equals_func(Jid jid1, Jid jid2) {
- return jid1.to_string() == jid2.to_string();
- }
-
- public static new uint hash_bare_func(Jid jid) {
- return jid.bare_jid.to_string().hash();
- }
-
- public static new uint hash_func(Jid jid) {
- return jid.to_string().hash();
- }
-}
diff --git a/libdino/src/entity/message.vala b/libdino/src/entity/message.vala
index 27bd08d8..6e34e458 100644
--- a/libdino/src/entity/message.vala
+++ b/libdino/src/entity/message.vala
@@ -1,4 +1,5 @@
using Gee;
+using Xmpp;
namespace Dino.Entities {
@@ -51,7 +52,7 @@ public class Message : Object {
marked_ = value;
}
}
- public Xmpp.Message.Stanza stanza { get; set; }
+ public Xmpp.MessageStanza stanza { get; set; }
private Database? db;
@@ -67,15 +68,15 @@ public class Message : Object {
stanza_id = row[db.message.stanza_id];
type_ = (Message.Type) row[db.message.type_];
- string counterpart_jid = db.get_jid_by_id(row[db.message.counterpart_id]);
+ counterpart = Jid.parse(db.get_jid_by_id(row[db.message.counterpart_id]));
string counterpart_resource = row[db.message.counterpart_resource];
- counterpart = counterpart_resource != null ? new Jid.with_resource(counterpart_jid, counterpart_resource) : new Jid(counterpart_jid);
+ if (counterpart_resource != null) counterpart = counterpart.with_resource(counterpart_resource);
string our_resource = row[db.message.our_resource];
if (type_ == Type.GROUPCHAT && our_resource != null) {
- ourpart = new Jid.with_resource(counterpart_jid, our_resource);
+ ourpart = counterpart.with_resource(our_resource);
} else if (our_resource != null) {
- ourpart = new Jid.with_resource(account.bare_jid.to_string(), our_resource);
+ ourpart = account.bare_jid.with_resource(our_resource);
} else {
ourpart = account.bare_jid;
}
@@ -121,9 +122,9 @@ public class Message : Object {
public void set_type_string(string type) {
switch (type) {
- case Xmpp.Message.Stanza.TYPE_CHAT:
+ case Xmpp.MessageStanza.TYPE_CHAT:
type_ = Type.CHAT; break;
- case Xmpp.Message.Stanza.TYPE_GROUPCHAT:
+ case Xmpp.MessageStanza.TYPE_GROUPCHAT:
type_ = Type.GROUPCHAT; break;
}
}
@@ -131,11 +132,11 @@ public class Message : Object {
public new string get_type_string() {
switch (type_) {
case Type.CHAT:
- return Xmpp.Message.Stanza.TYPE_CHAT;
+ return Xmpp.MessageStanza.TYPE_CHAT;
case Type.GROUPCHAT:
- return Xmpp.Message.Stanza.TYPE_GROUPCHAT;
+ return Xmpp.MessageStanza.TYPE_GROUPCHAT;
default:
- return Xmpp.Message.Stanza.TYPE_NORMAL;
+ return Xmpp.MessageStanza.TYPE_NORMAL;
}
}
diff --git a/libdino/src/plugin/interfaces.vala b/libdino/src/plugin/interfaces.vala
index 07cc759c..62260076 100644
--- a/libdino/src/plugin/interfaces.vala
+++ b/libdino/src/plugin/interfaces.vala
@@ -1,4 +1,5 @@
using Dino.Entities;
+using Xmpp;
namespace Dino.Plugins {
diff --git a/libdino/src/service/avatar_manager.vala b/libdino/src/service/avatar_manager.vala
index 61e1faef..40115345 100644
--- a/libdino/src/service/avatar_manager.vala
+++ b/libdino/src/service/avatar_manager.vala
@@ -41,22 +41,18 @@ public class AvatarManager : StreamInteractionModule, Object {
stream_interactor.module_manager.initialize_account_modules.connect(initialize_avatar_modules);
}
- private void initialize_avatar_modules(Account account, ArrayList<Core.XmppStreamModule> modules) {
+ private void initialize_avatar_modules(Account account, ArrayList<XmppStreamModule> modules) {
modules.add(new Xep.UserAvatars.Module(avatar_storage));
modules.add(new Xep.VCard.Module(avatar_storage));
}
private Pixbuf? get_avatar_by_hash(string hash) {
- lock (cached_pixbuf) {
- if (cached_pixbuf.has_key(hash)) {
- return cached_pixbuf[hash];
- }
+ if (cached_pixbuf.has_key(hash)) {
+ return cached_pixbuf[hash];
}
Pixbuf? image = avatar_storage.get_image(hash);
if (image != null) {
- lock (cached_pixbuf) {
- cached_pixbuf[hash] = image;
- }
+ cached_pixbuf[hash] = image;
}
return image;
}
@@ -66,17 +62,13 @@ public class AvatarManager : StreamInteractionModule, Object {
if (!stream_interactor.get_module(MucManager.IDENTITY).is_groupchat_occupant(jid, account)) {
jid_ = jid.bare_jid;
}
- lock(user_avatars) {
- string? user_avatars_id = user_avatars[jid_];
- if (user_avatars_id != null) {
- return get_avatar_by_hash(user_avatars_id);
- }
+ string? user_avatars_id = user_avatars[jid_];
+ if (user_avatars_id != null) {
+ return get_avatar_by_hash(user_avatars_id);
}
- lock(vcard_avatars) {
- string? vcard_avatars_id = vcard_avatars[jid_];
- if (vcard_avatars_id != null) {
- return get_avatar_by_hash(vcard_avatars_id);
- }
+ string? vcard_avatars_id = vcard_avatars[jid_];
+ if (vcard_avatars_id != null) {
+ return get_avatar_by_hash(vcard_avatars_id);
}
return null;
}
@@ -93,7 +85,7 @@ public class AvatarManager : StreamInteractionModule, Object {
}
uint8[] buffer;
pixbuf.save_to_buffer(out buffer, "png");
- Core.XmppStream stream = stream_interactor.get_stream(account);
+ XmppStream stream = stream_interactor.get_stream(account);
if (stream != null) {
stream.get_module(Xep.UserAvatars.Module.IDENTITY).publish_png(stream, buffer, pixbuf.width, pixbuf.height);
on_user_avatar_received(account, account.bare_jid, Base64.encode(buffer));
@@ -105,32 +97,26 @@ public class AvatarManager : StreamInteractionModule, Object {
private void on_account_added(Account account) {
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, jid, id)
);
stream_interactor.module_manager.get_module(account, Xep.VCard.Module.IDENTITY).received_avatar.connect((stream, jid, id) =>
- on_vcard_avatar_received(account, new Jid(jid), id)
+ on_vcard_avatar_received(account, jid, id)
);
- lock (user_avatars) {
- user_avatars = db.get_avatar_hashes(Source.USER_AVATARS);
- foreach (Jid jid in user_avatars.keys) {
- on_user_avatar_received(account, jid, user_avatars[jid]);
- }
+ user_avatars = db.get_avatar_hashes(Source.USER_AVATARS);
+ foreach (Jid jid in user_avatars.keys) {
+ on_user_avatar_received(account, jid, user_avatars[jid]);
}
- lock (vcard_avatars) {
- vcard_avatars = db.get_avatar_hashes(Source.VCARD);
- foreach (Jid jid in vcard_avatars.keys) {
- on_vcard_avatar_received(account, jid, vcard_avatars[jid]);
- }
+ vcard_avatars = db.get_avatar_hashes(Source.VCARD);
+ foreach (Jid jid in vcard_avatars.keys) {
+ on_vcard_avatar_received(account, jid, vcard_avatars[jid]);
}
}
private void on_user_avatar_received(Account account, Jid jid, string id) {
- lock (user_avatars) {
- if (!user_avatars.has_key(jid) || user_avatars[jid] != id) {
- user_avatars[jid] = id;
- db.set_avatar_hash(jid, id, Source.USER_AVATARS);
- }
+ if (!user_avatars.has_key(jid) || user_avatars[jid] != id) {
+ user_avatars[jid] = id;
+ db.set_avatar_hash(jid, id, Source.USER_AVATARS);
}
Pixbuf? avatar = avatar_storage.get_image(id);
if (avatar != null) {
@@ -139,12 +125,10 @@ public class AvatarManager : StreamInteractionModule, Object {
}
private void on_vcard_avatar_received(Account account, Jid jid, string id) {
- lock (vcard_avatars) {
- if (!vcard_avatars.has_key(jid) || vcard_avatars[jid] != id) {
- vcard_avatars[jid] = id;
- if (!jid.is_full()) { // don't save muc avatars
- db.set_avatar_hash(jid, id, Source.VCARD);
- }
+ if (!vcard_avatars.has_key(jid) || vcard_avatars[jid] != id) {
+ vcard_avatars[jid] = id;
+ if (!jid.is_full()) { // don't save muc avatars
+ db.set_avatar_hash(jid, id, Source.VCARD);
}
}
Pixbuf? avatar = avatar_storage.get_image(id);
diff --git a/libdino/src/service/blocking_manager.vala b/libdino/src/service/blocking_manager.vala
index de79b4d4..183c8a9e 100644
--- a/libdino/src/service/blocking_manager.vala
+++ b/libdino/src/service/blocking_manager.vala
@@ -21,22 +21,22 @@ public class BlockingManager : StreamInteractionModule, Object {
}
public bool is_blocked(Account account, Jid jid) {
- Core.XmppStream stream = stream_interactor.get_stream(account);
+ XmppStream stream = stream_interactor.get_stream(account);
return stream != null && stream.get_module(Xmpp.Xep.BlockingCommand.Module.IDENTITY).is_blocked(stream, jid.to_string());
}
public void block(Account account, Jid jid) {
- Core.XmppStream stream = stream_interactor.get_stream(account);
+ XmppStream stream = stream_interactor.get_stream(account);
stream.get_module(Xmpp.Xep.BlockingCommand.Module.IDENTITY).block(stream, new ArrayList<string>.wrap(new string[] {jid.to_string()}));
}
public void unblock(Account account, Jid jid) {
- Core.XmppStream stream = stream_interactor.get_stream(account);
+ XmppStream stream = stream_interactor.get_stream(account);
stream.get_module(Xmpp.Xep.BlockingCommand.Module.IDENTITY).unblock(stream, new ArrayList<string>.wrap(new string[] {jid.to_string()}));
}
public bool is_supported(Account account) {
- Core.XmppStream stream = stream_interactor.get_stream(account);
+ XmppStream stream = stream_interactor.get_stream(account);
return stream != null && stream.get_module(Xmpp.Xep.BlockingCommand.Module.IDENTITY).is_supported(stream);
}
}
diff --git a/libdino/src/service/chat_interaction.vala b/libdino/src/service/chat_interaction.vala
index 036d9e59..fe008439 100644
--- a/libdino/src/service/chat_interaction.vala
+++ b/libdino/src/service/chat_interaction.vala
@@ -138,7 +138,7 @@ public class ChatInteraction : StreamInteractionModule, Object {
}
private void send_chat_marker(Conversation conversation, Entities.Message message, string marker) {
- Core.XmppStream stream = stream_interactor.get_stream(conversation.account);
+ XmppStream stream = stream_interactor.get_stream(conversation.account);
if (stream != null &&
(marker == Xep.ChatMarkers.MARKER_RECEIVED || conversation.get_send_marker_setting() == Conversation.Setting.ON) &&
Xep.ChatMarkers.Module.requests_marking(message.stanza)) {
@@ -147,17 +147,17 @@ public class ChatInteraction : StreamInteractionModule, Object {
}
private void send_delivery_receipt(Conversation conversation, Entities.Message message) {
- Core.XmppStream stream = stream_interactor.get_stream(conversation.account);
+ XmppStream stream = stream_interactor.get_stream(conversation.account);
if (stream != null && Xep.MessageDeliveryReceipts.Module.requests_receipt(message.stanza)) {
- stream.get_module(Xep.MessageDeliveryReceipts.Module.IDENTITY).send_received(stream, message.from.to_string(), message.stanza_id);
+ stream.get_module(Xep.MessageDeliveryReceipts.Module.IDENTITY).send_received(stream, message.from, message.stanza_id);
}
}
private void send_chat_state_notification(Conversation conversation, string state) {
- Core.XmppStream stream = stream_interactor.get_stream(conversation.account);
+ XmppStream stream = stream_interactor.get_stream(conversation.account);
if (stream != null && conversation.get_send_typing_setting() == Conversation.Setting.ON &&
conversation.type_ != Conversation.Type.GROUPCHAT) {
- stream.get_module(Xep.ChatStateNotifications.Module.IDENTITY).send_state(stream, conversation.counterpart.to_string(), state);
+ stream.get_module(Xep.ChatStateNotifications.Module.IDENTITY).send_state(stream, conversation.counterpart, state);
}
}
}
diff --git a/libdino/src/service/connection_manager.vala b/libdino/src/service/connection_manager.vala
index 70877233..943dcbad 100644
--- a/libdino/src/service/connection_manager.vala
+++ b/libdino/src/service/connection_manager.vala
@@ -7,7 +7,7 @@ namespace Dino {
public class ConnectionManager {
- public signal void stream_opened(Account account, Core.XmppStream stream);
+ public signal void stream_opened(Account account, XmppStream stream);
public signal void connection_state_changed(Account account, ConnectionState state);
public signal void connection_error(Account account, ConnectionError error);
@@ -53,11 +53,11 @@ public class ConnectionManager {
}
private class Connection {
- public Core.XmppStream stream { get; set; }
+ public XmppStream stream { get; set; }
public ConnectionState connection_state { get; set; default = ConnectionState.DISCONNECTED; }
public DateTime established { get; set; }
public DateTime last_activity { get; set; }
- public class Connection(Core.XmppStream stream, DateTime established) {
+ public class Connection(XmppStream stream, DateTime established) {
this.stream = stream;
this.established = established;
}
@@ -85,7 +85,7 @@ public class ConnectionManager {
});
}
- public Core.XmppStream? get_stream(Account account) {
+ public XmppStream? get_stream(Account account) {
if (get_state(account) == ConnectionState.CONNECTED) {
return connections[account].stream;
}
@@ -110,7 +110,7 @@ public class ConnectionManager {
return connection_todo;
}
- public Core.XmppStream? connect(Account account) {
+ public XmppStream? connect(Account account) {
if (!connection_todo.contains(account)) connection_todo.add(account);
if (!connections.has_key(account)) {
return connect_(account);
@@ -144,16 +144,16 @@ public class ConnectionManager {
}
}
- private Core.XmppStream? connect_(Account account, string? resource = null) {
+ private XmppStream? connect_(Account account, string? resource = null) {
if (connections.has_key(account)) connections[account].stream.detach_modules();
connection_errors.unset(account);
if (resource == null) resource = account.resourcepart;
- Core.XmppStream stream = new Core.XmppStream();
- foreach (Core.XmppStreamModule module in module_manager.get_modules(account, resource)) {
+ XmppStream stream = new XmppStream();
+ foreach (XmppStreamModule module in module_manager.get_modules(account, resource)) {
stream.add_module(module);
}
- stream.log = new Core.XmppLog(account.bare_jid.to_string(), log_options);
+ stream.log = new XmppLog(account.bare_jid.to_string(), log_options);
Connection connection = new Connection(stream, new DateTime.now_utc());
connections[account] = connection;
@@ -174,7 +174,7 @@ public class ConnectionManager {
return stream;
}
- private async void connect_async(Account account, Core.XmppStream stream) {
+ private async void connect_async(Account account, XmppStream stream) {
try {
yield stream.connect(account.domainpart);
} catch (Error e) {
@@ -184,7 +184,7 @@ public class ConnectionManager {
connections.unset(account);
return;
}
- if (e is Core.IOStreamError.TLS) {
+ if (e is IOStreamError.TLS) {
set_connection_error(account, new ConnectionError(ConnectionError.Source.TLS, e.message) { reconnect_recomendation=ConnectionError.Reconnect.NEVER});
return;
}
@@ -236,8 +236,8 @@ public class ConnectionManager {
private void check_reconnect(Account account) {
bool acked = false;
- Core.XmppStream stream = connections[account].stream;
- stream.get_module(Xep.Ping.Module.IDENTITY).send_ping(stream, account.domainpart, (stream) => {
+ XmppStream stream = connections[account].stream;
+ stream.get_module(Xep.Ping.Module.IDENTITY).send_ping(stream, account.bare_jid.domain_jid, (stream) => {
acked = true;
change_connection_state(account, ConnectionState.CONNECTED);
});
diff --git a/libdino/src/service/conversation_manager.vala b/libdino/src/service/conversation_manager.vala
index 986cb0f1..e66ecca0 100644
--- a/libdino/src/service/conversation_manager.vala
+++ b/libdino/src/service/conversation_manager.vala
@@ -33,9 +33,10 @@ public class ConversationManager : StreamInteractionModule, Object {
public Conversation create_conversation(Jid jid, Account account, Conversation.Type? type = null) {
assert(conversations.has_key(account));
- if (conversations[account].has_key(jid)) {
- conversations[account][jid].type_ = type;
- return conversations[account][jid];
+ Jid store_jid = type == Conversation.Type.GROUPCHAT ? jid.bare_jid : jid;
+ if (conversations[account].has_key(store_jid)) {
+ conversations[account][store_jid].type_ = type;
+ return conversations[account][store_jid];
} else {
Conversation conversation = new Conversation(jid, account, type);
add_conversation(conversation);
@@ -84,10 +85,11 @@ public class ConversationManager : StreamInteractionModule, Object {
return null;
}
- public Gee.List<Conversation> get_active_conversations() {
+ public Gee.List<Conversation> get_active_conversations(Account? account = null) {
Gee.List<Conversation> ret = new ArrayList<Conversation>(Conversation.equals_func);
- foreach (Account account in conversations.keys) {
- foreach (Conversation conversation in conversations[account].values) {
+ foreach (Account account_ in conversations.keys) {
+ if (account != null && !account_.equals(account)) continue;
+ foreach (Conversation conversation in conversations[account_].values) {
if(conversation.active) ret.add(conversation);
}
}
diff --git a/libdino/src/service/counterpart_interaction_manager.vala b/libdino/src/service/counterpart_interaction_manager.vala
index e4207a1c..eeb7f773 100644
--- a/libdino/src/service/counterpart_interaction_manager.vala
+++ b/libdino/src/service/counterpart_interaction_manager.vala
@@ -37,13 +37,13 @@ public class CounterpartInteractionManager : StreamInteractionModule, Object {
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) => {
- on_chat_marker_received(account, new Jid(jid), marker, id);
+ on_chat_marker_received(account, jid, marker, id);
});
stream_interactor.module_manager.get_module(account, Xep.MessageDeliveryReceipts.Module.IDENTITY).receipt_received.connect((stream, jid, id) => {
- on_receipt_received(account, new Jid(jid), id);
+ on_receipt_received(account, jid, id);
});
stream_interactor.module_manager.get_module(account, Xep.ChatStateNotifications.Module.IDENTITY).chat_state_received.connect((stream, jid, state) => {
- on_chat_state_received(account, new Jid(jid), state);
+ on_chat_state_received(account, jid, state);
});
}
diff --git a/libdino/src/service/database.vala b/libdino/src/service/database.vala
index 6b75b800..c668ce17 100644
--- a/libdino/src/service/database.vala
+++ b/libdino/src/service/database.vala
@@ -232,7 +232,7 @@ public class Database : Qlite.Database {
}
}
- public Gee.List<Message> get_messages(Jid jid, Account account, Message.Type? type, int count, DateTime? before) {
+ public Gee.List<Message> get_messages(Xmpp.Jid jid, Account account, Message.Type? type, int count, DateTime? before) {
QueryBuilder select = message.select()
.with(message.counterpart_id, "=", get_jid_id(jid))
.with(message.account_id, "=", account.id)
@@ -255,7 +255,7 @@ public class Database : Qlite.Database {
return ret;
}
- public Gee.List<Message> get_unsend_messages(Account account, Jid? jid = null) {
+ public Gee.List<Message> get_unsend_messages(Account account, Xmpp.Jid? jid = null) {
Gee.List<Message> ret = new ArrayList<Message>();
var select = message.select()
.with(message.account_id, "=", account.id)
@@ -308,7 +308,7 @@ public class Database : Qlite.Database {
return ret;
}
- public void set_avatar_hash(Jid jid, string hash, int type) {
+ public void set_avatar_hash(Xmpp.Jid jid, string hash, int type) {
avatar.insert().or("REPLACE")
.value(avatar.jid, jid.to_string())
.value(avatar.hash, hash)
@@ -316,10 +316,10 @@ public class Database : Qlite.Database {
.perform();
}
- public HashMap<Jid, string> get_avatar_hashes(int type) {
- HashMap<Jid, string> ret = new HashMap<Jid, string>(Jid.hash_func, Jid.equals_func);
+ public HashMap<Xmpp.Jid, string> get_avatar_hashes(int type) {
+ HashMap<Xmpp.Jid, string> ret = new HashMap<Xmpp.Jid, string>(Xmpp.Jid.hash_func, Xmpp.Jid.equals_func);
foreach (Row row in avatar.select({avatar.jid, avatar.hash}).with(avatar.type_, "=", type)) {
- ret[new Jid(row[avatar.jid])] = row[avatar.hash];
+ ret[Xmpp.Jid.parse(row[avatar.jid])] = row[avatar.hash];
}
return ret;
}
@@ -342,7 +342,7 @@ public class Database : Qlite.Database {
}
- public int get_jid_id(Jid jid_obj) {
+ public int get_jid_id(Xmpp.Jid jid_obj) {
string bare_jid = jid_obj.bare_jid.to_string();
if (jid_table_reverse.has_key(bare_jid)) {
return jid_table_reverse[bare_jid];
@@ -372,7 +372,7 @@ public class Database : Qlite.Database {
}
}
- private int add_jid(Jid jid_obj) {
+ private int add_jid(Xmpp.Jid jid_obj) {
string bare_jid = jid_obj.bare_jid.to_string();
int id = (int) jid.insert().value(jid.bare_jid, bare_jid).perform();
jid_table_cache[id] = bare_jid;
diff --git a/libdino/src/service/message_processor.vala b/libdino/src/service/message_processor.vala
index 1a9b1872..ec6316a0 100644
--- a/libdino/src/service/message_processor.vala
+++ b/libdino/src/service/message_processor.vala
@@ -9,10 +9,10 @@ public class MessageProcessor : StreamInteractionModule, Object {
public static ModuleIdentity<MessageProcessor> IDENTITY = new ModuleIdentity<MessageProcessor>("message_processor");
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.MessageStanza message_stanza, Conversation conversation);
public signal void message_received(Entities.Message message, Conversation conversation);
- public signal void build_message_stanza(Entities.Message message, Xmpp.Message.Stanza message_stanza, Conversation conversation);
- public signal void pre_message_send(Entities.Message message, Xmpp.Message.Stanza message_stanza, Conversation conversation);
+ public signal void build_message_stanza(Entities.Message message, Xmpp.MessageStanza message_stanza, Conversation conversation);
+ public signal void pre_message_send(Entities.Message message, Xmpp.MessageStanza message_stanza, Conversation conversation);
public signal void message_sent(Entities.Message message, Conversation conversation);
private StreamInteractor stream_interactor;
@@ -51,7 +51,7 @@ public class MessageProcessor : StreamInteractionModule, Object {
}
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.MessageModule.IDENTITY).received_message.connect( (stream, message) => {
on_message_received(account, message);
});
stream_interactor.module_manager.get_module(account, Xmpp.Xep.MessageArchiveManagement.Module.IDENTITY).feature_available.connect( (stream) => {
@@ -60,7 +60,7 @@ public class MessageProcessor : StreamInteractionModule, Object {
});
}
- private void on_message_received(Account account, Xmpp.Message.Stanza message) {
+ private void on_message_received(Account account, Xmpp.MessageStanza message) {
if (message.body == null) return;
Entities.Message new_message = create_in_message(account, message);
@@ -68,19 +68,18 @@ public class MessageProcessor : StreamInteractionModule, Object {
determine_message_type(account, message, new_message);
}
- private Entities.Message create_in_message(Account account, Xmpp.Message.Stanza message) {
+ private Entities.Message? create_in_message(Account account, Xmpp.MessageStanza message) {
Entities.Message new_message = new Entities.Message(message.body);
new_message.account = account;
new_message.stanza_id = message.id;
- Jid from_jid = new Jid(message.from);
- if (!account.bare_jid.equals_bare(from_jid) ||
- from_jid.equals(stream_interactor.get_module(MucManager.IDENTITY).get_own_jid(from_jid.bare_jid, account))) {
+ if (!account.bare_jid.equals_bare(message.from) ||
+ message.from.equals(stream_interactor.get_module(MucManager.IDENTITY).get_own_jid(message.from.bare_jid, account))) {
new_message.direction = Entities.Message.DIRECTION_RECEIVED;
} else {
new_message.direction = Entities.Message.DIRECTION_SENT;
}
- new_message.counterpart = new_message.direction == Entities.Message.DIRECTION_SENT ? new Jid(message.to) : new Jid(message.from);
- new_message.ourpart = new_message.direction == Entities.Message.DIRECTION_SENT ? new Jid(message.from) : new Jid(message.to);
+ new_message.counterpart = new_message.direction == Entities.Message.DIRECTION_SENT ? message.to : message.from;
+ new_message.ourpart = new_message.direction == Entities.Message.DIRECTION_SENT ? message.from : message.to;
new_message.stanza = message;
Xep.MessageArchiveManagement.MessageFlag? mam_message_flag = Xep.MessageArchiveManagement.MessageFlag.get_flag(message);
@@ -94,7 +93,7 @@ public class MessageProcessor : StreamInteractionModule, Object {
return new_message;
}
- private void process_message(Entities.Message new_message, Xmpp.Message.Stanza stanza) {
+ private void process_message(Entities.Message new_message, Xmpp.MessageStanza stanza) {
Conversation? conversation = stream_interactor.get_module(ConversationManager.IDENTITY).get_conversation_for_message(new_message);
if (conversation != null) {
pre_message_received(new_message, stanza, conversation);
@@ -111,7 +110,7 @@ public class MessageProcessor : StreamInteractionModule, Object {
}
bool is_mam_message = Xep.MessageArchiveManagement.MessageFlag.get_flag(stanza) != null;
- Core.XmppStream? stream = stream_interactor.get_stream(conversation.account);
+ XmppStream? stream = stream_interactor.get_stream(conversation.account);
Xep.MessageArchiveManagement.Flag? mam_flag = stream != null ? stream.get_flag(Xep.MessageArchiveManagement.Flag.IDENTITY) : null;
if (is_mam_message || (mam_flag != null && mam_flag.cought_up == true)) {
conversation.account.mam_earliest_synced = new_message.local_time;
@@ -120,11 +119,11 @@ public class MessageProcessor : StreamInteractionModule, Object {
}
}
- private void determine_message_type(Account account, Xmpp.Message.Stanza message_stanza, Entities.Message message) {
- if (message_stanza.type_ == Xmpp.Message.Stanza.TYPE_GROUPCHAT) {
+ private void determine_message_type(Account account, Xmpp.MessageStanza message_stanza, Entities.Message message) {
+ if (message_stanza.type_ == Xmpp.MessageStanza.TYPE_GROUPCHAT) {
message.type_ = Entities.Message.Type.GROUPCHAT;
process_message(message, message_stanza);
- } else if (message_stanza.type_ == Xmpp.Message.Stanza.TYPE_CHAT) {
+ } else if (message_stanza.type_ == Xmpp.MessageStanza.TYPE_CHAT) {
Conversation? conversation = stream_interactor.get_module(ConversationManager.IDENTITY).get_conversation(message.counterpart.bare_jid, account);
if (conversation != null) {
if (conversation.type_ == Conversation.Type.CHAT) {
@@ -134,8 +133,8 @@ public class MessageProcessor : StreamInteractionModule, Object {
}
process_message(message, message_stanza);
} else {
- Core.XmppStream stream = stream_interactor.get_stream(account);
- if (stream != null) stream.get_module(Xep.ServiceDiscovery.Module.IDENTITY).get_entity_categories(stream, message.counterpart.bare_jid.to_string(), (stream, identities) => {
+ XmppStream stream = stream_interactor.get_stream(account);
+ if (stream != null) stream.get_module(Xep.ServiceDiscovery.Module.IDENTITY).get_entity_categories(stream, message.counterpart.bare_jid, (stream, identities) => {
if (identities == null) {
message.type_ = Entities.Message.Type.CHAT;
process_message(message, message_stanza);
@@ -168,7 +167,7 @@ public class MessageProcessor : StreamInteractionModule, Object {
message.ourpart = stream_interactor.get_module(MucManager.IDENTITY).get_own_jid(conversation.counterpart, conversation.account) ?? conversation.account.bare_jid;
message.real_jid = conversation.account.bare_jid;
} else {
- message.ourpart = new Jid.with_resource(conversation.account.bare_jid.to_string(), conversation.account.resourcepart);
+ message.ourpart = conversation.account.bare_jid.with_resource(conversation.account.resourcepart);
}
message.marked = Entities.Message.Marked.UNSENT;
message.encryption = conversation.encryption;
@@ -177,16 +176,16 @@ public class MessageProcessor : StreamInteractionModule, Object {
public void send_xmpp_message(Entities.Message message, Conversation conversation, bool delayed = false) {
lock (lock_send_unsent) {
- Core.XmppStream stream = stream_interactor.get_stream(conversation.account);
+ XmppStream stream = stream_interactor.get_stream(conversation.account);
message.marked = Entities.Message.Marked.NONE;
if (stream != null) {
- Xmpp.Message.Stanza new_message = new Xmpp.Message.Stanza(message.stanza_id);
- new_message.to = message.counterpart.to_string();
+ Xmpp.MessageStanza new_message = new Xmpp.MessageStanza(message.stanza_id);
+ new_message.to = message.counterpart;
new_message.body = message.body;
if (conversation.type_ == Conversation.Type.GROUPCHAT) {
- new_message.type_ = Xmpp.Message.Stanza.TYPE_GROUPCHAT;
+ new_message.type_ = Xmpp.MessageStanza.TYPE_GROUPCHAT;
} else {
- new_message.type_ = Xmpp.Message.Stanza.TYPE_CHAT;
+ new_message.type_ = Xmpp.MessageStanza.TYPE_CHAT;
}
build_message_stanza(message, new_message, conversation);
pre_message_send(message, new_message, conversation);
@@ -194,7 +193,7 @@ public class MessageProcessor : StreamInteractionModule, Object {
if (delayed) {
Xmpp.Xep.DelayedDelivery.Module.set_message_delay(new_message, message.time);
}
- stream.get_module(Xmpp.Message.Module.IDENTITY).send_message(stream, new_message);
+ stream.get_module(Xmpp.MessageModule.IDENTITY).send_message(stream, new_message);
message.stanza_id = new_message.id;
message.stanza = new_message;
} else {
diff --git a/libdino/src/service/module_manager.vala b/libdino/src/service/module_manager.vala
index 0f89f532..f5f3b63e 100644
--- a/libdino/src/service/module_manager.vala
+++ b/libdino/src/service/module_manager.vala
@@ -6,17 +6,17 @@ using Xmpp;
namespace Dino {
public class ModuleManager {
- private HashMap<Account, ArrayList<Core.XmppStreamModule>> module_map = new HashMap<Account, ArrayList<Core.XmppStreamModule>>();
+ private HashMap<Account, ArrayList<XmppStreamModule>> module_map = new HashMap<Account, ArrayList<XmppStreamModule>>();
private EntityCapabilitiesStorage entity_capabilities_storage;
- public signal void initialize_account_modules(Account account, ArrayList<Core.XmppStreamModule> modules);
+ public signal void initialize_account_modules(Account account, ArrayList<XmppStreamModule> modules);
public ModuleManager(Database db) {
entity_capabilities_storage = new EntityCapabilitiesStorage(db);
}
- public T? get_module<T>(Account account, Core.ModuleIdentity<T> identity) {
+ public T? get_module<T>(Account account, Xmpp.ModuleIdentity<T> identity) {
if (identity == null) return null;
lock (module_map) {
if (!module_map.has_key(account)) {
@@ -30,15 +30,15 @@ public class ModuleManager {
return null;
}
- public ArrayList<Core.XmppStreamModule> get_modules(Account account, string? resource = null) {
- ArrayList<Core.XmppStreamModule> modules = new ArrayList<Core.XmppStreamModule>();
+ public ArrayList<XmppStreamModule> get_modules(Account account, string? resource = null) {
+ ArrayList<XmppStreamModule> modules = new ArrayList<XmppStreamModule>();
lock (module_map) {
if (!module_map.has_key(account)) initialize(account);
- foreach (Core.XmppStreamModule module in module_map[account]) modules.add(module);
+ foreach (XmppStreamModule module in module_map[account]) modules.add(module);
}
- foreach (Core.XmppStreamModule module in module_map[account]) {
+ foreach (XmppStreamModule module in module_map[account]) {
if (module.get_id() == Bind.Module.IDENTITY.id) {
(module as Bind.Module).requested_resource == null ? account.resourcepart : resource;
} else if (module.get_id() == PlainSasl.Module.IDENTITY.id) {
@@ -50,7 +50,7 @@ public class ModuleManager {
public void initialize(Account account) {
lock(module_map) {
- module_map[account] = new ArrayList<Core.XmppStreamModule>();
+ module_map[account] = new ArrayList<XmppStreamModule>();
module_map[account].add(new Iq.Module());
module_map[account].add(new Tls.Module());
module_map[account].add(new Xep.SrvRecordsTls.Module());
@@ -63,7 +63,7 @@ public class ModuleManager {
module_map[account].add(new Xep.PrivateXmlStorage.Module());
module_map[account].add(new Xep.Bookmarks.Module());
module_map[account].add(new Presence.Module());
- module_map[account].add(new Xmpp.Message.Module());
+ module_map[account].add(new Xmpp.MessageModule());
module_map[account].add(new Xep.MessageArchiveManagement.Module());
module_map[account].add(new Xep.MessageCarbons.Module());
module_map[account].add(new Xep.Muc.Module());
diff --git a/libdino/src/service/muc_manager.vala b/libdino/src/service/muc_manager.vala
index 331065f1..4689bdcf 100644
--- a/libdino/src/service/muc_manager.vala
+++ b/libdino/src/service/muc_manager.vala
@@ -30,7 +30,7 @@ public class MucManager : StreamInteractionModule, Object {
}
public void join(Account account, Jid jid, string? nick, string? password) {
- Core.XmppStream? stream = stream_interactor.get_stream(account);
+ XmppStream? stream = stream_interactor.get_stream(account);
if (stream == null) return;
string nick_ = nick ?? account.bare_jid.localpart ?? account.bare_jid.domainpart;
@@ -41,14 +41,14 @@ public class MucManager : StreamInteractionModule, Object {
if (last_message != null) history_since = last_message.time;
}
- stream.get_module(Xep.Muc.Module.IDENTITY).enter(stream, jid.bare_jid.to_string(), nick_, password, history_since);
+ stream.get_module(Xep.Muc.Module.IDENTITY).enter(stream, jid.bare_jid, nick_, password, history_since);
}
public void part(Account account, Jid jid) {
- Core.XmppStream? stream = stream_interactor.get_stream(account);
+ XmppStream? stream = stream_interactor.get_stream(account);
if (stream == null) return;
unset_autojoin(stream, jid);
- stream.get_module(Xep.Muc.Module.IDENTITY).exit(stream, jid.bare_jid.to_string());
+ stream.get_module(Xep.Muc.Module.IDENTITY).exit(stream, jid.bare_jid);
Conversation? conversation = stream_interactor.get_module(ConversationManager.IDENTITY).get_conversation(jid, account);
if (conversation != null) stream_interactor.get_module(ConversationManager.IDENTITY).close_conversation(conversation);
@@ -56,53 +56,53 @@ public class MucManager : StreamInteractionModule, Object {
public delegate void OnResult(Jid jid, Xep.DataForms.DataForm data_form);
public void get_config_form(Account account, Jid jid, owned OnResult listener) {
- Core.XmppStream? stream = stream_interactor.get_stream(account);
+ XmppStream? stream = stream_interactor.get_stream(account);
if (stream == null) return;
- stream.get_module(Xep.Muc.Module.IDENTITY).get_config_form(stream, jid.to_string(), (stream, jid, data_form) => {
- listener(new Jid(jid), data_form);
+ stream.get_module(Xep.Muc.Module.IDENTITY).get_config_form(stream, jid, (stream, jid, data_form) => {
+ listener(jid, data_form);
});
}
public void change_subject(Account account, Jid jid, string subject) {
- Core.XmppStream? stream = stream_interactor.get_stream(account);
- if (stream != null) stream.get_module(Xep.Muc.Module.IDENTITY).change_subject(stream, jid.bare_jid.to_string(), subject);
+ XmppStream? stream = stream_interactor.get_stream(account);
+ if (stream != null) stream.get_module(Xep.Muc.Module.IDENTITY).change_subject(stream, jid.bare_jid, subject);
}
public void change_nick(Account account, Jid jid, string new_nick) {
- Core.XmppStream? stream = stream_interactor.get_stream(account);
- if (stream != null) stream.get_module(Xep.Muc.Module.IDENTITY).change_nick(stream, jid.bare_jid.to_string(), new_nick);
+ XmppStream? stream = stream_interactor.get_stream(account);
+ if (stream != null) stream.get_module(Xep.Muc.Module.IDENTITY).change_nick(stream, jid.bare_jid, new_nick);
}
public void invite(Account account, Jid muc, Jid invitee) {
- Core.XmppStream? stream = stream_interactor.get_stream(account);
- if (stream != null) stream.get_module(Xep.Muc.Module.IDENTITY).invite(stream, muc.bare_jid.to_string(), invitee.bare_jid.to_string());
+ XmppStream? stream = stream_interactor.get_stream(account);
+ if (stream != null) stream.get_module(Xep.Muc.Module.IDENTITY).invite(stream, muc.bare_jid, invitee.bare_jid);
}
public void kick(Account account, Jid jid, string nick) {
- Core.XmppStream? stream = stream_interactor.get_stream(account);
- if (stream != null) stream.get_module(Xep.Muc.Module.IDENTITY).kick(stream, jid.bare_jid.to_string(), nick);
+ XmppStream? stream = stream_interactor.get_stream(account);
+ if (stream != null) stream.get_module(Xep.Muc.Module.IDENTITY).kick(stream, jid.bare_jid, nick);
}
public void change_affiliation(Account account, Jid jid, string nick, string role) {
- Core.XmppStream? stream = stream_interactor.get_stream(account);
- if (stream != null) stream.get_module(Xep.Muc.Module.IDENTITY).change_affiliation(stream, jid.bare_jid.to_string(), nick, role);
+ XmppStream? stream = stream_interactor.get_stream(account);
+ if (stream != null) stream.get_module(Xep.Muc.Module.IDENTITY).change_affiliation(stream, jid.bare_jid, nick, role);
}
public bool kick_possible(Account account, Jid occupant) {
- Core.XmppStream? stream = stream_interactor.get_stream(account);
- if (stream != null) return stream.get_module(Xep.Muc.Module.IDENTITY).kick_possible(stream, occupant.to_string());
+ XmppStream? stream = stream_interactor.get_stream(account);
+ if (stream != null) return stream.get_module(Xep.Muc.Module.IDENTITY).kick_possible(stream, occupant);
return false;
}
- public ArrayList<Jid>? get_occupants(Jid jid, Account account) {
+ public Gee.List<Jid>? get_occupants(Jid jid, Account account) {
if (is_groupchat(jid, account)) {
return stream_interactor.get_module(PresenceManager.IDENTITY).get_full_jids(jid, account);
}
return null;
}
- public ArrayList<Jid>? get_other_occupants(Jid jid, Account account) {
- ArrayList<Jid>? occupants = get_occupants(jid, account);
+ public Gee.List<Jid>? get_other_occupants(Jid jid, Account account) {
+ Gee.List<Jid>? occupants = get_occupants(jid, account);
Jid? own_jid = get_own_jid(jid, account);
if (occupants != null && own_jid != null) {
occupants.remove(own_jid);
@@ -120,87 +120,79 @@ public class MucManager : StreamInteractionModule, Object {
}
public void get_bookmarks(Account account, owned Xep.Bookmarks.Module.OnResult listener) {
- Core.XmppStream? stream = stream_interactor.get_stream(account);
+ XmppStream? stream = stream_interactor.get_stream(account);
if (stream != null) stream.get_module(Xep.Bookmarks.Module.IDENTITY).get_conferences(stream, (owned)listener);
}
public void add_bookmark(Account account, Xep.Bookmarks.Conference conference) {
- Core.XmppStream? stream = stream_interactor.get_stream(account);
+ XmppStream? stream = stream_interactor.get_stream(account);
if (stream != null) {
stream.get_module(Xep.Bookmarks.Module.IDENTITY).add_conference(stream, conference);
}
}
public void replace_bookmark(Account account, Xep.Bookmarks.Conference was, Xep.Bookmarks.Conference replace) {
- Core.XmppStream? stream = stream_interactor.get_stream(account);
+ XmppStream? stream = stream_interactor.get_stream(account);
if (stream != null) {
stream.get_module(Xep.Bookmarks.Module.IDENTITY).replace_conference(stream, was, replace);
}
}
public void remove_bookmark(Account account, Xep.Bookmarks.Conference conference) {
- Core.XmppStream? stream = stream_interactor.get_stream(account);
+ XmppStream? stream = stream_interactor.get_stream(account);
if (stream != null) {
stream.get_module(Xep.Bookmarks.Module.IDENTITY).remove_conference(stream, conference);
}
}
public string? get_room_name(Account account, Jid jid) {
- Core.XmppStream? stream = stream_interactor.get_stream(account);
- return stream != null ? stream.get_flag(Xep.Muc.Flag.IDENTITY).get_room_name(jid.to_string()) : null;
+ XmppStream? stream = stream_interactor.get_stream(account);
+ return stream != null ? stream.get_flag(Xep.Muc.Flag.IDENTITY).get_room_name(jid) : null;
}
public string? get_groupchat_subject(Jid jid, Account account) {
- Core.XmppStream? stream = stream_interactor.get_stream(account);
+ XmppStream? stream = stream_interactor.get_stream(account);
if (stream != null) {
- return stream.get_flag(Xep.Muc.Flag.IDENTITY).get_muc_subject(jid.bare_jid.to_string());
+ return stream.get_flag(Xep.Muc.Flag.IDENTITY).get_muc_subject(jid.bare_jid);
}
return null;
}
public Jid? get_real_jid(Jid jid, Account account) {
- Core.XmppStream? stream = stream_interactor.get_stream(account);
+ XmppStream? stream = stream_interactor.get_stream(account);
if (stream != null) {
- string? real_jid = stream.get_flag(Xep.Muc.Flag.IDENTITY).get_real_jid(jid.to_string());
- if (real_jid != null) {
- return new Jid(real_jid);
- }
+ return stream.get_flag(Xep.Muc.Flag.IDENTITY).get_real_jid(jid);
}
return null;
}
public Xep.Muc.Role? get_role(Jid jid, Account account) {
- Core.XmppStream? stream = stream_interactor.get_stream(account);
- if (stream != null) return stream.get_flag(Xep.Muc.Flag.IDENTITY).get_occupant_role(jid.to_string());
+ XmppStream? stream = stream_interactor.get_stream(account);
+ if (stream != null) return stream.get_flag(Xep.Muc.Flag.IDENTITY).get_occupant_role(jid);
return null;
}
public Xep.Muc.Affiliation? get_affiliation(Jid muc_jid, Jid jid, Account account) {
- Core.XmppStream? stream = stream_interactor.get_stream(account);
- if (stream != null) return stream.get_flag(Xep.Muc.Flag.IDENTITY).get_affiliation(muc_jid.to_string(), jid.to_string());
+ XmppStream? stream = stream_interactor.get_stream(account);
+ if (stream != null) return stream.get_flag(Xep.Muc.Flag.IDENTITY).get_affiliation(muc_jid, jid);
return null;
}
public Gee.List<Jid>? get_offline_members(Jid jid, Account account) {
- Gee.List<Jid> ret = new ArrayList<Jid>(Jid.equals_func);
- Core.XmppStream? stream = stream_interactor.get_stream(account);
+ XmppStream? stream = stream_interactor.get_stream(account);
if (stream != null) {
- Gee.List<string>? members = stream.get_flag(Xep.Muc.Flag.IDENTITY).get_offline_members(jid.to_string());
- if (members == null) return null;
- foreach (string member in members) {
- ret.add(new Jid(member));
- }
+ return stream.get_flag(Xep.Muc.Flag.IDENTITY).get_offline_members(jid);
}
- return ret;
+ return null;
}
public Jid? get_own_jid(Jid muc_jid, Account account) {
- Core.XmppStream? stream = stream_interactor.get_stream(account);
+ XmppStream? stream = stream_interactor.get_stream(account);
if (stream != null) {
Xep.Muc.Flag? flag = stream.get_flag(Xep.Muc.Flag.IDENTITY);
if (flag == null) return null;
- string? nick = flag.get_muc_nick(muc_jid.bare_jid.to_string());
- if (nick != null) return new Jid.with_resource(muc_jid.bare_jid.to_string(), nick);
+ string? nick = flag.get_muc_nick(muc_jid);
+ if (nick != null) return muc_jid.with_resource(nick);
}
return null;
}
@@ -210,23 +202,21 @@ public class MucManager : StreamInteractionModule, Object {
}
private void on_account_added(Account account) {
- stream_interactor.module_manager.get_module(account, Xep.Muc.Module.IDENTITY).room_entered.connect( (stream, jid_string, nick) => {
- Jid jid = new Jid(jid_string);
+ stream_interactor.module_manager.get_module(account, Xep.Muc.Module.IDENTITY).room_entered.connect( (stream, jid, nick) => {
enter_errors.unset(jid);
set_autojoin(stream, jid, nick, null); // TODO password
joined(account, jid, nick);
stream_interactor.get_module(MessageProcessor.IDENTITY).send_unsent_messages(account, jid);
});
- stream_interactor.module_manager.get_module(account, Xep.Muc.Module.IDENTITY).room_enter_error.connect( (stream, jid_str, error) => {
- Jid jid = new Jid(jid_str);
+ stream_interactor.module_manager.get_module(account, Xep.Muc.Module.IDENTITY).room_enter_error.connect( (stream, jid, error) => {
enter_errors[jid] = error;
enter_error(account, jid, error);
});
stream_interactor.module_manager.get_module(account, Xep.Muc.Module.IDENTITY).self_removed_from_room.connect( (stream, jid, code) => {
- left(account, new Jid(jid));
+ left(account, jid);
});
stream_interactor.module_manager.get_module(account, Xep.Muc.Module.IDENTITY).subject_set.connect( (stream, subject, jid) => {
- subject_set(account, new Jid(jid), subject);
+ subject_set(account, jid, subject);
});
stream_interactor.module_manager.get_module(account, Xep.Bookmarks.Module.IDENTITY).received_conferences.connect( (stream, conferences) => {
sync_autojoin_active(account, conferences);
@@ -234,29 +224,28 @@ public class MucManager : StreamInteractionModule, Object {
});
}
- private void on_stream_negotiated(Account account, Core.XmppStream stream) {
+ private void on_stream_negotiated(Account account, XmppStream stream) {
stream.get_module(Xep.Bookmarks.Module.IDENTITY).get_conferences(stream, (stream, conferences) => {
foreach (Xep.Bookmarks.Conference bookmark in conferences) {
- Jid jid = new Jid(bookmark.jid);
if (bookmark.autojoin) {
- join(account, jid, bookmark.nick, bookmark.password);
+ join(account, bookmark.jid, bookmark.nick, bookmark.password);
}
}
});
}
- 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.MessageStanza message_stanza, Conversation conversation) {
if (conversation.type_ != Conversation.Type.GROUPCHAT) return;
- Core.XmppStream stream = stream_interactor.get_stream(conversation.account);
+ XmppStream stream = stream_interactor.get_stream(conversation.account);
if (stream == null) return;
if (Xep.DelayedDelivery.MessageFlag.get_flag(message.stanza) == null) {
- 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()) {
- message.real_jid = new Jid(real_jid).bare_jid;
+ Jid? real_jid = stream.get_flag(Xep.Muc.Flag.IDENTITY).get_real_jid(message.counterpart);
+ if (real_jid != null && !real_jid.equals(message.counterpart)) {
+ message.real_jid = real_jid.bare_jid;
}
}
- string? muc_nick = stream.get_flag(Xep.Muc.Flag.IDENTITY).get_muc_nick(conversation.counterpart.bare_jid.to_string());
- if (muc_nick != null && message.from.equals(new Jid(@"$(message.from.bare_jid)/$muc_nick"))) { // TODO better from own
+ string? muc_nick = stream.get_flag(Xep.Muc.Flag.IDENTITY).get_muc_nick(conversation.counterpart.bare_jid);
+ if (muc_nick != null && message.from.equals(message.from.with_resource(muc_nick))) { // TODO better from own
Gee.List<Entities.Message> messages = stream_interactor.get_module(MessageStorage.IDENTITY).get_messages(conversation);
foreach (Entities.Message m in messages) { // TODO not here
if (m.equals(message)) {
@@ -267,7 +256,7 @@ public class MucManager : StreamInteractionModule, Object {
}
private void sync_autojoin_active(Account account, Gee.List<Xep.Bookmarks.Conference> conferences) {
- Gee.List<Conversation> conversations = stream_interactor.get_module(ConversationManager.IDENTITY).get_active_conversations();
+ Gee.List<Conversation> conversations = stream_interactor.get_module(ConversationManager.IDENTITY).get_active_conversations(account);
leave_non_autojoin(account, conferences, conversations);
join_autojoin(account, conferences, conversations);
}
@@ -277,7 +266,7 @@ public class MucManager : StreamInteractionModule, Object {
if (conversation.type_ != Conversation.Type.GROUPCHAT || !conversation.account.equals(account)) continue;
bool is_autojoin = false;
foreach (Xep.Bookmarks.Conference conference in conferences) {
- if (conference.jid == conversation.counterpart.to_string()) {
+ if (conference.jid.equals(conversation.counterpart)) {
if (conference.autojoin) is_autojoin = true;
}
}
@@ -292,19 +281,20 @@ public class MucManager : StreamInteractionModule, Object {
if (!conference.autojoin) continue;
bool is_active = false;
foreach (Conversation conversation in conversations) {
- if (conference.jid == conversation.counterpart.to_string()) is_active = true;
+ if (conference.jid.equals(conversation.counterpart)) is_active = true;
}
if (!is_active) {
- join(account, new Jid(conference.jid), conference.nick, conference.password);
+ join(account, conference.jid, conference.nick, conference.password);
}
}
}
- private void set_autojoin(Core.XmppStream stream, Jid jid, string? nick, string? password) {
+ private void set_autojoin(XmppStream stream, Jid jid, string? nick, string? password) {
stream.get_module(Xep.Bookmarks.Module.IDENTITY).get_conferences(stream, (stream, conferences) => {
- Xep.Bookmarks.Conference changed = new Xep.Bookmarks.Conference(jid.to_string()) { nick=nick, password=password, autojoin=true };
+ if (conferences == null) return;
+ Xep.Bookmarks.Conference changed = new Xep.Bookmarks.Conference(jid) { nick=nick, password=password, autojoin=true };
foreach (Xep.Bookmarks.Conference conference in conferences) {
- if (conference.jid == jid.bare_jid.to_string() && conference.nick == nick && conference.password == password) {
+ if (conference.jid.equals_bare(jid) && conference.nick == nick && conference.password == password) {
if (!conference.autojoin) {
stream.get_module(Xep.Bookmarks.Module.IDENTITY).replace_conference(stream, conference, changed);
}
@@ -315,10 +305,11 @@ public class MucManager : StreamInteractionModule, Object {
});
}
- private void unset_autojoin(Core.XmppStream stream, Jid jid) {
+ private void unset_autojoin(XmppStream stream, Jid jid) {
stream.get_module(Xep.Bookmarks.Module.IDENTITY).get_conferences(stream, (stream, conferences) => {
+ if (conferences == null) return;
foreach (Xep.Bookmarks.Conference conference in conferences) {
- if (conference.jid == jid.bare_jid.to_string()) {
+ if (conference.jid.equals_bare(jid)) {
if (conference.autojoin) {
Xep.Bookmarks.Conference change = new Xep.Bookmarks.Conference(conference.jid) { nick=conference.nick, password=conference.password, autojoin=false };
stream.get_module(Xep.Bookmarks.Module.IDENTITY).replace_conference(stream, conference, change);
diff --git a/libdino/src/service/presence_manager.vala b/libdino/src/service/presence_manager.vala
index e3ece45f..0525100b 100644
--- a/libdino/src/service/presence_manager.vala
+++ b/libdino/src/service/presence_manager.vala
@@ -27,9 +27,9 @@ public class PresenceManager : StreamInteractionModule, Object {
}
public Show get_last_show(Jid jid, Account account) {
- Core.XmppStream? stream = stream_interactor.get_stream(account);
+ XmppStream? stream = stream_interactor.get_stream(account);
if (stream != null) {
- Xmpp.Presence.Stanza? presence = stream.get_flag(Presence.Flag.IDENTITY).get_presence(jid.to_string());
+ Xmpp.Presence.Stanza? presence = stream.get_flag(Presence.Flag.IDENTITY).get_presence(jid);
if (presence != null) {
return new Show(jid, presence.show, new DateTime.now_utc());
}
@@ -41,20 +41,12 @@ public class PresenceManager : StreamInteractionModule, Object {
return shows[jid];
}
- public ArrayList<Jid>? get_full_jids(Jid jid, Account account) {
- Core.XmppStream? stream = stream_interactor.get_stream(account);
+ public Gee.List<Jid>? get_full_jids(Jid jid, Account account) {
+ XmppStream? stream = stream_interactor.get_stream(account);
if (stream != null) {
Xmpp.Presence.Flag flag = stream.get_flag(Presence.Flag.IDENTITY);
if (flag == null) return null;
- Gee.List<string>? resources = flag.get_resources(jid.bare_jid.to_string());
- if (resources == null) {
- return null;
- }
- ArrayList<Jid> ret = new ArrayList<Jid>(Jid.equals_func);
- foreach (string resource in resources) {
- ret.add(new Jid(resource));
- }
- return ret;
+ return flag.get_resources(jid.bare_jid);
}
return null;
}
@@ -64,40 +56,39 @@ public class PresenceManager : StreamInteractionModule, Object {
}
public void request_subscription(Account account, Jid jid) {
- Core.XmppStream stream = stream_interactor.get_stream(account);
- if (stream != null) stream.get_module(Xmpp.Presence.Module.IDENTITY).request_subscription(stream, jid.bare_jid.to_string());
+ XmppStream stream = stream_interactor.get_stream(account);
+ if (stream != null) stream.get_module(Xmpp.Presence.Module.IDENTITY).request_subscription(stream, jid.bare_jid);
}
public void approve_subscription(Account account, Jid jid) {
- Core.XmppStream stream = stream_interactor.get_stream(account);
+ XmppStream stream = stream_interactor.get_stream(account);
if (stream != null) {
- stream.get_module(Xmpp.Presence.Module.IDENTITY).approve_subscription(stream, jid.bare_jid.to_string());
+ stream.get_module(Xmpp.Presence.Module.IDENTITY).approve_subscription(stream, jid.bare_jid);
subscription_requests.remove(jid);
}
}
public void deny_subscription(Account account, Jid jid) {
- Core.XmppStream stream = stream_interactor.get_stream(account);
+ XmppStream stream = stream_interactor.get_stream(account);
if (stream != null) {
- stream.get_module(Xmpp.Presence.Module.IDENTITY).deny_subscription(stream, jid.bare_jid.to_string());
+ stream.get_module(Xmpp.Presence.Module.IDENTITY).deny_subscription(stream, jid.bare_jid);
subscription_requests.remove(jid);
}
}
public void cancel_subscription(Account account, Jid jid) {
- Core.XmppStream stream = stream_interactor.get_stream(account);
- if (stream != null) stream.get_module(Xmpp.Presence.Module.IDENTITY).cancel_subscription(stream, jid.bare_jid.to_string());
+ XmppStream stream = stream_interactor.get_stream(account);
+ if (stream != null) stream.get_module(Xmpp.Presence.Module.IDENTITY).cancel_subscription(stream, jid.bare_jid);
}
private void on_account_added(Account account) {
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, jid, show)
);
stream_interactor.module_manager.get_module(account, Presence.Module.IDENTITY).received_unavailable.connect((stream, presence) =>
- on_received_unavailable(account, new Jid(presence.from))
+ on_received_unavailable(account, presence.from)
);
- stream_interactor.module_manager.get_module(account, Presence.Module.IDENTITY).received_subscription_request.connect((stream, jid_str) => {
- Jid jid = new Jid(jid_str);
+ stream_interactor.module_manager.get_module(account, Presence.Module.IDENTITY).received_subscription_request.connect((stream, jid) => {
if (!subscription_requests.contains(jid)) {
subscription_requests.add(jid);
}
diff --git a/libdino/src/service/roster_manager.vala b/libdino/src/service/roster_manager.vala
index 51a64625..3c96778d 100644
--- a/libdino/src/service/roster_manager.vala
+++ b/libdino/src/service/roster_manager.vala
@@ -40,18 +40,18 @@ public class RosterManager : StreamInteractionModule, Object {
}
public void remove_jid(Account account, Jid jid) {
- Core.XmppStream? stream = stream_interactor.get_stream(account);
- if (stream != null) stream.get_module(Xmpp.Roster.Module.IDENTITY).remove_jid(stream, jid.bare_jid.to_string());
+ XmppStream? stream = stream_interactor.get_stream(account);
+ if (stream != null) stream.get_module(Xmpp.Roster.Module.IDENTITY).remove_jid(stream, jid.bare_jid);
}
public void add_jid(Account account, Jid jid, string? handle) {
- Core.XmppStream? stream = stream_interactor.get_stream(account);
- if (stream != null) stream.get_module(Xmpp.Roster.Module.IDENTITY).add_jid(stream, jid.bare_jid.to_string(), handle);
+ XmppStream? stream = stream_interactor.get_stream(account);
+ if (stream != null) stream.get_module(Xmpp.Roster.Module.IDENTITY).add_jid(stream, jid.bare_jid, handle);
}
public void set_jid_handle(Account account, Jid jid, string? handle) {
- Core.XmppStream? stream = stream_interactor.get_stream(account);
- if (stream != null) stream.get_module(Xmpp.Roster.Module.IDENTITY).set_jid_handle(stream, jid.bare_jid.to_string(), handle);
+ XmppStream? stream = stream_interactor.get_stream(account);
+ if (stream != null) stream.get_module(Xmpp.Roster.Module.IDENTITY).set_jid_handle(stream, jid.bare_jid, handle);
}
private void on_account_added(Account account) {
@@ -61,7 +61,7 @@ public class RosterManager : StreamInteractionModule, Object {
}
});
stream_interactor.module_manager.get_module(account, Roster.Module.IDENTITY).item_removed.connect( (stream, roster_item) => {
- removed_roster_item(account, new Jid(roster_item.jid), roster_item);
+ removed_roster_item(account, roster_item.jid, roster_item);
});
stream_interactor.module_manager.get_module(account, Roster.Module.IDENTITY).item_updated.connect( (stream, roster_item) => {
on_roster_item_updated(account, roster_item);
@@ -69,7 +69,7 @@ public class RosterManager : StreamInteractionModule, Object {
}
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, roster_item.jid, roster_item);
}
}
@@ -77,7 +77,7 @@ public class RosterStoreImpl : Roster.Storage, Object {
private Account account;
private Database db;
- private HashMap<string, Roster.Item> items = new HashMap<string, Roster.Item>();
+ private HashMap<Jid, Roster.Item> items = new HashMap<Jid, Roster.Item>(Jid.hash_bare_func, Jid.equals_bare_func);
public class RosterStoreImpl(Account account, Database db) {
this.account = account;
@@ -85,7 +85,7 @@ public class RosterStoreImpl : Roster.Storage, Object {
foreach (Qlite.Row row in db.roster.select().with(db.roster.account_id, "=", account.id)) {
Roster.Item item = new Roster.Item();
- item.jid = row[db.roster.jid];
+ item.jid = Jid.parse(row[db.roster.jid]);
item.name = row[db.roster.handle];
item.subscription = row[db.roster.subscription];
items[item.jid] = item;
@@ -101,7 +101,7 @@ public class RosterStoreImpl : Roster.Storage, Object {
}
public Roster.Item? get_item(Jid jid) {
- return items.has_key(jid.bare_jid.to_string()) ? items[jid.bare_jid.to_string()] : null;
+ return items.has_key(jid) ? items[jid] : null;
}
public void set_roster_version(string version) {
@@ -119,7 +119,7 @@ public class RosterStoreImpl : Roster.Storage, Object {
items[item.jid] = item;
db.roster.insert().or("REPLACE")
.value(db.roster.account_id, account.id)
- .value(db.roster.jid, item.jid)
+ .value(db.roster.jid, item.jid.to_string())
.value(db.roster.handle, item.name)
.value(db.roster.subscription, item.subscription)
.perform();
@@ -129,7 +129,7 @@ public class RosterStoreImpl : Roster.Storage, Object {
items.unset(item.jid);
db.roster.delete()
.with(db.roster.account_id, "=", account.id)
- .with(db.roster.jid, "=", item.jid).perform();
+ .with(db.roster.jid, "=", item.jid.to_string()).perform();
}
}
diff --git a/libdino/src/service/stream_interactor.vala b/libdino/src/service/stream_interactor.vala
index f97eb482..d9f3f0ec 100644
--- a/libdino/src/service/stream_interactor.vala
+++ b/libdino/src/service/stream_interactor.vala
@@ -9,8 +9,8 @@ public class StreamInteractor {
public signal void account_added(Account account);
public signal void account_removed(Account account);
- public signal void stream_negotiated(Account account, Core.XmppStream stream);
- public signal void attached_modules(Account account, Core.XmppStream stream);
+ public signal void stream_negotiated(Account account, XmppStream stream);
+ public signal void attached_modules(Account account, XmppStream stream);
public ModuleManager module_manager;
public ConnectionManager connection_manager;
@@ -42,7 +42,7 @@ public class StreamInteractor {
return ret;
}
- public Core.XmppStream? get_stream(Account account) {
+ public XmppStream? get_stream(Account account) {
return connection_manager.get_stream(account);
}
@@ -58,7 +58,7 @@ public class StreamInteractor {
return null;
}
- private void on_stream_opened(Account account, Core.XmppStream stream) {
+ private void on_stream_opened(Account account, XmppStream stream) {
stream.stream_negotiated.connect( (stream) => {
stream_negotiated(account, stream);
});