Close cursors

This commit is contained in:
M66B 2022-04-12 08:15:31 +02:00
parent e8816e4be2
commit ddbdfcd522
3 changed files with 57 additions and 54 deletions

View File

@ -1109,7 +1109,7 @@ public class FragmentCompose extends FragmentBase {
boolean contacts = Helper.hasPermission(getContext(), Manifest.permission.READ_CONTACTS);
if (contacts) {
Cursor cursor = resolver.query(
try (Cursor cursor = resolver.query(
ContactsContract.CommonDataKinds.Email.CONTENT_URI,
new String[]{
ContactsContract.Contacts.DISPLAY_NAME,
@ -1122,20 +1122,21 @@ public class FragmentCompose extends FragmentBase {
" OR LOWER(" + ContactsContract.Contacts.DISPLAY_NAME + ") GLOB ?" +
" OR " + ContactsContract.CommonDataKinds.Email.DATA + " LIKE ?)",
new String[]{wildcard, glob, wildcard},
null);
null)) {
while (cursor != null && cursor.moveToNext()) {
EntityContact item = new EntityContact();
item.id = 0L;
item.name = cursor.getString(0);
item.email = cursor.getString(1);
item.avatar = cursor.getString(2);
item.times_contacted = (cursor.getInt(3) == 0 ? 0 : Integer.MAX_VALUE);
item.last_contacted = 0L;
EntityContact existing = map.get(item.email);
if (existing == null ||
(existing.avatar == null && item.avatar != null))
map.put(item.email, item);
while (cursor != null && cursor.moveToNext()) {
EntityContact item = new EntityContact();
item.id = 0L;
item.name = cursor.getString(0);
item.email = cursor.getString(1);
item.avatar = cursor.getString(2);
item.times_contacted = (cursor.getInt(3) == 0 ? 0 : Integer.MAX_VALUE);
item.last_contacted = 0L;
EntityContact existing = map.get(item.email);
if (existing == null ||
(existing.avatar == null && item.avatar != null))
map.put(item.email, item);
}
}
}

View File

@ -124,14 +124,15 @@ public class FtsDbHelper extends SQLiteOpenHelper {
static List<String> getSuggestions(SQLiteDatabase db, String query, int max) {
List<String> result = new ArrayList<>();
Cursor cursor = db.query(
try (Cursor cursor = db.query(
"SELECT term FROM message_terms" +
" WHERE term LIKE ?" +
" ORDER BY cnt" +
" LIMIT " + max,
new Object[]{query});
while (cursor != null && cursor.moveToNext())
result.add(cursor.getString(0));
new Object[]{query})) {
while (cursor != null && cursor.moveToNext())
result.add(cursor.getString(0));
}
return result;
}

View File

@ -67,44 +67,45 @@ public class WorkerFts extends Worker {
SQLiteDatabase sdb = FtsDbHelper.getInstance(context);
Cursor cursor = db.message().getMessageFts();
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 (Cursor cursor = db.message().getMessageFts()) {
while (cursor != null && cursor.moveToNext())
try {
sdb.beginTransaction();
FtsDbHelper.insert(sdb, message, text);
sdb.setTransactionSuccessful();
} finally {
sdb.endTransaction();
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 {
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);