srctree

Robin Linden parent 6779b23a a86291c0
Clean out stale file transfers when restarting Tox

inlinesplit
atox/src/main/kotlin/tox/ToxStarter.kt added: 24, removed: 4, total 20
@@ -8,6 +8,7 @@ import android.util.Log
import im.tox.tox4j.core.exceptions.ToxNewException
import javax.inject.Inject
import ltd.evilcorp.atox.ToxService
import ltd.evilcorp.domain.feature.FileTransferManager
import ltd.evilcorp.domain.feature.UserManager
import ltd.evilcorp.domain.tox.PublicKey
import ltd.evilcorp.domain.tox.SaveManager
@@ -19,6 +20,7 @@ import ltd.evilcorp.domain.tox.ToxEventListener
private const val TAG = "ToxStarter"
 
class ToxStarter @Inject constructor(
private val fileTransferManager: FileTransferManager,
private val saveManager: SaveManager,
private val userManager: UserManager,
private val listenerCallbacks: EventListenerCallbacks,
@@ -38,6 +40,9 @@ class ToxStarter @Inject constructor(
),
eventListener, avEventListener
)
// This can stay alive across core restarts and it doesn't work well when toxcore resets its numbers
fileTransferManager.reset()
 
startService()
true
} catch (e: ToxNewException) {
 
core/src/main/kotlin/db/FileTransferDao.kt added: 24, removed: 4, total 20
@@ -7,6 +7,7 @@ import androidx.room.OnConflictStrategy
import androidx.room.Query
import kotlinx.coroutines.flow.Flow
import ltd.evilcorp.core.vo.FileTransfer
import ltd.evilcorp.core.vo.FtRejected
 
@Dao
internal interface FileTransferDao {
@@ -24,4 +25,7 @@ internal interface FileTransferDao {
 
@Query("UPDATE file_transfers SET destination = :destination WHERE id == :id")
fun setDestination(id: Int, destination: String)
 
@Query("UPDATE file_transfers SET progress = :progress WHERE progress < file_size")
fun resetTransientData(progress: Long = FtRejected)
}
 
core/src/main/kotlin/repository/FileTransferRepository.kt added: 24, removed: 4, total 20
@@ -24,4 +24,6 @@ class FileTransferRepository @Inject internal constructor(
 
fun updateProgress(id: Int, progress: Long) =
dao.updateProgress(id, progress)
 
fun resetTransientData() = dao.resetTransientData()
}
 
domain/src/main/kotlin/feature/FileTransferManager.kt added: 24, removed: 4, total 20
@@ -12,6 +12,8 @@ import java.io.RandomAccessFile
import java.util.Date
import javax.inject.Inject
import javax.inject.Singleton
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import ltd.evilcorp.core.repository.ContactRepository
import ltd.evilcorp.core.repository.FileTransferRepository
import ltd.evilcorp.core.repository.MessageRepository
@@ -41,6 +43,13 @@ class FileTransferManager @Inject constructor(
) {
private val fileTransfers: MutableList<FileTransfer> = mutableListOf()
 
fun reset() {
fileTransfers.clear()
GlobalScope.launch {
fileTransferRepository.resetTransientData()
}
}
 
fun add(ft: FileTransfer) {
Log.i(TAG, "Add ${ft.fileNumber} for ${ft.publicKey.take(8)}")
when (ft.fileKind) {