diff options
Diffstat (limited to 'libdino/src')
| -rw-r--r-- | libdino/src/entity/account.vala | 5 | ||||
| -rw-r--r-- | libdino/src/service/calls.vala | 21 | ||||
| -rw-r--r-- | libdino/src/service/connection_manager.vala | 2 | ||||
| -rw-r--r-- | libdino/src/service/file_manager.vala | 9 | ||||
| -rw-r--r-- | libdino/src/service/message_correction.vala | 2 | ||||
| -rw-r--r-- | libdino/src/service/message_processor.vala | 2 | ||||
| -rw-r--r-- | libdino/src/service/registration.vala | 2 | ||||
| -rw-r--r-- | libdino/src/service/stream_interactor.vala | 11 |
8 files changed, 36 insertions, 18 deletions
diff --git a/libdino/src/entity/account.vala b/libdino/src/entity/account.vala index a108af22..f5c99307 100644 --- a/libdino/src/entity/account.vala +++ b/libdino/src/entity/account.vala @@ -6,13 +6,14 @@ namespace Dino.Entities { public class Account : Object { public int id { get; set; } - public string localpart { get { return full_jid.localpart; } } - public string domainpart { get { return full_jid.domainpart; } } + public string localpart { get { return bare_jid.localpart; } } + public string domainpart { get { return bare_jid.domainpart; } } public string resourcepart { get { return full_jid.resourcepart; } private set { full_jid = full_jid.with_resource(value); } } public Jid bare_jid { owned get { return full_jid.bare_jid; } } + [Version (deprecated = true)] public Jid full_jid { get; private set; } public string? password { get; set; } public string display_name { diff --git a/libdino/src/service/calls.vala b/libdino/src/service/calls.vala index e0e37ffd..ab138612 100644 --- a/libdino/src/service/calls.vala +++ b/libdino/src/service/calls.vala @@ -40,7 +40,12 @@ namespace Dino { call.direction = Call.DIRECTION_OUTGOING; call.account = conversation.account; call.counterpart = conversation.counterpart; - call.ourpart = stream_interactor.get_module(MucManager.IDENTITY).get_own_jid(conversation.counterpart, conversation.account) ?? conversation.account.full_jid; + if (conversation.type_.is_muc_semantic()) { + call.ourpart = stream_interactor.get_module(MucManager.IDENTITY).get_own_jid(conversation.counterpart, conversation.account); + } + if (call.ourpart == null) { + call.ourpart = stream_interactor.get_account_full_jid(conversation.account); + } call.time = call.local_time = call.end_time = new DateTime.now_utc(); call.encryption = Encryption.UNKNOWN; call.state = Call.State.RINGING; @@ -190,7 +195,7 @@ namespace Dino { // This is a direct call without prior JMI. Ask user. if (stream_interactor.get_module(MucManager.IDENTITY).might_be_groupchat(session.peer_full_jid.bare_jid, account)) return; - peer_state = create_received_call(account, session.peer_full_jid, account.full_jid, counterpart_wants_video); + peer_state = create_received_call(account, session.peer_full_jid, session.local_full_jid, counterpart_wants_video); peer_state.set_session(session); Conversation conversation = stream_interactor.get_module(ConversationManager.IDENTITY).get_conversation(peer_state.call.counterpart.bare_jid, account, Conversation.Type.CHAT); call_incoming(peer_state.call, peer_state.call_state, conversation, counterpart_wants_video, false); @@ -208,7 +213,7 @@ namespace Dino { call.counterpart = to; } else { call.direction = Call.DIRECTION_INCOMING; - call.ourpart = account.full_jid; + call.ourpart = to; call.state = Call.State.RINGING; call.counterpart = from; } @@ -280,7 +285,7 @@ namespace Dino { Call call = new Call(); call.direction = Call.DIRECTION_INCOMING; - call.ourpart = account.full_jid; + call.ourpart = stream_interactor.get_account_full_jid(account); call.counterpart = inviter_jid; call.account = account; call.time = call.local_time = call.end_time = new DateTime.now_utc(); @@ -361,7 +366,7 @@ namespace Dino { // Carboned message from our account if (from.equals_bare(account.bare_jid)) { // Ignore carbon from ourselves - if (from.equals(account.full_jid)) return; + if (from.equals(stream_interactor.get_account_full_jid(account))) return; call.ourpart = from; call.state = Call.State.OTHER_DEVICE; @@ -371,7 +376,7 @@ namespace Dino { // We proposed the call. This is a message from our peer. if (call.direction == Call.DIRECTION_OUTGOING && - from.equals_bare(peer_state.jid) && to.equals(account.full_jid)) { + from.equals_bare(peer_state.jid) && to.equals(stream_interactor.get_account_full_jid(account))) { // We know the full jid of our peer now call_states[call].rename_peer(jmi_request_peer[call].jid, from); jmi_request_peer[call].call_resource.begin(from); @@ -478,7 +483,7 @@ namespace Dino { Call call = call_state.call; // Ignore carbon from ourselves - if (from_jid.equals(account.full_jid)) return; + if (from_jid.equals(stream_interactor.get_account_full_jid(account))) return; // We accepted the call from another device call.ourpart = from_jid; @@ -493,7 +498,7 @@ namespace Dino { // We proposed the call. This is a message from our peer. if (call.direction == Call.DIRECTION_OUTGOING && - to_jid.equals(account.full_jid)) { + to_jid.equals(stream_interactor.get_account_full_jid(account))) { // We know the full jid of our peer now call_state.rename_peer(jmi_request_peer[call].jid, from_jid); jmi_request_peer[call].call_resource.begin(from_jid); diff --git a/libdino/src/service/connection_manager.vala b/libdino/src/service/connection_manager.vala index 5e92dec9..2ebddd92 100644 --- a/libdino/src/service/connection_manager.vala +++ b/libdino/src/service/connection_manager.vala @@ -225,7 +225,7 @@ public class ConnectionManager : Object { XmppStream stream = stream_result.stream; - debug("[%s] New connection: %p", account.full_jid.to_string(), stream); + debug("[%s] New connection: %p", account.bare_jid.to_string(), stream); connections[account].established = new DateTime.now_utc(); stream.attached_modules.connect((stream) => { diff --git a/libdino/src/service/file_manager.vala b/libdino/src/service/file_manager.vala index 5e59aee1..964278a5 100644 --- a/libdino/src/service/file_manager.vala +++ b/libdino/src/service/file_manager.vala @@ -76,9 +76,10 @@ public class FileManager : StreamInteractionModule, Object { file_transfer.account = conversation.account; file_transfer.counterpart = conversation.counterpart; if (conversation.type_.is_muc_semantic()) { - file_transfer.ourpart = stream_interactor.get_module(MucManager.IDENTITY).get_own_jid(conversation.counterpart, conversation.account) ?? conversation.account.bare_jid; - } else { - file_transfer.ourpart = conversation.account.full_jid; + file_transfer.ourpart = stream_interactor.get_module(MucManager.IDENTITY).get_own_jid(conversation.counterpart, conversation.account); + } + if (file_transfer.ourpart == null) { + file_transfer.ourpart = stream_interactor.get_account_full_jid(conversation.account); } file_transfer.direction = FileTransfer.DIRECTION_SENT; file_transfer.time = new DateTime.now_utc(); @@ -362,7 +363,7 @@ public class FileManager : StreamInteractionModule, Object { file_transfer.ourpart = from; file_transfer.direction = FileTransfer.DIRECTION_SENT; } else { - file_transfer.ourpart = conversation.account.full_jid; + file_transfer.ourpart = stream_interactor.get_account_full_jid(conversation.account); file_transfer.direction = FileTransfer.DIRECTION_RECEIVED; } } diff --git a/libdino/src/service/message_correction.vala b/libdino/src/service/message_correction.vala index d1f1dc3d..164106e0 100644 --- a/libdino/src/service/message_correction.vala +++ b/libdino/src/service/message_correction.vala @@ -64,7 +64,7 @@ public class MessageCorrection : StreamInteractionModule, MessageListener { Jid? own_jid = null; if (conversation.type_ == Conversation.Type.CHAT) { - own_jid = conversation.account.full_jid; + own_jid = stream_interactor.get_account_full_jid(conversation.account); } else if (conversation.type_ == Conversation.Type.GROUPCHAT) { own_jid = stream_interactor.get_module(MucManager.IDENTITY).get_own_jid(conversation.counterpart, conversation.account); } diff --git a/libdino/src/service/message_processor.vala b/libdino/src/service/message_processor.vala index 7201085e..b9c23240 100644 --- a/libdino/src/service/message_processor.vala +++ b/libdino/src/service/message_processor.vala @@ -418,7 +418,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 = conversation.account.full_jid; + message.ourpart = stream_interactor.get_account_full_jid(conversation.account); } message.marked = Entities.Message.Marked.UNSENT; message.encryption = conversation.encryption; diff --git a/libdino/src/service/registration.vala b/libdino/src/service/registration.vala index 0c17fa2e..c0399330 100644 --- a/libdino/src/service/registration.vala +++ b/libdino/src/service/registration.vala @@ -74,7 +74,7 @@ public class Register : StreamInteractionModule, Object{ public async string? change_password(Account account, string new_pw){ XmppStream stream = stream_interactor.get_stream(account); if (stream == null) return null; - return (yield stream.get_module(Xep.InBandRegistration.Module.IDENTITY).change_password(stream, account.full_jid, new_pw)).condition; + return (yield stream.get_module(Xep.InBandRegistration.Module.IDENTITY).change_password(stream, account.bare_jid, new_pw)).condition; } public class ServerAvailabilityReturn { diff --git a/libdino/src/service/stream_interactor.vala b/libdino/src/service/stream_interactor.vala index 5d248327..2ac13103 100644 --- a/libdino/src/service/stream_interactor.vala +++ b/libdino/src/service/stream_interactor.vala @@ -27,6 +27,17 @@ public class StreamInteractor : Object { }); } + public Jid get_account_full_jid(Account account) { + XmppStream stream = get_stream(account); + if (stream != null) { + Bind.Flag flag = stream.get_flag(Bind.Flag.IDENTITY); + if (flag != null) { + return flag.my_jid; + } + } + return account.full_jid; + } + public void connect_account(Account account) { module_manager.initialize(account); account_added(account); |
