From 0758be7c14b58f07088bb254cc599db2e7ba5c02 Mon Sep 17 00:00:00 2001 From: Yann Leboulanger Date: Fri, 15 Jun 2007 17:38:14 +0000 Subject: [PATCH] ability to send a file to a groupchat occupant if we know his real JID --- data/glade/gc_occupants_menu.glade | 14 ++++++++++++++ src/chat_control.py | 19 +++++++++++++++---- src/groupchat_control.py | 17 +++++++++++++++-- 3 files changed, 44 insertions(+), 6 deletions(-) diff --git a/data/glade/gc_occupants_menu.glade b/data/glade/gc_occupants_menu.glade index c78fbd8e6..044a6bb4f 100644 --- a/data/glade/gc_occupants_menu.glade +++ b/data/glade/gc_occupants_menu.glade @@ -87,6 +87,20 @@ + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + Send _File + True + + + gtk-save + 1 + + + + True diff --git a/src/chat_control.py b/src/chat_control.py index f8f60aca6..57605e282 100644 --- a/src/chat_control.py +++ b/src/chat_control.py @@ -1504,7 +1504,10 @@ class ChatControl(ChatControlBase): # If we don't have resource, we can't do file transfer # in transports, contact holds our info we need to disable it too - if contact.resource and contact.jid.find('@') != -1: + if self.TYPE_ID == message_control.TYPE_PM and self.gc_contact.jid and \ + self.gc_contact.resource: + send_file_menuitem.set_sensitive(True) + elif contact.resource and contact.jid.find('@') != -1: send_file_menuitem.set_sensitive(True) else: send_file_menuitem.set_sensitive(False) @@ -1721,7 +1724,11 @@ class ChatControl(ChatControlBase): def _on_drag_data_received(self, widget, context, x, y, selection, target_type, timestamp): # If not resource, we can't send file - if not self.contact.resource: + if self.TYPE_ID == message_control.TYPE_PM: + c = self.gc_contact + else: + c = self.contact + if not c.resource: return if target_type == self.TARGET_TYPE_URI_LIST: uri = selection.data.strip() @@ -1730,7 +1737,7 @@ class ChatControl(ChatControlBase): path = helpers.get_file_path_from_dnd_dropped_uri(uri) if os.path.isfile(path): # is it file? ft = gajim.interface.instances['file_transfers'] - ft.send_file(self.account, self.contact, path) + ft.send_file(self.account, c, path) def _on_message_tv_buffer_changed(self, textbuffer): self.kbd_activity_in_last_5_secs = True @@ -1929,8 +1936,12 @@ class ChatControl(ChatControlBase): self.bigger_avatar_window.window.set_cursor(cursor) def _on_send_file_menuitem_activate(self, widget): + if self.TYPE_ID == message_control.TYPE_PM: + c = self.gc_contact + else: + c = self.contact gajim.interface.instances['file_transfers'].show_file_send_request( - self.account, self.contact) + self.account, c) def _on_add_to_roster_menuitem_activate(self, widget): dialogs.AddNewContactWindow(self.account, self.contact.jid) diff --git a/src/groupchat_control.py b/src/groupchat_control.py index 9fb48ae34..62449b525 100644 --- a/src/groupchat_control.py +++ b/src/groupchat_control.py @@ -822,6 +822,11 @@ class GroupchatControl(ChatControlBase): gajim.interface.msg_win_mgr.get_control(fjid, self.account).\ send_message(msg) + def on_send_file(self, widget, gc_contact): + '''sends a file to a contact in the room''' + gajim.interface.instances['file_transfers'].show_file_send_request( + self.account, gc_contact) + def draw_contact(self, nick, selected=False, focus=False): iter = self.get_contact_iter(nick) if not iter: @@ -1848,13 +1853,21 @@ class GroupchatControl(ChatControlBase): item = xml.get_widget('add_to_roster_menuitem') if not jid: item.set_sensitive(False) - id = item.connect('activate', self.on_add_to_roster, jid) - self.handlers[id] = item + else: + id = item.connect('activate', self.on_add_to_roster, jid) + self.handlers[id] = item item = xml.get_widget('send_private_message_menuitem') id = item.connect('activate', self.on_send_pm, model, iter) self.handlers[id] = item + item = xml.get_widget('send_file_menuitem') + if not c.resource: + item.set_sensitive(False) + else: + id = item.connect('activate', self.on_send_file, c) + self.handlers[id] = item + # show the popup now! menu = xml.get_widget('gc_occupants_menu') menu.show_all()