diff --git a/app/src/main/java/com/infomaniak/drive/data/api/ErrorCode.kt b/app/src/main/java/com/infomaniak/drive/data/api/ErrorCode.kt index 0157f49073..75629cbf61 100644 --- a/app/src/main/java/com/infomaniak/drive/data/api/ErrorCode.kt +++ b/app/src/main/java/com/infomaniak/drive/data/api/ErrorCode.kt @@ -32,6 +32,7 @@ object ErrorCode { const val PASSWORD_NOT_VALID = "password_not_valid" const val PUBLIC_SHARE_LINK_IS_NOT_VALID = "link_is_not_valid" const val QUOTA_EXCEEDED_ERROR = "quota_exceeded_error" + const val NOT_AUTHORIZED = "not_authorized" val apiErrorCodes = listOf( ApiErrorCode(CATEGORY_ALREADY_EXISTS, R.string.errorCategoryAlreadyExists), diff --git a/app/src/main/java/com/infomaniak/drive/ui/menu/MenuFragment.kt b/app/src/main/java/com/infomaniak/drive/ui/menu/MenuFragment.kt index 1712833520..602d05632c 100644 --- a/app/src/main/java/com/infomaniak/drive/ui/menu/MenuFragment.kt +++ b/app/src/main/java/com/infomaniak/drive/ui/menu/MenuFragment.kt @@ -34,7 +34,6 @@ import androidx.navigation.fragment.FragmentNavigatorExtras import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.infomaniak.drive.R import com.infomaniak.drive.data.cache.DriveInfosController -import com.infomaniak.drive.data.models.UploadFile import com.infomaniak.drive.databinding.FragmentMenuBinding import com.infomaniak.drive.ui.MainViewModel import com.infomaniak.drive.utils.AccountUtils @@ -110,8 +109,7 @@ class MenuFragment : Fragment() { .setMessage(getString(R.string.alertRemoveUserDescription, currentUser.displayName)) .setPositiveButton(R.string.buttonConfirm) { _, _ -> lifecycleScope.launch(Dispatchers.IO) { - if (UploadFile.getAppSyncSettings()?.userId == currentUser.id) UploadFile.deleteAllSyncFile() - AccountUtils.removeUserAndDeleteToken(requireContext(), currentUser) + AccountUtils.deleteSyncFilesThenLogoutUser(requireContext(), currentUser) } } .setNegativeButton(R.string.buttonCancel) { _, _ -> } diff --git a/app/src/main/java/com/infomaniak/drive/utils/AccountUtils.kt b/app/src/main/java/com/infomaniak/drive/utils/AccountUtils.kt index 5ebcc94ae0..eb642a1cba 100644 --- a/app/src/main/java/com/infomaniak/drive/utils/AccountUtils.kt +++ b/app/src/main/java/com/infomaniak/drive/utils/AccountUtils.kt @@ -111,21 +111,33 @@ object AccountUtils : CredentialManager() { okHttpClient: OkHttpClient = HttpClient.okHttpClient, ) = withContext(Dispatchers.IO) { - val (userResult, user) = with(ApiRepository.getUserProfile(okHttpClient)) { - result to (data ?: return@withContext) - } + val apiResponse = ApiRepository.getUserProfile(okHttpClient) - if (userResult != ApiResponseStatus.ERROR) { - ApiRepository.getAllDrivesData(okHttpClient).apply { - if (result != ApiResponseStatus.ERROR) { - handleDrivesData(context, fromMaintenance, fromCloudStorage, user, data as DriveInfo) - } else if (error?.code == ErrorCode.NO_DRIVE) { - removeUserAndDeleteToken(context, user) + if (apiResponse.result == ApiResponseStatus.ERROR) { + when (apiResponse.error?.code) { + ErrorCode.NOT_AUTHORIZED -> { + val user = currentUser ?: requestCurrentUser() ?: return@withContext + deleteSyncFilesThenLogoutUser(context, user) } } + return@withContext + } + + val user = apiResponse.data ?: return@withContext + ApiRepository.getAllDrivesData(okHttpClient).apply { + if (result != ApiResponseStatus.ERROR) { + handleDrivesData(context, fromMaintenance, fromCloudStorage, user, data as DriveInfo) + } else if (error?.code == ErrorCode.NO_DRIVE) { + removeUserAndDeleteToken(context, user) + } } } + suspend fun deleteSyncFilesThenLogoutUser(context: Context, user: User) { + if (UploadFile.getAppSyncSettings()?.userId == user.id) UploadFile.deleteAllSyncFile() + removeUserAndDeleteToken(context, user) + } + private suspend fun handleDrivesData( context: Context, fromMaintenance: Boolean,