Better check for infinite loop, slightly more detailed upgrade message

pull/14/head
Tim Su 13 years ago
parent c7e7458651
commit 0d67506434

@ -1,6 +1,7 @@
package com.todoroo.astrid.gtasks; package com.todoroo.astrid.gtasks;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.atomic.AtomicLong;
@ -133,25 +134,30 @@ public class GtasksTaskListUpdater extends OrderedListUpdater<StoreObject> {
} }
public void correctOrderAndIndentForList(String listId) { public void correctOrderAndIndentForList(String listId) {
orderAndIndentHelper(listId, new AtomicLong(0L), Task.NO_ID, 0); orderAndIndentHelper(listId, new AtomicLong(0L), Task.NO_ID, 0,
new HashSet<Long>());
} }
private void orderAndIndentHelper(String listId, AtomicLong order, long parent, int indentLevel) { private void orderAndIndentHelper(String listId, AtomicLong order, long parent, int indentLevel,
HashSet<Long> alreadyChecked) {
TodorooCursor<Metadata> metadata = metadataDao.query(Query.select(Metadata.PROPERTIES) TodorooCursor<Metadata> metadata = metadataDao.query(Query.select(Metadata.PROPERTIES)
.where(Criterion.and(Metadata.KEY.eq(GtasksMetadata.METADATA_KEY), .where(Criterion.and(Metadata.KEY.eq(GtasksMetadata.METADATA_KEY),
GtasksMetadata.LIST_ID.eq(listId), GtasksMetadata.PARENT_TASK.eq(parent), GtasksMetadata.LIST_ID.eq(listId), GtasksMetadata.PARENT_TASK.eq(parent)))
GtasksMetadata.INDENT.lt(indentLevel == 0 ? 1 : indentLevel)))
.orderBy(Order.asc(Functions.cast(GtasksMetadata.GTASKS_ORDER, "INTEGER")))); //$NON-NLS-1$ .orderBy(Order.asc(Functions.cast(GtasksMetadata.GTASKS_ORDER, "INTEGER")))); //$NON-NLS-1$
try { try {
if (metadata.getCount() > 0) { if (metadata.getCount() > 0) {
Metadata curr = new Metadata(); Metadata curr = new Metadata();
for (metadata.moveToFirst(); !metadata.isAfterLast(); metadata.moveToNext()) { for (metadata.moveToFirst(); !metadata.isAfterLast(); metadata.moveToNext()) {
curr.readFromCursor(metadata); curr.readFromCursor(metadata);
if(alreadyChecked.contains(curr.getValue(Metadata.TASK)))
continue;
curr.setValue(GtasksMetadata.INDENT, indentLevel); curr.setValue(GtasksMetadata.INDENT, indentLevel);
curr.setValue(GtasksMetadata.ORDER, order.getAndIncrement()); curr.setValue(GtasksMetadata.ORDER, order.getAndIncrement());
metadataDao.saveExisting(curr); metadataDao.saveExisting(curr);
alreadyChecked.add(curr.getValue(Metadata.TASK));
orderAndIndentHelper(listId, order, curr.getValue(Metadata.TASK), indentLevel + 1); orderAndIndentHelper(listId, order, curr.getValue(Metadata.TASK), indentLevel + 1, alreadyChecked);
} }
} }
} finally { } finally {

@ -184,7 +184,9 @@ public final class UpgradeService {
if (from >= V4_0_4 && from < V4_0_4_2) { if (from >= V4_0_4 && from < V4_0_4_2) {
newVersionString(changeLog, "4.0.4.2 (3/16/15)", new String[] { newVersionString(changeLog, "4.0.4.2 (3/16/15)", new String[] {
"Fixed a crash related to error reporting" "Fixed a crash that would occur during Google Tasks background sync.",
"Fixed infinite loop bug that would happen sometimes with dragging in Google Tasks.",
"Fixed other crashes that users have been experiencing."
}); });
} }

Loading…
Cancel
Save