diff --git a/src/dialogs.py b/src/dialogs.py index 24184857e..18788ce2a 100644 --- a/src/dialogs.py +++ b/src/dialogs.py @@ -1069,11 +1069,11 @@ class PopupNotificationWindow: txt = gajim.contacts[account][self.jid][0].name else: txt = self.jid - event_description_label.set_text(txt) # set colors [ http://www.w3schools.com/html/html_colornames.asp ] self.window.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse('black')) + if event_type == _('Contact Signed In'): limegreen = gtk.gdk.color_parse('limegreen') close_button.modify_bg(gtk.STATE_NORMAL, limegreen) @@ -1093,6 +1093,7 @@ class PopupNotificationWindow: close_button.modify_bg(gtk.STATE_NORMAL, bg_color) eventbox.modify_bg(gtk.STATE_NORMAL, bg_color) txt = _('From %s') % txt + elif event_type in [_('File Transfer Completed'), _('File Transfer Stopped')]: bg_color = gtk.gdk.color_parse('coral') close_button.modify_bg(gtk.STATE_NORMAL, bg_color) @@ -1160,17 +1161,10 @@ class PopupNotificationWindow: self.account, contact, self.file_props) elif self.msg_type == 'file-completed': # it's file request # FIXME: comment - sectext = '\t' + _('Filename: %s') % self.file_props['name'] - sectext += '\n\t' + _('Size: %s') % \ - gtkgui_helpers.convert_bytes(self.file_props['size']) - sectext += '\n\t' +_('Sender: %s') % self.jid - InformationDialog(_('File transfer completed'), sectext).get_response() - + self.plugin.windows['file_transfers'].show_completed(self.jid, file_props) + elif self.msg_type == 'file-stopped': # it's file request # FIXME: comment - sectext = '\t' + _('Filename: %s') % self.file_props['name'] - sectext += '\n\t' + _('Sender: %s') % self.jid - ErrorDialog(_('File transfer stopped by the contact of the other side'), \ - sectext).get_response() + self.plugin.windows['file_transfers'].show_stopped(self.jid, file_props) else: # 'chat' self.plugin.roster.new_chat(contact, self.account) @@ -1450,7 +1444,30 @@ class FileTransfersWindow: self.set_images() self.tree.get_selection().set_select_function(self.select_func) self.xml.signal_autoconnect(self) - + + def show_completed(self, jid, file_props): + self.window.present() + self.window.window.focus() + sectext = '\t' + _('Filename: %s') % \ + gtkgui_helpers.escape_for_pango_markup(file_props['name']) + sectext += '\n\t' + _('Size: %s') % \ + gtkgui_helpers.convert_bytes(file_props['size']) + sectext += '\n\t' +_('Sender: %s') % \ + gtkgui_helpers.escape_for_pango_markup(jid) + InformationDialog(_('File transfer completed'), sectext).get_response() + self.tree.get_selection().unselect_all() + + def show_stopped(self, jid, file_props): + self.window.present() + self.window.window.focus() + sectext = '\t' + _('Filename: %s') % \ + gtkgui_helpers.escape_for_pango_markup(file_props['name']) + sectext += '\n\t' + _('Sender: %s') % \ + gtkgui_helpers.escape_for_pango_markup(jid) + ErrorDialog(_('File transfer stopped by the contact of the other side'), \ + sectext).get_response() + self.tree.get_selection().unselect_all() + def show_file_send_request(self, account, contact): dialog = gtk.FileChooserDialog(title=_('Open File...'), action=gtk.FILE_CHOOSER_ACTION_OPEN, @@ -1477,14 +1494,17 @@ class FileTransfersWindow: def show_file_request(self, account, contact, file_props): if file_props is None or not file_props.has_key('name'): return - sec_text = '\t' + _('File: %s') % file_props['name'] + sec_text = '\t' + _('File: %s') % \ + gtkgui_helpers.escape_for_pango_markup(file_props['name']) if file_props.has_key('size'): sec_text += '\n\t' + _('Size: %s') % \ gtkgui_helpers.convert_bytes(file_props['size']) if file_props.has_key('mime-type'): - sec_text += '\n\t' + _('Type: %s') % file_props['mime-type'] + sec_text += '\n\t' + _('Type: %s') % \ + gtkgui_helpers.escape_for_pango_markup(file_props['mime-type']) if file_props.has_key('desc'): - sec_text += '\n\t' + _('Description: %s') % file_props['desc'] + sec_text += '\n\t' + _('Description: %s') % \ + gtkgui_helpers.escape_for_pango_markup(file_props['desc']) prim_text = _('%s wants to send you a file:') % contact.jid dialog = ConfirmationDialog(prim_text, sec_text) if dialog.get_response() == gtk.RESPONSE_OK: @@ -1497,18 +1517,26 @@ class FileTransfersWindow: if self.last_save_dir and os.path.exists(self.last_save_dir) \ and os.path.isdir(self.last_save_dir): dialog.set_current_folder(self.last_save_dir) - response = dialog.run() - if response == gtk.RESPONSE_OK: - file_path = dialog.get_filename() - (file_dir, file_name) = os.path.split(file_path) - if file_dir: - self.last_save_dir = file_dir - file_props['file-name'] = file_path - self.add_transfer(account, contact, file_props) - gajim.connections[account].send_file_approval(file_props) - else: - gajim.connections[account].send_file_rejection(file_props) - dialog.destroy() + while True: + response = dialog.run() + if response == gtk.RESPONSE_OK: + file_path = dialog.get_filename() + if os.path.exists(file_path): + primtext = _('This file already exists') + sectext = _('Would you like to overwrite it?') + dialog2 = ConfirmationDialog(primtext, sectext) + if dialog2.get_response() != gtk.RESPONSE_OK: + continue + (file_dir, file_name) = os.path.split(file_path) + if file_dir: + self.last_save_dir = file_dir + file_props['file-name'] = file_path + self.add_transfer(account, contact, file_props) + gajim.connections[account].send_file_approval(file_props) + else: + gajim.connections[account].send_file_rejection(file_props) + dialog.destroy() + break else: gajim.connections[account].send_file_rejection(file_props) @@ -1605,8 +1633,8 @@ class FileTransfersWindow: text_labels += '' + _('Sender: ') + '' else: text_labels += '' + _('Recipient: ') + '' - text_props = file_props['name'] + '\n' - text_props += contact.name + text_props = gtkgui_helpers.escape_for_pango_markup(file_props['name']) + '\n' + text_props += gtkgui_helpers.escape_for_pango_markup(contact.name) self.model.set(iter, 1, text_labels, 2, text_props, 4, \ file_props['type'] + file_props['sid']) self.set_progress(file_props['type'], file_props['sid'], 0, iter) diff --git a/src/gajim.py b/src/gajim.py index 7955c670c..a84108a76 100755 --- a/src/gajim.py +++ b/src/gajim.py @@ -716,16 +716,21 @@ class Interface: return file_props = array[1] if gajim.config.get('notify_on_new_message'): - # check OUR status and if we allow notifications for that status - if gajim.config.get('autopopupaway') or \ - gajim.connections[account].connected in (2, 3): # we're online or chat - instance = dialogs.PopupNotificationWindow(self, - _('File Transfer Request'), jid, account, 'file', file_props) - self.roster.popup_notification_windows.append(instance) + # check if we should be notified + instance = dialogs.PopupNotificationWindow(self, + _('File Transfer Request'), jid, account, 'file', file_props) + self.roster.popup_notification_windows.append(instance) + elif (gajim.connections[account].connected in (2, 3) + and gajim.config.get('autopopup')) or \ + gajim.config.get('autopopupaway'): + contact = gajim.contacts[account][jid][0] + self.windows['file_transfers'].show_file_request( + account, contact, file_props) + def handle_event_file_progress(self, account, file_props): self.windows['file_transfers'].set_progress(file_props['type'], file_props['sid'], file_props['received-len']) - + def handle_event_file_rcv_completed(self, account, file_props): ft = self.windows['file_transfers'] if file_props['error'] == 0: @@ -733,21 +738,28 @@ class Interface: file_props['received-len']) else: ft.set_status(file_props['type'], file_props['sid'], 'stop') - if file_props['stalled'] or file_props['paused']: + if file_props.has_key('stalled') and file_props['stalled'] or \ + file_props.has_key('paused') and file_props['paused']: return + jid = str(file_props['sender']) if gajim.config.get('notify_on_file_complete'): - if gajim.config.get('autopopupaway') or \ - gajim.connections[account].connected in (2, 3): # we're online or chat + if (gajim.connections[account].connected in (2, 3) + and gajim.config.get('autopopup')) or \ + gajim.config.get('autopopupaway'): if file_props['error'] == 0: - msg_type = 'file-completed' - event_type = _('File Transfer Completed') + ft.show_completed(jid, file_props) elif file_props['error'] == -1: - msg_type = 'file-stopped' - event_type = _('File Transfer Stopped') - instance = dialogs.PopupNotificationWindow(self, event_type, - str(file_props['sender']), account, msg_type, file_props) - self.roster.popup_notification_windows.append(instance) - + ft.show_stopped(jid, file_props) + return + if file_props['error'] == 0: + msg_type = 'file-completed' + event_type = _('File Transfer Completed') + elif file_props['error'] == -1: + msg_type = 'file-stopped' + event_type = _('File Transfer Stopped') + instance = dialogs.PopupNotificationWindow(self, event_type, + jid, account, msg_type, file_props) + self.roster.popup_notification_windows.append(instance) def read_sleepy(self): '''Check idle status and change that status if needed''' if not self.sleeper.poll():