Skip to content

Commit 557a74a

Browse files
authored
Added the possibility to define the order of an export. (#58)
Co-authored-by: Martin Breuer <martin.breuer@sennder.com>
1 parent d64327c commit 557a74a

File tree

9 files changed

+48
-0
lines changed

9 files changed

+48
-0
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
2323
## [Unreleased]
2424
### Added
2525
- Add configuration support to define custom resource file names. _Thanks to [@gustavaa](https://github.com/gustavaa) for the contribution!_
26+
- Add configuration support to define how to order the export.
2627
### Changed
2728
- No changed features!
2829
### Deprecated

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ Attribute | Description
9191
```minimumTranslationPercentage``` | (Since 2.3.0) (Optional) The minimum accepted percentage of translated strings per language. Languages with fewer translated strings will not be fetched. Defaults to no minimum, allowing all languages to be fetched.
9292
```filters``` | (Since 2.4.0) (Optional) List of PoEditor filters to use during download. Defaults to empty list. Accepted values are defined by the POEditor API.
9393
```resFileName``` | (Since 3.1.0) (Optional) Sets the file name for the imported string resource XML files. Defaults to `strings`.
94+
```order``` | (Since 3.1.0) (Optional) Defines how to order the export. Accepted values are defined by the POEditor API.
9495

9596
After the configuration is done, just run the new ```importPoEditorStrings``` task via Android Studio or command line:
9697

src/main/kotlin/com/hyperdevs/poeditor/gradle/Main.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
package com.hyperdevs.poeditor.gradle
2020

2121
import com.hyperdevs.poeditor.gradle.network.api.FilterType
22+
import com.hyperdevs.poeditor.gradle.network.api.OrderType
2223
import io.github.cdimascio.dotenv.Dotenv
2324

2425
/**
@@ -41,6 +42,7 @@ fun main() {
4142
?.map { it.trim() }
4243
?.map { FilterType.from(it) }
4344
?: emptyList()
45+
val order = OrderType.from(dotenv.get("ORDER", OrderType.NONE.name))
4446
val tags = dotenv.get("TAGS", "")
4547
.takeIf { it.isNotBlank() }
4648
?.split(",")
@@ -62,6 +64,7 @@ fun main() {
6264
defaultLanguage,
6365
resDirPath,
6466
filters,
67+
order,
6568
tags,
6669
languageValuesOverridePathMap,
6770
minimumTranslationPercentage,

src/main/kotlin/com/hyperdevs/poeditor/gradle/PoEditorPlugin.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import com.android.build.gradle.LibraryExtension
2525
import com.android.build.gradle.LibraryPlugin
2626
import com.android.build.gradle.internal.dsl.BaseAppModuleExtension
2727
import com.hyperdevs.poeditor.gradle.ktx.registerNewTask
28+
import com.hyperdevs.poeditor.gradle.network.api.OrderType
2829
import com.hyperdevs.poeditor.gradle.tasks.ImportPoEditorStringsTask
2930
import com.hyperdevs.poeditor.gradle.utils.*
3031
import org.gradle.api.NamedDomainObjectContainer
@@ -53,6 +54,7 @@ class PoEditorPlugin : Plugin<Project> {
5354
defaultLang.convention("en")
5455
defaultResPath.convention(mainResourceDirectory.asFile.absolutePath)
5556
filters.convention(emptyList())
57+
order.convention(OrderType.NONE.name.toLowerCase())
5658
tags.convention(emptyList())
5759
languageValuesOverridePathMap.convention(emptyMap())
5860
minimumTranslationPercentage.convention(-1)

src/main/kotlin/com/hyperdevs/poeditor/gradle/PoEditorPluginExtension.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,15 @@ open class PoEditorPluginExtension @Inject constructor(objects: ObjectFactory, p
9696
@get:Input
9797
val filters: ListProperty<String> = objects.listProperty(String::class.java)
9898

99+
/**
100+
* Defines the order for the export. If set to "terms" it will be ordered alphabetically by the terms.
101+
*
102+
* Defaults to "none" meaning no order will be applied.
103+
*/
104+
@get:Optional
105+
@get:Input
106+
val order: Property<String> = objects.property(String::class.java)
107+
99108
/**
100109
* Tags to filter downloaded strings with, previously declared in PoEditor.
101110
*

src/main/kotlin/com/hyperdevs/poeditor/gradle/PoEditorStringsImporter.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import com.hyperdevs.poeditor.gradle.ktx.downloadUrlToString
2222
import com.hyperdevs.poeditor.gradle.network.PoEditorApiControllerImpl
2323
import com.hyperdevs.poeditor.gradle.network.api.ExportType
2424
import com.hyperdevs.poeditor.gradle.network.api.FilterType
25+
import com.hyperdevs.poeditor.gradle.network.api.OrderType
2526
import com.hyperdevs.poeditor.gradle.network.api.PoEditorApi
2627
import com.hyperdevs.poeditor.gradle.network.api.ProjectLanguage
2728
import com.hyperdevs.poeditor.gradle.utils.TABLET_REGEX_STRING
@@ -87,6 +88,7 @@ object PoEditorStringsImporter {
8788
defaultLang: String,
8889
resDirPath: String,
8990
filters: List<FilterType>,
91+
order: OrderType,
9092
tags: List<String>,
9193
languageValuesOverridePathMap: Map<String, String>,
9294
minimumTranslationPercentage: Int,
@@ -128,6 +130,7 @@ object PoEditorStringsImporter {
128130
code = languageCode,
129131
type = ExportType.ANDROID_STRINGS,
130132
filters = filters,
133+
order = order,
131134
tags = tags)
132135

133136
// Download translation File to in-memory string

src/main/kotlin/com/hyperdevs/poeditor/gradle/network/PoEditorApiController.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,12 @@ interface PoEditorApiController {
3434
* Retrieves the translation file URL for a given project, language code, and export type.
3535
* Also supports a list of tags to filter.
3636
*/
37+
@Suppress("LongParameterList")
3738
fun getTranslationFileUrl(projectId: Int,
3839
code: String,
3940
type: ExportType,
4041
filters: List<FilterType>?,
42+
order: OrderType,
4143
tags: List<String>?): String
4244
}
4345

@@ -53,17 +55,20 @@ class PoEditorApiControllerImpl(private val apiToken: String,
5355
return response.onSuccessful { it.result.languages }
5456
}
5557

58+
@Suppress("LongParameterList")
5659
override fun getTranslationFileUrl(projectId: Int,
5760
code: String,
5861
type: ExportType,
5962
filters: List<FilterType>?,
63+
order: OrderType,
6064
tags: List<String>?): String {
6165
val response = poEditorApi.getExportFileInfo(
6266
apiToken = apiToken,
6367
id = projectId,
6468
type = type.toString().toLowerCase(),
6569
filters = filters?.map { it.name.toLowerCase() },
6670
language = code,
71+
order = order.name.toLowerCase(),
6772
tags = tags)
6873
.execute()
6974
return response.onSuccessful { it.result.url }

src/main/kotlin/com/hyperdevs/poeditor/gradle/network/api/PoEditorApiModels.kt

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,3 +128,23 @@ enum class FilterType {
128128
}
129129
}
130130
}
131+
132+
/**
133+
* Order types to use in file exports.
134+
*/
135+
enum class OrderType {
136+
NONE,
137+
TERMS;
138+
139+
companion object {
140+
/** Returns the enum value associated to a string value. */
141+
fun from(value: String) =
142+
try {
143+
valueOf(value.toUpperCase())
144+
} catch (e: Exception) {
145+
val message = "Value \"$value\" is not a valid ${this::class.java.declaringClass.simpleName}; " +
146+
"allowed values are: ${values().joinToString(", ") { "\"${it.name.toLowerCase()}\"" }}"
147+
throw IllegalArgumentException(message)
148+
}
149+
}
150+
}

src/main/kotlin/com/hyperdevs/poeditor/gradle/tasks/ImportPoEditorStringsTask.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ package com.hyperdevs.poeditor.gradle.tasks
2121
import com.hyperdevs.poeditor.gradle.PoEditorPluginExtension
2222
import com.hyperdevs.poeditor.gradle.PoEditorStringsImporter
2323
import com.hyperdevs.poeditor.gradle.network.api.FilterType
24+
import com.hyperdevs.poeditor.gradle.network.api.OrderType
2425
import com.hyperdevs.poeditor.gradle.utils.DEFAULT_PLUGIN_NAME
2526
import com.hyperdevs.poeditor.gradle.utils.POEDITOR_CONFIG_NAME
2627
import org.gradle.api.DefaultTask
@@ -47,6 +48,7 @@ abstract class ImportPoEditorStringsTask
4748
val defaultLang: String
4849
val defaultResPath: String
4950
val filters: List<FilterType>
51+
val order: OrderType
5052
val tags: List<String>
5153
val languageOverridePathMap: Map<String, String>
5254
val minimumTranslationPercentage: Int
@@ -58,6 +60,7 @@ abstract class ImportPoEditorStringsTask
5860
defaultLang = extension.defaultLang.get()
5961
defaultResPath = extension.defaultResPath.get()
6062
filters = extension.filters.get().map { FilterType.from(it) }
63+
order = OrderType.from(extension.order.get())
6164
tags = extension.tags.get()
6265
languageOverridePathMap = extension.languageValuesOverridePathMap.get()
6366
minimumTranslationPercentage = extension.minimumTranslationPercentage.get()
@@ -77,6 +80,7 @@ abstract class ImportPoEditorStringsTask
7780
defaultLang,
7881
defaultResPath,
7982
filters,
83+
order,
8084
tags,
8185
languageOverridePathMap,
8286
minimumTranslationPercentage,

0 commit comments

Comments
 (0)