Moving code around

pull/189/head
Alex Baker 12 years ago
parent 81d95d92b6
commit ec4c92ae2e

@ -649,7 +649,7 @@ public class TaskListFragment extends InjectingListFragment implements OnSortSel
if (taskAdapter != null) { if (taskAdapter != null) {
taskAdapter.flushCaches(); taskAdapter.flushCaches();
} }
taskService.cleanup(); taskDeleter.deleteTasksWithEmptyTitles();
loadTaskListContent(true); loadTaskListContent(true);
} }
@ -999,7 +999,7 @@ public class TaskListFragment extends InjectingListFragment implements OnSortSel
Task task = new Task(); Task task = new Task();
task.setId(itemId); task.setId(itemId);
TimerPlugin.updateTimer(notificationManager, taskService, getActivity(), task, false); TimerPlugin.updateTimer(notificationManager, taskService, getActivity(), task, false);
taskService.purge(itemId); taskDeleter.purge(itemId);
loadTaskListContent(true); loadTaskListContent(true);
return true; return true;
} }

@ -22,6 +22,7 @@ import com.todoroo.astrid.dao.Database;
import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.gcal.GCalHelper; import com.todoroo.astrid.gcal.GCalHelper;
import com.todoroo.astrid.service.MetadataService; import com.todoroo.astrid.service.MetadataService;
import com.todoroo.astrid.service.TaskDeleter;
import com.todoroo.astrid.service.TaskService; import com.todoroo.astrid.service.TaskService;
import com.todoroo.astrid.utility.TodorooPreferenceActivity; import com.todoroo.astrid.utility.TodorooPreferenceActivity;
@ -38,6 +39,7 @@ import javax.inject.Inject;
*/ */
public class OldTaskPreferences extends TodorooPreferenceActivity { public class OldTaskPreferences extends TodorooPreferenceActivity {
@Inject TaskDeleter taskDeleter;
@Inject TaskService taskService; @Inject TaskService taskService;
@Inject MetadataService metadataService; @Inject MetadataService metadataService;
@Inject Database database; @Inject Database database;
@ -194,11 +196,9 @@ public class OldTaskPreferences extends TodorooPreferenceActivity {
} finally { } finally {
cursor.close(); cursor.close();
} }
int result = taskService.deleteWhere(Task.DELETION_DATE.gt(0)); int result = taskDeleter.purgeDeletedTasks();
metadataService.cleanup(); metadataService.cleanup();
showResult( showResult(R.string.EPr_manage_purge_deleted_status, result);
R.string.EPr_manage_purge_deleted_status,
result);
} }
}); });
} }

@ -33,6 +33,7 @@ import com.todoroo.astrid.gtasks.api.GtasksApiUtilities;
import com.todoroo.astrid.gtasks.api.GtasksInvoker; import com.todoroo.astrid.gtasks.api.GtasksInvoker;
import com.todoroo.astrid.gtasks.auth.GtasksTokenValidator; import com.todoroo.astrid.gtasks.auth.GtasksTokenValidator;
import com.todoroo.astrid.service.MetadataService; import com.todoroo.astrid.service.MetadataService;
import com.todoroo.astrid.service.TaskDeleter;
import com.todoroo.astrid.service.TaskService; import com.todoroo.astrid.service.TaskService;
import com.todoroo.astrid.sync.SyncResultCallback; import com.todoroo.astrid.sync.SyncResultCallback;
import com.todoroo.astrid.sync.SyncV2Provider; import com.todoroo.astrid.sync.SyncV2Provider;
@ -74,12 +75,13 @@ public class GtasksSyncV2Provider extends SyncV2Provider {
private final GtasksTokenValidator gtasksTokenValidator; private final GtasksTokenValidator gtasksTokenValidator;
private final GtasksMetadata gtasksMetadataFactory; private final GtasksMetadata gtasksMetadataFactory;
private final SyncExecutor executor; private final SyncExecutor executor;
private final TaskDeleter taskDeleter;
@Inject @Inject
public GtasksSyncV2Provider(TaskService taskService, MetadataService metadataService, StoreObjectDao storeObjectDao, GtasksPreferenceService gtasksPreferenceService, public GtasksSyncV2Provider(TaskService taskService, MetadataService metadataService, StoreObjectDao storeObjectDao, GtasksPreferenceService gtasksPreferenceService,
GtasksSyncService gtasksSyncService, GtasksListService gtasksListService, GtasksMetadataService gtasksMetadataService, GtasksSyncService gtasksSyncService, GtasksListService gtasksListService, GtasksMetadataService gtasksMetadataService,
GtasksTaskListUpdater gtasksTaskListUpdater, @ForApplication Context context, Preferences preferences, GtasksTaskListUpdater gtasksTaskListUpdater, @ForApplication Context context, Preferences preferences,
GtasksTokenValidator gtasksTokenValidator, GtasksMetadata gtasksMetadata, SyncExecutor executor) { GtasksTokenValidator gtasksTokenValidator, GtasksMetadata gtasksMetadata, SyncExecutor executor, TaskDeleter taskDeleter) {
this.taskService = taskService; this.taskService = taskService;
this.metadataService = metadataService; this.metadataService = metadataService;
this.storeObjectDao = storeObjectDao; this.storeObjectDao = storeObjectDao;
@ -93,6 +95,7 @@ public class GtasksSyncV2Provider extends SyncV2Provider {
this.gtasksTokenValidator = gtasksTokenValidator; this.gtasksTokenValidator = gtasksTokenValidator;
this.gtasksMetadataFactory = gtasksMetadata; this.gtasksMetadataFactory = gtasksMetadata;
this.executor = executor; this.executor = executor;
this.taskDeleter = taskDeleter;
} }
@Override @Override
@ -280,7 +283,7 @@ public class GtasksSyncV2Provider extends SyncV2Provider {
Criterion delete = Criterion.and(Metadata.KEY.eq(GtasksMetadata.METADATA_KEY), Criterion delete = Criterion.and(Metadata.KEY.eq(GtasksMetadata.METADATA_KEY),
GtasksMetadata.LIST_ID.eq(listId), GtasksMetadata.LIST_ID.eq(listId),
Criterion.not(Metadata.TASK.in(localIdArray))); Criterion.not(Metadata.TASK.in(localIdArray)));
taskService.deleteWhere( taskDeleter.deleteWhere(
Task.ID.in(Query.select(Metadata.TASK).from(Metadata.TABLE). Task.ID.in(Query.select(Metadata.TASK).from(Metadata.TABLE).
where(delete))); where(delete)));
metadataService.deleteWhere(delete); metadataService.deleteWhere(delete);

@ -31,8 +31,12 @@ import android.widget.LinearLayout;
import android.widget.TextView; import android.widget.TextView;
import android.widget.TextView.OnEditorActionListener; import android.widget.TextView.OnEditorActionListener;
import com.todoroo.andlib.data.Property;
import com.todoroo.andlib.data.TodorooCursor; import com.todoroo.andlib.data.TodorooCursor;
import com.todoroo.andlib.sql.Criterion;
import com.todoroo.andlib.sql.Order;
import com.todoroo.andlib.sql.Query; import com.todoroo.andlib.sql.Query;
import com.todoroo.andlib.utility.AndroidUtilities;
import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.astrid.actfm.ActFmCameraModule; import com.todoroo.astrid.actfm.ActFmCameraModule;
import com.todoroo.astrid.actfm.ActFmCameraModule.CameraResultCallback; import com.todoroo.astrid.actfm.ActFmCameraModule.CameraResultCallback;
@ -67,7 +71,22 @@ import static org.tasks.files.ImageHelper.sampleBitmap;
public class EditNoteActivity extends LinearLayout implements TimerActionListener { public class EditNoteActivity extends LinearLayout implements TimerActionListener {
private static final int TYPE_PROPERTY_INDEX = TaskService.USER_ACTIVITY_PROPERTIES.length - 1; private static final Property.StringProperty ACTIVITY_TYPE_PROPERTY = new Property.StringProperty(null, "'" + NameMaps.TABLE_ID_USER_ACTIVITY + "' as type"); //$NON-NLS-1$//$NON-NLS-2$
private static final Property<?>[] USER_ACTIVITY_PROPERTIES = {
UserActivity.CREATED_AT,
UserActivity.UUID,
UserActivity.ACTION,
UserActivity.MESSAGE,
UserActivity.TARGET_ID,
UserActivity.TARGET_NAME,
UserActivity.PICTURE,
UserActivity.USER_UUID,
UserActivity.ID,
ACTIVITY_TYPE_PROPERTY,
};
private static final int TYPE_PROPERTY_INDEX = USER_ACTIVITY_PROPERTIES.length - 1;
private Task task; private Task task;
@ -275,7 +294,7 @@ public class EditNoteActivity extends LinearLayout implements TimerActionListene
notes.close(); notes.close();
} }
TodorooCursor<UserActivity> updates = taskService.getActivityForTask(task); TodorooCursor<UserActivity> updates = getActivityForTask(task);
try { try {
UserActivity update = new UserActivity(); UserActivity update = new UserActivity();
for(updates.moveToFirst(); !updates.isAfterLast(); updates.moveToNext()) { for(updates.moveToFirst(); !updates.isAfterLast(); updates.moveToNext()) {
@ -334,6 +353,15 @@ public class EditNoteActivity extends LinearLayout implements TimerActionListene
} }
} }
public TodorooCursor<UserActivity> getActivityForTask(Task task) {
Query taskQuery = Query.select(AndroidUtilities.addToArray(Property.class, USER_ACTIVITY_PROPERTIES))
.where(Criterion.and(UserActivity.ACTION.eq(UserActivity.ACTION_TASK_COMMENT), UserActivity.TARGET_ID.eq(task.getUuid()), UserActivity.DELETED_AT.eq(0)));
Query resultQuery = taskQuery.orderBy(Order.desc("1")); //$NON-NLS-1$
return userActivityDao.query(resultQuery);
}
private static void readUserActivityProperties(TodorooCursor<UserActivity> unionCursor, UserActivity activity) { private static void readUserActivityProperties(TodorooCursor<UserActivity> unionCursor, UserActivity activity) {
activity.setCreatedAt(unionCursor.getLong(0)); activity.setCreatedAt(unionCursor.getLong(0));
activity.setUUID(unionCursor.getString(1)); activity.setUUID(unionCursor.getString(1));

@ -78,6 +78,7 @@ public class StartupService {
private final Preferences preferences; private final Preferences preferences;
private final TasksXmlImporter xmlImporter; private final TasksXmlImporter xmlImporter;
private final CalendarAlarmScheduler calendarAlarmScheduler; private final CalendarAlarmScheduler calendarAlarmScheduler;
private final TaskDeleter taskDeleter;
@Inject @Inject
public StartupService(UpgradeService upgradeService, TaskService taskService, public StartupService(UpgradeService upgradeService, TaskService taskService,
@ -85,7 +86,7 @@ public class StartupService {
GtasksPreferenceService gtasksPreferenceService, GtasksPreferenceService gtasksPreferenceService,
GtasksSyncService gtasksSyncService, MetadataService metadataService, GtasksSyncService gtasksSyncService, MetadataService metadataService,
Preferences preferences, TasksXmlImporter xmlImporter, Preferences preferences, TasksXmlImporter xmlImporter,
CalendarAlarmScheduler calendarAlarmScheduler) { CalendarAlarmScheduler calendarAlarmScheduler, TaskDeleter taskDeleter) {
this.upgradeService = upgradeService; this.upgradeService = upgradeService;
this.taskService = taskService; this.taskService = taskService;
this.tagDataDao = tagDataDao; this.tagDataDao = tagDataDao;
@ -96,6 +97,7 @@ public class StartupService {
this.preferences = preferences; this.preferences = preferences;
this.xmlImporter = xmlImporter; this.xmlImporter = xmlImporter;
this.calendarAlarmScheduler = calendarAlarmScheduler; this.calendarAlarmScheduler = calendarAlarmScheduler;
this.taskDeleter = taskDeleter;
} }
/** /**
@ -178,7 +180,7 @@ public class StartupService {
new Thread(new Runnable() { new Thread(new Runnable() {
@Override @Override
public void run() { public void run() {
taskService.cleanup(); taskDeleter.deleteTasksWithEmptyTitles();
// if sync ongoing flag was set, clear it // if sync ongoing flag was set, clear it
gtasksPreferenceService.stopOngoing(); gtasksPreferenceService.stopOngoing();

@ -1,5 +1,8 @@
package com.todoroo.astrid.service; package com.todoroo.astrid.service;
import com.todoroo.andlib.data.TodorooCursor;
import com.todoroo.andlib.sql.Criterion;
import com.todoroo.andlib.sql.Query;
import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.Task;
@ -20,6 +23,44 @@ public class TaskDeleter {
this.taskDao = taskDao; this.taskDao = taskDao;
} }
/**
* Clean up tasks. Typically called on startup
*/
public void deleteTasksWithEmptyTitles() {
TodorooCursor<Task> cursor = taskDao.query(
Query.select(Task.ID).where(TaskDao.TaskCriteria.hasNoTitle()));
try {
if(cursor.getCount() == 0) {
return;
}
for(cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
long id = cursor.getLong(0);
taskDao.delete(id);
}
} finally {
cursor.close();
}
}
public int purgeDeletedTasks() {
return deleteWhere(Task.DELETION_DATE.gt(0));
}
/**
* Delete all tasks matching a given criterion
*/
public int deleteWhere(Criterion criteria) {
return taskDao.deleteWhere(criteria);
}
/**
* Permanently delete the given task.
*/
public void purge(long taskId) {
taskDao.delete(taskId);
}
public void delete(Task item) { public void delete(Task item) {
if(!item.isSaved()) { if(!item.isSaved()) {
return; return;

@ -12,20 +12,15 @@ import com.todoroo.andlib.data.Property;
import com.todoroo.andlib.data.TodorooCursor; import com.todoroo.andlib.data.TodorooCursor;
import com.todoroo.andlib.sql.Criterion; import com.todoroo.andlib.sql.Criterion;
import com.todoroo.andlib.sql.Functions; import com.todoroo.andlib.sql.Functions;
import com.todoroo.andlib.sql.Order;
import com.todoroo.andlib.sql.Query; import com.todoroo.andlib.sql.Query;
import com.todoroo.andlib.utility.AndroidUtilities; import com.todoroo.andlib.utility.AndroidUtilities;
import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.astrid.actfm.sync.messages.NameMaps;
import com.todoroo.astrid.api.AstridApiConstants; import com.todoroo.astrid.api.AstridApiConstants;
import com.todoroo.astrid.api.PermaSql; import com.todoroo.astrid.api.PermaSql;
import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.dao.TaskDao.TaskCriteria;
import com.todoroo.astrid.dao.UserActivityDao;
import com.todoroo.astrid.data.Metadata; import com.todoroo.astrid.data.Metadata;
import com.todoroo.astrid.data.RemoteModel; import com.todoroo.astrid.data.RemoteModel;
import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.data.UserActivity;
import com.todoroo.astrid.tags.TagService; import com.todoroo.astrid.tags.TagService;
import com.todoroo.astrid.tags.TaskToTagMetadata; import com.todoroo.astrid.tags.TaskToTagMetadata;
import com.todoroo.astrid.utility.TitleParser; import com.todoroo.astrid.utility.TitleParser;
@ -53,21 +48,6 @@ import javax.inject.Singleton;
@Singleton @Singleton
public class TaskService { public class TaskService {
private static final Property.StringProperty ACTIVITY_TYPE_PROPERTY = new Property.StringProperty(null, "'" + NameMaps.TABLE_ID_USER_ACTIVITY + "' as type"); //$NON-NLS-1$//$NON-NLS-2$
public static final Property<?>[] USER_ACTIVITY_PROPERTIES = {
UserActivity.CREATED_AT,
UserActivity.UUID,
UserActivity.ACTION,
UserActivity.MESSAGE,
UserActivity.TARGET_ID,
UserActivity.TARGET_NAME,
UserActivity.PICTURE,
UserActivity.USER_UUID,
UserActivity.ID,
ACTIVITY_TYPE_PROPERTY,
};
private static final Logger log = LoggerFactory.getLogger(TaskService.class); private static final Logger log = LoggerFactory.getLogger(TaskService.class);
public static final String TRANS_QUICK_ADD_MARKUP = "markup"; //$NON-NLS-1$ public static final String TRANS_QUICK_ADD_MARKUP = "markup"; //$NON-NLS-1$
@ -81,18 +61,15 @@ public class TaskService {
public static final String TRANS_REPEAT_COMPLETE = "repeat-complete"; //$NON-NLS-1$ public static final String TRANS_REPEAT_COMPLETE = "repeat-complete"; //$NON-NLS-1$
private final TaskDao taskDao; private final TaskDao taskDao;
private final UserActivityDao userActivityDao;
private final Broadcaster broadcaster; private final Broadcaster broadcaster;
private final FilterCounter filterCounter; private final FilterCounter filterCounter;
private final RefreshScheduler refreshScheduler; private final RefreshScheduler refreshScheduler;
private final TagService tagService; private final TagService tagService;
@Inject @Inject
public TaskService(TaskDao taskDao, UserActivityDao userActivityDao, public TaskService(TaskDao taskDao, Broadcaster broadcaster, FilterCounter filterCounter,
Broadcaster broadcaster, FilterCounter filterCounter,
RefreshScheduler refreshScheduler, TagService tagService) { RefreshScheduler refreshScheduler, TagService tagService) {
this.taskDao = taskDao; this.taskDao = taskDao;
this.userActivityDao = userActivityDao;
this.broadcaster = broadcaster; this.broadcaster = broadcaster;
this.filterCounter = filterCounter; this.filterCounter = filterCounter;
this.refreshScheduler = refreshScheduler; this.refreshScheduler = refreshScheduler;
@ -141,33 +118,6 @@ public class TaskService {
taskDao.save(item); taskDao.save(item);
} }
/**
* Permanently delete the given task.
*/
public void purge(long taskId) {
taskDao.delete(taskId);
}
/**
* Clean up tasks. Typically called on startup
*/
public void cleanup() {
TodorooCursor<Task> cursor = taskDao.query(
Query.select(Task.ID).where(TaskCriteria.hasNoTitle()));
try {
if(cursor.getCount() == 0) {
return;
}
for(cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
long id = cursor.getLong(0);
taskDao.delete(id);
}
} finally {
cursor.close();
}
}
/** /**
* Fetch tasks for the given filter * Fetch tasks for the given filter
* @param constraint text constraint, or null * @param constraint text constraint, or null
@ -267,13 +217,6 @@ public class TaskService {
} }
} }
/**
* Delete all tasks matching a given criterion
*/
public int deleteWhere(Criterion criteria) {
return taskDao.deleteWhere(criteria);
}
/** /**
* Save task, parsing quick-add mark-up: * Save task, parsing quick-add mark-up:
* <ul> * <ul>
@ -379,17 +322,4 @@ public class TaskService {
return task; return task;
} }
public TodorooCursor<UserActivity> getActivityForTask(Task task) {
Query taskQuery = queryForTask(task, USER_ACTIVITY_PROPERTIES);
Query resultQuery = taskQuery.orderBy(Order.desc("1")); //$NON-NLS-1$
return userActivityDao.query(resultQuery);
}
private static Query queryForTask(Task task, Property<?>[] activityProperties) {
return Query.select(AndroidUtilities.addToArray(Property.class, activityProperties))
.where(Criterion.and(UserActivity.ACTION.eq(UserActivity.ACTION_TASK_COMMENT), UserActivity.TARGET_ID.eq(task.getUuid()), UserActivity.DELETED_AT.eq(0)));
}
} }

Loading…
Cancel
Save