0

Here is my project in MVI that has UseCase. I can call Successful and Error in UploadImageResult sealed class. But when want to show progress in UI, should call UploadedProgressBarProcess and then get this in ViewModel. That's not call and work this. Why can't do this?

class UploadImageUseCase(
        private val documentsRepository: DocumentsRepository,
        private val context: Context
    ) : UseCase<UploadImageAction, UploadImageResult> {
    
        override fun apply(upstream: Observable<UploadImageAction>): ObservableSource<UploadImageResult> {
            return upstream.flatMap { action ->
                val imageToFile = FileHelper(context).getFile(action.uri[action.uploadingRequestCount - 1])
                val requestFile = imageToFile.asRequestBody("image/*".toMediaTypeOrNull())
                val body = ProgressbarUploadingProcessHelper(requestFile.contentType(), imageToFile)
                { percentageOfProgress ->
                    UploadImageResult.UploadedProgressBarProcess(
                        percentageOfProgress, action.uri, action.imageId
                    )
                }
                documentsRepository.uploadImage(
                    convertFileToMultipart(action.file, action.file.name, body),
                    action.imageId,
                ).toObservable().map { result ->
                    result.fold(onSuccess = { response ->
                        UploadImageResult.Successful(
                            action.imageId, response.data?.token ?: "", action.uploadingRequestCount, action.uri
                        )
                    }, onFailure = {
                        UploadImageResult.Error(action.imageId, action.uri, action.uploadingRequestCount)
                    })
                }.startWithItem(UploadImageResult.Loading(action.imageId, action.uri, action.uploadingRequestCount))
            }
        }
    
    }
    
    data class UploadImageAction(val imageId: String, val uri: ArrayList<Uri>, val file: File, val uploadingRequestCount: Int) :
        Action
    
    sealed class UploadImageResult : ActionResult {
        data class Loading(val imageId: String, val uri: ArrayList<Uri>, val uploadingRequestCount: Int) : UploadImageResult()
        data class UploadedProgressBarProcess(
            val percentageOfProgress: Int, val uri: ArrayList<Uri>, val imageId: String
        ) :
            UploadImageResult()
    
        data class Successful(val imageId: String, val token: String, val uploadingRequestCount: Int, val uri: ArrayList<Uri>) :
            UploadImageResult()
    
        data class Error(val imageId: String, val uri: ArrayList<Uri>, val uploadingRequestCount: Int) : UploadImageResult()
    }
    
    private fun convertFileToMultipart(
        file: File, fileName: String, body: ProgressbarUploadingProcessHelper
    ): MultipartBody.Part {
        val requestFile = file.asRequestBody("image/*".toMediaTypeOrNull())
        return MultipartBody.Part.createFormData("file", fileName, body)
    }
Ahmet Yılmaz
  • 425
  • 5
  • 16

0 Answers0