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/b24d9286cbe8e1fa106e41701911fb584f999adc...61889089ad09bfba371c8adc3c6720062156714e
--
View it on GitLab:
https://dev.gajim.org/gajim/gajim/-/compare/b24d9286cbe8e1fa106e41701911fb584f999adc...61889089ad09bfba371c8adc3c6720062156714e
You're receiving this email because of your account on dev.gajim.org.
_______________________________________________
Commits mailing list
[email protected]
https://lists.gajim.org/cgi-bin/listinfo/commits