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

Reply via email to