Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/shell/view/clipboardicon.py
diff options
context:
space:
mode:
authorTomeu Vizoso <tomeu@tomeuvizoso.net>2007-06-17 18:55:16 (GMT)
committer Tomeu Vizoso <tomeu@tomeuvizoso.net>2007-06-17 18:55:16 (GMT)
commit1afe9273a1722938c4457d1c8512e6fd57619123 (patch)
treee31b4f03972b7bfe057ff2fa7db22ef01d5c063a /shell/view/clipboardicon.py
parentd4323957a17f5bdd068550c393e855b754890ee6 (diff)
Add an option for saving clipboard objects to the Journal.
Diffstat (limited to 'shell/view/clipboardicon.py')
-rw-r--r--shell/view/clipboardicon.py55
1 files changed, 49 insertions, 6 deletions
diff --git a/shell/view/clipboardicon.py b/shell/view/clipboardicon.py
index 02edb65..31110ea 100644
--- a/shell/view/clipboardicon.py
+++ b/shell/view/clipboardicon.py
@@ -18,6 +18,8 @@
import logging
import os
import urlparse
+import tempfile
+from gettext import gettext as _
import gobject
@@ -27,8 +29,12 @@ from sugar.graphics.xocolor import XoColor
from sugar.graphics import units
from sugar.graphics import color
from sugar.activity import activityfactory
+from sugar.activity.bundle import Bundle
from sugar.clipboard import clipboardservice
from sugar import util
+from sugar.datastore import datastore
+from sugar.objects import mime
+from sugar import profile
class ClipboardIcon(CanvasIcon):
__gtype_name__ = 'SugarClipboardIcon'
@@ -124,7 +130,7 @@ class ClipboardIcon(CanvasIcon):
not formats[0] == 'application/vnd.olpc-x-sugar':
return
- uri = cb_service.get_object_data(self._object_id, formats[0])
+ uri = cb_service.get_object_data(self._object_id, formats[0])['DATA']
if not uri.startswith('file://'):
return
@@ -154,7 +160,9 @@ class ClipboardIcon(CanvasIcon):
cb_service.delete_object(self._object_id)
elif action == ClipboardMenu.ACTION_OPEN:
self._open_file()
-
+ elif action == ClipboardMenu.ACTION_SAVE_TO_JOURNAL:
+ self._save_to_journal()
+
def get_object_id(self):
return self._object_id
@@ -170,7 +178,42 @@ class ClipboardIcon(CanvasIcon):
self.props.background_color = color.TOOLBAR_BACKGROUND.get_int()
def _install_xo(self, path):
- logging.debug('mec')
- if os.spawnlp(os.P_WAIT, 'sugar-install-bundle', 'sugar-install-bundle',
- path):
- raise RuntimeError, 'An error occurred while extracting the .xo contents.'
+ bundle = Bundle(path)
+ if not bundle.is_installed():
+ bundle.install()
+
+ def _save_to_journal(self):
+ cb_service = clipboardservice.get_instance()
+ obj = cb_service.get_object(self._object_id)
+
+ if len(obj['FORMATS']) == 0:
+ return
+
+ if 'text/uri-list' in obj['FORMATS']:
+ data = cb_service.get_object_data(self._object_id, 'text/uri-list')
+ file_path = urlparse.urlparse(data['DATA']).path
+ mime_type = mime.get_for_file(file_path)
+ else:
+ # TODO: Find a way to choose the best mime-type from all the available.
+ mime_type = obj['FORMATS'][0]
+
+ data = cb_service.get_object_data(self._object_id, mime_type)
+ if data['ON_DISK']:
+ file_path = urlparse.urlparse(data['DATA']).path
+ else:
+ f, file_path = tempfile.mkstemp()
+ try:
+ os.write(f, data['data'])
+ finally:
+ os.close(f)
+
+ jobject = datastore.create()
+ jobject.metadata['title'] = _('Clipboard object: %s.') % obj['NAME']
+ jobject.metadata['keep'] = '0'
+ jobject.metadata['buddies'] = ''
+ jobject.metadata['preview'] = ''
+ jobject.metadata['icon-color'] = profile.get_color().to_string()
+ jobject.metadata['mime_type'] = mime_type
+ jobject.file_path = file_path
+ datastore.write(jobject)
+