From 051adcab4d8b7f9c3b738e29687041fdcd73f566 Mon Sep 17 00:00:00 2001
From: Yann Leboulanger <asterix@lagaule.org>
Date: Mon, 6 Jun 2005 20:16:51 +0000
Subject: [PATCH] we can now receive photos in vcard (sending it come soon)

---
 src/gtkgui.glade | 100 ++++++++++++++++++++++++++++++++++++-----------
 src/vcard.py     |  25 ++++++++++++
 2 files changed, 103 insertions(+), 22 deletions(-)

diff --git a/src/gtkgui.glade b/src/gtkgui.glade
index a0438f3276..42d8f387cb 100644
--- a/src/gtkgui.glade
+++ b/src/gtkgui.glade
@@ -4775,7 +4775,7 @@
 				  <property name="has_frame">True</property>
 				  <property name="invisible_char">*</property>
 				  <property name="activates_default">False</property>
-                  <signal name="changed" handler="on_sounds_entry_changed" last_modification_time="Tue, 06 Jun 2005 19:59:41 GMT"/>
+				  <signal name="changed" handler="on_sounds_entry_changed" last_modification_time="Mon, 06 Jun 2005 19:59:41 GMT"/>
 				</widget>
 				<packing>
 				  <property name="padding">0</property>
@@ -8012,33 +8012,89 @@ Custom</property>
 	  </child>
 
 	  <child>
-	    <widget class="GtkScrolledWindow" id="scrolledwindow33">
+	    <widget class="GtkVBox" id="vbox85">
 	      <property name="visible">True</property>
-	      <property name="can_focus">True</property>
-	      <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
-	      <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
-	      <property name="shadow_type">GTK_SHADOW_NONE</property>
-	      <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
+	      <property name="homogeneous">False</property>
+	      <property name="spacing">0</property>
 
 	      <child>
-		<widget class="GtkTextView" id="DESC_textview">
-		  <property name="border_width">6</property>
+		<widget class="GtkScrolledWindow" id="scrolledwindow33">
 		  <property name="visible">True</property>
 		  <property name="can_focus">True</property>
-		  <property name="editable">False</property>
-		  <property name="overwrite">False</property>
-		  <property name="accepts_tab">True</property>
-		  <property name="justification">GTK_JUSTIFY_LEFT</property>
-		  <property name="wrap_mode">GTK_WRAP_WORD</property>
-		  <property name="cursor_visible">False</property>
-		  <property name="pixels_above_lines">0</property>
-		  <property name="pixels_below_lines">0</property>
-		  <property name="pixels_inside_wrap">0</property>
-		  <property name="left_margin">0</property>
-		  <property name="right_margin">0</property>
-		  <property name="indent">0</property>
-		  <property name="text" translatable="yes"></property>
+		  <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+		  <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+		  <property name="shadow_type">GTK_SHADOW_NONE</property>
+		  <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
+
+		  <child>
+		    <widget class="GtkTextView" id="DESC_textview">
+		      <property name="border_width">6</property>
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="editable">False</property>
+		      <property name="overwrite">False</property>
+		      <property name="accepts_tab">True</property>
+		      <property name="justification">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap_mode">GTK_WRAP_WORD</property>
+		      <property name="cursor_visible">False</property>
+		      <property name="pixels_above_lines">0</property>
+		      <property name="pixels_below_lines">0</property>
+		      <property name="pixels_inside_wrap">0</property>
+		      <property name="left_margin">0</property>
+		      <property name="right_margin">0</property>
+		      <property name="indent">0</property>
+		      <property name="text" translatable="yes"></property>
+		    </widget>
+		  </child>
 		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">True</property>
+		  <property name="fill">True</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkExpander" id="expander6">
+		  <property name="visible">True</property>
+		  <property name="can_focus">True</property>
+		  <property name="expanded">True</property>
+		  <property name="spacing">0</property>
+
+		  <child>
+		    <widget class="GtkImage" id="PHOTO_image">
+		      <property name="visible">True</property>
+		      <property name="xalign">0.5</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		    </widget>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label310">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Photo</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0.5</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		    </widget>
+		    <packing>
+		      <property name="type">label_item</property>
+		    </packing>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">True</property>
+		  <property name="fill">True</property>
+		</packing>
 	      </child>
 	    </widget>
 	    <packing>
diff --git a/src/vcard.py b/src/vcard.py
index b087cac5be..a5d7a52a1f 100644
--- a/src/vcard.py
+++ b/src/vcard.py
@@ -19,6 +19,8 @@
 
 import gtk
 import gtk.glade
+import urllib
+import base64
 from common import gajim
 from common import i18n
 _ = i18n._
@@ -76,6 +78,29 @@ class Vcard_window:
 	def set_values(self, vcard):
 		for i in vcard.keys():
 			if type(vcard[i]) == type({}):
+				if i == 'PHOTO':
+					img_decoded = None
+					if vcard[i].has_key('BINVAL'):
+						try:
+							img_encoded = vcard[i]['BINVAL']
+							img_decoded = base64.decodestring(img_encoded)
+						except:
+							pass
+					elif vcard[i].has_key('EXTVAL'):
+						url = vcard[i]['EXTVAL']
+						try:
+							fd = urllib.urlopen(url)
+							img_decoded = fd.read()
+						except:
+							pass
+					if img_decoded:
+						pixbufloader = gtk.gdk.PixbufLoader()
+						pixbufloader.write(img_decoded)
+						pixbufloader.close()
+						pixbuf = pixbufloader.get_pixbuf()
+						image = self.xml.get_widget('PHOTO_image')
+						image.set_from_pixbuf(pixbuf)
+					continue
 				add_on = ''
 				if i == 'ADR' or i == 'TEL' or i == 'EMAIL':
 					add_on = '_HOME'
-- 
GitLab