[misc] ability to send messages to a group or to several contacts. fixes #1823
This commit is contained in:
parent
1add317cc9
commit
28dee0867f
|
@ -1463,8 +1463,12 @@ class SingleMessageWindow:
|
||||||
self.cancel_button = self.xml.get_widget('cancel_button')
|
self.cancel_button = self.xml.get_widget('cancel_button')
|
||||||
self.close_button = self.xml.get_widget('close_button')
|
self.close_button = self.xml.get_widget('close_button')
|
||||||
self.message_tv_buffer.connect('changed', self.update_char_counter)
|
self.message_tv_buffer.connect('changed', self.update_char_counter)
|
||||||
|
if type(to) == type([]):
|
||||||
self.to_entry.set_text(to)
|
jid = ', '.join( [i[0].jid + '/' + i[0].resource for i in to])
|
||||||
|
self.to_entry.set_text(jid)
|
||||||
|
self.to_entry.set_sensitive(False)
|
||||||
|
else:
|
||||||
|
self.to_entry.set_text(to)
|
||||||
|
|
||||||
if gajim.config.get('use_speller') and HAS_GTK_SPELL and action == 'send':
|
if gajim.config.get('use_speller') and HAS_GTK_SPELL and action == 'send':
|
||||||
try:
|
try:
|
||||||
|
@ -1616,22 +1620,27 @@ class SingleMessageWindow:
|
||||||
ErrorDialog(_('Connection not available'),
|
ErrorDialog(_('Connection not available'),
|
||||||
_('Please make sure you are connected with "%s".') % self.account)
|
_('Please make sure you are connected with "%s".') % self.account)
|
||||||
return
|
return
|
||||||
to_whom_jid = self.to_entry.get_text().decode('utf-8')
|
if type(self.to) == type([]):
|
||||||
if self.completion_dict.has_key(to_whom_jid):
|
sender_list = [i[0].jid + '/' + i[0].resource for i in self.to]
|
||||||
to_whom_jid = self.completion_dict[to_whom_jid].jid
|
else:
|
||||||
subject = self.subject_entry.get_text().decode('utf-8')
|
sender_list = [self.to_entry.get_text().decode('utf-8')]
|
||||||
begin, end = self.message_tv_buffer.get_bounds()
|
|
||||||
message = self.message_tv_buffer.get_text(begin, end).decode('utf-8')
|
for to_whom_jid in sender_list:
|
||||||
|
if self.completion_dict.has_key(to_whom_jid):
|
||||||
|
to_whom_jid = self.completion_dict[to_whom_jid].jid
|
||||||
|
subject = self.subject_entry.get_text().decode('utf-8')
|
||||||
|
begin, end = self.message_tv_buffer.get_bounds()
|
||||||
|
message = self.message_tv_buffer.get_text(begin, end).decode('utf-8')
|
||||||
|
|
||||||
if to_whom_jid.find('/announce/') != -1:
|
if to_whom_jid.find('/announce/') != -1:
|
||||||
gajim.connections[self.account].send_motd(to_whom_jid, subject,
|
gajim.connections[self.account].send_motd(to_whom_jid, subject,
|
||||||
message)
|
message)
|
||||||
return
|
return
|
||||||
|
|
||||||
# FIXME: allow GPG message some day
|
# FIXME: allow GPG message some day
|
||||||
gajim.connections[self.account].send_message(to_whom_jid, message,
|
gajim.connections[self.account].send_message(to_whom_jid, message,
|
||||||
keyID = None, type = 'normal', subject=subject)
|
keyID = None, type = 'normal', subject=subject)
|
||||||
|
|
||||||
self.subject_entry.set_text('') # we sent ok, clear the subject
|
self.subject_entry.set_text('') # we sent ok, clear the subject
|
||||||
self.message_tv_buffer.set_text('') # we sent ok, clear the textview
|
self.message_tv_buffer.set_text('') # we sent ok, clear the textview
|
||||||
|
|
||||||
|
|
|
@ -1432,6 +1432,8 @@ class RosterWindow:
|
||||||
contact = None):
|
contact = None):
|
||||||
if contact is None:
|
if contact is None:
|
||||||
dialogs.SingleMessageWindow(account, action = 'send')
|
dialogs.SingleMessageWindow(account, action = 'send')
|
||||||
|
elif type(contact) == type([]):
|
||||||
|
dialogs.SingleMessageWindow(account, contact, 'send')
|
||||||
else:
|
else:
|
||||||
jid = contact.jid
|
jid = contact.jid
|
||||||
if contact.jid == gajim.get_jid_from_account(account):
|
if contact.jid == gajim.get_jid_from_account(account):
|
||||||
|
@ -1863,6 +1865,19 @@ class RosterWindow:
|
||||||
edit_groups_item = gtk.MenuItem(_('Edit _Groups'))
|
edit_groups_item = gtk.MenuItem(_('Edit _Groups'))
|
||||||
menu.append(edit_groups_item)
|
menu.append(edit_groups_item)
|
||||||
edit_groups_item.connect('activate', self.on_edit_groups, list_)
|
edit_groups_item.connect('activate', self.on_edit_groups, list_)
|
||||||
|
|
||||||
|
account = None
|
||||||
|
for (contact, current_account) in list_:
|
||||||
|
# check that we use the same account for every sender
|
||||||
|
if account is not None and account != current_account:
|
||||||
|
account = None
|
||||||
|
break
|
||||||
|
account = current_account
|
||||||
|
if account is not None:
|
||||||
|
send_group_message_item = gtk.MenuItem(_('Send Group M_essage'))
|
||||||
|
menu.append(send_group_message_item)
|
||||||
|
send_group_message_item.connect('activate',
|
||||||
|
self.on_send_single_message_menuitem_activate, account, list_)
|
||||||
|
|
||||||
# unsensitive if one account is not connected
|
# unsensitive if one account is not connected
|
||||||
if one_account_offline:
|
if one_account_offline:
|
||||||
|
@ -1881,24 +1896,51 @@ class RosterWindow:
|
||||||
path = model.get_path(iter)
|
path = model.get_path(iter)
|
||||||
group = model[iter][C_JID].decode('utf-8')
|
group = model[iter][C_JID].decode('utf-8')
|
||||||
account = model[iter][C_ACCOUNT].decode('utf-8')
|
account = model[iter][C_ACCOUNT].decode('utf-8')
|
||||||
if group in helpers.special_groups + (_('General'),):
|
|
||||||
return
|
|
||||||
|
|
||||||
menu = gtk.Menu()
|
menu = gtk.Menu()
|
||||||
|
if not group in helpers.special_groups + (_('General'),):
|
||||||
|
|
||||||
rename_item = gtk.ImageMenuItem(_('Re_name'))
|
rename_item = gtk.ImageMenuItem(_('Re_name'))
|
||||||
# add a special img for rename menuitem
|
# add a special img for rename menuitem
|
||||||
path_to_kbd_input_img = os.path.join(gajim.DATA_DIR, 'pixmaps',
|
path_to_kbd_input_img = os.path.join(gajim.DATA_DIR, 'pixmaps',
|
||||||
'kbd_input.png')
|
'kbd_input.png')
|
||||||
img = gtk.Image()
|
img = gtk.Image()
|
||||||
img.set_from_file(path_to_kbd_input_img)
|
img.set_from_file(path_to_kbd_input_img)
|
||||||
rename_item.set_image(img)
|
rename_item.set_image(img)
|
||||||
menu.append(rename_item)
|
menu.append(rename_item)
|
||||||
rename_item.connect('activate', self.on_rename, iter, path)
|
rename_item.connect('activate', self.on_rename, iter, path)
|
||||||
|
|
||||||
|
# unsensitive if account is not connected
|
||||||
|
if gajim.connections[account].connected < 2:
|
||||||
|
rename_item.set_sensitive(False)
|
||||||
|
send_group_message_item = gtk.MenuItem(_('Send Group M_essage'))
|
||||||
|
|
||||||
|
send_group_message_submenu = gtk.Menu()
|
||||||
|
send_group_message_item.set_submenu(send_group_message_submenu)
|
||||||
|
menu.append(send_group_message_item)
|
||||||
|
|
||||||
|
group_message_to_all_item = gtk.MenuItem(_('To all users'))
|
||||||
|
send_group_message_submenu.append(group_message_to_all_item)
|
||||||
|
|
||||||
|
group_message_to_all_online_item = gtk.MenuItem(_('To all online users'))
|
||||||
|
send_group_message_submenu.append(group_message_to_all_online_item)
|
||||||
|
list_ = [] # list of (jid, account) tuples
|
||||||
|
list_online = [] # list of (jid, account) tuples
|
||||||
|
|
||||||
|
group = model[iter][C_NAME]
|
||||||
|
for jid in gajim.contacts.get_jid_list(account):
|
||||||
|
contact = gajim.contacts.get_contact_with_highest_priority(account,
|
||||||
|
jid)
|
||||||
|
if group in contact.groups or (contact.groups == [] and group == _('General')):
|
||||||
|
if contact.show not in ('offline', 'error'):
|
||||||
|
list_online.append((contact, account))
|
||||||
|
list_.append((contact, account))
|
||||||
|
|
||||||
|
group_message_to_all_online_item.connect('activate',
|
||||||
|
self.on_send_single_message_menuitem_activate, account, list_online)
|
||||||
|
group_message_to_all_item.connect('activate',
|
||||||
|
self.on_send_single_message_menuitem_activate, account, list_)
|
||||||
|
|
||||||
# unsensitive if account is not connected
|
|
||||||
if gajim.connections[account].connected < 2:
|
|
||||||
rename_item.set_sensitive(False)
|
|
||||||
|
|
||||||
event_button = gtkgui_helpers.get_possible_button_event(event)
|
event_button = gtkgui_helpers.get_possible_button_event(event)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue