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 {