فهرست منبع

Merge pull request #1846 from nextcloud/bugfix/noid/fixCanLeaveApiCheck

Bugfix/noid/fix can leave api check
Marcel Hibbe 3 سال پیش
والد
کامیت
a75cb7fa5a

+ 3 - 3
app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt

@@ -613,13 +613,13 @@ class ConversationInfoController(args: Bundle) :
 
                             setupWebinaryView()
 
-                            if (!conversation!!.canLeave()) {
+                            if (!conversation!!.canLeave(conversationUser)) {
                                 binding.leaveConversationAction.visibility = View.GONE
                             } else {
                                 binding.leaveConversationAction.visibility = View.VISIBLE
                             }
 
-                            if (!conversation!!.canDelete()) {
+                            if (!conversation!!.canDelete(conversationUser)) {
                                 binding.deleteConversationAction.visibility = View.GONE
                             } else {
                                 binding.deleteConversationAction.visibility = View.VISIBLE
@@ -662,7 +662,7 @@ class ConversationInfoController(args: Bundle) :
                 }
 
                 override fun onError(e: Throwable) {
-                    // unused atm
+                    Log.e(TAG, "failed to fetch room info", e)
                 }
 
                 override fun onComplete() {

+ 15 - 4
app/src/main/java/com/nextcloud/talk/models/json/conversations/Conversation.java

@@ -148,12 +148,23 @@ public class Conversation {
         return (canModerate(conversationUser) && !ConversationType.ROOM_TYPE_ONE_TO_ONE_CALL.equals(type));
     }
 
-    public boolean canLeave() {
-        return canLeaveConversation;
+    public boolean canLeave(UserEntity conversationUser) {
+        if (canLeaveConversation != null) {
+            // Available since APIv2
+            return canLeaveConversation;
+        }
+        // Fallback for APIv1
+        return !canModerate(conversationUser) ||
+            (getType() != ConversationType.ROOM_TYPE_ONE_TO_ONE_CALL && this.participants.size() > 1);
     }
 
-    public boolean canDelete() {
-        return canDeleteConversation;
+    public boolean canDelete(UserEntity conversationUser) {
+        if (canDeleteConversation != null) {
+            // Available since APIv2
+            return canDeleteConversation;
+        }
+        // Fallback for APIv1
+        return canModerate(conversationUser);
     }
 
     public String getRoomId() {

+ 1 - 1
app/src/main/java/com/nextcloud/talk/ui/dialog/ConversationsListBottomDialog.kt

@@ -157,7 +157,7 @@ class ConversationsListBottomDialog(
         )
 
         binding.conversationOperationLeave.visibility = setVisibleIf(
-            conversation.canLeave() &&
+            conversation.canLeave(currentUser) &&
                 // leaving is by api not possible for the last user with moderator permissions.
                 // for now, hide this option for all moderators.
                 !conversation.canModerate(currentUser)