SOURCES: gajim-remote.patch - move gajim-remote.py from scripts to...
paladine
paladine at pld-linux.org
Sun Sep 4 13:11:05 CEST 2005
Author: paladine Date: Sun Sep 4 11:11:05 2005 GMT
Module: SOURCES Tag: HEAD
---- Log message:
- move gajim-remote.py from scripts to src
---- Files affected:
SOURCES:
gajim-remote.patch (1.1 -> 1.2)
---- Diffs:
================================================================
Index: SOURCES/gajim-remote.patch
diff -u SOURCES/gajim-remote.patch:1.1 SOURCES/gajim-remote.patch:1.2
--- SOURCES/gajim-remote.patch:1.1 Fri Aug 19 13:10:12 2005
+++ SOURCES/gajim-remote.patch Sun Sep 4 13:11:00 2005
@@ -1,6 +1,25 @@
-diff -urN gajim-0.8.orig/scripts/gajim-remote gajim-0.8/scripts/gajim-remote
---- gajim-0.8.orig/scripts/gajim-remote 2005-08-19 12:58:20.182083440 +0200
-+++ gajim-0.8/scripts/gajim-remote 2005-08-19 12:59:44.453272272 +0200
+diff -urN gajim-0.8.1.orig/Makefile gajim-0.8.1/Makefile
+--- gajim-0.8.1.orig/Makefile 2005-09-04 12:48:06.972357568 +0200
++++ gajim-0.8.1/Makefile 2005-09-04 13:08:35.816544856 +0200
+@@ -64,6 +64,7 @@
+ mkdir -p "$(DESTDIR)$(PREFIX)/share/gajim/$$d"; \
+ fi; \
+ done
++ mv scripts/gajim-remote.py src
+ for f in $(FILES) ; do \
+ DST=`dirname "$$f"`; \
+ cp "$$f" "$(DESTDIR)$(PREFIX)/share/gajim/$$DST/"; \
+@@ -92,6 +93,7 @@
+ echo "$$F" > "$(DESTDIR)$(PREFIX)/bin/$$BASE"; \
+ chmod +x "$(DESTDIR)$(PREFIX)/bin/$$BASE"; \
+ done
++ rmdir "$(DESTDIR)$(PREFIX)/share/gajim/scripts"
+
+ #
+ # show make params we accept
+diff -urN gajim-0.8.1.orig/scripts/gajim-remote gajim-0.8.1/scripts/gajim-remote
+--- gajim-0.8.1.orig/scripts/gajim-remote 2005-09-04 12:48:06.975357112 +0200
++++ gajim-0.8.1/scripts/gajim-remote 2005-09-04 12:56:51.448625056 +0200
@@ -22,6 +22,6 @@
echo "You must not launch gajim-remote as root, it is INSECURE"
fi
@@ -9,545 +28,15 @@
+cd PREFIX/share/gajim/src
export PYTHONPATH="$PYTHONPATH:PREFIXLIB/gajim"
python gajim-remote.py $@
-diff -urN gajim-0.8.orig/src/gajim-remote.py gajim-0.8/src/gajim-remote.py
---- gajim-0.8.orig/src/gajim-remote.py 1970-01-01 01:00:00.000000000 +0100
-+++ gajim-0.8/src/gajim-remote.py 2005-08-19 12:47:58.598578496 +0200
-@@ -0,0 +1,493 @@
-+#!/bin/sh
-+''':'
-+exec python -OOt "$0" ${1+"$@"}
-+' '''
-+## scripts/gajim-remote.py
-+##
-+## Gajim Team:
-+## - Yann Le Boulanger <asterix at lagaule.org>
-+## - Vincent Hanquez <tab at snarc.org>
-+## - Nikos Kouremenos <kourem at gmail.com>
-+## - Dimitur Kirov <dkirov at gmail.com>
-+##
-+## Copyright (C) 2003-2005 Gajim Team
-+##
-+## This program is free software; you can redistribute it and/or modify
-+## it under the terms of the GNU General Public License as published
-+## by the Free Software Foundation; version 2 only.
-+##
-+## This program is distributed in the hope that it will be useful,
-+## but WITHOUT ANY WARRANTY; without even the implied warranty of
-+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+## GNU General Public License for more details.
-+##
-+
-+# gajim-remote help will show you the DBUS API of Gajim
-+
-+import sys
-+import gtk
-+import gobject
-+
-+import signal
-+
-+signal.signal(signal.SIGINT, signal.SIG_DFL) # ^C exits the application
-+
-+import i18n
-+
-+_ = i18n._
-+i18n.init()
-+
-+
-+try:
-+ import dbus
-+except:
-+ send_error('Dbus is not supported.\n')
-+
-+_version = getattr(dbus, 'version', (0, 20, 0))
-+if _version[1] >= 41:
-+ import dbus.service
-+ import dbus.glib
-+
-+OBJ_PATH = '/org/gajim/dbus/RemoteObject'
-+INTERFACE = 'org.gajim.dbus.RemoteInterface'
-+SERVICE = 'org.gajim.dbus'
-+BASENAME = 'gajim-remote'
-+
-+class GajimRemote:
-+
-+ def __init__(self):
-+ self.argv_len = len(sys.argv)
-+ # define commands dict. Prototype :
-+ # {
-+ # 'command': [comment, [list of arguments] ]
-+ # }
-+ #
-+ # each argument is defined as a tuple:
-+ # (argument name, help on argument, is mandatory)
-+ #
-+ self.commands = {
-+ 'help':[
-+ _('show a help on specific command'),
-+ [
-+ #parameter, named "on_command". User gets help for the command, specified by this parameter
-+ (_('on_command'),
-+ _('show help on command'), False)
-+ ]
-+ ],
-+ 'toggle_roster_appearance' : [
-+ _('Shows or hides the roster window'),
-+ []
-+ ],
-+ 'show_next_unread': [
-+ _('Popup a window with the next unread message'),
-+ []
-+ ],
-+ 'list_contacts': [
-+ _('Print a list of all contacts in the roster. \
-+Each contact appear on a separate line'),
-+ [
-+ (_('account'), _('show only contacts of the \
-+given account'), False)
-+ ]
-+
-+ ],
-+ 'list_accounts': [
-+ _('Print a list of registered accounts'),
-+ []
-+ ],
-+ 'change_status': [
-+ _('Change the status of account or accounts'),
-+ [
-+ (_('status'), _('one of: offline, online, chat, away, \
-+xa, dnd, invisible '), True),
-+ (_('message'), _('status message'), False),
-+ (_('account'), _('change status of account "account". \
-+If not specified, try to change status of all accounts that \
-+have "sync with global status" option set'), False)
-+ ]
-+ ],
-+ 'open_chat': [
-+ _('Show the chat dialog so that you can send message to a \
-+contact'),
-+ [
-+ #tell nkour that should be JID of the contact
-+ ('jid', _('jid of the contact that you want to chat \
-+with'),
-+ True),
-+ (_('account'), _('if specified, contact is taken from \
-+the contact list of this account'), False)
-+ ]
-+ ],
-+ 'send_message':[
-+ #OpenPGP key here too (tlel that to nkour)
-+ _('Send new message to a contact in the roster. Both OpenPGP \
-+key and account are optional. If you want to set only \'account\', without \
-+\'pgp key\', just set \'pgp key\' to \'\'.'),
-+ [
-+ #tell nkour that should be JID of the contact
-+ ('jid', _('jid of the contact that will receive the \
-+message'), True),
-+ (_('message'), _('message contents'), True),
-+ #tell to nkour it should be OpenPGP key
-+ (_('pgp key'), _('if specified, the message will be \
-+encrypted using this public key'), False),
-+ (_('account'), _('if specified, the message will be \
-+sent using this account'), False),
-+ ]
-+ ],
-+ 'contact_info': [
-+ _('Get detailed info on a contact'),
-+ [
-+ #JID of the contact (tell that to nkour)
-+ ('jid', _('jid of the contact'), True)
-+ ]
-+ ]
-+ }
-+ if self.argv_len < 2 or \
-+ sys.argv[1] not in self.commands.keys(): # no args or bad args
-+ self.send_error(self.compose_help())
-+ self.command = sys.argv[1]
-+
-+ if self.command == 'help':
-+ if self.argv_len == 3:
-+ print self.help_on_command(sys.argv[2])
-+ else:
-+ print self.compose_help()
-+ sys.exit()
-+
-+ self.init_connection()
-+ self.check_arguments()
-+
-+ if self.command == 'contact_info':
-+ if self.argv_len < 3:
-+ self.send_error(_('Missing argument "contact_jid"'))
-+ try:
-+ id = self.sbus.add_signal_receiver(self.show_vcard_info,
-+ 'VcardInfo', INTERFACE, SERVICE, OBJ_PATH)
-+ except:
-+ self.send_error(_('Service not available'))
-+
-+ res = self.call_remote_method()
-+ self.print_result(res)
-+
-+ if self.command == 'contact_info':
-+ gobject.timeout_add(10000, self.gtk_quit) # wait 10 sec for response
-+ gtk.main()
-+
-+ def print_result(self, res):
-+ ''' Print retrieved result to the output '''
-+ if res is not None:
-+ if self.command in ['open_chat', 'send_message']:
-+ if self.command == 'send_message':
-+ self.argv_len -= 2
-+
-+ if res == False:
-+ if self.argv_len < 4:
-+ self.send_error(_('\'%s\' is not in your roster.\n\
-+Please specify account for sending the message.') % sys.argv[2])
-+ else:
-+ self.send_error(_('You have no active account'))
-+ elif self.command == 'list_accounts':
-+ if type(res) == list:
-+ for account in res:
-+ print account
-+ elif self.command == 'list_contacts':
-+ for single_res in res:
-+ accounts = self.unrepr(single_res)
-+ for account_dict in accounts:
-+ print self.print_info(0, account_dict)
-+ elif res:
-+ print res
-+
-+ def init_connection(self):
-+ ''' create the onnection to the session dbus,
-+ or exit if it is not possible '''
-+ try:
-+ self.sbus = dbus.SessionBus()
-+ except:
-+ self.send_error(_('Session bus is not available.'))
-+
-+ if _version[1] >= 30 and _version[1] <= 42:
-+ obj = self.sbus.get_object(SERVICE, OBJ_PATH)
-+ interface = dbus.Interface(obj, INTERFACE)
-+ elif _version[1] < 30:
-+ self.service = self.sbus.get_service(SERVICE)
-+ interface = self.service.get_object(OBJ_PATH, INTERFACE)
-+ else:
-+ #say to nkour that this should be Unknown D-Bus version: %s (thanks nebulam)
-+ send_error(_('Unknown dbus version: %s') % _version)
-+
-+ # get the function asked
-+ self.method = interface.__getattr__(self.command)
-+
-+ def make_arguments_row(self, args):
-+ ''' return arguments list. Mandatory arguments are enclosed with:
-+ '<', '>', optional arguments - with '[', ']' '''
-+ str = ''
-+ for argument in args:
-+ str += ' '
-+ if argument[2]:
-+ str += '<'
-+ else:
-+ str += '['
-+ str += argument[0]
-+ if argument[2]:
-+ str += '>'
-+ else:
-+ str += ']'
-+ return str
-+
-+ def help_on_command(self, command):
-+ ''' return help message for a given command '''
-+ if command in self.commands:
-+ command_props = self.commands[command]
-+ arguments_str = self.make_arguments_row(command_props[1])
-+ str = _('Usage: %s %s %s \n\t') % (BASENAME, command,
-+ arguments_str)
-+ str += command_props[0] + '\n\n' + _('Arguments:') + '\n'
-+ for argument in command_props[1]:
-+ str += ' ' + argument[0] + ' - ' + argument[1] + '\n'
-+ return str
-+ self.send_error(_('%s not found') % command)
-+
-+ def compose_help(self):
-+ ''' print usage, and list available commands '''
-+ str = _('Usage: %s command [arguments]\nCommand is one of:\n' ) % BASENAME
-+ for command in self.commands.keys():
-+ str += ' ' + command
-+ for argument in self.commands[command][1]:
-+ str += ' '
-+ if argument[2]:
-+ str += '<'
-+ else:
-+ str += '['
-+ str += argument[0]
-+ if argument[2]:
-+ str += '>'
-+ else:
-+ str += ']'
-+ str += '\n'
-+ return str
-+
-+ def print_info(self, level, prop_dict):
-+ ''' return formated string from serialized vcard data '''
-+ if prop_dict is None or type(prop_dict) \
-+ not in [dict, list, tuple]:
-+ return ''
-+ ret_str = ''
-+ if type(prop_dict) in [list, tuple]:
-+ ret_str = ''
-+ spacing = ' ' * level * 4
-+ for val in prop_dict:
-+ if val is None:
-+ ret_str +='\t'
-+ elif type(val) == unicode or type(val) == int or \
-+ type(val) == str:
-+ ret_str +='\t' + str(val)
-+ elif type(val) == list or type(val) == tuple:
-+ res = ''
-+ for items in val:
-+ res += self.print_info(level+1, items)
-+ if res != '':
-+ ret_str += '\t' + res
-+ ret_str = '%s(%s)\n' % (spacing, ret_str[1:])
-+ elif type(prop_dict) is dict:
-+ for key in prop_dict.keys():
-+ val = prop_dict[key]
-+ spacing = ' ' * level * 4
-+ if type(val) == unicode or type(val) == int or \
-+ type(val) == str:
-+ if val is not None:
-+ val = val.strip()
-+ ret_str += '%s%-10s: %s\n' % (spacing, key, val)
-+ elif type(val) == list or type(val) == tuple:
-+ res = ''
-+ for items in val:
-+ res += self.print_info(level+1, items)
-+ if res != '':
-+ ret_str += '%s%s: \n%s' % (spacing, key, res)
-+ elif type(val) == dict:
-+ res = self.print_info(level+1, val)
-+ if res != '':
-+ ret_str += '%s%s: \n%s' % (spacing, key, res)
-+ else:
-+ self.send_warning(_('Unknown type %s ') % type(val))
-+ return ret_str
-+
-+ def unrepr(self, serialized_data):
-+ ''' works the same as eval, but only for structural values,
-+ not functions! e.g. dicts, lists, strings, tuples '''
-+ if not serialized_data:
-+ return (None, '')
-+ value = serialized_data.strip()
-+ first_char = value[0]
-+ is_unicode = False
-+ is_int = False
-+
-+ if first_char == 'u':
-+ is_unicode = True
-+ value = value[1:]
-+ first_char = value[0]
-+ elif '0123456789.'.find(first_char) != -1:
-+ is_int = True
-+ _str = first_char
-+ if first_char == '.':
-+ is_float = True
-+ else:
-+ is_float = False
-+ for i in range(len(value) - 1):
-+ chr = value[i+1]
-+ if chr == '.':
-+ is_float = True
-+ elif '0123456789'.find(chr) == -1:
-+ break
-+ _str += chr
-+ if is_float:
-+ return (float(_str), value[len(_str):])
-+ else:
-+ return (int(_str), value[len(_str):])
-+ elif first_char == 'N':
-+ if value[1:4] == 'one':
-+ return (None, value[4:])
-+ else:
-+ return (None, '')
-+ if first_char == "'" or first_char == '"': # handle strings and unicode
-+ if len(value) < 2:
-+ return ('',value[1:])
-+ _str = ''
-+ previous_slash = False
-+ for i in range(len(value) - 1):
-+ chr = value[i+1]
-+ if previous_slash:
-+ previous_slash = False
-+ if chr == '\\':
-+ _str += '\\'
-+ elif chr == 'n':
-+ _str += '\n'
-+ elif chr == 't':
-+ _str += '\t'
-+ elif chr == 'r':
-+ _str += '\r'
-+ elif chr == 'b':
-+ _str += '\b'
-+ elif chr == '\'':
-+ _str += '\''
-+ elif chr == '\"':
-+ _str += '\"'
-+ elif chr == 'u' and is_unicode:
-+ _str += '\\u'
-+ elif chr == first_char:
-+ break
-+ elif chr == '\\':
-+ previous_slash = True
-+ else:
-+ _str += chr
-+ substr_len = len(_str)+2
-+ if is_unicode and _str:
-+ _str = _str.decode('unicode-escape').encode('utf-8')
-+ return (_str, value[substr_len :])
-+ elif first_char == '{': # dict
-+ _dict = {}
-+ while True:
-+ if value[1] == '}':
-+ break
-+ key, next = self.unrepr(value[1:])
-+ if type(key) != str and type(key) != unicode:
-+ send_error('Wrong string: %s' % value)
-+ next = next.strip()
-+ if not next or next[0] != ':':
-+ send_error('Wrong string: %s' % (value))
-+ val, next = self.unrepr(next[1:])
-+ _dict[key] = val
-+ next = next.strip()
-+ if not next:
-+ break
-+ if next[0] == ',':
-+ value = next
-+ elif next[0] == '}':
-+ break
-+ else:
-+ break
-+ return (_dict, next[1:])
-+ elif first_char in ['[', '(']: # return list
-+ _tuple = []
-+ while True:
-+ if value[1] == ']':
-+ break
-+ val, next = self.unrepr(value[1:])
-+ next = next.strip()
-+ if not next:
-+ send_error('Wrong string: %s' % val)
-+ _tuple.append(val)
-+ next = next.strip()
-+ if not next:
-+ break
-+ if next[0] == ',':
-+ value = next
-+ elif next[0] in [']', ')']:
-+ break
-+ return (_tuple, next[1:])
-+
-+ def show_vcard_info(self, *args, **keyword):
-+ ''' write user vcart in a formated output '''
-+ props_dict = None
-+ if _version[1] >= 30:
-+ props_dict = self.unrepr(args[0])
-+ else:
-+ if args and len(args) >= 5:
-+ props_dict = self.unrepr(args[4].get_args_list()[0])
-+
-+ if props_dict:
-+ print self.print_info(0,props_dict[0])
-+ # remove_signal_receiver is broken in lower versions (< 0.35),
-+ # so we leave the leak - nothing can be done
-+ if _version[1] >= 41:
-+ self.sbus.remove_signal_receiver(show_vcard_info, 'VcardInfo',
-+ INTERFACE, SERVICE, OBJ_PATH)
-+
-+ gtk.main_quit()
-+
-+ def check_arguments(self):
-+ ''' Make check if all necessary arguments are given '''
-+ argv_len = self.argv_len - 2
-+ args = self.commands[self.command][1]
-+ if len(args) > argv_len:
-+ if args[argv_len][2]:
-+ self.send_error(_('Argument "%s" is not specified. \n\
-+Type "%s help %s" for more info') % (args[argv_len][0], BASENAME, self.command))
-+
-+ def gtk_quit(self):
-+ if _version[1] >= 41:
-+ self.sbus.remove_signal_receiver(show_vcard_info, 'VcardInfo',
-+ INTERFACE, SERVICE, OBJ_PATH)
-+ gtk.main_quit()
-+
-+ # FIXME - didn't find more clever way for the below method.
-+ # method(sys.argv[2:]) doesn't work, cos sys.argv[2:] is a tuple
-+ def call_remote_method(self):
-+ ''' calls self.method with arguments from sys.argv[2:] '''
-+ try:
-+ if self.argv_len == 2:
-+ res = self.method()
-+ elif self.argv_len == 3:
-+ res = self.method(sys.argv[2])
-+ elif self.argv_len == 4:
-+ res = self.method(sys.argv[2], sys.argv[3])
-+ elif self.argv_len == 5:
-+ res = self.method(sys.argv[2], sys.argv[3], sys.argv[4])
-+ elif argv_len == 6:
-+ res = self.method(sys.argv[2], sys.argv[3], sys.argv[4],
-+ sys.argv[5])
-+ return res
-+ except:
-+ self.send_error(_('Service not available'))
-+ return None
-+
-+ def send_error(self, error_message):
-+ ''' Writes error message to stderr and exits '''
-+ sys.stderr.write(error_message + '\n')
-+ sys.stderr.flush()
-+ sys.exit(1)
-+
-+if __name__ == '__main__':
-+ GajimRemote()
-diff -urN gajim-0.8.orig/src/i18n.py gajim-0.8/src/i18n.py
---- gajim-0.8.orig/src/i18n.py 1970-01-01 01:00:00.000000000 +0100
-+++ gajim-0.8/src/i18n.py 2005-08-19 13:05:59.485258744 +0200
-@@ -0,0 +1,41 @@
-+## common/i18n.py
-+##
-+## Gajim Team:
-+## - Yann Le Boulanger <asterix at lagaule.org>
-+## - Vincent Hanquez <tab at snarc.org>
-+## - Nikos Kouremenos <kourem at gmail.com>
-+## - Dimitur Kirov <dkirov at gmail.com>
-+##
-+## Copyright (C) 2003-2005 Gajim Team
-+##
-+## This program is free software; you can redistribute it and/or modify
-+## it under the terms of the GNU General Public License as published
-+## by the Free Software Foundation; version 2 only.
-+##
-+## This program is distributed in the hope that it will be useful,
-+## but WITHOUT ANY WARRANTY; without even the implied warranty of
-+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+## GNU General Public License for more details.
-+##
-+
-+APP='gajim'
-+DIR='../po'
-+
-+import locale
-+import gettext
-+
-+locale.setlocale(locale.LC_ALL, '')
-+_translation = None
-+
-+def init():
-+ global _translation
-+ try:
-+ _translation = gettext.translation(APP, DIR)
-+ except IOError:
-+ _translation = gettext.NullTranslations()
-+
-+def _(s):
-+ if s == '':
-+ return s
-+ assert s
-+ return _translation.gettext(s)
+diff -urN gajim-0.8.1.orig/scripts/gajim-remote.py gajim-0.8.1/scripts/gajim-remote.py
+--- gajim-0.8.1.orig/scripts/gajim-remote.py 2005-09-04 12:48:06.976356960 +0200
++++ gajim-0.8.1/scripts/gajim-remote.py 2005-09-04 12:56:38.362614432 +0200
+@@ -32,7 +32,7 @@
+
+ signal.signal(signal.SIGINT, signal.SIG_DFL) # ^C exits the application
+
+-import i18n
++from common import i18n
+
+ _ = i18n._
+ i18n.init()
================================================================
---- CVS-web:
http://cvs.pld-linux.org/SOURCES/gajim-remote.patch?r1=1.1&r2=1.2&f=u
More information about the pld-cvs-commit
mailing list