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

Commit 48ee263

Browse files
committed
First attempt to use Moshi to parse capabilities
1 parent 0f10c72 commit 48ee263

File tree

2 files changed

+216
-193
lines changed

2 files changed

+216
-193
lines changed
Lines changed: 172 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,172 @@
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.squareup.moshi.Json
28+
import com.squareup.moshi.JsonClass
29+
30+
@JsonClass(generateAdapter = true)
31+
data class CapabilityResponse(
32+
@Json(name = NODE_SERVER_VERSION)
33+
val serverVersion: ServerVersion,
34+
@Json(name = NODE_CAPABILITIES)
35+
val capabilities: Capabilities
36+
)
37+
38+
@JsonClass(generateAdapter = true)
39+
data class Capabilities(
40+
@Json(name = NODE_CORE)
41+
val coreCapabilities: CoreCapabilities,
42+
@Json(name = NODE_FILES_SHARING)
43+
val fileSharingCapabilities: FileSharingCapabilities,
44+
@Json(name = NODE_FILES)
45+
val filesCapabilities: FilesCapabilities
46+
)
47+
48+
@JsonClass(generateAdapter = true)
49+
data class CoreCapabilities(
50+
@Json(name = PROPERTY_CORE_POLLINTERVAL)
51+
val pollInterval: Int
52+
)
53+
54+
@JsonClass(generateAdapter = true)
55+
data class FileSharingCapabilities(
56+
@Json(name = PROPERTY_FILES_SHARING_API_ENABLED)
57+
val fileSharingApiEnabled: Boolean,
58+
@Json(name = PROPERTY_FILES_SHARING_SEARCH_MIN_LENGTH)
59+
val fileSharingSearchMinLength: Int,
60+
@Json(name = NODE_FILES_SHARING_PUBLIC)
61+
val fileSharingPublic: FileSharingPublic,
62+
@Json(name = PROPERTY_FILES_SHARING_RESHARING)
63+
val fileSharingReSharing: Boolean,
64+
@Json(name = NODE_FEDERATION)
65+
val fileSharingFederation: FileSharingFederation
66+
)
67+
68+
@JsonClass(generateAdapter = true)
69+
data class FileSharingPublic(
70+
val enabled: Boolean,
71+
@Json(name = PROPERTY_FILES_SHARING_PUBLIC_UPLOAD)
72+
val fileSharingPublicUpload: Boolean,
73+
@Json(name = PROPERTY_FILES_SHARING_PUBLIC_UPLOAD_ONLY)
74+
val fileSharingPublicUploadOnly: Boolean,
75+
@Json(name = PROPERTY_FILES_SHARING_PUBLIC_MULTIPLE)
76+
val fileSharingPublicMultiple: Boolean,
77+
@Json(name = NODE_PASSWORD)
78+
val fileSharingPublicPassword: FileSharingPublicPassword,
79+
@Json(name = NODE_EXPIRE_DATE)
80+
val fileSharingPublicExpireDate: FileSharingPublicExpireDate
81+
)
82+
83+
@JsonClass(generateAdapter = true)
84+
data class FileSharingPublicPassword(
85+
val enforced: Boolean,
86+
@Json(name = NODE_FILES_SHARING_PUBLIC_PASSWORD_ENFORCED)
87+
val enforcedFor: FileSharingPublicPasswordEnforced
88+
)
89+
90+
@JsonClass(generateAdapter = true)
91+
data class FileSharingPublicPasswordEnforced(
92+
@Json(name = PROPERTY_FILES_SHARING_PUBLIC_PASSWORD_ENFORCED_READ_ONLY)
93+
val enforcedReadOnly: Boolean,
94+
@Json(name = PROPERTY_FILES_SHARING_PUBLIC_PASSWORD_ENFORCED_READ_WRITE)
95+
val enforcedReadWrite: Boolean,
96+
@Json(name = PROPERTY_FILES_SHARING_PUBLIC_PASSWORD_ENFORCED_UPLOAD_ONLY)
97+
val enforcedUploadOnly: Boolean
98+
)
99+
100+
@JsonClass(generateAdapter = true)
101+
data class FileSharingPublicExpireDate(
102+
val enabled: Boolean,
103+
val days: Int?,
104+
val enforced: Boolean?
105+
)
106+
107+
@JsonClass(generateAdapter = true)
108+
data class FileSharingFederation(
109+
val incoming: Boolean,
110+
val outgoing: Boolean
111+
)
112+
113+
@JsonClass(generateAdapter = true)
114+
data class FilesCapabilities(
115+
@Json(name = PROPERTY_FILES_BIGFILECHUNKING)
116+
val filesBigFileChunking: Boolean,
117+
@Json(name = PROPERTY_FILES_UNDELETE)
118+
val filesUnDelete: Boolean,
119+
@Json(name = PROPERTY_FILES_VERSIONING)
120+
val filesVersioning: Boolean
121+
)
122+
123+
@JsonClass(generateAdapter = true)
124+
data class ServerVersion(
125+
@Json(name = PROPERTY_VERSION_MAJOR)
126+
var versionMayor: Int = 0,
127+
@Json(name = PROPERTY_VERSION_MINOR)
128+
var versionMinor: Int = 0,
129+
@Json(name = PROPERTY_VERSION_MICRO)
130+
var versionMicro: Int = 0,
131+
@Json(name = PROPERTY_VERSION_STRING)
132+
var versionString: String = "",
133+
@Json(name = PROPERTY_VERSION_EDITION)
134+
var versionEdition: String = ""
135+
)
136+
137+
private const val NODE_SERVER_VERSION = "version"
138+
private const val PROPERTY_VERSION_MAJOR = "major"
139+
private const val PROPERTY_VERSION_MINOR = "minor"
140+
private const val PROPERTY_VERSION_MICRO = "micro"
141+
private const val PROPERTY_VERSION_STRING = "string"
142+
private const val PROPERTY_VERSION_EDITION = "edition"
143+
144+
private const val NODE_CAPABILITIES = "capabilities"
145+
146+
private const val NODE_CORE = "core"
147+
private const val PROPERTY_CORE_POLLINTERVAL = "pollinterval"
148+
149+
private const val NODE_FILES_SHARING = "files_sharing"
150+
private const val PROPERTY_FILES_SHARING_API_ENABLED = "api_enabled"
151+
private const val PROPERTY_FILES_SHARING_SEARCH_MIN_LENGTH = "search_min_length"
152+
private const val PROPERTY_FILES_SHARING_RESHARING = "resharing"
153+
154+
private const val NODE_FILES_SHARING_PUBLIC = "public"
155+
private const val PROPERTY_FILES_SHARING_PUBLIC_UPLOAD = "upload"
156+
private const val PROPERTY_FILES_SHARING_PUBLIC_UPLOAD_ONLY = "supports_upload_only"
157+
private const val PROPERTY_FILES_SHARING_PUBLIC_MULTIPLE = "multiple"
158+
159+
private const val NODE_FEDERATION = "federation"
160+
161+
private const val NODE_PASSWORD = "password"
162+
private const val NODE_FILES_SHARING_PUBLIC_PASSWORD_ENFORCED = "enforced_for"
163+
private const val PROPERTY_FILES_SHARING_PUBLIC_PASSWORD_ENFORCED_READ_ONLY = "read_only"
164+
private const val PROPERTY_FILES_SHARING_PUBLIC_PASSWORD_ENFORCED_READ_WRITE = "read_write"
165+
private const val PROPERTY_FILES_SHARING_PUBLIC_PASSWORD_ENFORCED_UPLOAD_ONLY = "upload_only"
166+
167+
private const val NODE_EXPIRE_DATE = "expire_date"
168+
169+
private const val NODE_FILES = "files"
170+
private const val PROPERTY_FILES_BIGFILECHUNKING = "bigfilechunking"
171+
private const val PROPERTY_FILES_UNDELETE = "undelete"
172+
private const val PROPERTY_FILES_VERSIONING = "versioning"

0 commit comments

Comments
 (0)