Skip to content

Commit

Permalink
feat: ファイルアップロード時に発生するエラーの内容を正しく処理できるようにした
Browse files Browse the repository at this point in the history
  • Loading branch information
pantasystem committed Oct 24, 2023
1 parent 20b1613 commit 892cada
Show file tree
Hide file tree
Showing 4 changed files with 45 additions and 30 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import net.pantasystem.milktea.model.account.Account
import net.pantasystem.milktea.model.drive.FileProperty
import net.pantasystem.milktea.model.drive.FilePropertyDataSource
import net.pantasystem.milktea.model.file.AppFile
import net.pantasystem.milktea.model.file.FileUploadFailedException
import okhttp3.MultipartBody
import okhttp3.OkHttpClient
import okhttp3.Request
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import net.pantasystem.milktea.model.account.Account
import net.pantasystem.milktea.model.drive.FileProperty
import net.pantasystem.milktea.model.drive.FilePropertyDataSource
import net.pantasystem.milktea.model.file.AppFile
import net.pantasystem.milktea.model.file.FileUploadFailedException

interface FileUploader {
@Throws(FileUploadFailedException::class)
Expand All @@ -27,15 +28,6 @@ sealed interface UploadSource {
data class LocalFile(val file: AppFile.Local) : UploadSource
}

class FileUploadFailedException(
val file: AppFile,
val throwable: Throwable?,
statusCode: Int?,
errorMessage: String?,
) : IllegalStateException(
"ファイルアップロードに失敗: file:$file, statusCode:$statusCode, message:$errorMessage",
throwable
)

interface FileUploaderProvider {
fun create(account: Account): FileUploader
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package net.pantasystem.milktea.model.file


class FileUploadFailedException(
val file: AppFile,
val throwable: Throwable?,
statusCode: Int?,
errorMessage: String?,
) : IllegalStateException(
"ファイルアップロードに失敗: file:$file, statusCode:$statusCode, message:$errorMessage",
throwable
)
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import net.pantasystem.milktea.common.Logger
import net.pantasystem.milktea.common.MisskeyErrorCodes
import net.pantasystem.milktea.common.mapCancellableCatching
import net.pantasystem.milktea.model.account.AccountRepository
import net.pantasystem.milktea.model.file.FileUploadFailedException
import net.pantasystem.milktea.model.note.CreateNoteUseCase
import net.pantasystem.milktea.model.note.draft.DraftNoteRepository
import net.pantasystem.milktea.model.note.toCreateNote
Expand Down Expand Up @@ -103,35 +104,44 @@ class CreateNoteWorker @AssistedInject constructor(
private fun convertToErrorReason(type: Throwable): ErrorReasonType {
return when(type) {
is APIError -> {
when (type) {
is APIError.AuthenticationException -> ErrorReasonType.UnauthorizedError
is APIError.ClientException -> {
when(val errorType = type.error) {
is ErrorType.Misskey -> {
when(errorType.errorCodeeType) {
MisskeyErrorCodes.NoFreeSpace -> ErrorReasonType.FileUploadDriveNoFreeSpaceError
else -> ErrorReasonType.ClientError
}
}
is ErrorType.Raw -> ErrorReasonType.ClientError
null -> ErrorReasonType.ClientError
}
}
is APIError.ForbiddenException -> ErrorReasonType.UnauthorizedError
is APIError.IAmAIException -> ErrorReasonType.IAmAiError
is APIError.InternalServerException -> ErrorReasonType.ServerError
is APIError.NotFoundException -> ErrorReasonType.NotFoundError
is APIError.SomethingException -> ErrorReasonType.UnknownError
is APIError.ToManyRequestsException -> ErrorReasonType.ToManyRequestError
}
convertToErrorReasonFromApiError(type)
}
is SecurityException -> {
ErrorReasonType.FileUploadDeviceSecurityError
}
is FileUploadFailedException -> {
type.throwable?.let {
convertToErrorReason(it)
} ?: ErrorReasonType.UnknownError
}
is IOException -> {
ErrorReasonType.NetworkError
}
else -> ErrorReasonType.UnknownError
}
}

private fun convertToErrorReasonFromApiError(type: APIError): ErrorReasonType {
return when (type) {
is APIError.AuthenticationException -> ErrorReasonType.UnauthorizedError
is APIError.ClientException -> {
when(val errorType = type.error) {
is ErrorType.Misskey -> {
when(errorType.errorCodeeType) {
MisskeyErrorCodes.NoFreeSpace -> ErrorReasonType.FileUploadDriveNoFreeSpaceError
else -> ErrorReasonType.ClientError
}
}
is ErrorType.Raw -> ErrorReasonType.ClientError
null -> ErrorReasonType.ClientError
}
}
is APIError.ForbiddenException -> ErrorReasonType.UnauthorizedError
is APIError.IAmAIException -> ErrorReasonType.IAmAiError
is APIError.InternalServerException -> ErrorReasonType.ServerError
is APIError.NotFoundException -> ErrorReasonType.NotFoundError
is APIError.SomethingException -> ErrorReasonType.UnknownError
is APIError.ToManyRequestsException -> ErrorReasonType.ToManyRequestError
}
}
}

0 comments on commit 892cada

Please sign in to comment.