From a2b6a440794090442f64eab56ff7aa0ff9a065d6 Mon Sep 17 00:00:00 2001
From: Yann Leboulanger <asterix@lagaule.org>
Date: Sun, 24 Apr 2005 22:58:41 +0000
Subject: [PATCH] ask and show os info from each resource

---
 src/common/connection.py |  3 ++-
 src/gajim.py             |  2 +-
 src/vcard.py             | 32 +++++++++++++++++++++++++++-----
 3 files changed, 30 insertions(+), 7 deletions(-)

diff --git a/src/common/connection.py b/src/common/connection.py
index 8bd0b8b1e0..6a848087d2 100644
--- a/src/common/connection.py
+++ b/src/common/connection.py
@@ -400,7 +400,8 @@ class Connection:
 		if qp.getTag('os'):
 			os_info += qp.getTag('os').getData()
 		jid = iq_obj.getFrom().getStripped()
-		self.dispatch('OS_INFO', (jid, client_info, os_info))
+		resource = iq_obj.getFrom().getResource()
+		self.dispatch('OS_INFO', (jid, resource, client_info, os_info))
 	
 	def _MucOwnerCB(self, con, iq_obj):
 		gajim.log.debug('MucOwnerCB')
diff --git a/src/gajim.py b/src/gajim.py
index fe8bdf38e0..3c5f9c29b7 100755
--- a/src/gajim.py
+++ b/src/gajim.py
@@ -407,7 +407,7 @@ class Interface:
 	def handle_event_os_info(self, account, array):
 		if self.windows[account]['infos'].has_key(array[0]):
 			self.windows[account]['infos'][array[0]].set_os_info(array[1], \
-				array[2])
+				array[2], array[3])
 
 	def handle_event_gc_msg(self, account, array):
 		#('GC_MSG', account, (jid, msg, time))
diff --git a/src/vcard.py b/src/vcard.py
index a4cfaf25de..0ba5028301 100644
--- a/src/vcard.py
+++ b/src/vcard.py
@@ -87,9 +87,23 @@ class Vcard_window:
 				else:
 					self.set_value(i + '_entry', vcard[i])
 	
-	def set_os_info(self, client_info, os_info):
-		self.xml.get_widget('client_name_version_label').set_text(client_info)
-		self.xml.get_widget('platform_label').set_text(os_info)
+	def set_os_info(self, resource, client_info, os_info):
+		i = 0
+		client = ''
+		platform = ''
+		while self.os_info.has_key(i):
+			if self.os_info[i]['resource'] == resource:
+				self.os_info[i]['client'] = client_info
+				self.os_info[i]['platform'] = os_info
+			if i > 0:
+				client += '\n'
+				platform += '\n'
+			client += self.os_info[i]['client']
+			platform += self.os_info[i]['platform']
+			i += 1
+			
+		self.xml.get_widget('client_name_version_label').set_text(client)
+		self.xml.get_widget('platform_label').set_text(platform)
 
 	def fill_jabber_page(self):
 		self.xml.get_widget('nickname_label').set_text(self.user.name)
@@ -110,17 +124,25 @@ class Vcard_window:
 		if not self.user.status:
 			self.user.status = ''
 		stats = self.user.show + ': ' + self.user.status
+		gajim.connections[self.account].request_os_info(self.user.jid, \
+			self.user.resource)
+		self.os_info = {0: {'resource': self.user.resource, 'client': '',
+			'platform': ''}}
+		i = 1
 		for u in self.plugin.roster.contacts[self.account][self.user.jid]:
 			if u.resource != self.user.resource:
 				resources += '\n' + u.resource + ' (' + str(u.priority) + ')'
 				if not u.status:
 					u.status = ''
 				stats += '\n' + u.show + ': ' + u.status
+				gajim.connections[self.account].request_os_info(self.user.jid, \
+					u.resource)
+				self.os_info[i] = {'resource': u.resource, 'client': '',
+					'platform': ''}
+				i += 1
 		self.xml.get_widget('resource_label').set_text(resources)
 		self.xml.get_widget('status_label').set_text(stats)
 		gajim.connections[self.account].request_vcard(self.user.jid)
-		gajim.connections[self.account].request_os_info(self.user.jid, \
-			self.user.resource)
 
 	def add_to_vcard(self, vcard, entry, txt):
 		'''Add an information to the vCard dictionary'''
-- 
GitLab