diff --git a/gajim/chat_control.py b/gajim/chat_control.py
index 7f5e81c5a..c9cfabff5 100644
--- a/gajim/chat_control.py
+++ b/gajim/chat_control.py
@@ -235,6 +235,8 @@ class ChatControl(ChatControlBase):
self._on_tune_received)
app.ged.register_event_handler('location-received', ged.GUI1,
self._on_location_received)
+ app.ged.register_event_handler('update-client-info', ged.GUI1,
+ self._on_update_client_info)
if self.TYPE_ID == message_control.TYPE_CHAT:
# Dont connect this when PrivateChatControl is used
app.ged.register_event_handler('update-roster-avatar', ged.GUI1,
@@ -476,6 +478,14 @@ class ChatControl(ChatControlBase):
self.parent_win.redraw_tab(self)
self.parent_win.show_title()
+ @ensure_proper_control
+ def _on_update_client_info(self, event):
+ contact = app.contacts.get_contact(
+ self.account, event.jid, event.resource)
+ if contact is None:
+ return
+ self.xml.get_object('phone_image').set_visible(contact.uses_phone)
+
def _update_jingle(self, jingle_type):
if jingle_type not in ('audio', 'video'):
return
@@ -1093,6 +1103,8 @@ class ChatControl(ChatControlBase):
self._on_tune_received)
app.ged.remove_event_handler('location-received', ged.GUI1,
self._on_location_received)
+ app.ged.remove_event_handler('update-client-info', ged.GUI1,
+ self._on_update_client_info)
if self.TYPE_ID == message_control.TYPE_CHAT:
app.ged.remove_event_handler('update-roster-avatar', ged.GUI1,
self._nec_update_avatar)
diff --git a/gajim/common/caps_cache.py b/gajim/common/caps_cache.py
index db2d9b4ba..1b027c7ed 100644
--- a/gajim/common/caps_cache.py
+++ b/gajim/common/caps_cache.py
@@ -78,6 +78,14 @@ def client_supports(client_caps, requested_feature):
return requested_feature not in FEATURE_BLACKLIST
return False
+def get_client_identity(client_caps):
+ lookup_item = client_caps.get_cache_lookup_strategy()
+ cache_item = lookup_item(capscache)
+
+ for identity in cache_item.identities:
+ if identity.get('category') == 'client':
+ return identity.get('type')
+
def create_suitable_client_caps(node, caps_hash, hash_method, fjid=None):
"""
Create and return a suitable ClientCaps object for the given node,
diff --git a/gajim/common/contacts.py b/gajim/common/contacts.py
index b8f711151..45420850c 100644
--- a/gajim/common/contacts.py
+++ b/gajim/common/contacts.py
@@ -127,6 +127,10 @@ class CommonContact(XMPPEntity):
return False
return caps_cache.client_supports(self.client_caps, requested_feature)
+ @property
+ def uses_phone(self):
+ return caps_cache.get_client_identity(self.client_caps) == 'phone'
+
class Contact(CommonContact):
"""
diff --git a/gajim/common/modules/message.py b/gajim/common/modules/message.py
index 9dac01525..b5e9c8c6f 100644
--- a/gajim/common/modules/message.py
+++ b/gajim/common/modules/message.py
@@ -172,6 +172,11 @@ class Message:
'gc_control': gc_control
}
+ app.nec.push_incoming_event(NetworkEvent('update-client-info',
+ account=self._account,
+ jid=jid,
+ resource=resource))
+
event = MessageReceivedEvent(None, **event_attr)
app.nec.push_incoming_event(event)
diff --git a/gajim/data/gui/chat_control.ui b/gajim/data/gui/chat_control.ui
index 65bedc2cd..47a2971ca 100644
--- a/gajim/data/gui/chat_control.ui
+++ b/gajim/data/gui/chat_control.ui
@@ -407,12 +407,13 @@
-
+
+
+ False
+ True
+ The last message was written on a mobile client
+ start
+ 4
+ phone-apple-iphone-symbolic
+
+
+ 0
+ 1
- True
+ False
True
1