diff --git a/AndroidManifest.xml b/AndroidManifest.xml index df4574b4f..e9e2edaa1 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -1,13 +1,13 @@ + android:versionCode="61" + android:versionName="2.0.0-rc2"> + android:value="61" /> diff --git a/res/values/strings.xml b/res/values/strings.xml index 2a05d9ba7..a59a859ee 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -225,7 +225,7 @@ Welcome to Astrid\'s RTM sync! - Notifications and repeats are not synchronized.\n - Moving tasks in RTM to another list and then renaming them causes dupes.\n - Deleting tasks in RTM is not detected.\n -- Synchronization is SLOW!\n +- Having ~50+ tasks in one list might cause that list to not be imported\n Wish me luck!\n Synchronize Now! diff --git a/src/com/timsu/astrid/activities/TaskListAdapter.java b/src/com/timsu/astrid/activities/TaskListAdapter.java index ce3955f00..775e56f12 100644 --- a/src/com/timsu/astrid/activities/TaskListAdapter.java +++ b/src/com/timsu/astrid/activities/TaskListAdapter.java @@ -185,14 +185,14 @@ public class TaskListAdapter extends ArrayAdapter { if(!task.isTaskCompleted() && task.getEstimatedSeconds() > 0) { int remaining = task.getEstimatedSeconds() - elapsed; remainingString = DateUtilities.getShortDurationString(r, - (int)Math.abs(remaining), 1) + " "; + (int)Math.abs(remaining), 1); if(remaining >= 0) remainingString += r.getString(R.string.taskList_remaining); else remainingString += r.getString(R.string.taskList_overtime); } else if(elapsed > 0) { remainingString = DateUtilities.getShortDurationString(r, - (int)Math.abs(elapsed), 1) + " " + + Math.abs(elapsed), 1) + r.getString(R.string.taskList_spent); } diff --git a/src/com/timsu/astrid/data/task/TaskController.java b/src/com/timsu/astrid/data/task/TaskController.java index 6ace154e9..bbfd4afda 100644 --- a/src/com/timsu/astrid/data/task/TaskController.java +++ b/src/com/timsu/astrid/data/task/TaskController.java @@ -316,12 +316,16 @@ public class TaskController extends AbstractController { AbstractTaskModel.PROGRESS_PERCENTAGE + " < "+ AbstractTaskModel.COMPLETE_PERCENTAGE, new String[] { name }, null, null, null, null); - if (cursor == null || cursor.getCount() == 0) - return null; - cursor.moveToFirst(); - TaskModelForSync model = new TaskModelForSync(cursor); - cursor.close(); - return model; + try { + if (cursor == null || cursor.getCount() == 0) + return null; + cursor.moveToFirst(); + TaskModelForSync model = new TaskModelForSync(cursor); + return model; + } finally { + if(cursor != null) + cursor.close(); + } } /** Returns a TaskModelForView corresponding to the given TaskIdentifier */ diff --git a/src/com/timsu/astrid/sync/RTMSyncService.java b/src/com/timsu/astrid/sync/RTMSyncService.java index d41267b45..c06ddc260 100644 --- a/src/com/timsu/astrid/sync/RTMSyncService.java +++ b/src/com/timsu/astrid/sync/RTMSyncService.java @@ -151,7 +151,6 @@ public class RTMSyncService extends SynchronizationService { // get RTM timeline final String timeline = rtmService.timelines_create(); - syncHandler.post(new ProgressUpdater(20, 100)); // load RTM lists RtmLists lists = rtmService.lists_getList(); @@ -163,24 +162,40 @@ public class RTMSyncService extends SynchronizationService { if(INBOX_LIST_NAME.equalsIgnoreCase(list.getName())) INBOX_LIST_NAME = list.getName(); } - syncHandler.post(new ProgressUpdater(40, 100)); // read all tasks + List remoteChanges = new LinkedList(); Date lastSyncDate = Preferences.getSyncRTMLastSync(activity); String filter = ""; if(lastSyncDate == null) // 1st time sync, just uncompleted tasks filter = "status:incomplete"; - RtmTasks tasks = rtmService.tasks_getList(null, filter, lastSyncDate); - syncHandler.post(new ProgressUpdater(100, 100)); + int progress = 0; + for(final String listId : listIdToNameMap.keySet()) { + RtmTasks tasks; + try { + tasks = rtmService.tasks_getList(listId, filter, lastSyncDate); + } catch (Exception e) { + syncHandler.post(new Runnable() { + @Override + public void run() { + DialogUtilities.okDialog(activity, + "List " + listIdToNameMap.get(listId) + + " import failed (too big?)", null); + } + }); + continue; + } - List remoteChanges = new LinkedList(); - for(RtmTaskList taskList : tasks.getLists()) { - for(RtmTaskSeries taskSeries : taskList.getSeries()) { - TaskProxy remoteTask = parseRemoteTask(taskList.getId(), taskSeries); - remoteChanges.add(remoteTask); + for(RtmTaskList taskList : tasks.getLists()) { + for(RtmTaskSeries taskSeries : taskList.getSeries()) { + TaskProxy remoteTask = parseRemoteTask(taskList.getId(), taskSeries); + remoteChanges.add(remoteTask); + } } + syncHandler.post(new ProgressUpdater(++progress, listIdToNameMap.size())); } + synchronizeTasks(activity, remoteChanges, new SynchronizeHelper() { @Override public String createTask(String listName) throws IOException { diff --git a/src/com/timsu/astrid/sync/SynchronizationService.java b/src/com/timsu/astrid/sync/SynchronizationService.java index 08b6a35fe..490983057 100644 --- a/src/com/timsu/astrid/sync/SynchronizationService.java +++ b/src/com/timsu/astrid/sync/SynchronizationService.java @@ -363,13 +363,23 @@ public abstract class SynchronizationService { stats.localUpdatedTasks++; if(mapping == null) { - mapping = new SyncMapping(task.getTaskIdentifier(), remoteTask); - syncController.saveSyncMapping(mapping); + // try looking for this task + mapping = localIdToSyncMapping.get(task.getTaskIdentifier()); + if(mapping == null) { + try { + mapping = new SyncMapping(task.getTaskIdentifier(), remoteTask); + syncController.saveSyncMapping(mapping); + } catch (Exception e) { + // ignore - it'll get merged later + } + } stats.localCreatedTasks++; } Notifications.updateAlarm(activity, taskController, alertController, task); + syncHandler.post(new ProgressUpdater(stats.localUpdatedTasks, + remoteTasks.size())); } stats.localUpdatedTasks -= stats.localCreatedTasks; diff --git a/src/com/timsu/astrid/utilities/DateUtilities.java b/src/com/timsu/astrid/utilities/DateUtilities.java index 95c2dd4a9..bd9dc0884 100644 --- a/src/com/timsu/astrid/utilities/DateUtilities.java +++ b/src/com/timsu/astrid/utilities/DateUtilities.java @@ -112,7 +112,7 @@ public class DateUtilities { result.append(minutes).append(" m "); unitsDisplayed++; } - if(unitsDisplayed < unitsToShow && seconds < 0) { + if(unitsDisplayed < unitsToShow && seconds > 0) { result.append(hours).append(" s "); }