Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .github/workflows/dependent-issues.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,10 @@ on:
jobs:
check:
runs-on: ubuntu-latest
env:
# z0al/dependent-issues@v1.5.2 targets Node.js 20; allow it to run on
# Node.js 20 until the action is updated to support Node.js 24.
ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: 'true'
steps:
- uses: z0al/dependent-issues@v1.5.2
env:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ import com.infomaniak.multiplatform_swisstransfer.database.utils.FileUtilsForApi
import com.infomaniak.multiplatform_swisstransfer.exceptions.NotFoundException
import com.infomaniak.multiplatform_swisstransfer.exceptions.NullPropertyException
import com.infomaniak.multiplatform_swisstransfer.exceptions.UnsupportedTransferDeeplinkUrlException
import com.infomaniak.multiplatform_swisstransfer.mappers.toTransferDB
import com.infomaniak.multiplatform_swisstransfer.mappers.toTransferUi
import com.infomaniak.multiplatform_swisstransfer.mappers.toTransferUiList
import com.infomaniak.multiplatform_swisstransfer.mappers.toTransferUiListFlow
Expand Down Expand Up @@ -666,8 +667,7 @@ class TransferManager internal constructor(

private suspend fun addTransferV2(linkId: String, transferApi: TransferApiV2, password: String?) {
val userId = accountManager.currentUser?.id ?: return
val transferDB = TransferDB(
transfer = transferApi,
val transferDB = transferApi.toTransferDB(
linkId = linkId,
userOwnerId = userId,
direction = TransferDirection.RECEIVED,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ import androidx.room.immediateTransaction
import androidx.room.useWriterConnection
import androidx.sqlite.SQLiteException
import com.infomaniak.multiplatform_swisstransfer.common.exceptions.UnknownException
import com.infomaniak.multiplatform_swisstransfer.common.interfaces.transfers.v2.Transfer
import com.infomaniak.multiplatform_swisstransfer.common.interfaces.upload.UploadSessionRequest
import com.infomaniak.multiplatform_swisstransfer.common.models.TransferDirection
import com.infomaniak.multiplatform_swisstransfer.common.models.TransferStatus
Expand All @@ -31,12 +30,14 @@ import com.infomaniak.multiplatform_swisstransfer.database.dao.TransferDao
import com.infomaniak.multiplatform_swisstransfer.database.dao.UploadDao
import com.infomaniak.multiplatform_swisstransfer.database.models.transfers.v2.TransferDB
import com.infomaniak.multiplatform_swisstransfer.database.utils.FileUtilsForApiV2
import com.infomaniak.multiplatform_swisstransfer.mappers.toTransferDB
import com.infomaniak.multiplatform_swisstransfer.network.exceptions.ApiException.ApiV2ErrorException
import com.infomaniak.multiplatform_swisstransfer.network.exceptions.ApiException.UnexpectedApiErrorFormatException
import com.infomaniak.multiplatform_swisstransfer.network.exceptions.NetworkException
import com.infomaniak.multiplatform_swisstransfer.network.exceptions.TooManyRequestException
import com.infomaniak.multiplatform_swisstransfer.network.exceptions.UnauthorizedException
import com.infomaniak.multiplatform_swisstransfer.network.exceptions.UploadErrorsException
import com.infomaniak.multiplatform_swisstransfer.network.models.transfer.v2.TransferApi
import com.infomaniak.multiplatform_swisstransfer.network.models.upload.request.v2.ChunkEtag
import com.infomaniak.multiplatform_swisstransfer.network.models.upload.request.v2.CreateTransfer
import com.infomaniak.multiplatform_swisstransfer.network.models.upload.request.v2.TransferFile
Expand Down Expand Up @@ -89,7 +90,7 @@ class UploadV2Manager(
/**
* Prepare a transfer to be uploaded.
*
* @return The [Transfer] object to use for [uploadFileChunk] and [uploadFile],
* @return The [TransferApi] object to use for [uploadFileChunk] and [uploadFile],
* or [getUploadFileChunkUrl] and [getUploadFileUrl]
*
* @throws NetworkException If there is a network error.
Expand Down Expand Up @@ -122,7 +123,7 @@ class UploadV2Manager(
)
suspend fun prepareTransfer(
request: UploadSessionRequest,
): Transfer = withContext(Dispatchers.Default) {
): TransferApi = withContext(Dispatchers.Default) {
Comment thread
LouisCAD marked this conversation as resolved.
val userId = requireCurrentUserId()
transferDao.deleteAnyPendingTransfer(userId)

Expand All @@ -143,8 +144,7 @@ class UploadV2Manager(
recipients = request.recipientsEmails.toList()
)
uploadRepository.createTransfer(transferCreationPayload).also { apiTransfer ->
val transferToPersist = TransferDB(
transfer = apiTransfer,
val transferToPersist = apiTransfer.toTransferDB(
linkId = null,
password = transferCreationPayload.password,
direction = TransferDirection.SENT,
Expand All @@ -171,7 +171,7 @@ class UploadV2Manager(
* @throws CancellationException If the operation is canceled.
*/
@Throws(CancellationException::class, UnknownException::class)
suspend fun getPendingTransferIfAny(): Transfer? {
suspend fun getPendingTransferIfAny(): TransferDB? {
val userId = requireCurrentUserId()
return transferDao.getPendingTransfer(userId)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,25 +15,31 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.infomaniak.multiplatform_swisstransfer.common.interfaces.transfers.v2
package com.infomaniak.multiplatform_swisstransfer.mappers

import com.infomaniak.multiplatform_swisstransfer.common.models.TransferDirection
import com.infomaniak.multiplatform_swisstransfer.common.models.TransferStatus
import com.infomaniak.multiplatform_swisstransfer.database.models.transfers.v2.TransferDB
import com.infomaniak.multiplatform_swisstransfer.network.models.transfer.v2.TransferApi

interface Transfer {
val id: String
val senderEmail: String
val title: String?
val message: String?
val createdAt: Long
val expiresAt: Long
val files: List<File> get() = emptyList()
val totalSize: Long

//region Only local
val password: String? get() = null
val transferStatus: TransferStatus get() = TransferStatus.READY
val recipientsEmails: Set<String> get() = emptySet()
val linkId: String? get() = null
//endregion
}
internal fun TransferApi.toTransferDB(
direction: TransferDirection,
linkId: String?,
userOwnerId: Long,
password: String? = null,
status: TransferStatus = TransferStatus.READY,
): TransferDB = TransferDB(
id = id,
senderEmail = senderEmail,
title = title,
message = message,
createdAt = createdAt,
expiresAt = expiresAt,
totalSize = totalSize,
password = password,
transferDirection = direction,
transferStatus = status,
recipientsEmails = emptySet(),
linkId = linkId,
userOwnerId = userOwnerId,
)
Original file line number Diff line number Diff line change
Expand Up @@ -20,56 +20,29 @@ package com.infomaniak.multiplatform_swisstransfer.database.models.transfers.v2
import androidx.room.Entity
import androidx.room.Ignore
import androidx.room.PrimaryKey
import com.infomaniak.multiplatform_swisstransfer.common.interfaces.transfers.v2.File
import com.infomaniak.multiplatform_swisstransfer.common.interfaces.transfers.v2.Transfer
import com.infomaniak.multiplatform_swisstransfer.common.models.TransferDirection
import com.infomaniak.multiplatform_swisstransfer.common.models.TransferStatus

@Entity
data class TransferDB(
@PrimaryKey
override val id: String,
override val senderEmail: String,
override val title: String?,
override val message: String?,
override val createdAt: Long,
override val expiresAt: Long,
override val totalSize: Long,
val id: String,
val senderEmail: String,
val title: String?,
val message: String?,
val createdAt: Long,
val expiresAt: Long,
val totalSize: Long,
// Local
override val password: String? = null,
val password: String? = null,
val transferDirection: TransferDirection,
override val transferStatus: TransferStatus,
override val recipientsEmails: Set<String> = emptySet(),
override val linkId: String? = null,
val transferStatus: TransferStatus,
val recipientsEmails: Set<String> = emptySet(),
val linkId: String? = null,
val userOwnerId: Long,
//TODO[ST-v2]: Add language
) : Transfer {
) {
@Ignore
override var files: List<File> = emptyList()
var files: List<FileDB> = emptyList()
internal set

constructor(
transfer: Transfer,
direction: TransferDirection,
linkId: String?,
userOwnerId: Long,
password: String? = transfer.password,
status: TransferStatus = transfer.transferStatus
) : this(
id = transfer.id,
senderEmail = transfer.senderEmail,
title = transfer.title,
message = transfer.message,
createdAt = transfer.createdAt,
expiresAt = transfer.expiresAt,
totalSize = transfer.totalSize,
password = password,
transferDirection = direction,
transferStatus = status,
recipientsEmails = transfer.recipientsEmails,
linkId = linkId,
userOwnerId = userOwnerId
) {
this.files = transfer.files
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
*/
package com.infomaniak.multiplatform_swisstransfer.database.v2

import com.infomaniak.multiplatform_swisstransfer.common.interfaces.transfers.v2.Transfer
import com.infomaniak.multiplatform_swisstransfer.common.models.TransferDirection
import com.infomaniak.multiplatform_swisstransfer.common.models.TransferStatus
import com.infomaniak.multiplatform_swisstransfer.database.AppDatabase
Expand Down Expand Up @@ -68,15 +67,11 @@ class TransfersTest : RobolectricTestsBase() {
insertTransfer(DummyTransferForV2.transfer1, TransferDirection.SENT, null)

// Insert a pending upload
val uploadTransfer = TransferDB(
transfer = DummyTransferForV2.transfer2,
direction = TransferDirection.SENT,
linkId = null,
userOwnerId = userId,
).copy(
val uploadTransfer = DummyTransferForV2.transfer2.copy(
id = "upload1",
transferDirection = TransferDirection.SENT,
transferStatus = TransferStatus.PENDING_UPLOAD,
userOwnerId = userId,
)
transferDao.upsertTransfer(uploadTransfer)

Expand Down Expand Up @@ -589,27 +584,19 @@ class TransfersTest : RobolectricTestsBase() {
}

private suspend fun insertTransfer(
transfer: Transfer,
transfer: TransferDB,
transferDirection: TransferDirection,
password: String?,
linkId: String? = null,
) {
val transferDB = TransferDB(
id = transfer.id,
senderEmail = transfer.senderEmail,
title = transfer.title,
message = transfer.message,
createdAt = transfer.createdAt,
expiresAt = transfer.expiresAt,
totalSize = transfer.totalSize,
password = password,
transferDirection = transferDirection,
transferStatus = transfer.transferStatus,
recipientsEmails = transfer.recipientsEmails,
userOwnerId = userId,
linkId = linkId,
transferDao.upsertTransfer(
transfer.copy(
transferDirection = transferDirection,
password = password,
userOwnerId = userId,
linkId = linkId,
)
)
transferDao.upsertTransfer(transferDB)
}
//endregion
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
*/
package com.infomaniak.multiplatform_swisstransfer.database.v2

import com.infomaniak.multiplatform_swisstransfer.common.models.TransferDirection
import com.infomaniak.multiplatform_swisstransfer.common.models.TransferStatus
import com.infomaniak.multiplatform_swisstransfer.database.AppDatabase
import com.infomaniak.multiplatform_swisstransfer.database.DatabaseProvider
Expand Down Expand Up @@ -144,28 +143,20 @@ class UploadTest : RobolectricTestsBase() {
private fun createPendingUploadTransfer(
id: String,
createdAt: Long = 0,
): TransferDB = TransferDB(
transfer = DummyTransferForV2.transfer1,
direction = TransferDirection.SENT,
linkId = null,
userOwnerId = userId,
).copy(
): TransferDB = DummyTransferForV2.transfer1.copy(
id = id,
createdAt = createdAt,
transferStatus = TransferStatus.PENDING_UPLOAD,
userOwnerId = userId,
)

private fun createTransferWithStatus(
id: String,
status: TransferStatus,
): TransferDB = TransferDB(
transfer = DummyTransferForV2.transfer1,
direction = TransferDirection.SENT,
linkId = null,
userOwnerId = userId,
).copy(
): TransferDB = DummyTransferForV2.transfer1.copy(
id = id,
transferStatus = status,
userOwnerId = userId,
)
//endregion
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,39 +18,42 @@
package com.infomaniak.multiplatform_swisstransfer.database.v2.dataset

import com.infomaniak.multiplatform_swisstransfer.common.interfaces.transfers.v2.File
import com.infomaniak.multiplatform_swisstransfer.common.interfaces.transfers.v2.Transfer
import com.infomaniak.multiplatform_swisstransfer.common.models.TransferDirection
import com.infomaniak.multiplatform_swisstransfer.common.models.TransferStatus
import com.infomaniak.multiplatform_swisstransfer.database.models.transfers.v2.TransferDB

object DummyTransferForV2 {

private fun transfer(
id: String,
expiresAt: Long,
transferStatus: TransferStatus = TransferStatus.READY,
): Transfer = object : Transfer {
override val id: String = id
override val senderEmail: String = ""
override val title: String? = null
override val message: String? = null
override val createdAt: Long = 0
override val expiresAt: Long = expiresAt
override val totalSize: Long = 0
override val transferStatus: TransferStatus = transferStatus
}
): TransferDB = TransferDB(
id = id,
senderEmail = "",
title = null,
message = null,
createdAt = 0,
expiresAt = expiresAt,
totalSize = 0,
transferDirection = TransferDirection.SENT,
transferStatus = transferStatus,
userOwnerId = 0L,
)

private const val `2024-11-01` = 1_730_458_842L
private const val `2100-01-01` = 4_102_441_200L

val transfer1 = transfer("transferLinkUUID1", `2024-11-01`)
val transfer1: TransferDB = transfer("transferLinkUUID1", `2024-11-01`)

val transfer2 = transfer("transfer2", `2100-01-01`, TransferStatus.WAIT_VIRUS_CHECK)
val transfer3 = transfer("transfer3", `2100-01-01`, TransferStatus.WAIT_VIRUS_CHECK)
val transfer4 = transfer("transfer4", `2100-01-01`, TransferStatus.WAIT_VIRUS_CHECK)
val transfer2: TransferDB = transfer("transfer2", `2100-01-01`, TransferStatus.WAIT_VIRUS_CHECK)
val transfer3: TransferDB = transfer("transfer3", `2100-01-01`, TransferStatus.WAIT_VIRUS_CHECK)
val transfer4: TransferDB = transfer("transfer4", `2100-01-01`, TransferStatus.WAIT_VIRUS_CHECK)

val expired: Transfer = transfer1
val notExpired: Transfer = transfer2
val expired: TransferDB = transfer1
val notExpired: TransferDB = transfer2

val transfers = listOf(transfer1, transfer2, transfer3, transfer4)
val transfers: List<TransferDB> = listOf(transfer1, transfer2, transfer3, transfer4)

fun createDummyFile(
path: String,
Expand Down
Loading
Loading