Update File Post

Upload files

If you want to edit a file post to add more files, the files to be added must be uploaded first. The AmityFileRepository class handles the uploading and downloading of files. The repository has an uploadFile method which takes the file's Uri and returns an array of AmityUploadResult for successful or failed uploads.

AmityUploadResult will return four possible types of data:

  • AmityUploadResult.PROGRESS - uploading is in progress. It returns AmityUploadInfo which can be used to track the progress of the upload.

  • AmityUploadResult.COMPLETE - the upload completed successfully. It returns AmityFile that can then be attached to the post.

  • AmityUploadResult.ERROR(exception) - the upload failed. It returns an Exception.

  • AmityUploadResult.CANCELLED - uploading is canceled.

fun uploadFile(fileUri: Uri) {
    AmityCoreClient.newFileRepository()
        .uploadFile(uri = fileUri)
        .build()
        .transfer()
        .doOnNext{ uploadResult: AmityUploadResult<AmityFile> ->
            when (uploadResult) {
                is AmityUploadResult.PROGRESS -> {
                    val progress = uploadResult.getUploadInfo().getProgressPercentage()
                }
                is AmityUploadResult.COMPLETE -> {
                    val amityFile = uploadResult.getFile()
                }
                is AmityUploadResult.ERROR -> {
                    val exception = uploadResult.getError()
                }
                is AmityUploadResult.CANCELLED -> {
                    //proceed
                }
            }
        }
        .subscribe()
}

You can upload a maximum of ten files in a single post.

Update file post

To edit a file post, use the edit method as shown in the sample code below. The attachments should contain the existing files and the uploaded files that you want to add to the post which are stored in existingFiles and newFiles respectively.

You can remove existing files from the post by excluding them from the attachments list. You can also change the order of the files in the list.

fun updateFilePost(post: AmityPost, newFiles: List<AmityFile>) {
    val postData: AmityPost.Data = post.getData()
    val existingFiles = post?.getChildren()
                    ?.map { it.getData() }
                    ?.filterIsInstance<AmityPost.Data.FILE>
    val isFilePost = existingFiles
                    ?.isNotEmpty() 
                    ?: false
                    
    val attachments = existingFiles + newFiles
    
    if (isFilePost) {
        postData.edit()
            .attachments(attachments)
            .text(postData.getText())
            .build()
            .apply()
            .subscribe()
    }
 

To update mentioned users in a post, refer to update mention in post.

Last updated