From fb1afc286b81d4a60580aed566258f4c555aeb62 Mon Sep 17 00:00:00 2001 From: Dave Andreoli Date: Sun, 30 Aug 2015 13:56:03 +0200 Subject: [PATCH] Add a new Dropbox gadget It show the dropbox status and enable to start/stop the daemon --- GADGETS/dropbox/Makefile | 36 +++ GADGETS/dropbox/__init__.py | 252 +++++++++++++++++++ GADGETS/dropbox/docs/dropboxd-protocol | 97 +++++++ GADGETS/dropbox/dropbox.edc | 98 ++++++++ GADGETS/dropbox/images/dropbox.png | Bin 0 -> 8219 bytes GADGETS/dropbox/images/dropbox_gray.png | Bin 0 -> 8463 bytes GADGETS/dropbox/images/emblem-syncing.png | Bin 0 -> 6708 bytes GADGETS/dropbox/images/emblem-unsyncable.png | Bin 0 -> 3584 bytes GADGETS/dropbox/images/emblem-uptodate.png | Bin 0 -> 4358 bytes 9 files changed, 483 insertions(+) create mode 100644 GADGETS/dropbox/Makefile create mode 100644 GADGETS/dropbox/__init__.py create mode 100644 GADGETS/dropbox/docs/dropboxd-protocol create mode 100644 GADGETS/dropbox/dropbox.edc create mode 100644 GADGETS/dropbox/images/dropbox.png create mode 100644 GADGETS/dropbox/images/dropbox_gray.png create mode 100644 GADGETS/dropbox/images/emblem-syncing.png create mode 100644 GADGETS/dropbox/images/emblem-unsyncable.png create mode 100644 GADGETS/dropbox/images/emblem-uptodate.png diff --git a/GADGETS/dropbox/Makefile b/GADGETS/dropbox/Makefile new file mode 100644 index 0000000..50b1f27 --- /dev/null +++ b/GADGETS/dropbox/Makefile @@ -0,0 +1,36 @@ +# Simple Makefile for Enlightenment (edgar) gadgets + +# gadget specific config +GADGET_NAME = dropbox +EXTRA_FILES = + + +# nothing should be changed below this point +GADGET_FILES = __init__.pyc $(GADGET_NAME).edj +prefix = $(shell pkg-config --variable=libdir enlightenment) +gadget_folder = ${prefix}/enlightenment/gadgets/$(GADGET_NAME) + +.PHONY: all install clean + +all: $(GADGET_FILES) $(EXTRA_FILES) + +install: all + @mkdir -p -v ${gadget_folder} + @cp --preserve=mode -v $(GADGET_FILES) $(EXTRA_FILES) $(gadget_folder) + +uninstall: all + @rm -rfv ${gadget_folder} + +clean: + @rm -fv *.edj *.pyc + + +EDJE_CC = edje_cc +EDJE_FLAGS = -v -id images/ -fd fonts/ + +%.edj: %.edc images/* + $(EDJE_CC) $(EDJE_FLAGS) $< + @chmod -v og+r $@ + +%.pyc: %.py + python3 -c "from py_compile import compile; compile('$<', '$@')" diff --git a/GADGETS/dropbox/__init__.py b/GADGETS/dropbox/__init__.py new file mode 100644 index 0000000..fdfb415 --- /dev/null +++ b/GADGETS/dropbox/__init__.py @@ -0,0 +1,252 @@ +# This python file use the following encoding: utf-8 + +import os +import sys +import socket + +import e + +from efl import ecore +from efl import evas +from efl import edje +from efl.elementary.label import Label +from efl.elementary.entry import utf8_to_markup +from efl.elementary.button import Button + + +__gadget_name__ = 'Dropbox' +__gadget_vers__ = '0.1' +__gadget_auth__ = 'DaveMDS' +__gadget_mail__ = 'dave@gurumeditation.it' +__gadget_desc__ = 'Dropbox info gadget.' +__gadget_vapi__ = 1 +__gadget_opts__ = { 'popup_on_desktop': False } + + +#def DBG(msg): +# print("DB: " + msg) +# sys.stdout.flush() + + +class Gadget(e.Gadget): + + def __init__(self): + super().__init__() + self.db = Dropbox(self.db_status_changed_cb) + + def instance_created(self, obj, site): + super().instance_created(obj, site) + obj.size_hint_aspect = evas.EVAS_ASPECT_CONTROL_BOTH , 16, 16 + + def instance_destroyed(self, obj): + super().instance_destroyed(obj) + + def popup_created(self, popup): + super().popup_created(popup) + + popup.data['lb'] = Label(popup) + popup.part_box_append('popup.box', popup.data['lb']) + popup.data['lb'].show() + + popup.data['bt'] = Button(popup) + popup.data['bt'].callback_clicked_add(self.start_stop_clicked_cb) + popup.part_box_append('popup.box', popup.data['bt']) + popup.data['bt'].show() + + self.popup_update(popup) + + def popup_destroyed(self, popup): + super().popup_destroyed(popup) + + def db_status_changed_cb(self): + for icon in self._instances: + if self.db.is_running: + icon.signal_emit('daemon,running', '') + icon.signal_emit('state,'+self.db.status, '') + else: + icon.signal_emit('daemon,not_running', '') + icon.signal_emit('state,unwatched', '') + + for popup in self._popups: + self.popup_update(popup) + + def popup_update(self, popup): + if self.db.is_running: + popup.data['lb'].text = utf8_to_markup(self.db.status_msg) + popup.data['bt'].text = 'Stop Dropbox' + popup.data['bt'].disabled = False + elif self.db.is_installed: + popup.data['lb'].text = "Dropbox isn't running!" + popup.data['bt'].text = 'Start Dropbox' + popup.data['bt'].disabled = False + else: + popup.data['lb'].text = "Dropbox isn't installed!" + popup.data['bt'].text = 'Install Dropbox' + popup.data['bt'].disabled = True + + # force the popup to recalculate it's size + popup.size_hint_min = popup.size_min + + def start_stop_clicked_cb(self, btn): + if self.db.is_running: + self.db.stop() + else: + self.db.start() + + +class Dropbox(object): + def __init__(self, status_changed_cb=None): + self._status_changed_cb = status_changed_cb + + self.BASE_FOLDER = os.path.expanduser('~/Dropbox') + self.DAEMON = os.path.expanduser('~/.dropbox-dist/dropboxd') + self.PIDFILE = os.path.expanduser('~/.dropbox/dropbox.pid') + self.CMD_SOCKET = os.path.expanduser('~/.dropbox/command_socket') + + self._cmd_socket = None + self._cmd_fdh = None + self._reply_buffer = '' + self._status = '' + self._status_msg = '' + + self._connect_timer() + ecore.Timer(2.0, self._connect_timer) + ecore.Timer(2.0, self._fetch_status_timer) + + @property + def is_installed(self): + return os.path.exists(self.DAEMON) + + @property + def is_running(self): + """ Check if the dropbox daemon is running """ + try: + with open(self.PIDFILE, 'r') as f: + pid = int(f.read()) + with open('/proc/%d/cmdline' % pid, 'r') as f: + cmdline = f.read().lower() + except: + cmdline = '' + + return 'dropbox' in cmdline + + @property + def is_connected(self): + """ are we connected to the deamon socket ? """ + return self._cmd_fdh != None + + @property + def status(self): + """ 'up to date', 'syncing', 'unsyncable' or 'unwatched' """ + return self._status + + @property + def status_msg(self): + """ Long status message (more than one line) """ + return self._status_msg + + def start(self): + """ Start the dropbox daemon """ + ecore.Exe(self.DAEMON) + + def stop(self): + """ Stop the dropbox daemon """ + if self.is_connected: + cmd = 'tray_action_hard_exit\ndone\n' + try: + self._cmd_socket.sendall(cmd.encode('utf-8')) + except: + self._disconnect() + + def _connect_timer(self): + """ Try to connect to the daemon socket (if needed) """ + if self.is_connected: + return ecore.ECORE_CALLBACK_RENEW + + if not self.is_running: + return ecore.ECORE_CALLBACK_RENEW + + try: + self._cmd_socket = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) + self._cmd_socket.connect(self.CMD_SOCKET) + except: + self._cmd_socket = None + return ecore.ECORE_CALLBACK_RENEW + + self._cmd_fdh = ecore.FdHandler(self._cmd_socket, + ecore.ECORE_FD_READ | ecore.ECORE_FD_ERROR, + self._cmd_socket_data_available) + + return ecore.ECORE_CALLBACK_RENEW + + def _disconnect(self): + """ Disconnect from the daemon socket """ + self._cmd_fdh.delete() + self._cmd_fdh = None + self._cmd_socket.close() + self._cmd_socket = None + self._reply_buffer = '' + self._status = '' + self._status_msg = '' + + # alert the user that the state has changed + self._status_changed_cb() + + def _update_status(self, new_status): + if new_status == self._status: + return + self._status = new_status + + def _update_status_msg(self, new_status): + if new_status == self._status_msg: + return + self._status_msg = new_status + + # alert the user that the state has changed + self._status_changed_cb() + + def _cmd_socket_data_available(self, fdh): + if fdh.has_error(): + self._disconnect() + return ecore.ECORE_CALLBACK_CANCEL + + while True: + tmp = self._cmd_socket.recv(1024) + self._reply_buffer += tmp.decode('utf-8') + if len(tmp) < 1024: + break + + self._finalize_reply() + return ecore.ECORE_CALLBACK_RENEW + + def _finalize_reply(self): + reply = self._reply_buffer + if reply.endswith('done\n'): + self._reply_buffer = '' + + for cmd in reply.split('done\n'): + if not cmd: + continue + + cmd = cmd.split('\n') + if cmd[0] != 'ok': + return + if len(cmd) > 1 and cmd[1].startswith('status'): + status = cmd[1].split('\t') + if len(status) == 2 and status[1] in ('up to date', 'syncing', + 'unsyncable','unwatched'): + self._update_status(status[1]) + elif len(status) >= 2: + self._update_status_msg('\n'.join(status[1:])) + + def _fetch_status_timer(self): + if self.is_connected: + c1 = 'icon_overlay_file_status\npath\t%s\ndone\n' % self.BASE_FOLDER + c2 = 'get_dropbox_status\ndone\n' + try: + self._cmd_socket.sendall((c1 + c2).encode('utf-8')) + except: + self._disconnect() + + return ecore.ECORE_CALLBACK_RENEW + diff --git a/GADGETS/dropbox/docs/dropboxd-protocol b/GADGETS/dropbox/docs/dropboxd-protocol new file mode 100644 index 0000000..2fc8cd5 --- /dev/null +++ b/GADGETS/dropbox/docs/dropboxd-protocol @@ -0,0 +1,97 @@ + +Created by Steffen Schuldenzucker, 2010. If you know something important that I +missed, feel free to contact me: sschuldenzucker (at) uni-bonn (dot) de + +This is what I got out of the source code of nautilus-dropbox, dropbox.py and +dbcli.py. A big thanks to the authors of these tools. + +Protocol: +========= + +request: +-------- + + ... +... +done + + +reply (ok): +----------- +ok + ... +... +done + +reply (error): +-------------- +notok + +Delimiters for several items within a line (key and values above) are tabs. For +each key, any number of values may be given (including 0). Any number of +key-value-lines may be given (including 0) +Every message is terminated by a newline (after "done" or "notok", respectively) +Encoding is utf-8. +All paths mentioned have to be absolute (to "/"). + +Available Commands: +=================== +I only list replys for a successful command. TODO: can we get a more precise +error message? +A key may only appear once. If it appears more often here, these are +alternatives. + +<- get_dropbox_status # get deamon's status +-> status # if Idle + status + # ^ if something is happening. msg is a human-readable description + +<- get_public_link # see also the "copypublic" action below + path /file/in/Public # has to be a plain file, no folder +-> link http://... + +<- get_folder_tag /some/folder/ +-> tag shared # this folder is shared + tag dropbox # this is your dropbox's root folder + tag public # this is your public folder + tag photos # this is your photos folder + tag # otherwise + +<- icon_overlay_file_status # is the file up-to-date? + path /path/in/Dropbox +-> status up to date + status syncing + status unsyncable # TODO: when can this occur? + status unwatched + # ^ file is outside your Dropbox or is one of the ".dropbox" system files. + +# TODO: the name "paths" suggests that several files can be given. However, +# this is not done in nautilus-dropbox (and not seen elsewhere). +<- icon_overlay_context_options # get a list of available actions on this file + paths /path/in/Dropbox +-> options item1~desc1~action1 item2~desc2~action2 ... + # item: what is displayed in the menu + # desc: a tool tip for this item + # action: which verb to use to activate this option (see below) + +<- icon_overlay_context_action # perform some context action (see above) + verb # see below + paths /path/in/Dropbox +-> # no reply, except "ok" and "done" + +Where is one of + +# these open a page in your web browser +browse +revisions # only on plain files +share # only on folders +# these copy a http://... link to the clipboard +copypublic # only on plain files within the Public folder +copygallery # only on folders within the Photos folder + +NOTE that the clipboard (i.e. Ctrl-C / Ctrl-V) is something different than the +selection (select / middle mouse button). That took me some time today... + +<- tray_action_hard_exit # terminate the deamon +-> # NO reply. not even "ok". + diff --git a/GADGETS/dropbox/dropbox.edc b/GADGETS/dropbox/dropbox.edc new file mode 100644 index 0000000..b499e19 --- /dev/null +++ b/GADGETS/dropbox/dropbox.edc @@ -0,0 +1,98 @@ +/** + * EDGAR Dropbox Gadget + */ + + +images { + image: "dropbox.png" COMP; + image: "dropbox_gray.png" COMP; + image: "emblem-uptodate.png" COMP; + image: "emblem-syncing.png" COMP; + image: "emblem-unsyncable.png" COMP; +} + + +collections { +/** + * API [e/gadget/icon] The group used for the icon of the gadget + */ + group { name: "e/gadgets/dropbox/icon"; + parts { + part { name: "icon"; + description { + state: "default" 0.0; + aspect: 1.0 1.0; + aspect_preference: BOTH; + image { + normal: "dropbox.png"; + } + } + } + } + } + +/** + * API [e/gadget/main] The main group of the gadget + */ + group { name: "e/gadgets/dropbox/main"; + parts { + image { "icon"; + desc { "default"; + aspect: 1.0 1.0; aspect_preference: BOTH; + image.normal: "dropbox_gray.png"; + link.base: "daemon,not_running"; + } + desc { "running"; + aspect: 1.0 1.0; aspect_preference: BOTH; + image.normal: "dropbox.png"; + link.base: "daemon,running"; + } + } + image { "status"; + desc { "default"; + visible: 0; + rel1.relative: 0.6 0.6; + rel2.relative: 0.95 0.95; + image.normal: "emblem-uptodate.png"; + link.base: "state,unwatched"; + } + desc { "uptodate"; + inherit: "default"; + visible: 1; + image.normal: "emblem-uptodate.png"; + link.base: "state,up to date"; + } + desc { "syncing"; + inherit: "default"; + visible: 1; + image.normal: "emblem-syncing.png"; + link.base: "state,syncing"; + } + desc { "unsyncable"; + inherit: "default"; + visible: 1; + image.normal: "emblem-unsyncable.png"; + link.base: "state,unsyncable"; + } + } + } + } + +/** + * API [e/gadget/popup] This is the group that will be placed inside popups + */ + group { name: "e/gadgets/dropbox/popup"; + // min: 310 0; + parts { + box { "popup.box"; + desc { "default"; + box { + layout: "vertical"; + padding: 0 6; + min: 1 1; + } + } + } + } + } +} diff --git a/GADGETS/dropbox/images/dropbox.png b/GADGETS/dropbox/images/dropbox.png new file mode 100644 index 0000000000000000000000000000000000000000..44509291ac77f59ccc3ff7e4e272af15a5ec22a9 GIT binary patch literal 8219 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 literal 0 HcmV?d00001 diff --git a/GADGETS/dropbox/images/emblem-unsyncable.png b/GADGETS/dropbox/images/emblem-unsyncable.png new file mode 100644 index 0000000000000000000000000000000000000000..0f6704ffa450c27ff1bed1c6ef5c8abb9ef53159 GIT binary patch literal 3584 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 literal 0 HcmV?d00001