Remove more cursors

pull/467/head
Alex Baker 8 years ago
parent 4137abd55b
commit 42f957ba12

@ -16,7 +16,6 @@ import com.google.common.collect.Iterables;
import com.todoroo.andlib.data.AbstractModel;
import com.todoroo.andlib.data.Property;
import com.todoroo.andlib.data.Property.PropertyVisitor;
import com.todoroo.andlib.data.TodorooCursor;
import com.todoroo.andlib.sql.Criterion;
import com.todoroo.andlib.sql.Query;
import com.todoroo.andlib.utility.DialogUtilities;
@ -194,35 +193,19 @@ public class TasksXmlImporter {
}
// if the task's name and creation date match an existing task, skip
long existingTask = 0;
TodorooCursor<Task> cursor = taskDao.query(Query.select(Task.ID,
Task.COMPLETION_DATE, Task.DELETION_DATE).
where(Criterion.and(Task.TITLE.eq(title), Task.CREATION_DATE.eq(created))));
try {
if(cursor.getCount() > 0) {
cursor.moveToNext();
if(existingTask == 0) {
skipCount++;
return;
}
}
} finally {
cursor.close();
}
// else, make a new task model and add away.
deserializeModel(currentTask, Task.PROPERTIES);
if(existingTask > 0) {
currentTask.setId(existingTask);
Query query = Query.select(Task.ID, Task.COMPLETION_DATE, Task.DELETION_DATE)
.where(Criterion.and(Task.TITLE.eq(title), Task.CREATION_DATE.eq(created)));
if (taskDao.count(query) > 0) {
skipCount++;
} else {
deserializeModel(currentTask, Task.PROPERTIES);
currentTask.setId(Task.NO_ID);
}
// Save the task to the database.
taskDao.save(currentTask);
importCount++;
// Save the task to the database.
taskDao.save(currentTask);
importCount++;
}
}
void parseMetadata(int format) {

@ -14,7 +14,6 @@ import com.todoroo.astrid.dao.Database;
import com.todoroo.astrid.dao.MetadataDao;
import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.service.TaskDeleter;
import org.tasks.R;
import org.tasks.calendars.CalendarEventProvider;
@ -31,7 +30,6 @@ import javax.inject.Inject;
public class OldTaskPreferences extends InjectingPreferenceActivity {
@Inject DialogBuilder dialogBuilder;
@Inject TaskDeleter taskDeleter;
@Inject MetadataDao metadataDao;
@Inject Preferences preferences;
@Inject Database database;
@ -106,7 +104,7 @@ public class OldTaskPreferences extends InjectingPreferenceActivity {
Query query = Query.select(Task.ID, Task.CALENDAR_URI)
.where(Criterion.and(Task.DELETION_DATE.gt(0), Task.CALENDAR_URI.isNotNull()));
taskDao.forEach(query, calendarEventProvider::deleteEvent);
int result = taskDeleter.purgeDeletedTasks();
int result = taskDao.deleteWhere(Task.DELETION_DATE.gt(0));
metadataDao.removeDanglingMetadata();
return result;
}

@ -104,8 +104,8 @@ public class TaskDao {
return dao.toList(Query.select(Task.PROPERTIES).withQueryTemplate(query));
}
public TodorooCursor<Task> rawQuery(String selection, String[] selectionArgs, Property.LongProperty id) {
return dao.rawQuery(selection, selectionArgs, id);
public List<Task> rawQuery(String selection, String[] selectionArgs, Property.LongProperty id) {
return dao.rawQuery(selection, selectionArgs, id).toList();
}
/**

@ -14,7 +14,6 @@ import android.net.Uri;
import android.support.annotation.NonNull;
import com.google.common.base.Joiner;
import com.todoroo.andlib.data.TodorooCursor;
import com.todoroo.andlib.sql.Criterion;
import com.todoroo.andlib.sql.Query;
import com.todoroo.andlib.utility.DateUtilities;
@ -169,36 +168,25 @@ public class Astrid2TaskProvider extends InjectingContentProvider {
* @return cursor as described above
*/
private Cursor getTasks() {
MatrixCursor ret = new MatrixCursor(TASK_FIELD_LIST);
TodorooCursor<Task> cursor = taskDao.get().query(Query.select(Task.ID, Task.TITLE,
Task.IMPORTANCE, Task.DUE_DATE).where(Criterion.and(TaskCriteria.isActive(),
TaskCriteria.isVisible())).
orderBy(SortHelper.defaultTaskOrder()).limit(MAX_NUMBER_OF_TASKS));
try {
List<Integer> importanceColors = checkBoxes.get().getPriorityColors();
for (int i = 0; i < cursor.getCount(); i++) {
cursor.moveToNext();
Task task = new Task(cursor);
String taskTags = getTagsAsString(task.getId(), TAG_SEPARATOR);
Object[] values = new Object[7];
values[0] = task.getTitle();
values[1] = importanceColors.get(task.getImportance());
values[2] = task.getDueDate();
values[3] = task.getDueDate();
values[4] = task.getImportance();
values[5] = task.getId();
values[6] = taskTags;
ret.addRow(values);
}
} finally {
cursor.close();
}
List<Integer> importanceColors = checkBoxes.get().getPriorityColors();
Query query = Query.select(Task.ID, Task.TITLE, Task.IMPORTANCE, Task.DUE_DATE)
.where(Criterion.and(TaskCriteria.isActive(), TaskCriteria.isVisible()))
.orderBy(SortHelper.defaultTaskOrder()).limit(MAX_NUMBER_OF_TASKS);
taskDao.get().forEach(query, task -> {
String taskTags = getTagsAsString(task.getId(), TAG_SEPARATOR);
Object[] values = new Object[7];
values[0] = task.getTitle();
values[1] = importanceColors.get(task.getImportance());
values[2] = task.getDueDate();
values[3] = task.getDueDate();
values[4] = task.getImportance();
values[5] = task.getId();
values[6] = taskTags;
ret.addRow(values);
});
return ret;
}
@ -268,16 +256,12 @@ public class Astrid2TaskProvider extends InjectingContentProvider {
* Update database based on selection and values
*/
private int updateBySelection(String selection, String[] selectionArgs, Task taskValues) {
TodorooCursor<Task> cursor = taskDao.get().rawQuery(selection, selectionArgs, Task.ID);
try {
for(cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
taskValues.setID(cursor.get(Task.ID));
taskDao.get().save(taskValues);
}
return cursor.getCount();
} finally {
cursor.close();
List<Task> tasks = taskDao.get().rawQuery(selection, selectionArgs, Task.ID);
for (Task task : tasks) {
taskValues.setID(task.getId());
taskDao.get().save(taskValues);
}
return tasks.size();
}
public static void notifyDatabaseModification(Context context) {

@ -11,7 +11,6 @@ import android.content.Context;
import android.content.Intent;
import com.todoroo.andlib.data.Property;
import com.todoroo.andlib.data.TodorooCursor;
import com.todoroo.andlib.sql.Criterion;
import com.todoroo.andlib.sql.Query;
import com.todoroo.andlib.utility.DateUtilities;
@ -95,20 +94,12 @@ public final class ReminderService {
* Schedules all alarms
*/
public void scheduleAllAlarms(TaskDao taskDao) {
TodorooCursor<Task> cursor = getTasksWithReminders(taskDao, NOTIFICATION_PROPERTIES);
try {
now = DateUtilities.now(); // Before mass scheduling, initialize now variable
for(cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
Task task = new Task(cursor);
scheduleAlarm(task, null);
}
} catch (Exception e) {
// suppress
Timber.e(e, e.getMessage());
} finally {
cursor.close();
now = -1; // Signal done with now variable
}
now = DateUtilities.now(); // Before mass scheduling, initialize now variable
Query query = Query.select(NOTIFICATION_PROPERTIES).where(Criterion.and(
TaskCriteria.isActive(),
Criterion.or(Task.REMINDER_FLAGS.gt(0), Task.REMINDER_PERIOD.gt(0))));
taskDao.forEach(query, task -> scheduleAlarm(task, null));
now = -1; // Signal done with now variable
}
private long getNowValue() {
@ -368,16 +359,4 @@ public final class ReminderService {
}
}
}
// --- data fetching methods
/**
* Gets a listing of all tasks that are active &
* @return todoroo cursor. PLEASE CLOSE THIS CURSOR!
*/
private TodorooCursor<Task> getTasksWithReminders(TaskDao taskDao, Property<?>... properties) {
return taskDao.query(Query.select(properties).where(Criterion.and(
TaskCriteria.isActive(),
Criterion.or(Task.REMINDER_FLAGS.gt(0), Task.REMINDER_PERIOD.gt(0)))));
}
}

@ -1,6 +1,5 @@
package com.todoroo.astrid.service;
import com.todoroo.andlib.data.TodorooCursor;
import com.todoroo.andlib.sql.Query;
import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.astrid.dao.TaskDao;
@ -25,26 +24,13 @@ public class TaskDeleter {
* Clean up tasks. Typically called on startup
*/
public void deleteTasksWithEmptyTitles(Long suppress) {
TodorooCursor<Task> cursor = taskDao.query(
Query.select(Task.ID).where(TaskDao.TaskCriteria.hasNoTitle()));
try {
if(cursor.getCount() == 0) {
return;
Query query = Query.select(Task.ID).where(TaskDao.TaskCriteria.hasNoTitle());
taskDao.forEach(query, task -> {
long id = task.getId();
if (suppress == null || suppress != id) {
taskDao.delete(id);
}
for(cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
long id = cursor.getLong(0);
if (suppress == null || suppress != id) {
taskDao.delete(id);
}
}
} finally {
cursor.close();
}
}
public int purgeDeletedTasks() {
return taskDao.deleteWhere(Task.DELETION_DATE.gt(0));
});
}
public void delete(Task item) {

Loading…
Cancel
Save