From 11d49426d3456057798fd35cfef7d7e7b4f973ee Mon Sep 17 00:00:00 2001 From: jubb Date: Thu, 10 Mar 2022 16:29:44 +1100 Subject: [PATCH] fix: approval for more fine-grained contacts on migrate --- .../securesms/database/GroupDatabase.java | 19 ++++++++----------- .../securesms/database/RecipientDatabase.java | 17 +++++++++++++++++ .../securesms/database/ThreadDatabase.java | 5 +++-- .../database/helpers/SQLCipherOpenHelper.java | 8 +++++++- 4 files changed, 35 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/GroupDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/GroupDatabase.java index aa80bdb17..e2ec7abb5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/GroupDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/GroupDatabase.java @@ -14,22 +14,19 @@ import com.annimon.stream.Stream; import net.sqlcipher.database.SQLiteDatabase; +import org.session.libsession.utilities.Address; +import org.session.libsession.utilities.GroupRecord; import org.session.libsession.utilities.TextSecurePreferences; +import org.session.libsession.utilities.Util; +import org.session.libsession.utilities.recipients.Recipient; +import org.session.libsignal.database.LokiOpenGroupDatabaseProtocol; +import org.session.libsignal.messages.SignalServiceAttachmentPointer; +import org.session.libsignal.utilities.guava.Optional; import org.thoughtcrime.securesms.database.helpers.SQLCipherOpenHelper; import org.thoughtcrime.securesms.util.BitmapUtil; -import org.session.libsession.utilities.recipients.Recipient; -import org.session.libsession.utilities.Address; -import org.session.libsession.utilities.GroupRecord; -import org.session.libsession.utilities.Util; - -import org.session.libsignal.utilities.guava.Optional; -import org.session.libsignal.messages.SignalServiceAttachmentPointer; -import org.session.libsignal.database.LokiOpenGroupDatabaseProtocol; - import java.io.Closeable; import java.security.SecureRandom; -import java.util.ArrayList; import java.util.Collections; import java.util.LinkedList; import java.util.List; @@ -58,7 +55,7 @@ public class GroupDatabase extends Database implements LokiOpenGroupDatabaseProt // Loki private static final String AVATAR_URL = "avatar_url"; - private static final String ADMINS = "admins"; + public static final String ADMINS = "admins"; public static final String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME + diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/RecipientDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/RecipientDatabase.java index 376630acb..9f3284275 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/RecipientDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/RecipientDatabase.java @@ -122,6 +122,19 @@ public class RecipientDatabase extends Database { "WHERE " + ADDRESS + " NOT LIKE '" + OPEN_GROUP_PREFIX + "%'"; } + public static String getUpdateResetApprovedCommand() { + return "UPDATE "+ TABLE_NAME + " " + + "SET " + APPROVED + " = 0, " + APPROVED_ME + " = 0 " + + "WHERE " + ADDRESS + " NOT LIKE '" + OPEN_GROUP_PREFIX + "%'"; + } + + public static String getUpdateApprovedSelectConversations() { + return "UPDATE "+ TABLE_NAME + " SET "+APPROVED+" = 1, "+APPROVED_ME+" = 1 "+ + "WHERE "+ADDRESS+ " NOT LIKE '"+OPEN_GROUP_PREFIX+"%' " + + "AND ("+ADDRESS+" IN (SELECT "+ThreadDatabase.TABLE_NAME+"."+ThreadDatabase.ADDRESS+" FROM "+ThreadDatabase.TABLE_NAME+" WHERE ("+ThreadDatabase.MESSAGE_COUNT+" != 0) "+ + "OR "+ADDRESS+" IN (SELECT "+GroupDatabase.TABLE_NAME+"."+GroupDatabase.ADMINS+" FROM "+GroupDatabase.TABLE_NAME+")))"; + } + public static final int NOTIFY_TYPE_ALL = 0; public static final int NOTIFY_TYPE_MENTIONS = 1; public static final int NOTIFY_TYPE_NONE = 2; @@ -242,6 +255,10 @@ public class RecipientDatabase extends Database { recipient.resolve().setApproved(approved); } + public void setAllApproved(List addresses) { + + } + public void setApprovedMe(@NonNull Recipient recipient, boolean approvedMe) { ContentValues values = new ContentValues(); values.put(APPROVED_ME, approvedMe ? 1 : 0); diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/ThreadDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/ThreadDatabase.java index 2b0b23167..9a47de785 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/ThreadDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/ThreadDatabase.java @@ -17,6 +17,7 @@ */ package org.thoughtcrime.securesms.database; +import static org.session.libsession.utilities.GroupUtil.CLOSED_GROUP_PREFIX; import static org.session.libsession.utilities.GroupUtil.OPEN_GROUP_PREFIX; import static org.thoughtcrime.securesms.database.GroupDatabase.GROUP_ID; @@ -91,7 +92,7 @@ public class ThreadDatabase extends Database { public static final String READ_RECEIPT_COUNT = "read_receipt_count"; public static final String EXPIRES_IN = "expires_in"; public static final String LAST_SEEN = "last_seen"; - private static final String HAS_SENT = "has_sent"; + public static final String HAS_SENT = "has_sent"; public static final String IS_PINNED = "is_pinned"; public static final String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME + " (" + @@ -447,7 +448,7 @@ public class ThreadDatabase extends Database { } public Cursor getApprovedConversationList() { - String where = "((" + MESSAGE_COUNT + " != 0 AND (" + HAS_SENT + " = 1 OR " + RecipientDatabase.APPROVED + " = 1)) OR " + GroupDatabase.TABLE_NAME + "." + GROUP_ID + " LIKE '" + OPEN_GROUP_PREFIX + "%') " + + String where = "((" + MESSAGE_COUNT + " != 0 AND (" + HAS_SENT + " = 1 OR " + RecipientDatabase.APPROVED + " = 1 OR "+ GroupDatabase.TABLE_NAME +"."+GROUP_ID+" LIKE '"+CLOSED_GROUP_PREFIX+"%')) OR " + GroupDatabase.TABLE_NAME + "." + GROUP_ID + " LIKE '" + OPEN_GROUP_PREFIX + "%') " + "AND " + ARCHIVED + " = 0 "; return getConversationList(where); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SQLCipherOpenHelper.java b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SQLCipherOpenHelper.java index 3afcd66b1..8d62125b4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SQLCipherOpenHelper.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SQLCipherOpenHelper.java @@ -63,9 +63,10 @@ public class SQLCipherOpenHelper extends SQLiteOpenHelper { private static final int lokiV29 = 50; private static final int lokiV30 = 51; private static final int lokiV31 = 52; + private static final int lokiV32 = 53; // Loki - onUpgrade(...) must be updated to use Loki version numbers if Signal makes any database changes - private static final int DATABASE_VERSION = lokiV31; + private static final int DATABASE_VERSION = lokiV32; private static final String DATABASE_NAME = "signal.db"; private final Context context; @@ -331,6 +332,11 @@ public class SQLCipherOpenHelper extends SQLiteOpenHelper { db.execSQL(MmsDatabase.getCreateMessageRequestResponseCommand()); } + if (oldVersion < lokiV32) { + db.execSQL(RecipientDatabase.getUpdateResetApprovedCommand()); + db.execSQL(RecipientDatabase.getUpdateApprovedSelectConversations()); + } + db.setTransactionSuccessful(); } finally { db.endTransaction();