we can now drag a file and drop it in contact and it will initiate file transfer!
This commit is contained in:
parent
48860ef25b
commit
a629c31426
|
@ -1675,6 +1675,8 @@ _('Connection with peer cannot be established.')).get_response()
|
||||||
self.tree.get_selection().unselect_all()
|
self.tree.get_selection().unselect_all()
|
||||||
|
|
||||||
def show_file_send_request(self, account, contact):
|
def show_file_send_request(self, account, contact):
|
||||||
|
#FIXME: user better name for this function
|
||||||
|
#atm it's like it shows popup for incoming file transfer request
|
||||||
dialog = gtk.FileChooserDialog(title=_('Choose File to Send...'),
|
dialog = gtk.FileChooserDialog(title=_('Choose File to Send...'),
|
||||||
action=gtk.FILE_CHOOSER_ACTION_OPEN,
|
action=gtk.FILE_CHOOSER_ACTION_OPEN,
|
||||||
buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL))
|
buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL))
|
||||||
|
@ -1688,17 +1690,20 @@ _('Connection with peer cannot be established.')).get_response()
|
||||||
response = dialog.run()
|
response = dialog.run()
|
||||||
if response == gtk.RESPONSE_OK:
|
if response == gtk.RESPONSE_OK:
|
||||||
file_path = unicode(dialog.get_filename(), 'utf-8')
|
file_path = unicode(dialog.get_filename(), 'utf-8')
|
||||||
(file_dir, file_name) = os.path.split(file_path)
|
|
||||||
if file_dir:
|
if file_dir:
|
||||||
self.last_save_dir = file_dir
|
self.last_save_dir = file_dir
|
||||||
file_props = self.get_send_file_props(account, contact,
|
|
||||||
file_path, file_name)
|
|
||||||
dialog.destroy()
|
dialog.destroy()
|
||||||
self.add_transfer(account, contact, file_props)
|
self.send_file(account, contact, file_path)
|
||||||
gajim.connections[account].send_file_request(file_props)
|
|
||||||
else:
|
else:
|
||||||
dialog.destroy()
|
dialog.destroy()
|
||||||
|
|
||||||
|
def send_file(self, account, contact, file_path):
|
||||||
|
(file_dir, file_name) = os.path.split(file_path)
|
||||||
|
file_props = self.get_send_file_props(account, contact,
|
||||||
|
file_path, file_name)
|
||||||
|
self.add_transfer(account, contact, file_props)
|
||||||
|
gajim.connections[account].send_file_request(file_props)
|
||||||
|
|
||||||
def show_file_request(self, account, contact, file_props):
|
def show_file_request(self, account, contact, file_props):
|
||||||
if file_props is None or not file_props.has_key('name'):
|
if file_props is None or not file_props.has_key('name'):
|
||||||
return
|
return
|
||||||
|
|
|
@ -24,6 +24,7 @@ import gobject
|
||||||
import time
|
import time
|
||||||
import urllib
|
import urllib
|
||||||
import base64
|
import base64
|
||||||
|
import os
|
||||||
|
|
||||||
import dialogs
|
import dialogs
|
||||||
import chat
|
import chat
|
||||||
|
@ -50,6 +51,8 @@ class TabbedChatWindow(chat.Chat):
|
||||||
self.possible_paused_timeout_id = {}
|
self.possible_paused_timeout_id = {}
|
||||||
# keep check for possible inactive timeouts per jid
|
# keep check for possible inactive timeouts per jid
|
||||||
self.possible_inactive_timeout_id = {}
|
self.possible_inactive_timeout_id = {}
|
||||||
|
self.TARGET_TYPE_TEXT = 80
|
||||||
|
self.dnd_list = [ ( 'text/plain', 0, self.TARGET_TYPE_TEXT ) ]
|
||||||
self.new_user(user)
|
self.new_user(user)
|
||||||
self.show_title()
|
self.show_title()
|
||||||
|
|
||||||
|
@ -99,6 +102,16 @@ class TabbedChatWindow(chat.Chat):
|
||||||
self.mouse_over_in_last_5_secs = True
|
self.mouse_over_in_last_5_secs = True
|
||||||
self.mouse_over_in_last_30_secs = True
|
self.mouse_over_in_last_30_secs = True
|
||||||
|
|
||||||
|
def on_drag_data_received(self, widget, context, x, y, selection, target_type,
|
||||||
|
timestamp, contact):
|
||||||
|
if target_type == self.TARGET_TYPE_TEXT:
|
||||||
|
path = selection.data.strip() # get path to file
|
||||||
|
if path.startswith('file://'):
|
||||||
|
path = path[7:] # 7 is len('file://')
|
||||||
|
if os.path.isfile(path): # is it file?
|
||||||
|
self.plugin.windows['file_transfers'].send_file(self.account,
|
||||||
|
contact, path)
|
||||||
|
|
||||||
def draw_widgets(self, contact):
|
def draw_widgets(self, contact):
|
||||||
"""draw the widgets in a tab (status_image, contact_button ...)
|
"""draw the widgets in a tab (status_image, contact_button ...)
|
||||||
according to the the information in the contact variable"""
|
according to the the information in the contact variable"""
|
||||||
|
@ -341,6 +354,13 @@ class TabbedChatWindow(chat.Chat):
|
||||||
self.childs[contact.jid] = self.xmls[contact.jid].get_widget('chats_vbox')
|
self.childs[contact.jid] = self.xmls[contact.jid].get_widget('chats_vbox')
|
||||||
self.contacts[contact.jid] = contact
|
self.contacts[contact.jid] = contact
|
||||||
|
|
||||||
|
|
||||||
|
self.childs[contact.jid].connect('drag_data_received',
|
||||||
|
self.on_drag_data_received, contact)
|
||||||
|
self.childs[contact.jid].drag_dest_set( gtk.DEST_DEFAULT_MOTION |
|
||||||
|
gtk.DEST_DEFAULT_HIGHLIGHT | gtk.DEST_DEFAULT_DROP,
|
||||||
|
self.dnd_list, gtk.gdk.ACTION_COPY)
|
||||||
|
|
||||||
message_textview = self.xmls[contact.jid].get_widget('message_textview')
|
message_textview = self.xmls[contact.jid].get_widget('message_textview')
|
||||||
message_tv_buffer = message_textview.get_buffer()
|
message_tv_buffer = message_textview.get_buffer()
|
||||||
message_tv_buffer.connect('insert-text',
|
message_tv_buffer.connect('insert-text',
|
||||||
|
|
Loading…
Reference in New Issue