feat(build): migrate to Crowdin V2 API

This commit is contained in:
Harsh Shandilya 2023-03-26 19:00:38 +05:30
parent cb0a2fe6ee
commit 8e14f8ccaf
No known key found for this signature in database
6 changed files with 46 additions and 12 deletions

View file

@ -98,6 +98,8 @@ dependencies {
implementation(libs.build.ktfmt)
implementation(libs.build.mavenpublish)
implementation(libs.build.metalava)
implementation(libs.build.moshi)
implementation(libs.build.moshi.kotlin)
implementation(libs.build.okhttp)
implementation(libs.build.r8)
implementation(libs.build.semver)

View file

@ -1,8 +1,13 @@
package app.passwordstore.gradle.crowdin
import app.passwordstore.gradle.crowdin.api.ListProjects
import com.squareup.moshi.Moshi
import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
import java.util.concurrent.TimeUnit
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.OkHttpClient
import okhttp3.Request
import okhttp3.RequestBody.Companion.toRequestBody
import org.gradle.api.DefaultTask
import org.gradle.api.provider.Property
import org.gradle.api.tasks.Input
@ -26,15 +31,37 @@ abstract class BuildOnApiTask : DefaultTask() {
.readTimeout(5, TimeUnit.MINUTES)
.callTimeout(10, TimeUnit.MINUTES)
.build()
val url =
CROWDIN_BUILD_API_URL.format(crowdinIdentifier.get(), crowdinLogin.get(), crowdinKey.get())
val request = Request.Builder().url(url).get().build()
client.newCall(request).execute().close()
val moshi = Moshi.Builder().add(KotlinJsonAdapterFactory()).build()
val projectAdapter = moshi.adapter(ListProjects::class.java)
val projectRequest =
Request.Builder()
.url("$CROWDIN_BASE_URL/projects")
.header("Authorization", "Bearer ${crowdinKey.get()}")
.get()
.build()
client.newCall(projectRequest).execute().use { response ->
val projects = projectAdapter.fromJson(response.body!!.source())
if (projects != null) {
val identifier =
projects.projects
.first { data -> data.project.identifier == crowdinIdentifier.get() }
.project
.id
.toString()
val buildRequest =
Request.Builder()
.url(CROWDIN_BUILD_API_URL.format(identifier))
.header("Authorization", "Bearer ${crowdinKey.get()}")
.post("{}".toRequestBody("application/json".toMediaType()))
.build()
client.newCall(buildRequest).execute().close()
}
}
}
private companion object {
private const val CROWDIN_BUILD_API_URL =
"https://api.crowdin.com/api/project/%s/export?login=%s&account-key=%s"
private const val CROWDIN_BASE_URL = "https://api.crowdin.com/api/v2"
private const val CROWDIN_BUILD_API_URL = "$CROWDIN_BASE_URL/projects/%s/translations/builds"
}
}

View file

@ -13,11 +13,6 @@ import org.gradle.api.tasks.Delete
import org.gradle.kotlin.dsl.create
import org.gradle.kotlin.dsl.register
private const val EXCEPTION_MESSAGE =
"""Applying `crowdin-plugin` requires a projectName to be configured via the "crowdin" extension."""
private const val CROWDIN_BUILD_API_URL =
"https://api.crowdin.com/api/project/%s/export?login=%s&account-key=%s"
@Suppress("Unused")
class CrowdinDownloadPlugin : Plugin<Project> {

View file

@ -0,0 +1,9 @@
package app.passwordstore.gradle.crowdin.api
import com.squareup.moshi.Json
data class ListProjects(@Json(name = "data") val projects: List<ProjectData>)
data class ProjectData(@Json(name = "data") val project: Project)
data class Project(val id: Long, val identifier: String)