avito-android

Форк
0
90 строк · 3.2 Кб
1
package com.avito.plugin
2

3
import com.avito.android.Result
4
import com.avito.http.RetryInterceptor
5
import com.avito.logger.LoggerFactory
6
import com.avito.logger.create
7
import com.google.gson.GsonBuilder
8
import okhttp3.MultipartBody
9
import okhttp3.OkHttpClient
10
import okhttp3.RequestBody.Companion.asRequestBody
11
import retrofit2.Call
12
import retrofit2.Retrofit
13
import retrofit2.converter.gson.GsonConverterFactory
14
import retrofit2.create
15
import java.io.File
16
import java.util.concurrent.TimeUnit
17

18
internal class QAppsUploadAction(
19
    private val apk: File,
20
    private val comment: String,
21
    private val host: String,
22
    private val branch: String,
23
    private val versionName: String,
24
    private val versionCode: String,
25
    private val packageName: String,
26
    private val releaseChain: Boolean,
27
    private val httpClientBuilder: OkHttpClient.Builder,
28
    loggerFactory: LoggerFactory
29
) {
30

31
    private val logger = loggerFactory.create<QAppsUploadAction>()
32

33
    private val apiClient by lazy {
34
        Retrofit.Builder()
35
            .baseUrl(host)
36
            .addConverterFactory(GsonConverterFactory.create(GsonBuilder().create()))
37
            .client(
38
                httpClientBuilder
39
                    .connectTimeout(TIMEOUT_SEC, TimeUnit.SECONDS)
40
                    .writeTimeout(TIMEOUT_SEC, TimeUnit.SECONDS)
41
                    .readTimeout(TIMEOUT_SEC, TimeUnit.SECONDS)
42
                    .addInterceptor(
43
                        RetryInterceptor(
44
                            retries = 3,
45
                            allowedMethods = listOf("GET", "POST")
46
                        )
47
                    )
48
                    .build()
49
            )
50
            .validateEagerly(true)
51
            .build()
52
            .create<QAppsUploadApi>()
53
    }
54

55
    fun upload(): Result<Unit> = Result.tryCatch {
56
        val response = uploadRequest().execute()
57
        if (!response.isSuccessful) {
58
            val error = response.errorBody()?.string() ?: "unknown error"
59
            error("Can't upload apk to qapps: $error")
60
        }
61
    }
62

63
    private fun uploadRequest(): Call<Void> {
64
        logger.info(
65
            "qapps upload: " +
66
                "apk=${apk.path}, " +
67
                "branch=$branch, " +
68
                "version_name=$versionName, " +
69
                "version_code=$versionCode, " +
70
                "package_name=$packageName, " +
71
                "release_chain=$releaseChain, " +
72
                "comment=$comment"
73
        )
74
        return apiClient.upload(
75
            comment = MultipartBody.Part.createFormData("comment", comment),
76
            branch = MultipartBody.Part.createFormData("branch", branch),
77
            version_name = MultipartBody.Part.createFormData("version_name", versionName),
78
            version_code = MultipartBody.Part.createFormData("version_code", versionCode),
79
            package_name = MultipartBody.Part.createFormData("package_name", packageName),
80
            release_chain = MultipartBody.Part.createFormData("release_chain", releaseChain.toString()),
81
            apk = MultipartBody.Part.createFormData(
82
                "app",
83
                apk.name,
84
                apk.asRequestBody(null)
85
            )
86
        )
87
    }
88
}
89

90
private const val TIMEOUT_SEC = 60L
91

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.