diff --git a/MykSuite/schemas/com.infomaniak.core.myksuite.ui.data.MyKSuiteDatabase/1.json b/MykSuite/schemas/com.infomaniak.core.myksuite.ui.data.MyKSuiteDatabase/1.json
index 21cabad0..2feec569 100644
--- a/MykSuite/schemas/com.infomaniak.core.myksuite.ui.data.MyKSuiteDatabase/1.json
+++ b/MykSuite/schemas/com.infomaniak.core.myksuite.ui.data.MyKSuiteDatabase/1.json
@@ -2,11 +2,11 @@
"formatVersion": 1,
"database": {
"version": 1,
- "identityHash": "7b5e43bd9cc17b034cf90891e63090d7",
+ "identityHash": "daf7033b58a05ae65b82dee555601e73",
"entities": [
{
"tableName": "MyKSuiteData",
- "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `status` TEXT NOT NULL, `pack_id` INTEGER NOT NULL, `trialExpiryAt` INTEGER, `is_free` INTEGER NOT NULL, `has_auto_renew` INTEGER NOT NULL, `canTrial` INTEGER NOT NULL, `user_id` INTEGER NOT NULL, `k_suite_pack_id` INTEGER NOT NULL, `k_suite_pack_name` TEXT NOT NULL, `k_suite_pack_drive_storage` INTEGER NOT NULL, `k_suite_pack_mail_storage` INTEGER NOT NULL, `k_suite_pack_mail_daily_limit_send` INTEGER NOT NULL, `k_suite_pack_is_max_storage_offer` INTEGER NOT NULL, `drive_id` INTEGER NOT NULL, `drive_name` TEXT NOT NULL, `drive_size` INTEGER NOT NULL, `drive_used_size` INTEGER NOT NULL, `mail_id` INTEGER NOT NULL, `mail_email` TEXT NOT NULL, `mail_daily_limit_sent` INTEGER NOT NULL, `mail_storage_size_limit` INTEGER NOT NULL, `mail_used_size` INTEGER NOT NULL, `mail_mailboxId` INTEGER NOT NULL, PRIMARY KEY(`id`))",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `trial_expiry_at` INTEGER, `is_free` INTEGER NOT NULL, `user_id` INTEGER NOT NULL, `drive_id` INTEGER NOT NULL, `drive_name` TEXT NOT NULL, `drive_size` INTEGER NOT NULL, `drive_used_size` INTEGER NOT NULL, `mail_id` INTEGER NOT NULL, `mail_email` TEXT NOT NULL, `mail_daily_limit_sent` INTEGER NOT NULL, `mail_storage_size_limit` INTEGER NOT NULL, `mail_used_size` INTEGER NOT NULL, `mail_mailbox_id` INTEGER NOT NULL, PRIMARY KEY(`id`))",
"fields": [
{
"fieldPath": "id",
@@ -14,21 +14,9 @@
"affinity": "INTEGER",
"notNull": true
},
- {
- "fieldPath": "status",
- "columnName": "status",
- "affinity": "TEXT",
- "notNull": true
- },
- {
- "fieldPath": "kSuitePackId",
- "columnName": "pack_id",
- "affinity": "INTEGER",
- "notNull": true
- },
{
"fieldPath": "trialExpiryAt",
- "columnName": "trialExpiryAt",
+ "columnName": "trial_expiry_at",
"affinity": "INTEGER",
"notNull": false
},
@@ -38,60 +26,12 @@
"affinity": "INTEGER",
"notNull": true
},
- {
- "fieldPath": "hasAutoRenew",
- "columnName": "has_auto_renew",
- "affinity": "INTEGER",
- "notNull": true
- },
- {
- "fieldPath": "canTrial",
- "columnName": "canTrial",
- "affinity": "INTEGER",
- "notNull": true
- },
{
"fieldPath": "userId",
"columnName": "user_id",
"affinity": "INTEGER",
"notNull": true
},
- {
- "fieldPath": "kSuitePack.id",
- "columnName": "k_suite_pack_id",
- "affinity": "INTEGER",
- "notNull": true
- },
- {
- "fieldPath": "kSuitePack.name",
- "columnName": "k_suite_pack_name",
- "affinity": "TEXT",
- "notNull": true
- },
- {
- "fieldPath": "kSuitePack.driveStorage",
- "columnName": "k_suite_pack_drive_storage",
- "affinity": "INTEGER",
- "notNull": true
- },
- {
- "fieldPath": "kSuitePack.mailStorage",
- "columnName": "k_suite_pack_mail_storage",
- "affinity": "INTEGER",
- "notNull": true
- },
- {
- "fieldPath": "kSuitePack.mailDailyLimitSend",
- "columnName": "k_suite_pack_mail_daily_limit_send",
- "affinity": "INTEGER",
- "notNull": true
- },
- {
- "fieldPath": "kSuitePack.isMaxStorageOffer",
- "columnName": "k_suite_pack_is_max_storage_offer",
- "affinity": "INTEGER",
- "notNull": true
- },
{
"fieldPath": "drive.id",
"columnName": "drive_id",
@@ -148,7 +88,7 @@
},
{
"fieldPath": "mail.mailboxId",
- "columnName": "mail_mailboxId",
+ "columnName": "mail_mailbox_id",
"affinity": "INTEGER",
"notNull": true
}
@@ -166,7 +106,7 @@
"views": [],
"setupQueries": [
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
- "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '7b5e43bd9cc17b034cf90891e63090d7')"
+ "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'daf7033b58a05ae65b82dee555601e73')"
]
}
}
\ No newline at end of file
diff --git a/MykSuite/src/main/java/com/infomaniak/core/myksuite/ui/data/KSuitePack.kt b/MykSuite/src/main/java/com/infomaniak/core/myksuite/ui/data/KSuitePack.kt
deleted file mode 100644
index 36447910..00000000
--- a/MykSuite/src/main/java/com/infomaniak/core/myksuite/ui/data/KSuitePack.kt
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Infomaniak Core - Android
- * Copyright (C) 2025 Infomaniak Network SA
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-package com.infomaniak.core.myksuite.ui.data
-
-import androidx.annotation.StringRes
-import androidx.room.ColumnInfo
-import com.infomaniak.core.myksuite.R
-import kotlinx.serialization.SerialName
-import kotlinx.serialization.Serializable
-
-@Serializable
-data class KSuitePack(
- val id: Int,
- val name: String = "",
- @SerialName("drive_storage")
- @ColumnInfo("drive_storage")
- val driveStorage: Long = 0,
- @SerialName("mail_storage")
- @ColumnInfo("mail_storage")
- val mailStorage: Long = 0,
- @SerialName("mail_daily_limit_send")
- @ColumnInfo("mail_daily_limit_send")
- val mailDailyLimitSend: Int = 0,
- @SerialName("is_max_storage_offer")
- @ColumnInfo("is_max_storage_offer")
- val isMaxStorageOffer: Boolean = false,
-) {
-
- val type get() = runCatching { enumValueOf(name.uppercase()) }.getOrNull()
-
- enum class KSuitePackType(@StringRes val displayNameRes: Int) {
- MY_KSUITE(R.string.myKSuiteName),
- MY_KSUITE_PLUS(R.string.myKSuitePlusName),
- MY_KSUITE_PLUS_DRIVE_SOLO(R.string.myKSuitePlusName),
- }
-}
diff --git a/MykSuite/src/main/java/com/infomaniak/core/myksuite/ui/data/MyKSuiteData.kt b/MykSuite/src/main/java/com/infomaniak/core/myksuite/ui/data/MyKSuiteData.kt
index 64faf244..cf1c3f42 100644
--- a/MykSuite/src/main/java/com/infomaniak/core/myksuite/ui/data/MyKSuiteData.kt
+++ b/MykSuite/src/main/java/com/infomaniak/core/myksuite/ui/data/MyKSuiteData.kt
@@ -21,6 +21,8 @@ import androidx.room.ColumnInfo
import androidx.room.Embedded
import androidx.room.Entity
import androidx.room.PrimaryKey
+import com.infomaniak.core.myksuite.R
+import com.infomaniak.core.myksuite.ui.components.MyKSuiteTier
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
@@ -30,13 +32,6 @@ import java.util.Date
@Entity
data class MyKSuiteData(
@PrimaryKey val id: Int,
- val status: String,
- @SerialName("pack_id")
- @ColumnInfo("pack_id")
- val kSuitePackId: Int,
- @SerialName("pack")
- @Embedded("k_suite_pack_")
- val kSuitePack: KSuitePack,
@SerialName("trial_expiry_at")
@ColumnInfo("trial_expiry_at")
val trialExpiryAt: Long? = null,
@@ -47,22 +42,13 @@ data class MyKSuiteData(
val drive: KSuiteDrive,
@Embedded("mail_")
val mail: KSuiteMail,
- @SerialName("has_auto_renew")
- @ColumnInfo("has_auto_renew")
- val hasAutoRenew: Boolean,
- @SerialName("can_trial")
- @ColumnInfo("can_trial")
- val canTrial: Boolean,
) {
@Transient
@ColumnInfo("user_id")
var userId: Int = 0
- val isMyKSuite get() = kSuitePack.type == KSuitePack.KSuitePackType.MY_KSUITE
- val isMyKSuitePlus
- get() = kSuitePack.type == KSuitePack.KSuitePackType.MY_KSUITE_PLUS ||
- kSuitePack.type == KSuitePack.KSuitePackType.MY_KSUITE_PLUS_DRIVE_SOLO
-
+ inline val name get() = if (isFree) R.string.myKSuiteName else R.string.myKSuitePlusName
+ inline val tier get() = if (isFree) MyKSuiteTier.Free else MyKSuiteTier.Plus
inline val trialExpiryDate get() = trialExpiryAt?.let { Date(it * 1000) }
}
diff --git a/MykSuite/src/main/java/com/infomaniak/core/myksuite/ui/data/MyKSuiteDataDao.kt b/MykSuite/src/main/java/com/infomaniak/core/myksuite/ui/data/MyKSuiteDataDao.kt
index 2e3b2c30..ff702459 100644
--- a/MykSuite/src/main/java/com/infomaniak/core/myksuite/ui/data/MyKSuiteDataDao.kt
+++ b/MykSuite/src/main/java/com/infomaniak/core/myksuite/ui/data/MyKSuiteDataDao.kt
@@ -24,10 +24,6 @@ import androidx.room.Upsert
@Dao
interface MyKSuiteDataDao {
-
- @Query("SELECT * FROM MyKSuiteData")
- suspend fun getAll(): List
-
@Query("SELECT * FROM MyKSuiteData WHERE id = :id LIMIT 1")
suspend fun findById(id: Int): MyKSuiteData?
diff --git a/MykSuite/src/main/java/com/infomaniak/core/myksuite/ui/data/MyKSuiteDataManager.kt b/MykSuite/src/main/java/com/infomaniak/core/myksuite/ui/data/MyKSuiteDataManager.kt
index b4d5e9b1..99f91ee3 100644
--- a/MykSuite/src/main/java/com/infomaniak/core/myksuite/ui/data/MyKSuiteDataManager.kt
+++ b/MykSuite/src/main/java/com/infomaniak/core/myksuite/ui/data/MyKSuiteDataManager.kt
@@ -21,9 +21,8 @@ import android.content.Context
abstract class MyKSuiteDataManager {
- abstract var myKSuiteId: Int
abstract var myKSuite: MyKSuiteData?
- abstract val userId: Int
+ protected abstract val currentUserId: Int
private var myKSuiteDatabase: MyKSuiteDatabase? = null
@@ -37,15 +36,17 @@ abstract class MyKSuiteDataManager {
suspend fun upsertKSuiteData(kSuiteData: MyKSuiteData) {
myKSuite = kSuiteData
- myKSuiteDatabase?.myKSuiteDataDao()?.upsert(kSuiteData.apply { userId = this@MyKSuiteDataManager.userId })
+ myKSuiteDatabase?.myKSuiteDataDao()?.upsert(kSuiteData.apply { userId = this@MyKSuiteDataManager.currentUserId })
}
- suspend fun deleteKSuiteData(kSuiteData: MyKSuiteData) {
+ suspend fun deleteKSuiteData(userId: Int) {
+ (getKSuiteDataByUser(userId) ?: myKSuite)?.let { myKSuiteDatabase?.myKSuiteDataDao()?.delete(it) }
myKSuite = null
- myKSuiteDatabase?.myKSuiteDataDao()?.delete(kSuiteData)
}
private suspend fun getKSuiteData(id: Int) = myKSuiteDatabase?.myKSuiteDataDao()?.findById(id)
- private suspend fun getKSuiteDataByUser() = myKSuiteDatabase?.myKSuiteDataDao()?.findByUserId(userId)
+ private suspend fun getKSuiteDataByUser(userId: Int? = null): MyKSuiteData? {
+ return myKSuiteDatabase?.myKSuiteDataDao()?.findByUserId(userId ?: currentUserId)
+ }
}
diff --git a/MykSuite/src/main/java/com/infomaniak/core/myksuite/ui/data/kSuiteMail.kt b/MykSuite/src/main/java/com/infomaniak/core/myksuite/ui/data/kSuiteMail.kt
index fc72c841..62583caf 100644
--- a/MykSuite/src/main/java/com/infomaniak/core/myksuite/ui/data/kSuiteMail.kt
+++ b/MykSuite/src/main/java/com/infomaniak/core/myksuite/ui/data/kSuiteMail.kt
@@ -35,5 +35,6 @@ data class KSuiteMail(
@ColumnInfo("used_size")
val usedSize: Long,
@SerialName("mailbox_id")
+ @ColumnInfo("mailbox_id")
val mailboxId: Int,
)
diff --git a/MykSuite/src/main/java/com/infomaniak/core/myksuite/ui/network/ApiRoutes.kt b/MykSuite/src/main/java/com/infomaniak/core/myksuite/ui/network/ApiRoutes.kt
index f2881b92..c18dacac 100644
--- a/MykSuite/src/main/java/com/infomaniak/core/myksuite/ui/network/ApiRoutes.kt
+++ b/MykSuite/src/main/java/com/infomaniak/core/myksuite/ui/network/ApiRoutes.kt
@@ -24,6 +24,5 @@ object ApiRoutes {
private const val PREPROD_BASE_URL = "https://api.staging-myksuite.dev.infomaniak.ch"
private const val BASE_URL = "https://api.infomaniak.com"
- fun myKSuiteData() = "$BASE_URL/1/my_ksuite/current?with=drive,mail,pack,can_trial,has_auto_renew"
-
+ fun myKSuiteData() = "$BASE_URL/1/my_ksuite/current?with=drive,mail"
}