diff --git a/app/src/main/java/com/infomaniak/drive/data/api/ApiRepository.kt b/app/src/main/java/com/infomaniak/drive/data/api/ApiRepository.kt index d5d25cc9ea..36b290f50a 100644 --- a/app/src/main/java/com/infomaniak/drive/data/api/ApiRepository.kt +++ b/app/src/main/java/com/infomaniak/drive/data/api/ApiRepository.kt @@ -19,7 +19,6 @@ package com.infomaniak.drive.data.api import androidx.collection.arrayMapOf import com.google.gson.JsonElement -import com.infomaniak.drive.data.api.ApiRoutes.activitiesWithExtraQuery import com.infomaniak.drive.data.models.* import com.infomaniak.drive.data.models.ArchiveUUID.ArchiveBody import com.infomaniak.drive.data.models.drive.Category @@ -41,39 +40,6 @@ object ApiRepository : ApiRepositoryCore() { var PER_PAGE = 200 - private const val ACTIONS = "&actions[]=file_create" + - "&actions[]=file_rename" + - "&actions[]=file_move" + - "&actions[]=file_move_out" + - "&actions[]=file_trash" + - "&actions[]=file_restore" + - "&actions[]=file_delete" + - "&actions[]=file_update" + - "&actions[]=file_favorite_create" + - "&actions[]=file_favorite_remove" + - "&actions[]=file_share_create" + - "&actions[]=file_share_update" + - "&actions[]=file_share_delete" + - "&actions[]=file_categorize" + - "&actions[]=file_uncategorize" + - "&actions[]=file_color_update" + - "&actions[]=file_color_delete" + - "&actions[]=share_link_create" + - "&actions[]=share_link_update" + - "&actions[]=share_link_delete" + - "&actions[]=collaborative_folder_create" + - "&actions[]=collaborative_folder_update" + - "&actions[]=collaborative_folder_delete" - - private const val ADDITIONAL_ACTIONS = "&actions[]=file_access" + - "&actions[]=comment_create" + - "&actions[]=comment_update" + - "&actions[]=comment_delete" + - "&actions[]=comment_like" + - "&actions[]=comment_unlike" + - "&actions[]=comment_resolve" + - "&actions[]=share_link_show" - fun getAllDrivesData( okHttpClient: OkHttpClient ): ApiResponse { @@ -101,17 +67,15 @@ object ApiRepository : ApiRepositoryCore() { return callApi(url, GET, okHttpClient = okHttpClient) } - // Increase timeout for this api call because it can take more than 10s to process data + // Increase timeout for this API call because it can take more than 10s to process data fun getFileActivities( file: File, page: Int, forFileList: Boolean, okHttpClient: OkHttpClient = HttpClient.okHttpClientLongTimeout, ): ApiResponse> { - val queries = if (forFileList) "&depth=children&from_date=${file.responseAt}&$activitiesWithExtraQuery" else "&with=user" - val url = "${ApiRoutes.getFileActivities(file)}?${pagination(page)}$queries$ACTIONS" + - if (forFileList) "" else ADDITIONAL_ACTIONS - + val pagination = pagination(page) + val url = ApiRoutes.getFileActivities(file, forFileList, pagination) return callApi(url, GET, okHttpClient = okHttpClient) } diff --git a/app/src/main/java/com/infomaniak/drive/data/api/ApiRoutes.kt b/app/src/main/java/com/infomaniak/drive/data/api/ApiRoutes.kt index 500a508731..a35be4c0ae 100644 --- a/app/src/main/java/com/infomaniak/drive/data/api/ApiRoutes.kt +++ b/app/src/main/java/com/infomaniak/drive/data/api/ApiRoutes.kt @@ -24,12 +24,46 @@ import com.infomaniak.drive.utils.FileId object ApiRoutes { - private const val fileWithQuery = "with=capabilities,categories,conversion_capabilities,dropbox,dropbox.capabilities," + - "external_import,is_favorite,path,sharelink,sorted_name" + private const val fileWithQuery = "with=capabilities,categories,conversion_capabilities," + + "dropbox,dropbox.capabilities,external_import,is_favorite,path,sharelink,sorted_name" private const val fileExtraWithQuery = "$fileWithQuery,users,version" private const val activitiesWithQuery = "with=file,file.capabilities,file.categories,file.conversion_capabilities," + "file.dropbox,file.dropbox.capabilities,file.is_favorite,file.sharelink,file.sorted_name" - const val activitiesWithExtraQuery = "$activitiesWithQuery,file.external_import" + private const val activitiesWithExtraQuery = "$activitiesWithQuery,file.external_import" + private const val noAvatar = "no_avatar_default=1" + + private const val ACTIONS = "&actions[]=file_create" + + "&actions[]=file_rename" + + "&actions[]=file_move" + + "&actions[]=file_move_out" + + "&actions[]=file_trash" + + "&actions[]=file_restore" + + "&actions[]=file_delete" + + "&actions[]=file_update" + + "&actions[]=file_favorite_create" + + "&actions[]=file_favorite_remove" + + "&actions[]=file_share_create" + + "&actions[]=file_share_update" + + "&actions[]=file_share_delete" + + "&actions[]=file_categorize" + + "&actions[]=file_uncategorize" + + "&actions[]=file_color_update" + + "&actions[]=file_color_delete" + + "&actions[]=share_link_create" + + "&actions[]=share_link_update" + + "&actions[]=share_link_delete" + + "&actions[]=collaborative_folder_create" + + "&actions[]=collaborative_folder_update" + + "&actions[]=collaborative_folder_delete" + + private const val ADDITIONAL_ACTIONS = "&actions[]=file_access" + + "&actions[]=comment_create" + + "&actions[]=comment_update" + + "&actions[]=comment_delete" + + "&actions[]=comment_like" + + "&actions[]=comment_unlike" + + "&actions[]=comment_resolve" + + "&actions[]=share_link_show" private fun orderQuery(order: SortType) = "order_for[${order.orderBy}]=${order.order}&order_by=${order.orderBy}" @@ -45,7 +79,7 @@ object ApiRoutes { /** V1 */ //region V1 - fun getAllDrivesData() = "${DRIVE_API_V1}init?with=drives,users,teams,ips,categories" + fun getAllDrivesData() = "${DRIVE_API_V1}init?${noAvatar}&with=drives,users,teams,ips,categories" //endregion /** Archive */ @@ -61,7 +95,7 @@ object ApiRoutes { fun fileInvitationAccess(file: File, invitationId: Int) = "${driveURL(file.driveId)}/files/invitations/$invitationId" - fun getFileShare(file: File) = "${accessUrl(file)}?with=user" + fun getFileShare(file: File) = "${accessUrl(file)}?${noAvatar}&with=user" fun checkFileShare(file: File) = "${accessUrl(file)}/check" @@ -86,14 +120,25 @@ object ApiRoutes { "&actions[]=comment_create" fun getLastActivities(driveId: Int) = - "${filesURL(driveId)}/activities?$activitiesWithQuery,user&depth=unlimited&$activitiesActions" + "${filesURL(driveId)}/activities?${activitiesWithQuery},user&depth=unlimited&${activitiesActions}&${noAvatar}" + + fun getFileActivities(file: File, forFileList: Boolean, pagination: String): String { + + val baseUrl = "${fileURL(file)}/activities" + val baseParameters = "?${noAvatar}&${pagination}" + val sourceDependentParameters = if (forFileList) { + "&depth=children&from_date=${file.responseAt}&${activitiesWithExtraQuery}" + } else { + "&with=user" + } + val actionsParameters = ACTIONS + if (forFileList) "" else ADDITIONAL_ACTIONS - fun getFileActivities(file: File) = "${fileURL(file)}/activities" + return baseUrl + baseParameters + sourceDependentParameters + actionsParameters + } - fun getFileActivities(driveId: Int, fileIds: String, fromDate: Long) = - "${filesURL(driveId)}/activities/batch?$activitiesWithQuery&file_ids=$fileIds&from_date=$fromDate" + - "&actions[]=file_rename" + - "&actions[]=file_update" + fun getFileActivities(driveId: Int, fileIds: String, fromDate: Long) = "${filesURL(driveId)}/activities/batch" + + "?${noAvatar}&${activitiesWithQuery}&file_ids=${fileIds}" + + "&from_date=${fromDate}&actions[]=file_rename&actions[]=file_update" fun getTrashedFilesActivities(file: File) = "${trashURL(file)}/activities" //endregion @@ -112,7 +157,7 @@ object ApiRoutes { /** Comment */ //region Comment - private const val withComments = "with=user,likes,responses,responses.user,responses.likes" + private const val withComments = "${noAvatar}&with=user,likes,responses,responses.user,responses.likes" fun fileComments(file: File) = "${fileURL(file)}/comments?$withComments" diff --git a/app/src/main/java/com/infomaniak/drive/data/cache/FileController.kt b/app/src/main/java/com/infomaniak/drive/data/cache/FileController.kt index cd4b79fc1c..44fe03dc59 100644 --- a/app/src/main/java/com/infomaniak/drive/data/cache/FileController.kt +++ b/app/src/main/java/com/infomaniak/drive/data/cache/FileController.kt @@ -783,11 +783,11 @@ object FileController { fun getFolderActivities(folder: File, page: Int, userDrive: UserDrive? = null): Map { return getRealmInstance(userDrive).use { realm -> - getFolderActivitiesRec(realm, folder, page, userDrive) + getFolderActivitiesRecursive(realm, folder, page, userDrive) } } - private fun getFolderActivitiesRec( + private fun getFolderActivitiesRecursive( realm: Realm, folder: File, page: Int, @@ -797,7 +797,7 @@ object FileController { userDrive?.userId?.let { AccountUtils.getHttpClient(it, 30) } ?: HttpClient.okHttpClientLongTimeout } val returnResponse = arrayMapOf() - val apiResponse = ApiRepository.getFileActivities(folder, page, true, okHttpClient) + val apiResponse = ApiRepository.getFileActivities(folder, page, forFileList = true, okHttpClient) if (!apiResponse.isSuccess()) return returnResponse return if (apiResponse.data?.isNotEmpty() == true) { @@ -816,7 +816,7 @@ object FileController { } returnResponse - } else returnResponse.apply { putAll(getFolderActivitiesRec(realm, folder, page + 1, userDrive)) } + } else returnResponse.apply { putAll(getFolderActivitiesRecursive(realm, folder, page + 1, userDrive)) } } else { if (apiResponse.responseAt > 0L) { updateFile(folder.id, realm) { file -> file.responseAt = apiResponse.responseAt } diff --git a/app/src/main/java/com/infomaniak/drive/data/models/DriveUser.kt b/app/src/main/java/com/infomaniak/drive/data/models/DriveUser.kt index 34705e9760..9616752aa0 100644 --- a/app/src/main/java/com/infomaniak/drive/data/models/DriveUser.kt +++ b/app/src/main/java/com/infomaniak/drive/data/models/DriveUser.kt @@ -33,7 +33,7 @@ open class DriveUser( var avatarUrl: String? = "", @SerializedName("display_name") var displayName: String = "", - var avatar: String = "", + private var avatar: String? = "", var email: String = "", @SerializedName("role") private var _role: String = "", @@ -50,7 +50,7 @@ open class DriveUser( displayName = user.displayName ?: "" } - fun getUserAvatar() = avatar.ifBlank { avatarUrl.toString() } + fun getUserAvatar() = avatar?.ifBlank { avatarUrl.toString() } ?: avatarUrl.toString() fun getInitials(): String { displayName.split(" ").let { initials -> diff --git a/app/src/main/java/com/infomaniak/drive/ui/fileList/fileDetails/FileDetailsViewModel.kt b/app/src/main/java/com/infomaniak/drive/ui/fileList/fileDetails/FileDetailsViewModel.kt index 96cde15092..2304c5e044 100644 --- a/app/src/main/java/com/infomaniak/drive/ui/fileList/fileDetails/FileDetailsViewModel.kt +++ b/app/src/main/java/com/infomaniak/drive/ui/fileList/fileDetails/FileDetailsViewModel.kt @@ -38,7 +38,7 @@ class FileDetailsViewModel : ViewModel() { getFileActivitiesJob = Job() return liveData(Dispatchers.IO + getFileActivitiesJob) { - manageRecursiveApiResponse(file) { file, page -> ApiRepository.getFileActivities(file, page, false) } + manageRecursiveApiResponse(file) { file, page -> ApiRepository.getFileActivities(file, page, forFileList = false) } } } diff --git a/app/src/main/java/com/infomaniak/drive/ui/fileList/fileShare/FileShareAddUserDialog.kt b/app/src/main/java/com/infomaniak/drive/ui/fileList/fileShare/FileShareAddUserDialog.kt index 54fc938453..6c4dc84483 100644 --- a/app/src/main/java/com/infomaniak/drive/ui/fileList/fileShare/FileShareAddUserDialog.kt +++ b/app/src/main/java/com/infomaniak/drive/ui/fileList/fileShare/FileShareAddUserDialog.kt @@ -164,7 +164,7 @@ class FileShareAddUserDialog : FullScreenBottomSheetDialog() { background = getBackgroundColorBasedOnId(item.id) ) val request = ImageRequest.Builder(this) - .data(item.avatar) + .data(item.getUserAvatar()) .transformations(CircleCropTransformation()) .fallback(fallback) .error(fallback)