Skip to content

Commit e399f10

Browse files
Merge pull request #1605 from nextcloud/recommendations
retrieve recommendations
2 parents 1a8e497 + 142588c commit e399f10

File tree

9 files changed

+167
-8
lines changed

9 files changed

+167
-8
lines changed

.drone.yml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,8 @@ services:
111111
- su www-data -c "php /var/www/html/occ app:enable -f testing"
112112
- su www-data -c "git clone --depth 1 https://github.com/nextcloud/files_downloadlimit.git /var/www/html/apps/files_downloadlimit/"
113113
- su www-data -c "php /var/www/html/occ app:enable -f files_downloadlimit"
114+
- su www-data -c "git clone --depth 1 -b master https://github.com/nextcloud/recommendations.git /var/www/html/apps/recommendations/"
115+
- su www-data -c "php /var/www/html/occ app:enable -f recommendations"
114116
- /usr/local/bin/run.sh
115117

116118
trigger:
@@ -228,6 +230,8 @@ services:
228230
- su www-data -c "php /var/www/html/occ app:enable -f testing"
229231
- su www-data -c "git clone --depth 1 -b $SERVER_VERSION https://github.com/nextcloud/files_downloadlimit.git /var/www/html/apps/files_downloadlimit/"
230232
- su www-data -c "php /var/www/html/occ app:enable -f files_downloadlimit"
233+
- su www-data -c "git clone --depth 1 -b $SERVER_VERSION https://github.com/nextcloud/recommendations.git /var/www/html/apps/recommendations/"
234+
- su www-data -c "php /var/www/html/occ app:enable recommendations"
231235
- /usr/local/bin/run.sh
232236

233237
trigger:
@@ -239,6 +243,6 @@ trigger:
239243
- pull_request
240244
---
241245
kind: signature
242-
hmac: fe00fcbb3bf41f6aa84193e380345c3b009ef933d295dda86ea3c959a8373381
246+
hmac: f9e2219ba5004d6abb6eb04ede0dedf0b9d5f20d8769228c1e48a09451a54b06
243247

244248
...
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
/*
2+
* Nextcloud Android Library
3+
*
4+
* SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
5+
* SPDX-FileCopyrightText: 2024 Tobias Kaminsky <[email protected]>
6+
* SPDX-License-Identifier: MIT
7+
*/
8+
package com.nextcloud.android.lib.resources.recommendations
9+
10+
import com.owncloud.android.AbstractIT
11+
import com.owncloud.android.lib.resources.files.CreateFolderRemoteOperation
12+
import com.owncloud.android.lib.resources.status.NextcloudVersion
13+
import org.junit.Assert.assertTrue
14+
import org.junit.Test
15+
16+
class GetRecommendationsRemoteOperationIT : AbstractIT() {
17+
@Test
18+
fun getRecommendations() {
19+
testOnlyOnServer(NextcloudVersion.nextcloud_31)
20+
assertTrue(CreateFolderRemoteOperation("/test/", true).execute(client).isSuccess)
21+
22+
val result = GetRecommendationsRemoteOperation().execute(nextcloudClient).resultData
23+
24+
assertTrue(result.enabled)
25+
assertTrue(result.recommendations.isNotEmpty())
26+
}
27+
}

library/src/androidTest/java/com/owncloud/android/GetCapabilitiesRemoteOperationIT.java

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,13 @@
99
*/
1010
package com.owncloud.android;
1111

12+
import static org.junit.Assert.assertEquals;
13+
import static org.junit.Assert.assertFalse;
14+
import static org.junit.Assert.assertNotNull;
15+
import static org.junit.Assert.assertNotSame;
16+
import static org.junit.Assert.assertSame;
17+
import static org.junit.Assert.assertTrue;
18+
1219
import com.owncloud.android.lib.common.operations.RemoteOperationResult;
1320
import com.owncloud.android.lib.resources.status.CapabilityBooleanType;
1421
import com.owncloud.android.lib.resources.status.E2EVersion;
@@ -19,13 +26,6 @@
1926

2027
import org.junit.Test;
2128

22-
import static org.junit.Assert.assertEquals;
23-
import static org.junit.Assert.assertFalse;
24-
import static org.junit.Assert.assertNotNull;
25-
import static org.junit.Assert.assertNotSame;
26-
import static org.junit.Assert.assertSame;
27-
import static org.junit.Assert.assertTrue;
28-
2929
/**
3030
* Class to test GetRemoteCapabilitiesOperation
3131
*/
@@ -154,5 +154,10 @@ private void checkCapability(OCCapability capability, String userId) {
154154

155155
// e2e
156156
assertNotSame(capability.getEndToEndEncryptionApiVersion(), E2EVersion.UNKNOWN);
157+
158+
// recommendations
159+
if (capability.getVersion().isNewerOrEqual(NextcloudVersion.nextcloud_31)) {
160+
assertTrue(capability.getRecommendations().isTrue());
161+
}
157162
}
158163
}
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
/*
2+
* Nextcloud Android Library
3+
*
4+
* SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
5+
* SPDX-FileCopyrightText: 2024 Tobias Kaminsky <[email protected]>
6+
* SPDX-License-Identifier: MIT
7+
*/
8+
package com.nextcloud.android.lib.resources.recommendations
9+
10+
import com.google.gson.reflect.TypeToken
11+
import com.nextcloud.common.NextcloudClient
12+
import com.nextcloud.operations.GetMethod
13+
import com.owncloud.android.lib.common.operations.RemoteOperationResult
14+
import com.owncloud.android.lib.common.utils.Log_OC
15+
import com.owncloud.android.lib.ocs.ServerResponse
16+
import com.owncloud.android.lib.resources.OCSRemoteOperation
17+
import org.apache.commons.httpclient.HttpStatus
18+
19+
/**
20+
* Get recommendation of an user
21+
*/
22+
class GetRecommendationsRemoteOperation : OCSRemoteOperation<RecommendationResponse>() {
23+
@Suppress("TooGenericExceptionCaught")
24+
override fun run(client: NextcloudClient): RemoteOperationResult<RecommendationResponse> {
25+
var result: RemoteOperationResult<RecommendationResponse>
26+
var getMethod: GetMethod? = null
27+
try {
28+
getMethod =
29+
GetMethod(
30+
client.baseUri.toString() + ENDPOINT + JSON_FORMAT,
31+
true
32+
)
33+
val status = client.execute(getMethod)
34+
if (status == HttpStatus.SC_OK) {
35+
val map =
36+
getServerResponse(
37+
getMethod,
38+
object : TypeToken<ServerResponse<RecommendationResponse>>() {}
39+
)?.ocs?.data
40+
41+
if (map != null) {
42+
result = RemoteOperationResult(true, getMethod)
43+
result.setResultData(map)
44+
} else {
45+
result = RemoteOperationResult(false, getMethod)
46+
}
47+
} else {
48+
result = RemoteOperationResult(false, getMethod)
49+
}
50+
} catch (e: Exception) {
51+
result = RemoteOperationResult(e)
52+
Log_OC.e(
53+
TAG,
54+
"Get recommendations failed: " + result.logMessage,
55+
result.exception
56+
)
57+
} finally {
58+
getMethod?.releaseConnection()
59+
}
60+
return result
61+
}
62+
63+
companion object {
64+
private val TAG = GetRecommendationsRemoteOperation::class.java.simpleName
65+
private const val ENDPOINT = "/ocs/v2.php/apps/recommendations/api/v1/recommendations"
66+
}
67+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/*
2+
* Nextcloud Android Library
3+
*
4+
* SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
5+
* SPDX-FileCopyrightText: 2024 Tobias Kaminsky <[email protected]>
6+
* SPDX-License-Identifier: MIT
7+
*/
8+
9+
package com.nextcloud.android.lib.resources.recommendations
10+
11+
data class Recommendation(
12+
val id: Long,
13+
val timestamp: Long,
14+
val name: String,
15+
val directory: String,
16+
val extension: String,
17+
val mimeType: String,
18+
val hasPreview: Boolean,
19+
val reason: String
20+
)
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
/*
2+
* Nextcloud Android Library
3+
*
4+
* SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
5+
* SPDX-FileCopyrightText: 2024 Tobias Kaminsky <[email protected]>
6+
* SPDX-License-Identifier: MIT
7+
*/
8+
9+
package com.nextcloud.android.lib.resources.recommendations
10+
11+
data class RecommendationResponse(
12+
val enabled: Boolean,
13+
val recommendations: ArrayList<Recommendation>
14+
)

library/src/main/java/com/owncloud/android/lib/resources/status/GetCapabilitiesRemoteOperation.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,9 @@ public class GetCapabilitiesRemoteOperation extends RemoteOperation {
160160
private static final String NODE_SECURITY_GUARD = "security_guard";
161161
private static final String NODE_DIAGNOSTICS = "diagnostics";
162162

163+
//recommendations
164+
private static final String NODE_RECOMMENDATIONS = "recommendations";
165+
163166
// needed for checking compatible filenames
164167
private static final String FORBIDDEN_FILENAME_CHARACTERS = "forbidden_filename_characters";
165168
private static final String FORBIDDEN_FILENAMES = "forbidden_filenames";
@@ -754,6 +757,19 @@ private OCCapability parseResponse(String response) throws JSONException {
754757
capability.setFilesDownloadLimitDefault(defaultDownloadLimit);
755758
}
756759
}
760+
761+
// recommendations
762+
if (respCapabilities.has(NODE_RECOMMENDATIONS)) {
763+
JSONObject recommendationsCapability = respCapabilities.getJSONObject(NODE_RECOMMENDATIONS);
764+
765+
if (recommendationsCapability.getBoolean(PROPERTY_ENABLED)) {
766+
capability.setRecommendations(CapabilityBooleanType.TRUE);
767+
} else {
768+
capability.setRecommendations(CapabilityBooleanType.FALSE);
769+
}
770+
} else {
771+
capability.setRecommendations(CapabilityBooleanType.FALSE);
772+
}
757773
}
758774

759775
Log_OC.d(TAG, "*** Get Capabilities completed ");

library/src/main/java/com/owncloud/android/lib/resources/status/NextcloudVersion.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@ class NextcloudVersion : OwnCloudVersion {
3838

3939
@JvmField
4040
val nextcloud_30 = NextcloudVersion(0x1E000000) // 30.0
41+
42+
@JvmField
43+
val nextcloud_31 = NextcloudVersion(0x1F000000) // 31.0
4144
}
4245

4346
constructor(string: String) : super(string)

library/src/main/java/com/owncloud/android/lib/resources/status/OCCapability.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,9 @@ class OCCapability {
104104
// Security guard
105105
var securityGuard = CapabilityBooleanType.UNKNOWN
106106

107+
// Recommendations
108+
var recommendations = CapabilityBooleanType.UNKNOWN
109+
107110
// needed for checking compatible filenames
108111
var forbiddenFilenameCharactersJson: String? = null
109112
var forbiddenFilenamesJson: String? = null

0 commit comments

Comments
 (0)