AeroToss: исправлена отмена передачи

- Добавлен activeSockets для хранения сокетов при передаче
- cancelTransfer закрывает сокет + отменяет корутину + обновляет состояние
- Исправлено на обеих платформах (Desktop + Android)
This commit is contained in:
2026-08-20 00:24:42 +03:00
parent 12ceb58868
commit ce59cc5e1b
2 changed files with 8 additions and 0 deletions
@@ -37,6 +37,7 @@ class AndroidFileTransferManager(private val context: Context) : TransferManager
private var serverThread: Thread? = null
private val scope = CoroutineScope(Dispatchers.IO + SupervisorJob())
private val activeJobs = ConcurrentHashMap<String, Job>()
private val activeSockets = ConcurrentHashMap<String, Socket>()
private val running = AtomicBoolean(false)
private val connectionLimiter = Semaphore(10)
@@ -220,6 +221,7 @@ class AndroidFileTransferManager(private val context: Context) : TransferManager
val job = scope.launch {
try {
val socket = Socket(targetHost, targetPort)
activeSockets[requestId] = socket
socket.use { sock ->
sock.soTimeout = 30_000
val input = DataInputStream(sock.getInputStream())
@@ -300,6 +302,8 @@ class AndroidFileTransferManager(private val context: Context) : TransferManager
override fun cancelTransfer(requestId: String) {
activeJobs[requestId]?.cancel()
activeJobs.remove(requestId)
activeSockets[requestId]?.let { try { it.close() } catch (_: Exception) {} }
activeSockets.remove(requestId)
updateOutgoingById(requestId, _outgoingTransfers.value.find { it.id == requestId }?.copy(
state = TransferState.CANCELLED
) ?: return)
@@ -31,6 +31,7 @@ class DesktopFileTransferManager : TransferManager {
}
private val transferStates = ConcurrentHashMap<String, MutableStateFlow<TransferProgress>>()
private val activeSockets = ConcurrentHashMap<String, Socket>()
private var serverSocket: ServerSocket? = null
private var serverThread: Thread? = null
@@ -218,6 +219,7 @@ class DesktopFileTransferManager : TransferManager {
val job = scope.launch {
try {
val socket = Socket(targetHost, targetPort)
activeSockets[requestId] = socket
socket.use { sock ->
sock.soTimeout = 30_000
val input = DataInputStream(sock.getInputStream())
@@ -292,6 +294,8 @@ class DesktopFileTransferManager : TransferManager {
override fun cancelTransfer(requestId: String) {
activeJobs[requestId]?.cancel()
activeJobs.remove(requestId)
activeSockets[requestId]?.let { try { it.close() } catch (_: Exception) {} }
activeSockets.remove(requestId)
transferStates[requestId]?.let { flow ->
flow.value = flow.value.copy(state = TransferState.CANCELLED)
updateOutgoing(flow.value)