'send_message' and 'open_chat' with jid not in

the roster (if multiple accounts) sends error
This commit is contained in:
Dimitur Kirov 2005-07-20 15:45:56 +00:00
parent 8d7dac3553
commit 0bde1f52ef
2 changed files with 42 additions and 17 deletions

View File

@ -112,11 +112,11 @@ list of this account'), False)
]
],
'send_message':[
_('Send new message to a contact in the roster'),
_('Send new message to a contact in the roster. Both pgp key and account are optional. If you want to set only \'account\', whitout \'pgp key\', just set \'pgp key\' to \'\'.'),
[
('jid', _('jid of the contact that will receive the message'), True),
(_('message'), _('message contents'), True),
(_('keyID'), _('if specified the message will be encrypted using \
(_('pgp key'), _('if specified the message will be encrypted using \
this pulic key'), False),
(_('account'), _('if specified the message will be sent using this account'), False),
]
@ -222,6 +222,8 @@ def call_remote_method(method):
res = method(sys.argv[2], sys.argv[3])
elif argv_len == 5:
res = method(sys.argv[2], sys.argv[3], sys.argv[4])
elif argv_len == 6:
res = method(sys.argv[2], sys.argv[3], sys.argv[4], sys.argv[5])
return res
except:
send_error(_('Service not available'))
@ -271,9 +273,19 @@ if command == 'contact_info':
res = call_remote_method(method)
if res:
print res
if res is not None:
if command in ['open_chat', 'send_message']:
if command == 'send_message':
argv_len -= 2
if res == False:
if argv_len < 4:
send_error(_('\'%s\' is not in your roster.\n\
Please specify account for sending the message.') % sys.argv[2])
else:
send_error(_('You have no active account'))
elif res is True:
print res
if command == 'contact_info':
gobject.timeout_add(5000, gtk_quit) # wait 5 sec maximum

View File

@ -130,11 +130,16 @@ class SignalObject(DbusPrototype):
if not keyID:
keyID = ''
connected_account = None
if account and \
gajim.connections[account].connected > 1: # account is online
connected_account = gajim.connections[account]
accounts = gajim.contacts.keys()
# if there is only one account in roster, take it as default
if not account and len(accounts) == 1:
account = accounts[0]
if account:
if gajim.connections[account].connected > 1: # account is online
connected_account = gajim.connections[account]
else:
for account in gajim.contacts.keys():
for account in accounts:
if gajim.contacts[account].has_key(jid) and \
gajim.connections[account].connected > 1: # account is online
connected_account = gajim.connections[account]
@ -157,22 +162,30 @@ class SignalObject(DbusPrototype):
accounts = [account]
else:
accounts = gajim.connections.keys()
if len(accounts) == 1:
account = accounts[0]
connected_account = None
for account in accounts:
if self.plugin.windows[account]['chats'].has_key(jid) and \
gajim.connections[account].connected > 1: # account is online
connected_account = account
break
elif gajim.connections[account].connected > 1: # account is online
connected_account = account
if gajim.contacts[account].has_key(jid):
for acct in accounts:
if gajim.connections[acct].connected > 1: # account is online
if self.plugin.windows[acct]['chats'].has_key(jid):
connected_account = acct
break
# jid is in roster
elif gajim.contacts[acct].has_key(jid):
connected_account = acct
break
# we send the message to jid not in roster, because account is specified,
# or there is only one account
elif account:
connected_account = acct
if connected_account:
self.plugin.roster.new_chat_from_jid(connected_account, jid)
# preserve the 'steal focus preservation'
win = self.plugin.windows[connected_account]['chats'][jid].window
if win.get_property('visible'):
win.window.focus()
return True
return False
def change_status(self, *args, **keywords):
''' change_status(status, message, account). account is optional -