36 lines
936 B
Kotlin
36 lines
936 B
Kotlin
|
|
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
|
||
|
|
}
|