NcApi.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315
  1. /*
  2. *
  3. * Nextcloud Talk application
  4. *
  5. * @author Mario Danic
  6. * Copyright (C) 2017 Mario Danic (mario@lovelyhq.com)
  7. *
  8. * This program is free software: you can redistribute it and/or modify
  9. * it under the terms of the GNU General Public License as published by
  10. * the Free Software Foundation, either version 3 of the License, or
  11. * at your option) any later version.
  12. *
  13. * This program is distributed in the hope that it will be useful,
  14. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  16. * GNU General Public License for more details.
  17. *
  18. * You should have received a copy of the GNU General Public License
  19. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  20. */
  21. package com.nextcloud.talk.api;
  22. import com.nextcloud.talk.models.json.call.CallOverall;
  23. import com.nextcloud.talk.models.json.capabilities.CapabilitiesOverall;
  24. import com.nextcloud.talk.models.json.chat.ChatOverall;
  25. import com.nextcloud.talk.models.json.generic.GenericOverall;
  26. import com.nextcloud.talk.models.json.generic.Status;
  27. import com.nextcloud.talk.models.json.mention.MentionOverall;
  28. import com.nextcloud.talk.models.json.notifications.NotificationOverall;
  29. import com.nextcloud.talk.models.json.participants.AddParticipantOverall;
  30. import com.nextcloud.talk.models.json.participants.ParticipantsOverall;
  31. import com.nextcloud.talk.models.json.push.PushRegistrationOverall;
  32. import com.nextcloud.talk.models.json.rooms.RoomOverall;
  33. import com.nextcloud.talk.models.json.rooms.RoomsOverall;
  34. import com.nextcloud.talk.models.json.signaling.SignalingOverall;
  35. import com.nextcloud.talk.models.json.signaling.settings.SignalingSettingsOverall;
  36. import com.nextcloud.talk.models.json.userprofile.UserProfileOverall;
  37. import java.util.List;
  38. import java.util.Map;
  39. import androidx.annotation.Nullable;
  40. import io.reactivex.Observable;
  41. import okhttp3.ResponseBody;
  42. import retrofit2.Response;
  43. import retrofit2.http.DELETE;
  44. import retrofit2.http.Field;
  45. import retrofit2.http.FieldMap;
  46. import retrofit2.http.FormUrlEncoded;
  47. import retrofit2.http.GET;
  48. import retrofit2.http.Header;
  49. import retrofit2.http.POST;
  50. import retrofit2.http.PUT;
  51. import retrofit2.http.Query;
  52. import retrofit2.http.QueryMap;
  53. import retrofit2.http.Url;
  54. public interface NcApi {
  55. /*
  56. QueryMap items are as follows:
  57. - "format" : "json"
  58. - "search" : ""
  59. - "perPage" : "200"
  60. - "itemType" : "call"
  61. Server URL is: baseUrl + ocsApiVersion + /apps/files_sharing/api/v1/sharees
  62. or if we're on 14 and up:
  63. baseUrl + ocsApiVersion + "/core/autocomplete/get");
  64. */
  65. @GET
  66. Observable<ResponseBody> getContactsWithSearchParam(@Header("Authorization") String authorization, @Url String url,
  67. @Nullable @Query("shareTypes[]") List<String> listOfShareTypes, @QueryMap Map<String, Object> options);
  68. /*
  69. Server URL is: baseUrl + ocsApiVersion + spreedApiVersion + /room
  70. */
  71. @GET
  72. Observable<RoomsOverall> getRooms(@Header("Authorization") String authorization, @Url String url);
  73. /*
  74. Server URL is: baseUrl + ocsApiVersion + spreedApiVersion + /room/roomToken
  75. */
  76. @GET
  77. Observable<RoomOverall> getRoom(@Header("Authorization") String authorization, @Url String url);
  78. /*
  79. QueryMap items are as follows:
  80. - "roomType" : ""
  81. - "invite" : ""
  82. Server URL is: baseUrl + ocsApiVersion + spreedApiVersion + /room
  83. */
  84. @POST
  85. Observable<RoomOverall> createRoom(@Header("Authorization") String authorization, @Url String url,
  86. @QueryMap Map<String, String> options);
  87. /*
  88. QueryMap items are as follows:
  89. - "roomName" : "newName"
  90. Server URL is: baseUrl + ocsApiVersion + spreedApiVersion + /room/roomToken
  91. */
  92. @FormUrlEncoded
  93. @PUT
  94. Observable<GenericOverall> renameRoom(@Header("Authorization") String authorization, @Url String url,
  95. @Field("roomName") String roomName);
  96. /*
  97. QueryMap items are as follows:
  98. - "newParticipant" : "user"
  99. Server URL is: baseUrl + ocsApiVersion + spreedApiVersion + /room/roomToken/participants
  100. */
  101. @POST
  102. Observable<AddParticipantOverall> addParticipant(@Header("Authorization") String authorization, @Url String url,
  103. @QueryMap Map<String, String> options);
  104. /*
  105. Server URL is: baseUrl + ocsApiVersion + spreedApiVersion + /room/roomToken/participants/self
  106. */
  107. @DELETE
  108. Observable<GenericOverall> removeSelfFromRoom(@Header("Authorization") String authorization, @Url String url);
  109. /*
  110. Server URL is: baseUrl + ocsApiVersion + spreedApiVersion + /room/roomToken/public
  111. */
  112. @POST
  113. Observable<GenericOverall> makeRoomPublic(@Header("Authorization") String authorization, @Url String url);
  114. /*
  115. Server URL is: baseUrl + ocsApiVersion + spreedApiVersion + /room/roomToken/public
  116. */
  117. @DELETE
  118. Observable<GenericOverall> makeRoomPrivate(@Header("Authorization") String authorization, @Url String url);
  119. @DELETE
  120. Observable<GenericOverall> deleteRoom(@Header("Authorization") String authorization, @Url String url);
  121. /*
  122. Server URL is: baseUrl + ocsApiVersion + spreedApiVersion + /call/callToken
  123. */
  124. @GET
  125. Observable<ParticipantsOverall> getPeersForCall(@Header("Authorization") String authorization, @Url String url);
  126. @FormUrlEncoded
  127. @POST
  128. Observable<CallOverall> joinRoom(@Nullable @Header("Authorization") String authorization, @Url String url,
  129. @Nullable @Field("password") String password);
  130. @DELETE
  131. Observable<GenericOverall> leaveRoom(@Nullable @Header("Authorization") String authorization, @Url String url);
  132. /*
  133. Server URL is: baseUrl + ocsApiVersion + spreedApiVersion + /call/callToken
  134. */
  135. @POST
  136. Observable<GenericOverall> joinCall(@Nullable @Header("Authorization") String authorization, @Url String url);
  137. /*
  138. Server URL is: baseUrl + ocsApiVersion + spreedApiVersion + /call/callToken
  139. */
  140. @DELETE
  141. Observable<GenericOverall> leaveCall(@Nullable @Header("Authorization") String authorization, @Url String url);
  142. /*
  143. Server URL is: baseUrl + ocsApiVersion + spreedApiVersion + /call/callToken/ping
  144. */
  145. @POST
  146. Observable<GenericOverall> pingCall(@Nullable @Header("Authorization") String authorization, @Url String url);
  147. @GET
  148. Observable<SignalingSettingsOverall> getSignalingSettings(@Nullable @Header("Authorization") String authorization,
  149. @Url String url);
  150. /*
  151. QueryMap items are as follows:
  152. - "messages" : "message"
  153. Server URL is: baseUrl + ocsApiVersion + spreedApiVersion + /signaling
  154. */
  155. @FormUrlEncoded
  156. @POST
  157. Observable<SignalingOverall> sendSignalingMessages(@Nullable @Header("Authorization") String authorization, @Url String url,
  158. @Field("messages") String messages);
  159. /*
  160. Server URL is: baseUrl + ocsApiVersion + spreedApiVersion + /signaling
  161. */
  162. @GET
  163. Observable<SignalingOverall> pullSignalingMessages(@Nullable @Header("Authorization") String authorization, @Url
  164. String
  165. url);
  166. /*
  167. QueryMap items are as follows:
  168. - "format" : "json"
  169. Server URL is: baseUrl + ocsApiVersion + "/cloud/user"
  170. */
  171. @GET
  172. Observable<UserProfileOverall> getUserProfile(@Header("Authorization") String authorization, @Url String url);
  173. /*
  174. Server URL is: baseUrl + /status.php
  175. */
  176. @GET
  177. Observable<Status> getServerStatus(@Url String url);
  178. /*
  179. QueryMap items are as follows:
  180. - "format" : "json"
  181. - "pushTokenHash" : ""
  182. - "devicePublicKey" : ""
  183. - "proxyServer" : ""
  184. Server URL is: baseUrl + ocsApiVersion + "/apps/notifications/api/v2/push
  185. */
  186. @POST
  187. Observable<PushRegistrationOverall> registerDeviceForNotificationsWithNextcloud(@Header("Authorization")
  188. String authorization,
  189. @Url String url,
  190. @QueryMap Map<String,
  191. String> options);
  192. @DELETE
  193. Observable<GenericOverall> unregisterDeviceForNotificationsWithNextcloud(@Header("Authorization")
  194. String authorization,
  195. @Url String url);
  196. @FormUrlEncoded
  197. @POST
  198. Observable<Void> registerDeviceForNotificationsWithProxy(@Header("Authorization") String authorization,
  199. @Url String url,
  200. @FieldMap Map<String, String> fields);
  201. /*
  202. QueryMap items are as follows:
  203. - "deviceIdentifier": "{{deviceIdentifier}}",
  204. - "deviceIdentifierSignature": "{{signature}}",
  205. - "userPublicKey": "{{userPublicKey}}"
  206. */
  207. @DELETE
  208. Observable<Void> unregisterDeviceForNotificationsWithProxy(@Header("Authorization") String authorization,
  209. @Url String url,
  210. @QueryMap Map<String, String> fields);
  211. @FormUrlEncoded
  212. @PUT
  213. Observable<GenericOverall> setPassword(@Header("Authorization") String authorization, @Url String url,
  214. @Field("password") String password);
  215. @GET
  216. Observable<CapabilitiesOverall> getCapabilities(@Header("Authorization") String authorization, @Url String url);
  217. /*
  218. QueryMap items are as follows:
  219. - "lookIntoFuture": int (0 or 1),
  220. - "limit" : int, range 100-200,
  221. - "timeout": used with look into future, 30 default, 60 at most
  222. - "lastKnownMessageId", int, use one from X-Chat-Last-Given
  223. */
  224. @GET
  225. Observable<Response<ChatOverall>> pullChatMessages(@Header("Authorization") String authorization, @Url String url,
  226. @QueryMap Map<String, Integer> fields);
  227. /*
  228. Fieldmap items are as follows:
  229. - "message": ,
  230. - "actorDisplayName"
  231. */
  232. @FormUrlEncoded
  233. @POST
  234. Observable<GenericOverall> sendChatMessage(@Header("Authorization") String authorization, @Url String url,
  235. @Field("message") CharSequence message,
  236. @Field("actorDisplayName") String actorDisplayName);
  237. @GET
  238. Observable<MentionOverall> getMentionAutocompleteSuggestions(@Header("Authorization") String authorization,
  239. @Url String url, @Query("search") String query,
  240. @Nullable @Query("limit") Integer limit);
  241. // Url is: /api/{apiVersion}/room/{token}/pin
  242. @POST
  243. Observable<GenericOverall> addConversationToFavorites(@Header("Authorization") String authorization,
  244. @Url String url);
  245. // Url is: /api/{apiVersion}/room/{token}/favorites
  246. @DELETE
  247. Observable<GenericOverall> removeConversationFromFavorites(@Header("Authorization") String authorization,
  248. @Url String url);
  249. @GET
  250. Observable<NotificationOverall> getNotification(@Header("Authorization") String authorization,
  251. @Url String url);
  252. @FormUrlEncoded
  253. @POST
  254. Observable<GenericOverall> setNotificationLevel(@Header("Authorization") String authorization, @Url String url, @Field("level") int level);
  255. }