AeroToss v0.4.0: полная реализация M1-M4

- KMP проект: Kotlin 2.3.21, Compose 1.11.1, Gradle 8.13, AGP 8.13.2
- Обнаружение устройств: mDNS (JMDNS/Android NSD) + Wi-Fi Direct P2P
- Передача файлов: Java Socket, стриминг чанками, SHA-256 checksum
- UI: HomeScreen, SendScreen, ReceiveScreen, навигация
- Защита: санитизация имён файлов (path traversal)
- 65+ тестов (WireProtocol, Transfer, FileUtils, Wi-Fi Direct)
This commit is contained in:
2026-08-19 17:19:47 +03:00
parent 3c56115f47
commit afc526d6e8
47 changed files with 3709 additions and 1 deletions
@@ -0,0 +1,35 @@
package com.aerotoss.model
enum class TransferState {
PENDING,
TRANSFERRING,
COMPLETED,
FAILED,
CANCELLED
}
data class TransferProgress(
val id: String,
val request: TransferRequest,
val bytesTransferred: Long,
val totalBytes: Long,
val state: TransferState,
val startTimeMs: Long = System.currentTimeMillis(),
val error: String? = null
) {
val progress: Float
get() = if (totalBytes > 0) bytesTransferred.toFloat() / totalBytes else 0f
val isComplete: Boolean
get() = state == TransferState.COMPLETED
val speed: Long
get() {
if (state != TransferState.TRANSFERRING || bytesTransferred == 0L) return 0L
val elapsed = (System.currentTimeMillis() - startTimeMs).coerceAtLeast(1)
return bytesTransferred * 1000 / elapsed
}
val elapsedMs: Long
get() = System.currentTimeMillis() - startTimeMs
}