[Bugs] #1106 NORM: Browse: No preview in Journal for downloaded image

Sugar Labs Bugs bugtracker-noreply at sugarlabs.org
Mon Aug 16 17:53:41 EDT 2010


#1106: Browse: No preview in Journal for downloaded image
----------------------------+-----------------------------------------------
    Reporter:  Mokurai      |          Owner:  lucian     
        Type:  enhancement  |         Status:  accepted   
    Priority:  Normal       |      Milestone:  0.90       
   Component:  Browse       |        Version:  Unspecified
    Severity:  Critical     |       Keywords:  GPA r?     
Distribution:  Unspecified  |   Status_field:  Unconfirmed
----------------------------+-----------------------------------------------

Comment(by godiard):

 New patch:

 [gonzalo at nautilus mainline]$ cat 0001-Fix-1106-No-preview-in-Journal-for-
 downloaded-image.patch
 From 45e053104de9671c06a732a8e4dc172db2df8a56 Mon Sep 17 00:00:00 2001
 From: Gonzalo Odiard <godiard at gmail.com>
 Date: Mon, 16 Aug 2010 18:48:20 -0300
 Subject: [PATCH] Fix #1106 No preview in Journal for downloaded image

 ---
  downloadmanager.py |   35 +++++++++++++++++++++++++++++++++++
  1 files changed, 35 insertions(+), 0 deletions(-)

 diff --git a/downloadmanager.py b/downloadmanager.py
 index 3eec649..0538049 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,46 @@ class Download:
                  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:
 --
 1.7.2

-- 
Ticket URL: <http://bugs.sugarlabs.org/ticket/1106#comment:11>
Sugar Labs <http://sugarlabs.org/>
Sugar Labs bug tracking system


More information about the Bugs mailing list