From 088cd7942d239d5ba89079d470a29bd71e8e1702 Mon Sep 17 00:00:00 2001 From: alperozturk96 Date: Tue, 20 Jan 2026 14:21:19 +0100 Subject: [PATCH 01/12] feat(assistant): translate task type Signed-off-by: alperozturk96 --- .../resources/assistant/v2/GetTaskTypesRemoteOperationV2.kt | 2 +- .../android/lib/resources/assistant/v2/model/TaskTypes.kt | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/GetTaskTypesRemoteOperationV2.kt b/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/GetTaskTypesRemoteOperationV2.kt index a783f41c98..96a7372f21 100644 --- a/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/GetTaskTypesRemoteOperationV2.kt +++ b/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/GetTaskTypesRemoteOperationV2.kt @@ -71,7 +71,7 @@ class GetTaskTypesRemoteOperationV2 : OCSRemoteOperation>() { ?.types ?.map { (key, value) -> value.copy(id = value.id ?: key) } ?.filter { taskType -> - isSingleTextInputOutput(taskType) || taskType.isChat() + isSingleTextInputOutput(taskType) || taskType.isChat() || taskType.isTranslate() }?.sortedByDescending { it.isChat() } result = RemoteOperationResult(true, getMethod) diff --git a/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/TaskTypes.kt b/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/TaskTypes.kt index 6ce58e21e8..567e5031f9 100644 --- a/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/TaskTypes.kt +++ b/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/TaskTypes.kt @@ -20,9 +20,12 @@ data class TaskTypeData( val outputShape: Map ) { private val chatTaskName = "Chat" + private val translateTaskName = "Translate" fun isChat(): Boolean = (name == chatTaskName) + fun isTranslate(): Boolean = (name == translateTaskName) + companion object { private const val CONVERSATION_LIST_ID = "ConversationList" val conversationList = From 61acb0816d5cfd07072ef042a49c90b48068d13b Mon Sep 17 00:00:00 2001 From: alperozturk96 Date: Wed, 21 Jan 2026 12:27:42 +0100 Subject: [PATCH 02/12] add translation model Signed-off-by: alperozturk96 --- .../resources/assistant/v2/model/TaskTypes.kt | 12 ++++- .../assistant/v2/model/Translation.kt | 53 +++++++++++++++++++ 2 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/Translation.kt diff --git a/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/TaskTypes.kt b/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/TaskTypes.kt index 567e5031f9..8d9962eec9 100644 --- a/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/TaskTypes.kt +++ b/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/TaskTypes.kt @@ -17,7 +17,12 @@ data class TaskTypeData( val name: String, val description: String?, val inputShape: Map, - val outputShape: Map + val outputShape: Map, + val optionalInputShapeDefaults: Map? = null, + val optionalInputShapeEnumValues: Map>? = null, + val inputShapeEnumValues: Map>? = null, + val outputShapeEnumValues: Map>? = null, + val optionalOutputShapeEnumValues: Map>? = null, ) { private val chatTaskName = "Chat" private val translateTaskName = "Translate" @@ -39,6 +44,11 @@ data class TaskTypeData( } } +data class EnumValue( + val name: String, + val value: String +) + data class Shape( val name: String, val description: String, diff --git a/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/Translation.kt b/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/Translation.kt new file mode 100644 index 0000000000..d54cb271a2 --- /dev/null +++ b/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/Translation.kt @@ -0,0 +1,53 @@ +/* + * Nextcloud Android Library + * + * SPDX-FileCopyrightText: 2026 Alper Ozturk + * SPDX-License-Identifier: MIT + */ + +package com.owncloud.android.lib.resources.assistant.v2.model + +import com.google.gson.annotations.SerializedName + +data class TranslationLanguage(val name: String, val code: String) + +data class TranslationRequest( + @SerializedName("origin_language") + val originLanguage: String, + + @SerializedName("max_tokens") + val maxTokens: Double, + + val model: String, + + @SerializedName("target_language") + val targetLanguage: String, + + val input: String +) + +data class TranslationModel( + val model: String, + val maxTokens: Double +) + +data class TranslationLanguages( + val originLanguages: List, + val targetLanguages: List +) + +fun TaskTypeData.toTranslationLanguages(): TranslationLanguages { + fun List?.toTranslationLanguageList() = this.orEmpty() + .map { TranslationLanguage(it.name, it.value) } + + return TranslationLanguages( + originLanguages = inputShapeEnumValues?.get("origin_language").toTranslationLanguageList(), + targetLanguages = inputShapeEnumValues?.get("target_language").toTranslationLanguageList() + ) +} + +fun TaskTypeData.toTranslationModel(): TranslationModel? { + val model = optionalInputShapeDefaults?.get("model") as? String + val maxTokens = optionalInputShapeDefaults?.get("max_tokens") as? Double + return if (model != null && maxTokens != null) TranslationModel(model, maxTokens) else null +} From fe55bcc52ee9cc86515accdeee3a803dc3a0647f Mon Sep 17 00:00:00 2001 From: alperozturk96 Date: Wed, 21 Jan 2026 13:37:07 +0100 Subject: [PATCH 03/12] use org.jetbrains.kotlinx:kotlinx-serialization-json Signed-off-by: alperozturk96 --- gradle/verification-metadata.xml | 5 +++++ library/build.gradle | 3 +++ .../assistant/v2/model/Translation.kt | 20 ++++++++++++------- 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index b2e472e59f..989cd46925 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -13425,6 +13425,11 @@ + + + + + diff --git a/library/build.gradle b/library/build.gradle index d27ae8ed2c..9497a786a3 100644 --- a/library/build.gradle +++ b/library/build.gradle @@ -30,6 +30,7 @@ buildscript { plugins { id "com.diffplug.spotless" version "8.1.0" + id 'org.jetbrains.kotlin.plugin.serialization' version '2.3.0' } apply plugin: 'com.android.library' @@ -59,6 +60,8 @@ configurations { } dependencies { + implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.9.0" + implementation 'org.apache.jackrabbit:jackrabbit-webdav:2.13.5' api 'com.squareup.okhttp3:okhttp:5.3.2' implementation 'com.github.bitfireAT:dav4jvm:2.2.1' diff --git a/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/Translation.kt b/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/Translation.kt index d54cb271a2..673fbb734a 100644 --- a/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/Translation.kt +++ b/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/Translation.kt @@ -1,30 +1,36 @@ /* - * Nextcloud Android Library + * Nextcloud - Android Client * * SPDX-FileCopyrightText: 2026 Alper Ozturk - * SPDX-License-Identifier: MIT + * SPDX-License-Identifier: AGPL-3.0-or-later */ package com.owncloud.android.lib.resources.assistant.v2.model -import com.google.gson.annotations.SerializedName +import kotlinx.serialization.SerialName +import kotlinx.serialization.json.Json data class TranslationLanguage(val name: String, val code: String) data class TranslationRequest( - @SerializedName("origin_language") + @SerialName("origin_language") val originLanguage: String, - @SerializedName("max_tokens") + @SerialName("max_tokens") val maxTokens: Double, val model: String, - @SerializedName("target_language") + @SerialName("target_language") val targetLanguage: String, val input: String -) +) { + fun toJson(): String { + val json = Json { prettyPrint = true } + return json.encodeToString(this) + } +} data class TranslationModel( val model: String, From 5d850abc4710876cf446938bbe92c176c1d978d1 Mon Sep 17 00:00:00 2001 From: alperozturk96 Date: Wed, 21 Jan 2026 13:58:06 +0100 Subject: [PATCH 04/12] use org.jetbrains.kotlinx:kotlinx-serialization-json Signed-off-by: alperozturk96 --- .../android/lib/resources/assistant/v2/model/Translation.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/Translation.kt b/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/Translation.kt index 673fbb734a..92b124d0e9 100644 --- a/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/Translation.kt +++ b/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/Translation.kt @@ -8,10 +8,12 @@ package com.owncloud.android.lib.resources.assistant.v2.model import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable import kotlinx.serialization.json.Json data class TranslationLanguage(val name: String, val code: String) +@Serializable data class TranslationRequest( @SerialName("origin_language") val originLanguage: String, From 739184498ea5e55527741736fbd4fc8582f13bb7 Mon Sep 17 00:00:00 2001 From: alperozturk96 Date: Wed, 21 Jan 2026 14:22:27 +0100 Subject: [PATCH 05/12] use org.jetbrains.kotlinx:kotlinx-serialization-json Signed-off-by: alperozturk96 --- .../v2/CreateTaskRemoteOperationV2.kt | 29 +++++++++---------- .../CreateTranslationTaskRemoteOperation.kt | 28 ++++++++++++++++++ .../resources/assistant/v2/model/TaskTypes.kt | 2 +- .../assistant/v2/model/Translation.kt | 17 ++++++----- 4 files changed, 52 insertions(+), 24 deletions(-) create mode 100644 library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/CreateTranslationTaskRemoteOperation.kt diff --git a/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/CreateTaskRemoteOperationV2.kt b/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/CreateTaskRemoteOperationV2.kt index 7974ce4f7e..54c14e2fb4 100644 --- a/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/CreateTaskRemoteOperationV2.kt +++ b/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/CreateTaskRemoteOperationV2.kt @@ -16,34 +16,33 @@ import com.owncloud.android.lib.resources.assistant.v2.model.TaskTypeData import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.RequestBody.Companion.toRequestBody import org.apache.commons.httpclient.HttpStatus +import java.io.Serializable -class CreateTaskRemoteOperationV2( +open class CreateTaskRemoteOperationV2( private val input: String, private val taskType: TaskTypeData ) : RemoteOperation() { - override fun run(client: NextcloudClient): RemoteOperationResult { + protected open fun buildRequestBody(): HashMap { val inputField = hashMapOf("input" to input) - val requestBody = - hashMapOf( - "input" to inputField, - "type" to taskType.id, - "appId" to "assistant", - "customId" to "" - ) - - val json = gson.toJson(requestBody) + return hashMapOf( + "input" to inputField, + "type" to taskType.id, + "appId" to "assistant", + "customId" to "" + ) + } + override fun run(client: NextcloudClient): RemoteOperationResult { + val json = gson.toJson(buildRequestBody()) val request = json.toRequestBody("application/json".toMediaTypeOrNull()) - val postMethod = PostMethod(client.baseUri.toString() + TAG_URL, true, request) - val status = postMethod.execute(client) return if (status == HttpStatus.SC_OK) { - RemoteOperationResult(true, postMethod) + RemoteOperationResult(true, postMethod) } else { - RemoteOperationResult(false, postMethod) + RemoteOperationResult(false, postMethod) } } diff --git a/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/CreateTranslationTaskRemoteOperation.kt b/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/CreateTranslationTaskRemoteOperation.kt new file mode 100644 index 0000000000..271a4017ec --- /dev/null +++ b/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/CreateTranslationTaskRemoteOperation.kt @@ -0,0 +1,28 @@ +/* + * Nextcloud Android Library + * + * SPDX-FileCopyrightText: 2026 Alper Ozturk + * SPDX-License-Identifier: MIT + */ + +package com.owncloud.android.lib.resources.assistant.v2 + +import com.owncloud.android.lib.resources.assistant.v2.model.TaskTypeData +import com.owncloud.android.lib.resources.assistant.v2.model.TranslationRequest +import java.io.Serializable + +class CreateTranslationTaskRemoteOperation( + private val input: TranslationRequest, + private val taskType: TaskTypeData +) : CreateTaskRemoteOperationV2( + input = "", + taskType = taskType + ) { + override fun buildRequestBody(): HashMap = + hashMapOf( + "input" to input, + "type" to taskType.id, + "appId" to "assistant", + "customId" to "" + ) +} diff --git a/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/TaskTypes.kt b/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/TaskTypes.kt index 8d9962eec9..20340fe2f5 100644 --- a/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/TaskTypes.kt +++ b/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/TaskTypes.kt @@ -22,7 +22,7 @@ data class TaskTypeData( val optionalInputShapeEnumValues: Map>? = null, val inputShapeEnumValues: Map>? = null, val outputShapeEnumValues: Map>? = null, - val optionalOutputShapeEnumValues: Map>? = null, + val optionalOutputShapeEnumValues: Map>? = null ) { private val chatTaskName = "Chat" private val translateTaskName = "Translate" diff --git a/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/Translation.kt b/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/Translation.kt index 92b124d0e9..459fcc85e1 100644 --- a/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/Translation.kt +++ b/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/Translation.kt @@ -11,23 +11,22 @@ import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable import kotlinx.serialization.json.Json -data class TranslationLanguage(val name: String, val code: String) +data class TranslationLanguage( + val name: String, + val code: String +) @Serializable data class TranslationRequest( @SerialName("origin_language") val originLanguage: String, - @SerialName("max_tokens") val maxTokens: Double, - val model: String, - @SerialName("target_language") val targetLanguage: String, - val input: String -) { +) : java.io.Serializable { fun toJson(): String { val json = Json { prettyPrint = true } return json.encodeToString(this) @@ -45,8 +44,10 @@ data class TranslationLanguages( ) fun TaskTypeData.toTranslationLanguages(): TranslationLanguages { - fun List?.toTranslationLanguageList() = this.orEmpty() - .map { TranslationLanguage(it.name, it.value) } + fun List?.toTranslationLanguageList() = + this + .orEmpty() + .map { TranslationLanguage(it.name, it.value) } return TranslationLanguages( originLanguages = inputShapeEnumValues?.get("origin_language").toTranslationLanguageList(), From 207826dd4699dd67cb558fb71979da41361cf252 Mon Sep 17 00:00:00 2001 From: alperozturk96 Date: Wed, 21 Jan 2026 14:22:53 +0100 Subject: [PATCH 06/12] use org.jetbrains.kotlinx:kotlinx-serialization-json Signed-off-by: alperozturk96 --- .../lib/resources/assistant/v2/model/Translation.kt | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/Translation.kt b/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/Translation.kt index 459fcc85e1..7806d14845 100644 --- a/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/Translation.kt +++ b/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/Translation.kt @@ -26,12 +26,7 @@ data class TranslationRequest( @SerialName("target_language") val targetLanguage: String, val input: String -) : java.io.Serializable { - fun toJson(): String { - val json = Json { prettyPrint = true } - return json.encodeToString(this) - } -} +) : java.io.Serializable data class TranslationModel( val model: String, From ddda06ca9f42becfb52ee27550b76b25072bd548 Mon Sep 17 00:00:00 2001 From: alperozturk96 Date: Wed, 21 Jan 2026 14:35:31 +0100 Subject: [PATCH 07/12] use org.jetbrains.kotlinx:kotlinx-serialization-json Signed-off-by: alperozturk96 --- .../v2/CreateTaskRemoteOperationV2.kt | 21 +++++++++-------- .../CreateTranslationTaskRemoteOperation.kt | 23 ++++++++++++------- .../assistant/v2/model/Translation.kt | 3 +-- 3 files changed, 28 insertions(+), 19 deletions(-) diff --git a/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/CreateTaskRemoteOperationV2.kt b/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/CreateTaskRemoteOperationV2.kt index 54c14e2fb4..67e46f48c6 100644 --- a/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/CreateTaskRemoteOperationV2.kt +++ b/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/CreateTaskRemoteOperationV2.kt @@ -13,28 +13,31 @@ import com.nextcloud.operations.PostMethod import com.owncloud.android.lib.common.operations.RemoteOperation import com.owncloud.android.lib.common.operations.RemoteOperationResult import com.owncloud.android.lib.resources.assistant.v2.model.TaskTypeData +import kotlinx.serialization.json.Json import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.RequestBody.Companion.toRequestBody import org.apache.commons.httpclient.HttpStatus -import java.io.Serializable open class CreateTaskRemoteOperationV2( private val input: String, private val taskType: TaskTypeData ) : RemoteOperation() { - protected open fun buildRequestBody(): HashMap { + protected open fun buildRequestBody(): String { val inputField = hashMapOf("input" to input) - return hashMapOf( - "input" to inputField, - "type" to taskType.id, - "appId" to "assistant", - "customId" to "" - ) + val body = + hashMapOf( + "input" to inputField, + "type" to taskType.id, + "appId" to "assistant", + "customId" to "" + ) + + return Json.encodeToString(body) } override fun run(client: NextcloudClient): RemoteOperationResult { - val json = gson.toJson(buildRequestBody()) + val json = buildRequestBody() val request = json.toRequestBody("application/json".toMediaTypeOrNull()) val postMethod = PostMethod(client.baseUri.toString() + TAG_URL, true, request) val status = postMethod.execute(client) diff --git a/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/CreateTranslationTaskRemoteOperation.kt b/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/CreateTranslationTaskRemoteOperation.kt index 271a4017ec..9e98a8138e 100644 --- a/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/CreateTranslationTaskRemoteOperation.kt +++ b/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/CreateTranslationTaskRemoteOperation.kt @@ -9,7 +9,10 @@ package com.owncloud.android.lib.resources.assistant.v2 import com.owncloud.android.lib.resources.assistant.v2.model.TaskTypeData import com.owncloud.android.lib.resources.assistant.v2.model.TranslationRequest -import java.io.Serializable +import kotlinx.serialization.json.Json +import kotlinx.serialization.json.buildJsonObject +import kotlinx.serialization.json.encodeToJsonElement +import kotlinx.serialization.json.put class CreateTranslationTaskRemoteOperation( private val input: TranslationRequest, @@ -18,11 +21,15 @@ class CreateTranslationTaskRemoteOperation( input = "", taskType = taskType ) { - override fun buildRequestBody(): HashMap = - hashMapOf( - "input" to input, - "type" to taskType.id, - "appId" to "assistant", - "customId" to "" - ) + override fun buildRequestBody(): String { + val jsonObject = + buildJsonObject { + put("input", Json.encodeToJsonElement(input)) + put("type", taskType.id) + put("appId", "assistant") + put("customId", "") + } + + return Json.encodeToString(jsonObject) + } } diff --git a/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/Translation.kt b/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/Translation.kt index 7806d14845..c1fd4e82ea 100644 --- a/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/Translation.kt +++ b/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/Translation.kt @@ -9,7 +9,6 @@ package com.owncloud.android.lib.resources.assistant.v2.model import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable -import kotlinx.serialization.json.Json data class TranslationLanguage( val name: String, @@ -26,7 +25,7 @@ data class TranslationRequest( @SerialName("target_language") val targetLanguage: String, val input: String -) : java.io.Serializable +) data class TranslationModel( val model: String, From ef1c79850d5ad512729696551bc11983c963b6b0 Mon Sep 17 00:00:00 2001 From: alperozturk96 Date: Wed, 21 Jan 2026 16:01:57 +0100 Subject: [PATCH 08/12] use org.jetbrains.kotlinx:kotlinx-serialization-json Signed-off-by: alperozturk96 --- .../android/lib/resources/assistant/v2/model/TaskList.kt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/TaskList.kt b/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/TaskList.kt index a33dae69c1..5a899a3adc 100644 --- a/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/TaskList.kt +++ b/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/TaskList.kt @@ -25,7 +25,10 @@ data class Task( val lastUpdated: Int? = null, val scheduledAt: Int? = null, val endedAt: Int? = null -) +) { + private val translateTaskName = "core:text2text:translate" + fun isTranslate(): Boolean = (type == translateTaskName) +} data class TaskInput( var input: String? = null From 535ea51de5260bd71997044be2a09e0e835a16ed Mon Sep 17 00:00:00 2001 From: alperozturk96 Date: Thu, 22 Jan 2026 15:38:25 +0100 Subject: [PATCH 09/12] use org.jetbrains.kotlinx:kotlinx-serialization-json Signed-off-by: alperozturk96 --- .../android/lib/resources/assistant/v2/model/TaskList.kt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/TaskList.kt b/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/TaskList.kt index 5a899a3adc..0660dcfe01 100644 --- a/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/TaskList.kt +++ b/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/TaskList.kt @@ -26,8 +26,7 @@ data class Task( val scheduledAt: Int? = null, val endedAt: Int? = null ) { - private val translateTaskName = "core:text2text:translate" - fun isTranslate(): Boolean = (type == translateTaskName) + fun isTranslate(): Boolean = (type == "core:text2text:translate") } data class TaskInput( From 99010e3835a1e122963b3d64b092ef9d11fc9f2b Mon Sep 17 00:00:00 2001 From: alperozturk96 Date: Thu, 22 Jan 2026 16:10:13 +0100 Subject: [PATCH 10/12] fix tests Signed-off-by: alperozturk96 --- .../v2/CreateTaskRemoteOperationV2.kt | 17 ++++++-------- .../assistant/v2/model/CreateTaskRequest.kt | 23 +++++++++++++++++++ 2 files changed, 30 insertions(+), 10 deletions(-) create mode 100644 library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/CreateTaskRequest.kt diff --git a/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/CreateTaskRemoteOperationV2.kt b/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/CreateTaskRemoteOperationV2.kt index 67e46f48c6..fd0a1ad9a0 100644 --- a/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/CreateTaskRemoteOperationV2.kt +++ b/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/CreateTaskRemoteOperationV2.kt @@ -12,6 +12,8 @@ import com.nextcloud.common.NextcloudClient import com.nextcloud.operations.PostMethod import com.owncloud.android.lib.common.operations.RemoteOperation import com.owncloud.android.lib.common.operations.RemoteOperationResult +import com.owncloud.android.lib.resources.assistant.v2.model.CreateTaskRequest +import com.owncloud.android.lib.resources.assistant.v2.model.InputField import com.owncloud.android.lib.resources.assistant.v2.model.TaskTypeData import kotlinx.serialization.json.Json import okhttp3.MediaType.Companion.toMediaTypeOrNull @@ -23,17 +25,12 @@ open class CreateTaskRemoteOperationV2( private val taskType: TaskTypeData ) : RemoteOperation() { protected open fun buildRequestBody(): String { - val inputField = hashMapOf("input" to input) + val request = CreateTaskRequest( + input = InputField(input), + type = taskType.id + ) - val body = - hashMapOf( - "input" to inputField, - "type" to taskType.id, - "appId" to "assistant", - "customId" to "" - ) - - return Json.encodeToString(body) + return Json.encodeToString(request) } override fun run(client: NextcloudClient): RemoteOperationResult { diff --git a/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/CreateTaskRequest.kt b/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/CreateTaskRequest.kt new file mode 100644 index 0000000000..d53e68997d --- /dev/null +++ b/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/CreateTaskRequest.kt @@ -0,0 +1,23 @@ +/* + * Nextcloud Android Library + * + * SPDX-FileCopyrightText: 2026 Alper Ozturk + * SPDX-License-Identifier: MIT + */ + +package com.owncloud.android.lib.resources.assistant.v2.model + +import kotlinx.serialization.Serializable + +@Serializable +data class InputField( + val input: String +) + +@Serializable +data class CreateTaskRequest( + val input: InputField, + val type: String?, + val appId: String = "assistant", + val customId: String = "" +) From e6f55d235cbcb36206763e46300682d9d8d745c1 Mon Sep 17 00:00:00 2001 From: alperozturk96 Date: Thu, 22 Jan 2026 16:10:28 +0100 Subject: [PATCH 11/12] fix tests Signed-off-by: alperozturk96 --- .../assistant/v2/CreateTaskRemoteOperationV2.kt | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/CreateTaskRemoteOperationV2.kt b/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/CreateTaskRemoteOperationV2.kt index fd0a1ad9a0..3e11d0a540 100644 --- a/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/CreateTaskRemoteOperationV2.kt +++ b/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/CreateTaskRemoteOperationV2.kt @@ -25,10 +25,11 @@ open class CreateTaskRemoteOperationV2( private val taskType: TaskTypeData ) : RemoteOperation() { protected open fun buildRequestBody(): String { - val request = CreateTaskRequest( - input = InputField(input), - type = taskType.id - ) + val request = + CreateTaskRequest( + input = InputField(input), + type = taskType.id + ) return Json.encodeToString(request) } From d7a6f2056f2eadc991e4c79e142a9f5302e4e4ff Mon Sep 17 00:00:00 2001 From: alperozturk96 Date: Fri, 23 Jan 2026 15:30:04 +0100 Subject: [PATCH 12/12] fix tests Signed-off-by: alperozturk96 --- .../assistant/v2/AssistantV2Tests.kt | 4 +++- .../v2/CreateTaskRemoteOperationV2.kt | 21 ++++++++++------- .../assistant/v2/model/CreateTaskRequest.kt | 23 ------------------- .../assistant/v2/model/Translation.kt | 5 ++-- 4 files changed, 19 insertions(+), 34 deletions(-) delete mode 100644 library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/CreateTaskRequest.kt diff --git a/library/src/androidTest/java/com/owncloud/android/lib/resources/assistant/v2/AssistantV2Tests.kt b/library/src/androidTest/java/com/owncloud/android/lib/resources/assistant/v2/AssistantV2Tests.kt index eb75f9d751..67921f7695 100644 --- a/library/src/androidTest/java/com/owncloud/android/lib/resources/assistant/v2/AssistantV2Tests.kt +++ b/library/src/androidTest/java/com/owncloud/android/lib/resources/assistant/v2/AssistantV2Tests.kt @@ -83,7 +83,9 @@ class AssistantV2Tests : AbstractIT() { val taskType = getTaskType() val selectedTaskType = getSelectedTaskType() - assertTrue(CreateTaskRemoteOperationV2(input, taskType).execute(nextcloudClient).isSuccess) + val createTaskOperation = CreateTaskRemoteOperationV2(input, taskType) + val createTaskOperationResult = createTaskOperation.execute(nextcloudClient) + assertTrue(createTaskOperationResult.isSuccess) var result = GetTaskListRemoteOperationV2(selectedTaskType).execute(nextcloudClient) assertTrue(result.isSuccess) diff --git a/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/CreateTaskRemoteOperationV2.kt b/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/CreateTaskRemoteOperationV2.kt index 3e11d0a540..944cf8df56 100644 --- a/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/CreateTaskRemoteOperationV2.kt +++ b/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/CreateTaskRemoteOperationV2.kt @@ -12,10 +12,11 @@ import com.nextcloud.common.NextcloudClient import com.nextcloud.operations.PostMethod import com.owncloud.android.lib.common.operations.RemoteOperation import com.owncloud.android.lib.common.operations.RemoteOperationResult -import com.owncloud.android.lib.resources.assistant.v2.model.CreateTaskRequest -import com.owncloud.android.lib.resources.assistant.v2.model.InputField import com.owncloud.android.lib.resources.assistant.v2.model.TaskTypeData import kotlinx.serialization.json.Json +import kotlinx.serialization.json.buildJsonObject +import kotlinx.serialization.json.encodeToJsonElement +import kotlinx.serialization.json.put import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.RequestBody.Companion.toRequestBody import org.apache.commons.httpclient.HttpStatus @@ -25,13 +26,17 @@ open class CreateTaskRemoteOperationV2( private val taskType: TaskTypeData ) : RemoteOperation() { protected open fun buildRequestBody(): String { - val request = - CreateTaskRequest( - input = InputField(input), - type = taskType.id - ) + val inputField = hashMapOf("input" to input) - return Json.encodeToString(request) + val jsonObject = + buildJsonObject { + put("input", Json.encodeToJsonElement(inputField)) + put("type", taskType.id) + put("appId", "assistant") + put("customId", "") + } + + return Json.encodeToString(jsonObject) } override fun run(client: NextcloudClient): RemoteOperationResult { diff --git a/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/CreateTaskRequest.kt b/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/CreateTaskRequest.kt deleted file mode 100644 index d53e68997d..0000000000 --- a/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/CreateTaskRequest.kt +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Nextcloud Android Library - * - * SPDX-FileCopyrightText: 2026 Alper Ozturk - * SPDX-License-Identifier: MIT - */ - -package com.owncloud.android.lib.resources.assistant.v2.model - -import kotlinx.serialization.Serializable - -@Serializable -data class InputField( - val input: String -) - -@Serializable -data class CreateTaskRequest( - val input: InputField, - val type: String?, - val appId: String = "assistant", - val customId: String = "" -) diff --git a/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/Translation.kt b/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/Translation.kt index c1fd4e82ea..ab0ad8c870 100644 --- a/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/Translation.kt +++ b/library/src/main/java/com/owncloud/android/lib/resources/assistant/v2/model/Translation.kt @@ -1,8 +1,9 @@ /* - * Nextcloud - Android Client + * Nextcloud Android Library * + * SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors * SPDX-FileCopyrightText: 2026 Alper Ozturk - * SPDX-License-Identifier: AGPL-3.0-or-later + * SPDX-License-Identifier: MIT */ package com.owncloud.android.lib.resources.assistant.v2.model