Allow muting a user, even when not connected

Stephen Paul Weber created

Change summary

src/main/java/eu/siacs/conversations/entities/MucOptions.java                 | 4 
src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java         | 9 
src/main/java/eu/siacs/conversations/ui/util/MucDetailsContextMenuHelper.java | 4 
3 files changed, 12 insertions(+), 5 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/entities/MucOptions.java 🔗

@@ -353,7 +353,7 @@ public class MucOptions {
                 }
             }
         }
-        return null;
+        return new User(this, null, id, null, new HashSet<>());
     }
 
     public User findOrCreateUserByRealJid(Jid jid, Jid fullJid) {
@@ -861,7 +861,7 @@ public class MucOptions {
         }
 
         public Jid getMuc() {
-            return fullJid == null ? null : fullJid.asBareJid();
+            return fullJid == null ? (options.getConversation().getJid().asBareJid()) : fullJid.asBareJid();
         }
 
         public String getOccupantId() {

src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java 🔗

@@ -343,6 +343,14 @@ public class DatabaseBackend extends SQLiteOpenHelper {
                 db.execSQL("PRAGMA cheogram.user_version = 10");
             }
 
+            if(cheogramVersion < 11) {
+                db.execSQL(
+                    "ALTER TABLE cheogram.muted_participants " +
+                    "DROP COLUMN nick"
+                );
+                db.execSQL("PRAGMA cheogram.user_version = 11");
+            }
+
             db.setTransactionSuccessful();
         } finally {
             db.endTransaction();
@@ -904,7 +912,6 @@ public class DatabaseBackend extends SQLiteOpenHelper {
         ContentValues cv = new ContentValues();
         cv.put("muc_jid", user.getMuc().toString());
         cv.put("occupant_id", user.getOccupantId());
-        cv.put("nick", user.getNick());
         db.insertWithOnConflict("cheogram.muted_participants", null, cv, SQLiteDatabase.CONFLICT_REPLACE);
 
         return true;

src/main/java/eu/siacs/conversations/ui/util/MucDetailsContextMenuHelper.java 🔗

@@ -166,9 +166,9 @@ public final class MucDetailsContextMenuHelper {
                 }
             }
             managePermissions.setVisible(managePermissionsVisible);
-            sendPrivateMessage.setVisible(!isGroupChat && mucOptions.allowPm() && user.getRole().ranks(MucOptions.Role.VISITOR));
+            sendPrivateMessage.setVisible(user.getFullJid() != null && !isGroupChat && mucOptions.allowPm() && user.getRole().ranks(MucOptions.Role.VISITOR));
         } else {
-            sendPrivateMessage.setVisible(true);
+            sendPrivateMessage.setVisible(user != null && user.getFullJid() != null);
             sendPrivateMessage.setEnabled(user != null && mucOptions.allowPm() && user.getRole().ranks(MucOptions.Role.VISITOR));
         }
     }