Touch and sync instead of using AfterSaveWork

gtask_related_email
Alex Baker 6 years ago
parent 3f67ae76ff
commit 6feab18653

@ -1,14 +1,12 @@
package com.todoroo.astrid.adapter;
import static android.os.Build.VERSION_CODES.LOLLIPOP;
import static com.todoroo.andlib.utility.DateUtilities.now;
import androidx.annotation.RequiresApi;
import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.data.Task;
import org.tasks.data.SubsetCaldav;
import org.tasks.data.CaldavDao;
import org.tasks.data.CaldavTask;
import org.tasks.data.SubsetCaldav;
import org.tasks.data.TaskContainer;
import org.tasks.tasklist.ViewHolder;
@ -79,9 +77,7 @@ public final class CaldavTaskAdapter extends TaskAdapter {
changeParent(task, newParent);
Task update = task.getTask();
update.setModificationDate(now());
taskDao.save(update);
taskDao.touch(task.getId());
}
private void changeParent(TaskContainer task, long newParent) {

@ -1,10 +1,6 @@
package com.todoroo.astrid.adapter;
import static com.todoroo.andlib.utility.DateUtilities.now;
import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.data.SyncFlags;
import com.todoroo.astrid.data.Task;
import org.tasks.BuildConfig;
import org.tasks.data.GoogleTaskDao;
import org.tasks.data.SubsetGoogleTask;
@ -46,10 +42,7 @@ public final class GoogleTaskAdapter extends GoogleTaskManualSortAdapter {
newTasksOnTop ? 0 : googleTaskDao.getBottom(googleTask.getListId(), newParent));
}
Task update = task.getTask();
update.setModificationDate(now());
update.putTransitory(SyncFlags.FORCE_SYNC, true);
taskDao.save(update);
taskDao.touch(task.getId());
if (BuildConfig.DEBUG) {
googleTaskDao.validateSorting(task.getGoogleTaskList());

@ -1,10 +1,6 @@
package com.todoroo.astrid.adapter;
import static com.todoroo.andlib.utility.DateUtilities.now;
import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.data.SyncFlags;
import com.todoroo.astrid.data.Task;
import org.tasks.BuildConfig;
import org.tasks.data.GoogleTaskDao;
import org.tasks.data.SubsetGoogleTask;
@ -104,10 +100,7 @@ public class GoogleTaskManualSortAdapter extends TaskAdapter {
}
}
Task update = task.getTask();
update.setModificationDate(now());
update.putTransitory(SyncFlags.FORCE_SYNC, true);
taskDao.save(update);
taskDao.touch(task.getId());
if (BuildConfig.DEBUG) {
googleTaskDao.validateSorting(task.getGoogleTaskList());

@ -24,6 +24,7 @@ import androidx.room.Update;
import androidx.sqlite.db.SimpleSQLiteQuery;
import androidx.sqlite.db.SupportSQLiteDatabase;
import com.google.common.base.Joiner;
import com.google.common.collect.ImmutableList;
import com.todoroo.andlib.sql.Criterion;
import com.todoroo.andlib.sql.Field;
import com.todoroo.andlib.sql.Functions;
@ -168,8 +169,17 @@ public abstract class TaskDao {
public abstract DataSource.Factory<Integer, TaskContainer> getTaskFactory(
SimpleSQLiteQuery query);
@Query("UPDATE tasks SET modified = datetime('now', 'localtime') WHERE _id in (:ids)")
public abstract void touch(List<Long> ids);
public void touch(Long id) {
touch(ImmutableList.of(id));
}
public void touch(List<Long> ids) {
touchInternal(ids);
workManager.sync(false);
}
@Query("UPDATE tasks SET modified = strftime('%s','now')*1000 WHERE _id in (:ids)")
abstract void touchInternal(List<Long> ids);
@Query("UPDATE tasks SET collapsed = :collapsed WHERE _id = :id")
public abstract void setCollapsed(long id, boolean collapsed);
@ -196,7 +206,10 @@ public abstract class TaskDao {
// TODO: get rid of this super-hack
public void save(Task task, Task original) {
if (saveExisting(task, original)) {
if (!task.insignificantChange(original)) {
task.setModificationDate(now());
}
if (update(task) == 1) {
workManager.afterSave(task, original);
}
}
@ -219,13 +232,6 @@ public abstract class TaskDao {
task.setId(insert);
}
private boolean saveExisting(Task item, Task original) {
if (!item.insignificantChange(original)) {
item.setModificationDate(now());
}
return update(item) == 1;
}
@Query(
"SELECT * FROM tasks "
+ "WHERE completed = 0 AND deleted = 0 AND hideUntil < (strftime('%s','now')*1000) "

@ -20,13 +20,11 @@ import org.tasks.data.GoogleTask;
import org.tasks.data.GoogleTaskDao;
import org.tasks.data.GoogleTaskListDao;
import org.tasks.preferences.Preferences;
import org.tasks.sync.SyncAdapters;
public class TaskMover {
private final TaskDao taskDao;
private final CaldavDao caldavDao;
private final GoogleTaskDao googleTaskDao;
private final SyncAdapters syncAdapters;
private final GoogleTaskListDao googleTaskListDao;
private final Preferences preferences;
@ -35,35 +33,26 @@ public class TaskMover {
TaskDao taskDao,
CaldavDao caldavDao,
GoogleTaskDao googleTaskDao,
SyncAdapters syncAdapters,
GoogleTaskListDao googleTaskListDao,
Preferences preferences) {
this.taskDao = taskDao;
this.caldavDao = caldavDao;
this.googleTaskDao = googleTaskDao;
this.syncAdapters = syncAdapters;
this.googleTaskListDao = googleTaskListDao;
this.preferences = preferences;
}
public void move(Long task, Filter selectedList) {
move(singletonList(task), selectedList);
}
public void move(List<Long> tasks, Filter selectedList) {
tasks = newArrayList(tasks);
tasks.removeAll(googleTaskDao.findChildrenInList(tasks));
tasks.removeAll(caldavDao.findChildrenInList(tasks));
for (Task task : taskDao.fetch(tasks)) {
performMove(task, selectedList);
task.putTransitory(SyncFlags.GTASKS_SUPPRESS_SYNC, true);
task.setModificationDate(now());
taskDao.save(task);
}
if (selectedList instanceof CaldavFilter) {
caldavDao.updateParents((((CaldavFilter) selectedList).getUuid()));
}
syncAdapters.sync();
taskDao.touch(tasks);
}
public Filter getSingleFilter(List<Long> tasks) {

@ -21,6 +21,7 @@ import org.tasks.gtasks.GoogleTaskSynchronizer;
import org.tasks.injection.InjectingWorker;
import org.tasks.injection.JobComponent;
import org.tasks.preferences.Preferences;
import org.tasks.sync.SyncAdapters;
public class SyncWork extends InjectingWorker {
@ -33,6 +34,7 @@ public class SyncWork extends InjectingWorker {
@Inject Tracker tracker;
@Inject CaldavDao caldavDao;
@Inject GoogleTaskListDao googleTaskListDao;
@Inject SyncAdapters syncAdapters;
public SyncWork(@NonNull Context context, @NonNull WorkerParameters workerParams) {
super(context, workerParams);
@ -41,15 +43,28 @@ public class SyncWork extends InjectingWorker {
@NonNull
@Override
public Result run() {
if (!syncAdapters.isSyncEnabled()) {
return Result.success();
}
synchronized (LOCK) {
if (preferences.isSyncOngoing()) {
return Result.retry();
}
}
preferences.setSyncOngoing(true);
localBroadcastManager.broadcastRefresh();
try {
sync();
} catch (Exception e) {
tracker.reportException(e);
} finally {
preferences.setSyncOngoing(false);
localBroadcastManager.broadcastRefresh();
}
return Result.success();
}
private void sync() throws InterruptedException {
int numThreads = atLeastJellybeanMR1() ? Runtime.getRuntime().availableProcessors() : 2;
ExecutorService executor = newFixedThreadPool(numThreads);
@ -64,13 +79,6 @@ public class SyncWork extends InjectingWorker {
executor.shutdown();
executor.awaitTermination(15, TimeUnit.MINUTES);
} catch (Exception e) {
tracker.reportException(e);
} finally {
preferences.setSyncOngoing(false);
localBroadcastManager.broadcastRefresh();
}
return Result.success();
}
@Override

@ -14,6 +14,7 @@ import androidx.annotation.Nullable;
import butterknife.BindView;
import butterknife.OnClick;
import com.google.android.material.chip.Chip;
import com.google.common.collect.ImmutableList;
import com.todoroo.astrid.api.CaldavFilter;
import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.api.GtasksFilter;
@ -163,7 +164,7 @@ public class RemoteListFragment extends TaskEditControlFragment {
@Override
public void apply(Task task) {
taskMover.move(task.getId(), selectedList);
taskMover.move(ImmutableList.of(task.getId()), selectedList);
}
@Override

Loading…
Cancel
Save