Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLucian Branescu Mihaila <lucian.branescu@gmail.com>2010-09-29 17:24:08 (GMT)
committer Lucian Branescu Mihaila <lucian.branescu@gmail.com>2010-09-29 17:24:08 (GMT)
commit13a0d936f18bc1db26a7b73a4146b80922088c35 (patch)
treeb26c98502165dacbd170cc814e7d3a6b45f1c183
parent8bfe3891712e204569ce44ffaeef6e4fc47e2f69 (diff)
Release 118v118
-rw-r--r--activity/activity.info2
-rw-r--r--downloadmanager.py35
2 files changed, 36 insertions, 1 deletions
diff --git a/activity/activity.info b/activity/activity.info
index ff66371..eca4975 100644
--- a/activity/activity.info
+++ b/activity/activity.info
@@ -1,6 +1,6 @@
[Activity]
name = Browse
-activity_version = 117
+activity_version = 118
bundle_id = org.laptop.WebActivity
icon = activity-web
exec = sugar-activity webactivity.WebActivity -s
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: