From 914749b74014f35e5c34d60c08b6112552b4256b Mon Sep 17 00:00:00 2001 From: Nikos Kouremenos Date: Wed, 7 Sep 2005 21:12:30 +0000 Subject: [PATCH] register xmpp:// gajim-remote handler in GNOME; various cleanup --- src/common/config.py | 1 + src/gajim-remote.py | 4 +-- src/gajim.py | 61 ++++++++++++++++++++----------------------- src/gtkgui_helpers.py | 34 ++++++++++++++++++++++++ src/remote_control.py | 11 +++++--- 5 files changed, 74 insertions(+), 37 deletions(-) diff --git a/src/common/config.py b/src/common/config.py index db5af9038..70ee906ce 100644 --- a/src/common/config.py +++ b/src/common/config.py @@ -147,6 +147,7 @@ class Config: 'avatar_width': [opt_int, 52], 'avatar_height': [opt_int, 52], 'quit_on_roster_x_button': [opt_bool, False, _('If True, quits Gajim when X button of Window Manager is clicked. This option make sense only if trayicon is used.')], + 'set_xmpp://_handler_everytime': [opt_bool, False, _('If True, Gajim registers for xmpp:// on each startup.')], } __options_per_key = { diff --git a/src/gajim-remote.py b/src/gajim-remote.py index 5a90fd1cf..c00c0cf62 100755 --- a/src/gajim-remote.py +++ b/src/gajim-remote.py @@ -112,7 +112,7 @@ have "sync with global status" option set'), False) ] ], 'open_chat': [ - _('Show the chat dialog so that you can send message to a \ + _('Show the chat dialog so that you can send messages to a \ contact'), [ ('jid', _('JID of the contact that you want to chat \ @@ -189,7 +189,7 @@ using this account'), False) if self.command == 'send_message': self.argv_len -= 2 - if res == False: + if res is False: if self.argv_len < 4: send_error(_('\'%s\' is not in your roster.\n\ Please specify account for sending the message.') % sys.argv[2]) diff --git a/src/gajim.py b/src/gajim.py index f5240bd1c..120f129e7 100755 --- a/src/gajim.py +++ b/src/gajim.py @@ -59,7 +59,7 @@ from common import optparser profile = '' try: - opts, args = getopt.getopt(sys.argv[2:], 'hvp:', ['help', 'verbose', + opts, args = getopt.getopt(sys.argv[1:], 'hvp:', ['help', 'verbose', 'profile=', 'sm-config-prefix=', 'sm-client-id=']) except getopt.error, msg: print msg @@ -1211,41 +1211,38 @@ if __name__ == '__main__': cli = gnome.ui.master_client() cli.connect('die', die_cb) - if os.path.isdir('.svn'): # we are svn user - cwd = os.getcwd() - svn_src = False - svn_trunk = False - - script = '#!/bin/sh\n' - if cwd.endswith('trunk'): # we run with ./launch.sh - script += 'cd %s/src' % cwd - svn_trunk = True - elif cwd.endswith('src'): # we run with ./gajim.py in src/ - script += 'cd %s' % cwd - svn_src = True - - if svn_src or svn_trunk: - if svn_trunk: - path_to_gajim_script = cwd + '/scripts/gajim_sm_script' - elif svn_src: - path_to_gajim_script = cwd + '/../scripts/gajim_sm_script' - - if os.path.exists(path_to_gajim_script): - os.remove(path_to_gajim_script) - f = open(path_to_gajim_script, 'w') - script += '\nexec python -OOt gajim.py $0 $@\n' - f.write(script) - f.close() - os.chmod(path_to_gajim_script, 0700) - - else: # normal user (not svn user) - # always make it like '/usr/local/bin/gajim' - path_to_gajim_script = helpers.is_in_path('gajim', True) - + path_to_gajim_script = gtkgui_helpers.get_abspath_for_script('gajim') if path_to_gajim_script: argv = [path_to_gajim_script] cli.set_restart_command(len(argv), argv) + try: + import gconf + # in try because daemon may not be there + client = gconf.client_get_default() + except: + pass + else: + we_set = False + print client.get_string('/desktop/gnome/url-handlers/xmpp/command') + if client.get_string('/desktop/gnome/url-handlers/xmpp/command') is None: + we_set = True + elif gajim.config.get('set_xmpp://_handler_everytime'): + we_set = True + + print we_set + if we_set: + path_to_gajim_script, type = gtkgui_helpers.get_abspath_for_script( + 'gajim-remote', True) + print path_to_gajim_script + if path_to_gajim_script: + if type == 'svn': + command = path_to_gajim_script + 'open_chat %s' + print command + else: # 'installed' + command = 'gajim-remote open_chat %s' + client.set_string('/desktop/gnome/url-handlers/xmpp/command', command) + Interface() gtk.main() diff --git a/src/gtkgui_helpers.py b/src/gtkgui_helpers.py index 3251defa9..d7868b36c 100644 --- a/src/gtkgui_helpers.py +++ b/src/gtkgui_helpers.py @@ -190,3 +190,37 @@ def set_unset_urgency_hint(window, unread_messages_no): window.props.urgency_hint = True else: window.props.urgency_hint = False + +def get_abspath_for_script(scriptname, want_type = False): + '''checks if we are svn or normal user and returns abspath to asked script + if want_type is True we return 'svn' or 'install' ''' + if os.path.isdir('.svn'): # we are svn user + type = 'svn' + cwd = os.getcwd() # it's always ending with src + + if scriptname == 'gajim-remote': + path_to_script = cwd + '/gajim-remote.py' + + elif scriptname == 'gajim': + script = '#!/bin/sh\n' # the script we may create + script += 'cd %s' % cwd + path_to_script = cwd + '/../scripts/gajim_sm_script' + + if os.path.exists(path_to_script): + os.remove(path_to_script) + f = open(path_to_script, 'w') + script += '\nexec python -OOt gajim.py $0 $@\n' + f.write(script) + f.close() + os.chmod(path_to_script, 0700) + + else: # normal user (not svn user) + type = 'install' + # always make it like '/usr/local/bin/gajim' + path_to_script = helpers.is_in_path(scriptname, True) + + + if want_type: + return path_to_script, type + else: + return path_to_script diff --git a/src/remote_control.py b/src/remote_control.py index d3686c8c7..02a7af3f3 100644 --- a/src/remote_control.py +++ b/src/remote_control.py @@ -1,9 +1,10 @@ -## roster_window.py +## remote_control.py ## ## Gajim Team: ## - Yann Le Boulanger ## - Vincent Hanquez ## - Nikos Kouremenos +## - Dimitur Kirov ## ## Copyright (C) 2003-2005 Gajim Team ## @@ -188,13 +189,17 @@ class SignalObject(DbusPrototype): def open_chat(self, *args): ''' start_chat(jid, account=None) -> shows the tabbed window for new - message to 'jid', using account(optional) 'account ' ''' + message to 'jid', using account(optional) 'account' ''' if self.disabled: return jid, account = self._get_real_arguments(args, 2) if not jid: - # FIXME: raise exception for missing argument (dbus0.35+ - released last week) + # FIXME: raise exception for missing argument (dbus0.35+) return None + if jid.startswith('xmpp://'): + jid = jid[7:] # len('xmpp://') = 7 + #FIXME: does not work :((( + if account: accounts = [account] else: