[Sugar-devel] PATCH #1106 Browse: No preview in Journal for downloaded image

Gonzalo Odiard godiard at gmail.com
Fri Aug 6 01:16:18 EDT 2010


This patch resolves the problem in browser.
I don't know if may be a good idea do the preview in the datastore instead.

Gonzalo

[gonzalo at aronax Browse.activity]$ diff -u downloadmanager.py.ori
downloadmanager.py
--- downloadmanager.py.ori    2010-07-05 20:27:06.000000000 -0300
+++ downloadmanager.py    2010-08-06 02:17:23.095272320 -0300
@@ -36,8 +36,10 @@
 from sugar import mime
 from sugar.graphics.alert import Alert, TimeoutAlert
 from sugar.graphics.icon import Icon
+from sugar.graphics import style
 from sugar.activity import activity

+
 # #3903 - this constant can be removed and assumed to be 1 when dbus-python
 # 0.82.3 is the only version used
 import dbus
@@ -192,12 +194,47 @@
                 sniffed_mime_type =
mime.get_for_file(self._target_file.path)
                 self.dl_jobject.metadata['mime_type'] = sniffed_mime_type

+            if self._mime_type in
('image/bmp','image/gif','image/jpeg','image/png','image/tiff'):
+
+                self.dl_jobject.metadata['preview'] =
self.__get_preview_image()
+            else:
+                self.dl_jobject.metadata['preview'] = ''
+
             datastore.write(self.dl_jobject,
                             transfer_ownership=True,
                             reply_handler=self._internal_save_cb,
                             error_handler=self._internal_save_error_cb,
                             timeout=360 *
DBUS_PYTHON_TIMEOUT_UNITS_PER_SECOND)

+    def __get_preview_image(self):
+        pixbuf = gtk.gdk.pixbuf_new_from_file(self._target_file.path)
+        width, height = pixbuf.get_width(), pixbuf.get_height()
+
+        preview_width = style.zoom(300)
+        preview_height =  style.zoom(225)
+
+        if (width > preview_width) or (height > preview_height):
+            scale_x = float(width) / preview_width
+            scale_y = float(height) / preview_height
+            scale = max(scale_x,scale_y)
+
+            pixbuf = pixbuf.scale_simple(float(width) / scale, height /
scale,
+                                     gtk.gdk.INTERP_BILINEAR)
+        pixbuf2 =
gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB,pixbuf.get_has_alpha(),8,preview_width,preview_height)
+        pixbuf2.fill(0xffffffff)
+        margin_x = (preview_width - pixbuf.get_width()) / 2
+        margin_y = (preview_height - pixbuf.get_height()) / 2
+
+
pixbuf.copy_area(0,0,pixbuf.get_width(),pixbuf.get_height(),pixbuf2,margin_x,margin_y)
+
+        preview_data = []
+        def save_func(buf, data):
+            data.append(buf)
+
+        pixbuf2.save_to_callback(save_func, 'png', user_data=preview_data)
+        preview_data = ''.join(preview_data)
+        return dbus.ByteArray(preview_data)
+
     def __start_response_cb(self, alert, response_id):
         global _active_downloads
         if response_id is gtk.RESPONSE_CANCEL:
@@ -273,10 +310,10 @@
         self.dl_jobject.metadata['progress'] = '0'
         self.dl_jobject.metadata['keep'] = '0'
         self.dl_jobject.metadata['buddies'] = ''
-        self.dl_jobject.metadata['preview'] = ''
         self.dl_jobject.metadata['icon-color'] = \
                 profile.get_color().to_string()
         self.dl_jobject.metadata['mime_type'] = self._mime_type
+        self.dl_jobject.metadata['preview'] = ''
         self.dl_jobject.file_path = ''
         datastore.write(self.dl_jobject)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.sugarlabs.org/archive/sugar-devel/attachments/20100806/90dcb69b/attachment-0001.htm 


More information about the Sugar-devel mailing list