add proper API version detection

don't let switch fall through
make api versions constants

Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
This commit is contained in:
Andy Scherzinger 2021-12-28 09:53:59 +01:00 committed by Marcel Hibbe
parent 1521e13e21
commit de085df3bc
No known key found for this signature in database
GPG key ID: C793F8B59F43CE7B
3 changed files with 14 additions and 11 deletions

View file

@ -2324,7 +2324,7 @@ class ChatController(args: Bundle) :
ncApi!!.setChatReadMarker( ncApi!!.setChatReadMarker(
credentials, credentials,
ApiUtils.getUrlForSetChatReadMarker( ApiUtils.getUrlForSetChatReadMarker(
1, ApiUtils.getChatApiVersion(conversationUser, intArrayOf(ApiUtils.APIv1)),
conversationUser?.baseUrl, conversationUser?.baseUrl,
roomToken roomToken
), ),

View file

@ -280,7 +280,8 @@ public class OperationsMenuController extends BaseController {
} }
credentials = ApiUtils.getCredentials(currentUser.getUsername(), currentUser.getToken()); credentials = ApiUtils.getCredentials(currentUser.getUsername(), currentUser.getToken());
int apiVersion = ApiUtils.getConversationApiVersion(currentUser, new int[] {ApiUtils.APIv4, 1}); int apiVersion = ApiUtils.getConversationApiVersion(currentUser, new int[] {ApiUtils.APIv4, ApiUtils.APIv1});
int chatApiVersion = ApiUtils.getChatApiVersion(currentUser, new int[] {ApiUtils.APIv1});
switch (operationCode) { switch (operationCode) {
case 2: case 2:
@ -483,9 +484,8 @@ public class OperationsMenuController extends BaseController {
break; break;
case 96: case 96:
// TODO: why does it break with v4?
ncApi.setChatReadMarker(credentials, ncApi.setChatReadMarker(credentials,
ApiUtils.getUrlForSetChatReadMarker(1, ApiUtils.getUrlForSetChatReadMarker(chatApiVersion,
currentUser.getBaseUrl(), currentUser.getBaseUrl(),
conversation.getToken()), conversation.getToken()),
conversation.lastMessage.jsonMessageId) conversation.lastMessage.jsonMessageId)
@ -493,6 +493,7 @@ public class OperationsMenuController extends BaseController {
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
.retry(1) .retry(1)
.subscribe(genericOperationsObserver); .subscribe(genericOperationsObserver);
break;
case 97: case 97:
case 98: case 98:
if (operationCode == 97) { if (operationCode == 97) {

View file

@ -40,6 +40,8 @@ import androidx.annotation.Nullable;
import okhttp3.Credentials; import okhttp3.Credentials;
public class ApiUtils { public class ApiUtils {
public static final int APIv1 = 1;
public static final int APIv2 = 2;
public static final int APIv3 = 3; public static final int APIv3 = 3;
public static final int APIv4 = 4; public static final int APIv4 = 4;
private static final String TAG = "ApiUtils"; private static final String TAG = "ApiUtils";
@ -59,7 +61,7 @@ public class ApiUtils {
*/ */
@Deprecated @Deprecated
public static String getUrlForRemovingParticipantFromConversation(String baseUrl, String roomToken, boolean isGuest) { public static String getUrlForRemovingParticipantFromConversation(String baseUrl, String roomToken, boolean isGuest) {
String url = getUrlForParticipants(1, baseUrl, roomToken); String url = getUrlForParticipants(APIv1, baseUrl, roomToken);
if (isGuest) { if (isGuest) {
url += "/guests"; url += "/guests";
@ -121,7 +123,7 @@ public class ApiUtils {
public static int getConversationApiVersion(UserEntity user, int[] versions) throws NoSupportedApiException { public static int getConversationApiVersion(UserEntity user, int[] versions) throws NoSupportedApiException {
boolean hasApiV4 = false; boolean hasApiV4 = false;
for (int version : versions) { for (int version : versions) {
hasApiV4 |= version == 4; hasApiV4 |= version == APIv4;
} }
if (!hasApiV4) { if (!hasApiV4) {
@ -135,11 +137,11 @@ public class ApiUtils {
} }
// Fallback for old API versions // Fallback for old API versions
if ((version == 1 || version == 2)) { if ((version == APIv1 || version == APIv2)) {
if (CapabilitiesUtil.hasSpreedFeatureCapability(user, "conversation-v2")) { if (CapabilitiesUtil.hasSpreedFeatureCapability(user, "conversation-v2")) {
return version; return version;
} }
if (version == 1 && if (version == APIv1 &&
CapabilitiesUtil.hasSpreedFeatureCapability(user, "mention-flag") && CapabilitiesUtil.hasSpreedFeatureCapability(user, "mention-flag") &&
!CapabilitiesUtil.hasSpreedFeatureCapability(user, "conversation-v4")) { !CapabilitiesUtil.hasSpreedFeatureCapability(user, "conversation-v4")) {
return version; return version;
@ -155,13 +157,13 @@ public class ApiUtils {
return version; return version;
} }
if (version == 2 && if (version == APIv2 &&
CapabilitiesUtil.hasSpreedFeatureCapability(user, "sip-support") && CapabilitiesUtil.hasSpreedFeatureCapability(user, "sip-support") &&
!CapabilitiesUtil.hasSpreedFeatureCapability(user, "signaling-v3")) { !CapabilitiesUtil.hasSpreedFeatureCapability(user, "signaling-v3")) {
return version; return version;
} }
if (version == 1 && if (version == APIv1 &&
!CapabilitiesUtil.hasSpreedFeatureCapability(user, "signaling-v3")) { !CapabilitiesUtil.hasSpreedFeatureCapability(user, "signaling-v3")) {
// Has no capability, we just assume it is always there when there is no v3 or later // Has no capability, we just assume it is always there when there is no v3 or later
return version; return version;
@ -172,7 +174,7 @@ public class ApiUtils {
public static int getChatApiVersion(UserEntity user, int[] versions) throws NoSupportedApiException { public static int getChatApiVersion(UserEntity user, int[] versions) throws NoSupportedApiException {
for (int version : versions) { for (int version : versions) {
if (version == 1 && CapabilitiesUtil.hasSpreedFeatureCapability(user, "chat-v2")) { if (version == APIv1 && CapabilitiesUtil.hasSpreedFeatureCapability(user, "chat-v2")) {
// Do not question that chat-v2 capability shows the availability of api/v1/ endpoint *see no evil* // Do not question that chat-v2 capability shows the availability of api/v1/ endpoint *see no evil*
return version; return version;
} }