Daniel Brötzmann pushed to branch master at gajim / gajim
Commits: 04b7998d by wurstsalat at 2022-08-12T20:32:23+02:00 fix: FileTransferRow: Don’t cancel transfer when switching chat
- - - - - 61889089 by wurstsalat at 2022-08-12T20:32:23+02:00 imprv: Store and restore running HTTP File Transfer uploads
- - - - -
3 changed files:
- gajim/common/modules/httpupload.py - gajim/gtk/control.py - gajim/gtk/conversation/rows/file_transfer.py
Changes:
===================================== gajim/common/modules/httpupload.py ===================================== @@ -68,6 +68,9 @@ def __init__(self, con: types.Client) -> None: self._session.props.ssl_strict = False self._session.props.user_agent = f'Gajim {app.version}'
+ self._running_transfers: dict[ + tuple[str, str], set[HTTPFileTransfer]] = {} + def _set_proxy_if_available(self) -> None: proxy = get_account_proxy(self._account) if proxy is None: @@ -95,6 +98,12 @@ def pass_disco(self, info: DiscoInfo) -> None: GLib.FormatSizeFlags.IEC_UNITS) self._log.info('Component has a maximum file size of: %s', size)
+ def get_running_transfers(self, + contact: types.ChatContactT + ) -> Optional[set[HTTPFileTransfer]]: + + return self._running_transfers.get((contact.account, str(contact.jid))) + def make_transfer(self, path: str, encryption: Optional[str], @@ -132,15 +141,30 @@ def make_transfer(self, mime = 'application/octet-stream' # fallback mime type self._log.info('Detected MIME type of file: %s', mime)
- return HTTPFileTransfer(self._account, - path, - contact, - mime, - encryption, - groupchat) + transfer = HTTPFileTransfer(self._account, + path, + contact, + mime, + encryption, + groupchat) + + running_transfers = self._running_transfers.get( + (contact.account, str(contact.jid))) + if running_transfers is None: + self._running_transfers[ + (contact.account, str(contact.jid))] = {transfer} + else: + running_transfers.add(transfer) + + return transfer
def cancel_transfer(self, transfer: HTTPFileTransfer) -> None: transfer.set_cancelled() + transfer_set = self._running_transfers.get( + (transfer.account, str(transfer.contact.jid))) + if transfer_set is not None: + transfer_set.discard(transfer) + message = self._queued_messages.get(id(transfer)) if message is None: return @@ -263,6 +287,11 @@ def _on_finish(self, ) -> None: self._queued_messages.pop(id(transfer), None)
+ transfer_set = self._running_transfers.get( + (transfer.account, str(transfer.contact.jid))) + if transfer_set is not None: + transfer_set.discard(transfer) + if message.props.status_code == Soup.Status.CANCELLED: self._log.info('Upload cancelled') return
===================================== gajim/gtk/control.py ===================================== @@ -200,6 +200,12 @@ def switch_contact(self, contact: Union[BareContact,
self._client.get_module('Chatstate').set_active(contact)
+ transfers = self._client.get_module('HTTPUpload').get_running_transfers( + contact) + if transfers is not None: + for transfer in transfers: + self.add_file_transfer(transfer) + def process_event(self, event: events.MainEventT) -> None: if self._contact is None: return
===================================== gajim/gtk/conversation/rows/file_transfer.py ===================================== @@ -70,6 +70,8 @@ def __init__(self, account: str, transfer: HTTPFileTransfer) -> None: self._ui = get_builder('file_transfer.ui') self.grid.attach(self._ui.transfer_box, 1, 1, 1, 1) self._ui.file_name.set_text(transfer.filename) + self._ui.transfer_description.set_text( + transfer.get_state_description())
self.connect('destroy', self._on_destroy) self._ui.connect_signals(self) @@ -79,14 +81,14 @@ def __init__(self, account: str, transfer: HTTPFileTransfer) -> None: def _on_destroy(self, *args: Any) -> None: self._destroyed = True
- if self._transfer.state.is_active: - self._transfer.cancel() - del self._transfer if self._pulse is not None: GLib.source_remove(self._pulse)
def _on_cancel_clicked(self, _button: Gtk.Button) -> None: + if self._transfer.state.is_active: + self._transfer.cancel() + self.destroy()
def _on_transfer_state_change(self,
View it on GitLab: https://dev.gajim.org/gajim/gajim/-/compare/b24d9286cbe8e1fa106e41701911fb58...