Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/services/clipboard/clipboardservice.py
diff options
context:
space:
mode:
Diffstat (limited to 'services/clipboard/clipboardservice.py')
-rw-r--r--services/clipboard/clipboardservice.py61
1 files changed, 38 insertions, 23 deletions
diff --git a/services/clipboard/clipboardservice.py b/services/clipboard/clipboardservice.py
index 02ee7ac..d9da8cc 100644
--- a/services/clipboard/clipboardservice.py
+++ b/services/clipboard/clipboardservice.py
@@ -19,8 +19,15 @@ import gobject
import dbus
import dbus.service
from sugar import env
+from sugar import util
from clipboardobject import ClipboardObject, Format
+NAME_KEY = 'NAME'
+PERCENT_KEY = 'PERCENT'
+ICON_KEY = 'ICON'
+PREVIEW_KEY = 'PREVIEW'
+FORMATS_KEY = 'FORMATS'
+
class ClipboardDBusServiceHelper(dbus.service.Object):
_CLIPBOARD_DBUS_INTERFACE = "org.laptop.Clipboard"
@@ -43,21 +50,20 @@ class ClipboardDBusServiceHelper(dbus.service.Object):
logging.debug('Added object ' + object_id + ' with name ' + name)
@dbus.service.method(_CLIPBOARD_DBUS_INTERFACE,
- in_signature="ssayb", out_signature="")
+ in_signature="ssayb", out_signature="", byte_arrays=True)
def add_object_format(self, object_id, format_type, data, on_disk):
-
- # FIXME: Take it out when using the 0.80 dbus bindings
- s = ""
- for i in data:
- s += chr(i)
-
cb_object = self._objects[object_id]
- cb_object.add_format(Format(format_type, s, on_disk))
-
+ cb_object.add_format(Format(format_type, data, on_disk))
+
if on_disk:
- logging.debug('Added format of type ' + format_type + ' with path at ' + s)
+ logging.debug('Added format of type ' + format_type + ' with path at ' + data)
else:
logging.debug('Added in-memory format of type ' + format_type + '.')
+
+ self.object_state_changed(object_id, {NAME_KEY: cb_object.get_name(),
+ PERCENT_KEY: cb_object.get_percent(),
+ ICON_KEY: cb_object.get_icon(),
+ PREVIEW_KEY: cb_object.get_preview()})
@dbus.service.method(_CLIPBOARD_DBUS_INTERFACE,
in_signature="s", out_signature="")
@@ -68,30 +74,39 @@ class ClipboardDBusServiceHelper(dbus.service.Object):
@dbus.service.method(_CLIPBOARD_DBUS_INTERFACE,
in_signature="si", out_signature="")
- def set_object_state(self, object_id, percent):
+ def set_object_percent(self, object_id, percent):
cb_object = self._objects[object_id]
cb_object.set_percent(percent)
- self.object_state_changed(object_id, percent)
- logging.debug('Changed object with object_id ' + object_id + ' with percent ' + str(percent))
+ self.object_state_changed(object_id, {NAME_KEY: cb_object.get_name(),
+ PERCENT_KEY: percent,
+ ICON_KEY: cb_object.get_icon(),
+ PREVIEW_KEY: cb_object.get_preview()})
+
+ logging.debug('Changed object with object_id ' + object_id +
+ ' with percent ' + str(percent))
@dbus.service.method(_CLIPBOARD_DBUS_INTERFACE,
- in_signature="s", out_signature="as")
- def get_object_format_types(self, object_id):
+ in_signature="s", out_signature="a{sv}")
+ def get_object(self, object_id):
cb_object = self._objects[object_id]
formats = cb_object.get_formats()
- array = []
+ format_types = []
for type, format in formats.iteritems():
- array.append(type)
+ format_types.append(type)
- return array
+ result_dict = {NAME_KEY: cb_object.get_name(),
+ PERCENT_KEY: cb_object.get_percent(),
+ ICON_KEY: cb_object.get_icon(),
+ PREVIEW_KEY: cb_object.get_preview(),
+ FORMATS_KEY: format_types}
+ return result_dict
@dbus.service.method(_CLIPBOARD_DBUS_INTERFACE,
in_signature="ss", out_signature="ay")
- def get_object_data(self, object_id, format_type):
+ def get_object_data(self, object_id, format_type):
cb_object = self._objects[object_id]
formats = cb_object.get_formats()
-
return formats[format_type].get_data()
# dbus signals
@@ -103,8 +118,8 @@ class ClipboardDBusServiceHelper(dbus.service.Object):
def object_deleted(self, object_id):
pass
- @dbus.service.signal(_CLIPBOARD_DBUS_INTERFACE, signature="si")
- def object_state_changed(self, object_id, percent):
+ @dbus.service.signal(_CLIPBOARD_DBUS_INTERFACE, signature="sa{sv}")
+ def object_state_changed(self, object_id, values):
pass
class ClipboardService(object):
@@ -115,5 +130,5 @@ class ClipboardService(object):
loop = gobject.MainLoop()
try:
loop.run()
- except idboardInterrupt:
+ except KeyboardInterrupt:
print 'Ctrl+C pressed, exiting...'