mirror of https://github.com/M66B/FairEmail.git
Close cursors
This commit is contained in:
parent
e8816e4be2
commit
ddbdfcd522
|
@ -1109,7 +1109,7 @@ public class FragmentCompose extends FragmentBase {
|
||||||
|
|
||||||
boolean contacts = Helper.hasPermission(getContext(), Manifest.permission.READ_CONTACTS);
|
boolean contacts = Helper.hasPermission(getContext(), Manifest.permission.READ_CONTACTS);
|
||||||
if (contacts) {
|
if (contacts) {
|
||||||
Cursor cursor = resolver.query(
|
try (Cursor cursor = resolver.query(
|
||||||
ContactsContract.CommonDataKinds.Email.CONTENT_URI,
|
ContactsContract.CommonDataKinds.Email.CONTENT_URI,
|
||||||
new String[]{
|
new String[]{
|
||||||
ContactsContract.Contacts.DISPLAY_NAME,
|
ContactsContract.Contacts.DISPLAY_NAME,
|
||||||
|
@ -1122,20 +1122,21 @@ public class FragmentCompose extends FragmentBase {
|
||||||
" OR LOWER(" + ContactsContract.Contacts.DISPLAY_NAME + ") GLOB ?" +
|
" OR LOWER(" + ContactsContract.Contacts.DISPLAY_NAME + ") GLOB ?" +
|
||||||
" OR " + ContactsContract.CommonDataKinds.Email.DATA + " LIKE ?)",
|
" OR " + ContactsContract.CommonDataKinds.Email.DATA + " LIKE ?)",
|
||||||
new String[]{wildcard, glob, wildcard},
|
new String[]{wildcard, glob, wildcard},
|
||||||
null);
|
null)) {
|
||||||
|
|
||||||
while (cursor != null && cursor.moveToNext()) {
|
while (cursor != null && cursor.moveToNext()) {
|
||||||
EntityContact item = new EntityContact();
|
EntityContact item = new EntityContact();
|
||||||
item.id = 0L;
|
item.id = 0L;
|
||||||
item.name = cursor.getString(0);
|
item.name = cursor.getString(0);
|
||||||
item.email = cursor.getString(1);
|
item.email = cursor.getString(1);
|
||||||
item.avatar = cursor.getString(2);
|
item.avatar = cursor.getString(2);
|
||||||
item.times_contacted = (cursor.getInt(3) == 0 ? 0 : Integer.MAX_VALUE);
|
item.times_contacted = (cursor.getInt(3) == 0 ? 0 : Integer.MAX_VALUE);
|
||||||
item.last_contacted = 0L;
|
item.last_contacted = 0L;
|
||||||
EntityContact existing = map.get(item.email);
|
EntityContact existing = map.get(item.email);
|
||||||
if (existing == null ||
|
if (existing == null ||
|
||||||
(existing.avatar == null && item.avatar != null))
|
(existing.avatar == null && item.avatar != null))
|
||||||
map.put(item.email, item);
|
map.put(item.email, item);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -124,14 +124,15 @@ public class FtsDbHelper extends SQLiteOpenHelper {
|
||||||
static List<String> getSuggestions(SQLiteDatabase db, String query, int max) {
|
static List<String> getSuggestions(SQLiteDatabase db, String query, int max) {
|
||||||
List<String> result = new ArrayList<>();
|
List<String> result = new ArrayList<>();
|
||||||
|
|
||||||
Cursor cursor = db.query(
|
try (Cursor cursor = db.query(
|
||||||
"SELECT term FROM message_terms" +
|
"SELECT term FROM message_terms" +
|
||||||
" WHERE term LIKE ?" +
|
" WHERE term LIKE ?" +
|
||||||
" ORDER BY cnt" +
|
" ORDER BY cnt" +
|
||||||
" LIMIT " + max,
|
" LIMIT " + max,
|
||||||
new Object[]{query});
|
new Object[]{query})) {
|
||||||
while (cursor != null && cursor.moveToNext())
|
while (cursor != null && cursor.moveToNext())
|
||||||
result.add(cursor.getString(0));
|
result.add(cursor.getString(0));
|
||||||
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
|
@ -67,44 +67,45 @@ public class WorkerFts extends Worker {
|
||||||
|
|
||||||
SQLiteDatabase sdb = FtsDbHelper.getInstance(context);
|
SQLiteDatabase sdb = FtsDbHelper.getInstance(context);
|
||||||
|
|
||||||
Cursor cursor = db.message().getMessageFts();
|
try (Cursor cursor = db.message().getMessageFts()) {
|
||||||
while (cursor != null && cursor.moveToNext())
|
while (cursor != null && cursor.moveToNext())
|
||||||
try {
|
|
||||||
long id = cursor.getLong(0);
|
|
||||||
Log.i("FTS index=" + id);
|
|
||||||
|
|
||||||
ids.add(id);
|
|
||||||
|
|
||||||
EntityMessage message = db.message().getMessage(id);
|
|
||||||
if (message == null) {
|
|
||||||
Log.i("FTS gone");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
File file = message.getFile(context);
|
|
||||||
String text = HtmlHelper.getFullText(file);
|
|
||||||
if (text == null)
|
|
||||||
text = "";
|
|
||||||
|
|
||||||
boolean fts = prefs.getBoolean("fts", false);
|
|
||||||
if (!fts)
|
|
||||||
break;
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
sdb.beginTransaction();
|
long id = cursor.getLong(0);
|
||||||
FtsDbHelper.insert(sdb, message, text);
|
Log.i("FTS index=" + id);
|
||||||
sdb.setTransactionSuccessful();
|
|
||||||
} finally {
|
ids.add(id);
|
||||||
sdb.endTransaction();
|
|
||||||
|
EntityMessage message = db.message().getMessage(id);
|
||||||
|
if (message == null) {
|
||||||
|
Log.i("FTS gone");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
File file = message.getFile(context);
|
||||||
|
String text = HtmlHelper.getFullText(file);
|
||||||
|
if (text == null)
|
||||||
|
text = "";
|
||||||
|
|
||||||
|
boolean fts = prefs.getBoolean("fts", false);
|
||||||
|
if (!fts)
|
||||||
|
break;
|
||||||
|
|
||||||
|
try {
|
||||||
|
sdb.beginTransaction();
|
||||||
|
FtsDbHelper.insert(sdb, message, text);
|
||||||
|
sdb.setTransactionSuccessful();
|
||||||
|
} finally {
|
||||||
|
sdb.endTransaction();
|
||||||
|
}
|
||||||
|
|
||||||
|
indexed++;
|
||||||
|
|
||||||
|
if (ids.size() > INDEX_BATCH_SIZE)
|
||||||
|
markIndexed(db, ids);
|
||||||
|
} catch (Throwable ex) {
|
||||||
|
Log.e(ex);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
indexed++;
|
|
||||||
|
|
||||||
if (ids.size() > INDEX_BATCH_SIZE)
|
|
||||||
markIndexed(db, ids);
|
|
||||||
} catch (Throwable ex) {
|
|
||||||
Log.e(ex);
|
|
||||||
}
|
|
||||||
|
|
||||||
markIndexed(db, ids);
|
markIndexed(db, ids);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue