Skip to content
This repository was archived by the owner on Mar 19, 2024. It is now read-only.

Commit 9e9877f

Browse files
authored
Merge pull request #298 from owncloud/feature/use_moshi_to_parse_capabilities
Use Moshi to parse Capabilities
2 parents 0f10c72 + 42b923c commit 9e9877f

File tree

6 files changed

+201
-254
lines changed

6 files changed

+201
-254
lines changed
Lines changed: 161 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,161 @@
1+
/* ownCloud Android Library is available under MIT license
2+
* @author Abel García de Prada
3+
* Copyright (C) 2020 ownCloud GmbH.
4+
*
5+
* Permission is hereby granted, free of charge, to any person obtaining a copy
6+
* of this software and associated documentation files (the "Software"), to deal
7+
* in the Software without restriction, including without limitation the rights
8+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
* copies of the Software, and to permit persons to whom the Software is
10+
* furnished to do so, subject to the following conditions:
11+
*
12+
* The above copyright notice and this permission notice shall be included in
13+
* all copies or substantial portions of the Software.
14+
*
15+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16+
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17+
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18+
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
19+
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
20+
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
21+
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22+
* THE SOFTWARE.
23+
*
24+
*/
25+
package com.owncloud.android.lib.resources.response
26+
27+
import com.owncloud.android.lib.resources.status.RemoteCapability
28+
import com.owncloud.android.lib.resources.status.RemoteCapability.CapabilityBooleanType
29+
import com.squareup.moshi.Json
30+
import com.squareup.moshi.JsonClass
31+
32+
@JsonClass(generateAdapter = true)
33+
data class CapabilityResponse(
34+
@Json(name = "version")
35+
val serverVersion: ServerVersion?,
36+
val capabilities: Capabilities?
37+
) {
38+
fun toRemoteCapability(): RemoteCapability = RemoteCapability(
39+
versionMayor = serverVersion?.major ?: 0,
40+
versionMinor = serverVersion?.minor ?: 0,
41+
versionMicro = serverVersion?.micro ?: 0,
42+
versionString = serverVersion?.string ?: "",
43+
versionEdition = serverVersion?.edition ?: "",
44+
corePollinterval = capabilities?.coreCapabilities?.pollinterval ?: 0,
45+
filesSharingApiEnabled = CapabilityBooleanType.fromBooleanValue(capabilities?.fileSharingCapabilities?.fileSharingApiEnabled),
46+
filesSharingResharing = CapabilityBooleanType.fromBooleanValue(capabilities?.fileSharingCapabilities?.fileSharingReSharing),
47+
filesSharingPublicEnabled = CapabilityBooleanType.fromBooleanValue(capabilities?.fileSharingCapabilities?.fileSharingPublic?.enabled),
48+
filesSharingPublicUpload = CapabilityBooleanType.fromBooleanValue(capabilities?.fileSharingCapabilities?.fileSharingPublic?.fileSharingPublicUpload),
49+
filesSharingPublicSupportsUploadOnly = CapabilityBooleanType.fromBooleanValue(capabilities?.fileSharingCapabilities?.fileSharingPublic?.fileSharingPublicUploadOnly),
50+
filesSharingPublicMultiple = CapabilityBooleanType.fromBooleanValue(capabilities?.fileSharingCapabilities?.fileSharingPublic?.fileSharingPublicMultiple),
51+
filesSharingPublicPasswordEnforced = CapabilityBooleanType.fromBooleanValue(capabilities?.fileSharingCapabilities?.fileSharingPublic?.fileSharingPublicPassword?.enforced),
52+
filesSharingPublicPasswordEnforcedReadOnly = CapabilityBooleanType.fromBooleanValue(
53+
capabilities?.fileSharingCapabilities?.fileSharingPublic?.fileSharingPublicPassword?.enforcedFor?.enforcedReadOnly
54+
),
55+
filesSharingPublicPasswordEnforcedReadWrite = CapabilityBooleanType.fromBooleanValue(
56+
capabilities?.fileSharingCapabilities?.fileSharingPublic?.fileSharingPublicPassword?.enforcedFor?.enforcedReadWrite
57+
),
58+
filesSharingPublicPasswordEnforcedUploadOnly = CapabilityBooleanType.fromBooleanValue(
59+
capabilities?.fileSharingCapabilities?.fileSharingPublic?.fileSharingPublicPassword?.enforcedFor?.enforcedUploadOnly
60+
),
61+
filesSharingPublicExpireDateEnabled = CapabilityBooleanType.fromBooleanValue(capabilities?.fileSharingCapabilities?.fileSharingPublic?.fileSharingPublicExpireDate?.enabled),
62+
filesSharingPublicExpireDateDays = capabilities?.fileSharingCapabilities?.fileSharingPublic?.fileSharingPublicExpireDate?.days
63+
?: 0,
64+
filesSharingPublicExpireDateEnforced = CapabilityBooleanType.fromBooleanValue(
65+
capabilities?.fileSharingCapabilities?.fileSharingPublic?.fileSharingPublicExpireDate?.enforced
66+
),
67+
filesBigFileChunking = CapabilityBooleanType.fromBooleanValue(capabilities?.fileCapabilities?.bigfilechunking),
68+
filesUndelete = CapabilityBooleanType.fromBooleanValue(capabilities?.fileCapabilities?.undelete),
69+
filesVersioning = CapabilityBooleanType.fromBooleanValue(capabilities?.fileCapabilities?.versioning),
70+
filesSharingFederationIncoming = CapabilityBooleanType.fromBooleanValue(capabilities?.fileSharingCapabilities?.fileSharingFederation?.incoming),
71+
filesSharingFederationOutgoing = CapabilityBooleanType.fromBooleanValue(capabilities?.fileSharingCapabilities?.fileSharingFederation?.outgoing)
72+
)
73+
}
74+
75+
@JsonClass(generateAdapter = true)
76+
data class Capabilities(
77+
@Json(name = "core")
78+
val coreCapabilities: CoreCapabilities?,
79+
@Json(name = "files_sharing")
80+
val fileSharingCapabilities: FileSharingCapabilities?,
81+
@Json(name = "files")
82+
val fileCapabilities: FileCapabilities?
83+
)
84+
85+
@JsonClass(generateAdapter = true)
86+
data class CoreCapabilities(
87+
val pollinterval: Int?
88+
)
89+
90+
@JsonClass(generateAdapter = true)
91+
data class FileSharingCapabilities(
92+
@Json(name = "api_enabled")
93+
val fileSharingApiEnabled: Boolean?,
94+
@Json(name = "public")
95+
val fileSharingPublic: FileSharingPublic?,
96+
@Json(name = "resharing")
97+
val fileSharingReSharing: Boolean?,
98+
@Json(name = "federation")
99+
val fileSharingFederation: FileSharingFederation?
100+
)
101+
102+
@JsonClass(generateAdapter = true)
103+
data class FileSharingPublic(
104+
val enabled: Boolean?,
105+
@Json(name = "upload")
106+
val fileSharingPublicUpload: Boolean?,
107+
@Json(name = "supports_upload_only")
108+
val fileSharingPublicUploadOnly: Boolean?,
109+
@Json(name = "multiple")
110+
val fileSharingPublicMultiple: Boolean?,
111+
@Json(name = "password")
112+
val fileSharingPublicPassword: FileSharingPublicPassword?,
113+
@Json(name = "expire_date")
114+
val fileSharingPublicExpireDate: FileSharingPublicExpireDate?
115+
)
116+
117+
@JsonClass(generateAdapter = true)
118+
data class FileSharingPublicPassword(
119+
val enforced: Boolean?,
120+
@Json(name = "enforced_for")
121+
val enforcedFor: FileSharingPublicPasswordEnforced?
122+
)
123+
124+
@JsonClass(generateAdapter = true)
125+
data class FileSharingPublicPasswordEnforced(
126+
@Json(name = "read_only")
127+
val enforcedReadOnly: Boolean?,
128+
@Json(name = "read_write")
129+
val enforcedReadWrite: Boolean?,
130+
@Json(name = "upload_only")
131+
val enforcedUploadOnly: Boolean?
132+
)
133+
134+
@JsonClass(generateAdapter = true)
135+
data class FileSharingPublicExpireDate(
136+
val enabled: Boolean?,
137+
val days: Int?,
138+
val enforced: Boolean?
139+
)
140+
141+
@JsonClass(generateAdapter = true)
142+
data class FileSharingFederation(
143+
val incoming: Boolean?,
144+
val outgoing: Boolean?
145+
)
146+
147+
@JsonClass(generateAdapter = true)
148+
data class FileCapabilities(
149+
val bigfilechunking: Boolean?,
150+
val undelete: Boolean?,
151+
val versioning: Boolean?
152+
)
153+
154+
@JsonClass(generateAdapter = true)
155+
data class ServerVersion(
156+
var major: Int?,
157+
var minor: Int?,
158+
var micro: Int?,
159+
var string: String?,
160+
var edition: String?
161+
)

owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/CommonOcsResponse.kt renamed to owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/response/CommonOcsResponse.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
2222
* THE SOFTWARE.
2323
*/
24-
package com.owncloud.android.lib.resources
24+
package com.owncloud.android.lib.resources.response
2525

2626
import com.squareup.moshi.JsonClass
2727

owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/users/UserInfoResponse.kt renamed to owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/response/UserInfoResponse.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,9 @@
2121
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
2222
* THE SOFTWARE.
2323
*/
24-
package com.owncloud.android.lib.resources.users
24+
package com.owncloud.android.lib.resources.response
2525

26+
import com.owncloud.android.lib.resources.users.RemoteUserInfo
2627
import com.squareup.moshi.Json
2728
import com.squareup.moshi.JsonClass
2829

@@ -32,11 +33,10 @@ data class UserInfoResponse(
3233
@Json(name = "display-name")
3334
val displayName: String,
3435
val email: String?
35-
)
36-
37-
fun UserInfoResponse.toRemoteUserInfo() =
38-
RemoteUserInfo(
36+
) {
37+
fun toRemoteUserInfo() = RemoteUserInfo(
3938
id = id,
4039
displayName = displayName,
4140
email = email
4241
)
42+
}

0 commit comments

Comments
 (0)