| ... |
... |
@@ -24,6 +24,7 @@ |
|
24
|
24
|
import io
|
|
25
|
25
|
from urllib.parse import urlparse
|
|
26
|
26
|
import mimetypes
|
|
|
27
|
+from collections import defaultdict
|
|
27
|
28
|
|
|
28
|
29
|
from nbxmpp.errors import StanzaError
|
|
29
|
30
|
from nbxmpp.errors import MalformedStanzaError
|
| ... |
... |
@@ -69,7 +70,7 @@ def __init__(self, con: types.Client) -> None: |
|
69
|
70
|
self._session.props.user_agent = f'Gajim {app.version}'
|
|
70
|
71
|
|
|
71
|
72
|
self._running_transfers: dict[
|
|
72
|
|
- tuple[str, str], set[HTTPFileTransfer]] = {}
|
|
|
73
|
+ tuple[str, JID], set[HTTPFileTransfer]] = defaultdict(set)
|
|
73
|
74
|
|
|
74
|
75
|
def _set_proxy_if_available(self) -> None:
|
|
75
|
76
|
proxy = get_account_proxy(self._account)
|
| ... |
... |
@@ -102,7 +103,7 @@ def get_running_transfers(self, |
|
102
|
103
|
contact: types.ChatContactT
|
|
103
|
104
|
) -> Optional[set[HTTPFileTransfer]]:
|
|
104
|
105
|
|
|
105
|
|
- return self._running_transfers.get((contact.account, str(contact.jid)))
|
|
|
106
|
+ return self._running_transfers.get((contact.account, contact.jid))
|
|
106
|
107
|
|
|
107
|
108
|
def make_transfer(self,
|
|
108
|
109
|
path: str,
|
| ... |
... |
@@ -148,22 +149,16 @@ def make_transfer(self, |
|
148
|
149
|
encryption,
|
|
149
|
150
|
groupchat)
|
|
150
|
151
|
|
|
151
|
|
- running_transfers = self._running_transfers.get(
|
|
152
|
|
- (contact.account, str(contact.jid)))
|
|
153
|
|
- if running_transfers is None:
|
|
154
|
|
- self._running_transfers[
|
|
155
|
|
- (contact.account, str(contact.jid))] = {transfer}
|
|
156
|
|
- else:
|
|
157
|
|
- running_transfers.add(transfer)
|
|
|
152
|
+ key = (contact.account, contact.jid)
|
|
|
153
|
+ self._running_transfers[key].add(transfer)
|
|
158
|
154
|
|
|
159
|
155
|
return transfer
|
|
160
|
156
|
|
|
161
|
157
|
def cancel_transfer(self, transfer: HTTPFileTransfer) -> None:
|
|
162
|
158
|
transfer.set_cancelled()
|
|
163
|
|
- transfer_set = self._running_transfers.get(
|
|
164
|
|
- (transfer.account, str(transfer.contact.jid)))
|
|
165
|
|
- if transfer_set is not None:
|
|
166
|
|
- transfer_set.discard(transfer)
|
|
|
159
|
+
|
|
|
160
|
+ key = (transfer.account, transfer.contact.jid)
|
|
|
161
|
+ self._running_transfers[key].discard(transfer)
|
|
167
|
162
|
|
|
168
|
163
|
message = self._queued_messages.get(id(transfer))
|
|
169
|
164
|
if message is None:
|
| ... |
... |
@@ -285,12 +280,11 @@ def _on_finish(self, |
|
285
|
280
|
message: Soup.Message,
|
|
286
|
281
|
transfer: HTTPFileTransfer
|
|
287
|
282
|
) -> None:
|
|
|
283
|
+
|
|
288
|
284
|
self._queued_messages.pop(id(transfer), None)
|
|
289
|
285
|
|
|
290
|
|
- transfer_set = self._running_transfers.get(
|
|
291
|
|
- (transfer.account, str(transfer.contact.jid)))
|
|
292
|
|
- if transfer_set is not None:
|
|
293
|
|
- transfer_set.discard(transfer)
|
|
|
286
|
+ key = (transfer.account, transfer.contact.jid)
|
|
|
287
|
+ self._running_transfers[key].discard(transfer)
|
|
294
|
288
|
|
|
295
|
289
|
if message.props.status_code == Soup.Status.CANCELLED:
|
|
296
|
290
|
self._log.info('Upload cancelled')
|