diff options
author | Tomeu Vizoso <tomeu@tomeuvizoso.net> | 2007-06-17 18:55:16 (GMT) |
---|---|---|
committer | Tomeu Vizoso <tomeu@tomeuvizoso.net> | 2007-06-17 18:55:16 (GMT) |
commit | 1afe9273a1722938c4457d1c8512e6fd57619123 (patch) | |
tree | e31b4f03972b7bfe057ff2fa7db22ef01d5c063a /shell/view/clipboardicon.py | |
parent | d4323957a17f5bdd068550c393e855b754890ee6 (diff) |
Add an option for saving clipboard objects to the Journal.
Diffstat (limited to 'shell/view/clipboardicon.py')
-rw-r--r-- | shell/view/clipboardicon.py | 55 |
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) + |