diff --git a/.github/workflows/dependent-issues.yml b/.github/workflows/dependent-issues.yml
index d081deed..3ca867b0 100644
--- a/.github/workflows/dependent-issues.yml
+++ b/.github/workflows/dependent-issues.yml
@@ -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:
diff --git a/STCore/src/commonMain/kotlin/com/infomaniak/multiplatform_swisstransfer/managers/TransferManager.kt b/STCore/src/commonMain/kotlin/com/infomaniak/multiplatform_swisstransfer/managers/TransferManager.kt
index c1c6f65e..21499079 100644
--- a/STCore/src/commonMain/kotlin/com/infomaniak/multiplatform_swisstransfer/managers/TransferManager.kt
+++ b/STCore/src/commonMain/kotlin/com/infomaniak/multiplatform_swisstransfer/managers/TransferManager.kt
@@ -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
@@ -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,
diff --git a/STCore/src/commonMain/kotlin/com/infomaniak/multiplatform_swisstransfer/managers/UploadV2Manager.kt b/STCore/src/commonMain/kotlin/com/infomaniak/multiplatform_swisstransfer/managers/UploadV2Manager.kt
index 9017ebf1..7cc23f73 100644
--- a/STCore/src/commonMain/kotlin/com/infomaniak/multiplatform_swisstransfer/managers/UploadV2Manager.kt
+++ b/STCore/src/commonMain/kotlin/com/infomaniak/multiplatform_swisstransfer/managers/UploadV2Manager.kt
@@ -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
@@ -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
@@ -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.
@@ -122,7 +123,7 @@ class UploadV2Manager(
)
suspend fun prepareTransfer(
request: UploadSessionRequest,
- ): Transfer = withContext(Dispatchers.Default) {
+ ): TransferApi = withContext(Dispatchers.Default) {
val userId = requireCurrentUserId()
transferDao.deleteAnyPendingTransfer(userId)
@@ -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,
@@ -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)
}
diff --git a/STCommon/src/commonMain/kotlin/com/infomaniak/multiplatform_swisstransfer/common/interfaces/transfers/v2/Transfer.kt b/STCore/src/commonMain/kotlin/com/infomaniak/multiplatform_swisstransfer/mappers/TransferApiV2Ext.kt
similarity index 52%
rename from STCommon/src/commonMain/kotlin/com/infomaniak/multiplatform_swisstransfer/common/interfaces/transfers/v2/Transfer.kt
rename to STCore/src/commonMain/kotlin/com/infomaniak/multiplatform_swisstransfer/mappers/TransferApiV2Ext.kt
index 1642d80c..fb01d439 100644
--- a/STCommon/src/commonMain/kotlin/com/infomaniak/multiplatform_swisstransfer/common/interfaces/transfers/v2/Transfer.kt
+++ b/STCore/src/commonMain/kotlin/com/infomaniak/multiplatform_swisstransfer/mappers/TransferApiV2Ext.kt
@@ -15,25 +15,31 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-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 get() = emptyList()
- val totalSize: Long
-
- //region Only local
- val password: String? get() = null
- val transferStatus: TransferStatus get() = TransferStatus.READY
- val recipientsEmails: Set 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,
+)
diff --git a/STDatabase/src/commonMain/kotlin/com/infomaniak/multiplatform_swisstransfer/database/models/transfers/v2/TransferDB.kt b/STDatabase/src/commonMain/kotlin/com/infomaniak/multiplatform_swisstransfer/database/models/transfers/v2/TransferDB.kt
index e4b73ae7..56ef6d4f 100644
--- a/STDatabase/src/commonMain/kotlin/com/infomaniak/multiplatform_swisstransfer/database/models/transfers/v2/TransferDB.kt
+++ b/STDatabase/src/commonMain/kotlin/com/infomaniak/multiplatform_swisstransfer/database/models/transfers/v2/TransferDB.kt
@@ -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 = emptySet(),
- override val linkId: String? = null,
+ val transferStatus: TransferStatus,
+ val recipientsEmails: Set = emptySet(),
+ val linkId: String? = null,
val userOwnerId: Long,
//TODO[ST-v2]: Add language
-) : Transfer {
+) {
@Ignore
- override var files: List = emptyList()
+ var files: List = 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
- }
}
diff --git a/STDatabase/src/commonTest/kotlin/com/infomaniak/multiplatform_swisstransfer/database/v2/TransfersTest.kt b/STDatabase/src/commonTest/kotlin/com/infomaniak/multiplatform_swisstransfer/database/v2/TransfersTest.kt
index 769af5b9..f710ff48 100644
--- a/STDatabase/src/commonTest/kotlin/com/infomaniak/multiplatform_swisstransfer/database/v2/TransfersTest.kt
+++ b/STDatabase/src/commonTest/kotlin/com/infomaniak/multiplatform_swisstransfer/database/v2/TransfersTest.kt
@@ -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
@@ -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)
@@ -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
}
diff --git a/STDatabase/src/commonTest/kotlin/com/infomaniak/multiplatform_swisstransfer/database/v2/UploadTest.kt b/STDatabase/src/commonTest/kotlin/com/infomaniak/multiplatform_swisstransfer/database/v2/UploadTest.kt
index ea8a358b..bc3c934c 100644
--- a/STDatabase/src/commonTest/kotlin/com/infomaniak/multiplatform_swisstransfer/database/v2/UploadTest.kt
+++ b/STDatabase/src/commonTest/kotlin/com/infomaniak/multiplatform_swisstransfer/database/v2/UploadTest.kt
@@ -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
@@ -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
}
diff --git a/STDatabase/src/commonTest/kotlin/com/infomaniak/multiplatform_swisstransfer/database/v2/dataset/DummyTransferForV2.kt b/STDatabase/src/commonTest/kotlin/com/infomaniak/multiplatform_swisstransfer/database/v2/dataset/DummyTransferForV2.kt
index 9d7f04af..79885ca0 100644
--- a/STDatabase/src/commonTest/kotlin/com/infomaniak/multiplatform_swisstransfer/database/v2/dataset/DummyTransferForV2.kt
+++ b/STDatabase/src/commonTest/kotlin/com/infomaniak/multiplatform_swisstransfer/database/v2/dataset/DummyTransferForV2.kt
@@ -18,8 +18,9 @@
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 {
@@ -27,30 +28,32 @@ object DummyTransferForV2 {
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 = listOf(transfer1, transfer2, transfer3, transfer4)
fun createDummyFile(
path: String,
diff --git a/STNetwork/src/commonMain/kotlin/com/infomaniak/multiplatform_swisstransfer/network/models/transfer/v2/TransferApi.kt b/STNetwork/src/commonMain/kotlin/com/infomaniak/multiplatform_swisstransfer/network/models/transfer/v2/TransferApi.kt
index 8910fe60..faf0f610 100644
--- a/STNetwork/src/commonMain/kotlin/com/infomaniak/multiplatform_swisstransfer/network/models/transfer/v2/TransferApi.kt
+++ b/STNetwork/src/commonMain/kotlin/com/infomaniak/multiplatform_swisstransfer/network/models/transfer/v2/TransferApi.kt
@@ -17,22 +17,21 @@
*/
package com.infomaniak.multiplatform_swisstransfer.network.models.transfer.v2
-import com.infomaniak.multiplatform_swisstransfer.common.interfaces.transfers.v2.Transfer
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class TransferApi(
- override val id: String,
+ val id: String,
@SerialName("sender")
- override val senderEmail: String,
- override val title: String? = null,
- override val message: String? = null,
+ val senderEmail: String,
+ val title: String? = null,
+ val message: String? = null,
@SerialName("created_at")
- override val createdAt: Long,
+ val createdAt: Long,
@SerialName("expires_at")
- override val expiresAt: Long,
- override val files: List,
+ val expiresAt: Long,
+ val files: List,
@SerialName("total_size")
- override val totalSize: Long,
-) : Transfer
+ val totalSize: Long,
+)