Skip to content

Commit b609412

Browse files
committed
fix: allow cancel of started as well as in-progress transfers
cancel_transfer only looked for transfers whose status was 'in_progress', so a transfer that had been initialized but had not yet received data could not be cancelled. Include 'started' transfers in the search.
1 parent 18b23d7 commit b609412

2 files changed

Lines changed: 19 additions & 1 deletion

File tree

‎dccbot/manager.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ async def cancel_transfer(self, server: str, nick: str, filename: str) -> bool:
6666

6767
# Find the transfer in bot.current_transfers
6868
for dcc, transfer in bot.current_transfers.items():
69-
if transfer.get("filename") == filename and transfer.get("status") == "in_progress" and transfer.get("nick", "").lower() == nick:
69+
if transfer.get("filename") == filename and transfer.get("status") in ("started", "in_progress") and transfer.get("nick", "").lower() == nick:
7070
# Disconnect the DCC connection
7171
try:
7272
dcc.disconnect("Cancelled by user")

‎tests/unit/test_manager.py‎

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -355,6 +355,24 @@ async def test_cancel_transfer_matches_mixed_case_nick(manager):
355355
assert transfer["status"] == "cancelled"
356356

357357

358+
@pytest.mark.asyncio
359+
async def test_cancel_transfer_started_status(manager):
360+
"""Test cancel_transfer works for transfers that have not received data yet."""
361+
mock_bot = MagicMock()
362+
mock_dcc = MagicMock()
363+
transfer = {
364+
"filename": "test.txt",
365+
"status": "started",
366+
"nick": "sender",
367+
}
368+
mock_bot.current_transfers = {mock_dcc: transfer}
369+
manager.bots = {"irc.example.com": mock_bot}
370+
371+
result = await manager.cancel_transfer("irc.example.com", "sender", "test.txt")
372+
assert result is True
373+
assert transfer["status"] == "cancelled"
374+
375+
358376
@pytest.mark.asyncio
359377
async def test_cancel_transfer_not_found(manager):
360378
"""Test transfer cancellation when transfer not found."""

0 commit comments

Comments
 (0)