Break long filter thread id calls up into chunks of 900.
// FREEBIE Fixes #2462 Closes #2860
This commit is contained in:
parent
b8a231c40f
commit
797b296f3a
2 changed files with 34 additions and 16 deletions
|
@ -19,6 +19,7 @@ package org.thoughtcrime.securesms.database;
|
|||
import android.content.ContentValues;
|
||||
import android.content.Context;
|
||||
import android.database.Cursor;
|
||||
import android.database.MergeCursor;
|
||||
import android.database.sqlite.SQLiteDatabase;
|
||||
import android.database.sqlite.SQLiteOpenHelper;
|
||||
import android.text.TextUtils;
|
||||
|
@ -32,10 +33,12 @@ import org.thoughtcrime.securesms.database.model.ThreadRecord;
|
|||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
import org.thoughtcrime.securesms.recipients.RecipientFactory;
|
||||
import org.thoughtcrime.securesms.recipients.Recipients;
|
||||
import org.thoughtcrime.securesms.util.Util;
|
||||
import org.whispersystems.libaxolotl.InvalidMessageException;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
|
@ -258,24 +261,31 @@ public class ThreadDatabase extends Database {
|
|||
if (filter == null || filter.size() == 0)
|
||||
return null;
|
||||
|
||||
List<Long> recipientIds = DatabaseFactory.getAddressDatabase(context).getCanonicalAddressIds(filter);
|
||||
List<Long> rawRecipientIds = DatabaseFactory.getAddressDatabase(context).getCanonicalAddressIds(filter);
|
||||
|
||||
if (recipientIds == null || recipientIds.size() == 0)
|
||||
if (rawRecipientIds == null || rawRecipientIds.size() == 0)
|
||||
return null;
|
||||
|
||||
String selection = RECIPIENT_IDS + " = ?";
|
||||
String[] selectionArgs = new String[recipientIds.size()];
|
||||
SQLiteDatabase db = databaseHelper.getReadableDatabase();
|
||||
List<List<Long>> partitionedRecipientIds = Util.partition(rawRecipientIds, 900);
|
||||
List<Cursor> cursors = new LinkedList<>();
|
||||
|
||||
for (int i=0;i<recipientIds.size()-1;i++)
|
||||
selection += (" OR " + RECIPIENT_IDS + " = ?");
|
||||
for (List<Long> recipientIds : partitionedRecipientIds) {
|
||||
String selection = RECIPIENT_IDS + " = ?";
|
||||
String[] selectionArgs = new String[recipientIds.size()];
|
||||
|
||||
int i= 0;
|
||||
for (long id : recipientIds) {
|
||||
selectionArgs[i++] = id+"";
|
||||
for (int i=0;i<recipientIds.size()-1;i++)
|
||||
selection += (" OR " + RECIPIENT_IDS + " = ?");
|
||||
|
||||
int i= 0;
|
||||
for (long id : recipientIds) {
|
||||
selectionArgs[i++] = String.valueOf(id);
|
||||
}
|
||||
|
||||
cursors.add(db.query(TABLE_NAME, null, selection, selectionArgs, null, null, DATE + " DESC"));
|
||||
}
|
||||
|
||||
SQLiteDatabase db = databaseHelper.getReadableDatabase();
|
||||
Cursor cursor = db.query(TABLE_NAME, null, selection, selectionArgs, null, null, DATE + " DESC");
|
||||
Cursor cursor = cursors.size() > 1 ? new MergeCursor(cursors.toArray(new Cursor[cursors.size()])) : cursors.get(0);
|
||||
setNotifyConverationListListeners(cursor);
|
||||
return cursor;
|
||||
}
|
||||
|
|
|
@ -20,15 +20,11 @@ import android.annotation.SuppressLint;
|
|||
import android.annotation.TargetApi;
|
||||
import android.content.Context;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.graphics.Shader;
|
||||
import android.graphics.Typeface;
|
||||
import android.graphics.drawable.BitmapDrawable;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Build;
|
||||
import android.os.Build.VERSION;
|
||||
import android.os.Build.VERSION_CODES;
|
||||
import android.provider.Telephony;
|
||||
import android.telephony.SmsManager;
|
||||
import android.telephony.TelephonyManager;
|
||||
import android.text.Spannable;
|
||||
import android.text.SpannableString;
|
||||
|
@ -37,7 +33,6 @@ import android.text.style.StyleSpan;
|
|||
import android.widget.EditText;
|
||||
|
||||
import org.thoughtcrime.securesms.BuildConfig;
|
||||
import org.thoughtcrime.securesms.TextSecureExpiredException;
|
||||
import org.thoughtcrime.securesms.mms.OutgoingLegacyMmsConnection;
|
||||
import org.whispersystems.textsecure.api.util.InvalidNumberException;
|
||||
import org.whispersystems.textsecure.api.util.PhoneNumberFormatter;
|
||||
|
@ -202,6 +197,19 @@ public class Util {
|
|||
return null;
|
||||
}
|
||||
|
||||
public static <T> List<List<T>> partition(List<T> list, int partitionSize) {
|
||||
List<List<T>> results = new LinkedList<>();
|
||||
|
||||
for (int index=0;index<list.size();index+=partitionSize) {
|
||||
int offset = index * partitionSize;
|
||||
int subListSize = Math.min(partitionSize, list.size() - offset);
|
||||
|
||||
results.add(list.subList(offset, offset + subListSize));
|
||||
}
|
||||
|
||||
return results;
|
||||
}
|
||||
|
||||
public static List<String> split(String source, String delimiter) {
|
||||
List<String> results = new LinkedList<>();
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue