[Sugar-devel] [PATCH] implements #1106 - Browse: No preview in Journal for downloaded image
godiard at sugarlabs.org
godiard at sugarlabs.org
Tue Sep 14 14:06:34 EDT 2010
From: Gonzalo Odiard <godiard at sugarlabs.org>
---
downloadmanager.py | 32 ++++++++++++++++++++++++++++++++
1 files changed, 32 insertions(+), 0 deletions(-)
diff --git a/downloadmanager.py b/downloadmanager.py
index 3eec649..24d3911 100644
--- a/downloadmanager.py
+++ b/downloadmanager.py
@@ -36,6 +36,7 @@ from sugar import profile
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
@@ -192,12 +193,43 @@ class Download:
sniffed_mime_type = mime.get_for_file(self._target_file.path)
self.dl_jobject.metadata['mime_type'] = sniffed_mime_type
+ pixbuf_mime_types = []
+ for pixbuf_format in gtk.gdk.pixbuf_get_formats():
+ pixbuf_mime_types.extend(pixbuf_format['mime_types'])
+
+ if self._mime_type in pixbuf_mime_types:
+ self.dl_jobject.metadata['preview'] = self._get_preview_image()
+
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):
+ preview_width, preview_height = style.zoom(300), style.zoom(225)
+
+ pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(self._target_file.path, preview_width, preview_height)
+ width, height = pixbuf.get_width(), pixbuf.get_height()
+
+ pixbuf2 = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, pixbuf.get_has_alpha(),
+ pixbuf.get_bits_per_sample(), preview_width, preview_height)
+
+ OPAQUE_WHITE = 0xffffffff
+ pixbuf2.fill(OPAQUE_WHITE)
+
+ margin_x, margin_y = (preview_width - width) / 2, (preview_height - height) / 2
+
+ pixbuf.copy_area(0, 0, width, 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:
--
1.7.2.2
More information about the Sugar-devel
mailing list