From 5c994ac91f9ff7842654f836c8aa822f69d0755d Mon Sep 17 00:00:00 2001 From: Conny Duck Date: Tue, 29 Nov 2022 21:13:54 +0100 Subject: [PATCH] don't check processing state when upload returned 200 --- .../components/compose/ComposeActivity.kt | 3 ++- .../components/compose/ComposeViewModel.kt | 10 ++++++---- .../tusky/components/compose/MediaUploader.kt | 20 +++++++++++-------- .../tusky/network/MediaUploadApi.kt | 4 ++-- .../tusky/service/SendStatusService.kt | 2 +- 5 files changed, 23 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/com/keylesspalace/tusky/components/compose/ComposeActivity.kt b/app/src/main/java/com/keylesspalace/tusky/components/compose/ComposeActivity.kt index 64cfd4573..e30e3e384 100644 --- a/app/src/main/java/com/keylesspalace/tusky/components/compose/ComposeActivity.kt +++ b/app/src/main/java/com/keylesspalace/tusky/components/compose/ComposeActivity.kt @@ -1219,7 +1219,8 @@ class ComposeActivity : val uploadPercent: Int = 0, val id: String? = null, val description: String? = null, - val focus: Attachment.Focus? = null + val focus: Attachment.Focus? = null, + val processed: Boolean? ) { enum class Type { IMAGE, VIDEO, AUDIO; diff --git a/app/src/main/java/com/keylesspalace/tusky/components/compose/ComposeViewModel.kt b/app/src/main/java/com/keylesspalace/tusky/components/compose/ComposeViewModel.kt index a6f0a7c07..4a43ebb99 100644 --- a/app/src/main/java/com/keylesspalace/tusky/components/compose/ComposeViewModel.kt +++ b/app/src/main/java/com/keylesspalace/tusky/components/compose/ComposeViewModel.kt @@ -134,7 +134,8 @@ class ComposeViewModel @Inject constructor( type = type, mediaSize = mediaSize, description = description, - focus = focus + focus = focus, + processed = null ) stashMediaItem = mediaItem @@ -159,7 +160,7 @@ class ComposeViewModel @Inject constructor( is UploadEvent.ProgressEvent -> item.copy(uploadPercent = event.percentage) is UploadEvent.FinishedEvent -> - item.copy(id = event.mediaId, uploadPercent = -1) + item.copy(id = event.mediaId, uploadPercent = -1, processed = event.processed) is UploadEvent.ErrorEvent -> { media.update { mediaValue -> mediaValue.filter { it.localId != mediaItem.localId } } uploadError.emit(event.error) @@ -190,7 +191,8 @@ class ComposeViewModel @Inject constructor( uploadPercent = -1, id = id, description = description, - focus = focus + focus = focus, + processed = true ) mediaValue + mediaItem } @@ -294,7 +296,7 @@ class ComposeViewModel @Inject constructor( uri = item.uri.toString(), description = item.description, focus = item.focus, - processed = false + processed = item.processed == true ) } val tootToSend = StatusToSend( diff --git a/app/src/main/java/com/keylesspalace/tusky/components/compose/MediaUploader.kt b/app/src/main/java/com/keylesspalace/tusky/components/compose/MediaUploader.kt index 1b83b316a..7259097c2 100644 --- a/app/src/main/java/com/keylesspalace/tusky/components/compose/MediaUploader.kt +++ b/app/src/main/java/com/keylesspalace/tusky/components/compose/MediaUploader.kt @@ -23,7 +23,6 @@ import android.util.Log import android.webkit.MimeTypeMap import androidx.core.content.FileProvider import androidx.core.net.toUri -import at.connyduck.calladapter.networkresult.fold import com.keylesspalace.tusky.BuildConfig import com.keylesspalace.tusky.R import com.keylesspalace.tusky.components.compose.ComposeActivity.QueuedMedia @@ -51,6 +50,7 @@ import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.shareIn import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.MultipartBody +import retrofit2.HttpException import java.io.File import java.io.FileInputStream import java.io.FileOutputStream @@ -63,7 +63,7 @@ sealed interface FinalUploadEvent sealed class UploadEvent { data class ProgressEvent(val percentage: Int) : UploadEvent() - data class FinishedEvent(val mediaId: String) : UploadEvent(), FinalUploadEvent + data class FinishedEvent(val mediaId: String, val processed: Boolean) : UploadEvent(), FinalUploadEvent data class ErrorEvent(val error: Throwable) : UploadEvent(), FinalUploadEvent } @@ -286,16 +286,20 @@ class MediaUploader @Inject constructor( null } - mediaUploadApi.uploadMedia(body, description, focus).fold({ result -> - send(UploadEvent.FinishedEvent(result.id)) - }, { throwable -> - val errorMessage = throwable.getServerErrorMessage() + val uploadResponse = mediaUploadApi.uploadMedia(body, description, focus) + val responseBody = uploadResponse.body() + if (uploadResponse.isSuccessful && responseBody != null) { + send(UploadEvent.FinishedEvent(responseBody.id, uploadResponse.code() == 200)) + } else { + val error = HttpException(uploadResponse) + val errorMessage = error.getServerErrorMessage() if (errorMessage == null) { - throw throwable + throw error } else { throw UploadServerError(errorMessage) } - }) + } + awaitClose() } } diff --git a/app/src/main/java/com/keylesspalace/tusky/network/MediaUploadApi.kt b/app/src/main/java/com/keylesspalace/tusky/network/MediaUploadApi.kt index 24636a641..0cfab9b72 100644 --- a/app/src/main/java/com/keylesspalace/tusky/network/MediaUploadApi.kt +++ b/app/src/main/java/com/keylesspalace/tusky/network/MediaUploadApi.kt @@ -1,8 +1,8 @@ package com.keylesspalace.tusky.network -import at.connyduck.calladapter.networkresult.NetworkResult import com.keylesspalace.tusky.entity.MediaUploadResult import okhttp3.MultipartBody +import retrofit2.Response import retrofit2.http.Multipart import retrofit2.http.POST import retrofit2.http.Part @@ -17,5 +17,5 @@ interface MediaUploadApi { @Part file: MultipartBody.Part, @Part description: MultipartBody.Part? = null, @Part focus: MultipartBody.Part? = null - ): NetworkResult + ): Response } diff --git a/app/src/main/java/com/keylesspalace/tusky/service/SendStatusService.kt b/app/src/main/java/com/keylesspalace/tusky/service/SendStatusService.kt index ac430769f..23bc02356 100644 --- a/app/src/main/java/com/keylesspalace/tusky/service/SendStatusService.kt +++ b/app/src/main/java/com/keylesspalace/tusky/service/SendStatusService.kt @@ -140,7 +140,7 @@ class SendStatusService : Service(), Injectable { val media = statusToSend.media.map { mediaItem -> if (mediaItem.id == null) { when (val uploadState = mediaUploader.getMediaUploadState(mediaItem.localId)) { - is UploadEvent.FinishedEvent -> mediaItem.copy(id = uploadState.mediaId) + is UploadEvent.FinishedEvent -> mediaItem.copy(id = uploadState.mediaId, processed = uploadState.processed) is UploadEvent.ErrorEvent -> { Log.w(TAG, "failed uploading media", uploadState.error) failSending(statusId)