On 09/22/2010 05:44 PM, godi...@sugarlabs.org wrote: > From: Gonzalo Odiard<godi...@sugarlabs.org> > > this patch adressed comments from silbe about segregate the check of a image > mime type and use of sugar.style constant colors > now opens the image in the original size because we don't want scale up small > images > --- > downloadmanager.py | 46 ++++++++++++++++++++++++++++++++++++++++++++++ > 1 files changed, 46 insertions(+), 0 deletions(-) > > diff --git a/downloadmanager.py b/downloadmanager.py > index 3eec649..ed68d82 100644 > --- a/downloadmanager.py > +++ b/downloadmanager.py > @@ -35,6 +35,7 @@ from sugar.datastore import datastore > from sugar import profile > from sugar import mime > from sugar.graphics.alert import Alert, TimeoutAlert > +from sugar.graphics import style > from sugar.graphics.icon import Icon > from sugar.activity import activity > > @@ -192,12 +193,57 @@ class Download: > sniffed_mime_type = > mime.get_for_file(self._target_file.path) > self.dl_jobject.metadata['mime_type'] = sniffed_mime_type > > + if self._check_image_mime_type(): > + 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 _check_image_mime_type(self): > + pixbuf_mime_types = [] > + for pixbuf_format in gtk.gdk.pixbuf_get_formats(): > + pixbuf_mime_types.extend(pixbuf_format['mime_types']) > + > + return self._mime_type in pixbuf_mime_types
I guess you could do here as well (I think Sascha suggested so): for pixbuf_format in gtk.gdk.pixbuf_get_formats(): if self._mime_type in pixbuf_format['mime_types']: return True return False > + def _get_preview_image(self): > + preview_width, preview_height = style.zoom(300), style.zoom(225) > + > + pixbuf = gtk.gdk.pixbuf_new_from_file(self._target_file.path) > + width, height = pixbuf.get_width(), pixbuf.get_height() > + > + > + 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) Please leave some space "max(scale_x, scale_y)". > + pixbuf = pixbuf.scale_simple(float(width) / scale, height / > scale, > + gtk.gdk.INTERP_BILINEAR) > + > + 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) > + > + pixbuf2.fill(style.COLOR_WHITE.get_int()) > + > + 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: Regards, Simon _______________________________________________ Sugar-devel mailing list Sugar-devel@lists.sugarlabs.org http://lists.sugarlabs.org/listinfo/sugar-devel