diff --git a/README.md b/README.md index 3aabae2..3b91ac8 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ Plugin for downloading and uploading translations from - +

## Installation @@ -12,7 +12,7 @@ Plugin for downloading and uploading translations from
{ | **downloadTranslations** | Downloads all of available translations (including not finished ones) | | **uploadTranslations** | Uploads base translation files | +Add `-Pdeprecate-strings` if you would like to deprecate strings on OneSky which are not present in `sourceStringFiles`. + +```bash +# deprecates removed strings on OneSky +./gradlew sample:uploadTranslations -Pdeprecate-strings +``` ## Releasing See the release instructions [here](HOW_TO_RELEASE.md). @@ -46,7 +52,7 @@ See the release instructions [here](HOW_TO_RELEASE.md). ./gradlew clean plugin:build plugin:publishToMavenLocal # run a sample -./gradlew sample:translationsProgress --refresh-dependencies +./gradlew sample:translationsProgress ``` ## License diff --git a/plugin/build.gradle.kts b/plugin/build.gradle.kts index de4fa29..18032d5 100644 --- a/plugin/build.gradle.kts +++ b/plugin/build.gradle.kts @@ -10,7 +10,7 @@ plugins { apply(plugin = "org.jlleitschuh.gradle.ktlint") group = "co.brainly" -version = "1.1.0" +version = "1.2.0" gradlePlugin { plugins { diff --git a/plugin/src/main/java/co/brainly/onesky/OneSkyPlugin.kt b/plugin/src/main/java/co/brainly/onesky/OneSkyPlugin.kt index e4c9d3d..126d865 100644 --- a/plugin/src/main/java/co/brainly/onesky/OneSkyPlugin.kt +++ b/plugin/src/main/java/co/brainly/onesky/OneSkyPlugin.kt @@ -1,6 +1,7 @@ package co.brainly.onesky import co.brainly.onesky.client.ONESKY_API_URL +import co.brainly.onesky.task.DEPRECATE_STRINGS_FLAG import co.brainly.onesky.task.DownloadTranslationsTask import co.brainly.onesky.task.TranslationsProgressTask import co.brainly.onesky.task.UploadTranslationTask @@ -45,7 +46,8 @@ class OneSkyPlugin : Plugin { description = "Displays current progress from OneSky, skips already finished translations" } - tasks.register("uploadTranslations", UploadTranslationTask::class.java, extension) + val deprecateStrings = project.hasProperty(DEPRECATE_STRINGS_FLAG) + tasks.register("uploadTranslations", UploadTranslationTask::class.java, extension, deprecateStrings) .configure { group = Constants.TASK_GROUP description = "Uploads base \"sourceStringFiles\" to OneSky" diff --git a/plugin/src/main/java/co/brainly/onesky/client/OneSkyApiClient.kt b/plugin/src/main/java/co/brainly/onesky/client/OneSkyApiClient.kt index b6f65ef..83dc860 100644 --- a/plugin/src/main/java/co/brainly/onesky/client/OneSkyApiClient.kt +++ b/plugin/src/main/java/co/brainly/onesky/client/OneSkyApiClient.kt @@ -68,14 +68,20 @@ class OneSkyApiClient( return fetch(request) } - fun uploadTranslation(projectId: Int, file: File): Result { + fun uploadTranslation(projectId: Int, file: File, deprecateStrings: Boolean): Result { + val isKeepingAllStrings = if (deprecateStrings) { + "false" + } else { + "true" + } + val url = baseUrl.newBuilder() .addPathSegment("projects") .addPathSegment(projectId.toString()) .addPathSegment("files") .addAuthParams(apiKey, apiSecret) .addQueryParameter("file_format", "ANDROID_XML") - .addQueryParameter("is_keeping_all_strings", "true") + .addQueryParameter("is_keeping_all_strings", isKeepingAllStrings) .build() val body = MultipartBody.Builder(boundary = "onesky-gradle-plugin-file") diff --git a/plugin/src/main/java/co/brainly/onesky/task/UploadTranslationTask.kt b/plugin/src/main/java/co/brainly/onesky/task/UploadTranslationTask.kt index 0b3a88c..1d04cdc 100644 --- a/plugin/src/main/java/co/brainly/onesky/task/UploadTranslationTask.kt +++ b/plugin/src/main/java/co/brainly/onesky/task/UploadTranslationTask.kt @@ -11,8 +11,11 @@ import org.slf4j.LoggerFactory import java.io.File import javax.inject.Inject +const val DEPRECATE_STRINGS_FLAG = "deprecate-strings" + open class UploadTranslationTask @Inject constructor( - extension: OneSkyPluginExtension + extension: OneSkyPluginExtension, + private val deprecateStrings: Boolean ) : DefaultTask() { private val projectId = extension.projectId @@ -35,6 +38,10 @@ open class UploadTranslationTask @Inject constructor( fun run() { progressLogger.start("Uploading translations", "") + if (deprecateStrings) { + logger.warn("Deprecating strings on OneSky which are not found in base files.") + } + files.forEachIndexed { index, filename -> progressLogger.progress( "$filename (${index + 1}/${files.size})" @@ -44,7 +51,11 @@ open class UploadTranslationTask @Inject constructor( logger.warn(baseTranslationFile.absolutePath) - val result = client.uploadTranslation(projectId, baseTranslationFile) + val result = client.uploadTranslation( + projectId, + baseTranslationFile, + deprecateStrings = deprecateStrings + ) result.handle( onSuccess = { /*do nothing*/ }, onFailure = { error -> onUploadFailure(filename, error) } diff --git a/plugin/src/test/java/co/brainly/onesky/client/OneSkyApiClientTest.kt b/plugin/src/test/java/co/brainly/onesky/client/OneSkyApiClientTest.kt index bb0c2f9..1167648 100644 --- a/plugin/src/test/java/co/brainly/onesky/client/OneSkyApiClientTest.kt +++ b/plugin/src/test/java/co/brainly/onesky/client/OneSkyApiClientTest.kt @@ -105,7 +105,7 @@ class OneSkyApiClientTest { val file = File.createTempFile("onesky", ".tmp") file.writeText("Hello OneSky Gradle Plugin") - client.uploadTranslation(projectId, file) + client.uploadTranslation(projectId, file, deprecateStrings = false) val request = server.takeRequest() @@ -137,4 +137,42 @@ class OneSkyApiClientTest { request.body.readByteString().utf8() ) } + + @Test + fun `uploads a translation file and deprecate old strings`() { + val file = File.createTempFile("onesky", ".tmp") + file.writeText("Hello OneSky Gradle Plugin") + + client.uploadTranslation(projectId, file, deprecateStrings = true) + + val request = server.takeRequest() + + assertEquals( + "/projects/41994/files?api_key=my-api-key×tamp=12" + + "&dev_hash=28dac32cc9ee8ab264d35087653be23e&file_format=ANDROID_XML&is_keeping_all_strings=false", + request.path + ) + + assertEquals( + "POST", + request.method + ) + + assertEquals( + """ + --onesky-gradle-plugin-file + Content-Disposition: form-data; name="file"; filename="${file.name}" + Content-Type: application/octet-stream + Content-Length: 26 + + Hello OneSky Gradle Plugin + --onesky-gradle-plugin-file-- + + """.trimIndent().replace( + "\n", + "\r\n" + ), // to avoid conflicts with OkHttp + request.body.readByteString().utf8() + ) + } } diff --git a/sample/build.gradle.kts b/sample/build.gradle.kts index 9bd2691..3715083 100644 --- a/sample/build.gradle.kts +++ b/sample/build.gradle.kts @@ -11,7 +11,7 @@ buildscript { plugins { id("com.android.application") kotlin("android") - id("co.brainly.onesky") version "1.1.0" + id("co.brainly.onesky") version "1.2.0" } android {