From 546b68ad2d2f558e261bbc8b48c4469d1e1b0d35 Mon Sep 17 00:00:00 2001 From: Andreas Shimokawa Date: Wed, 19 Apr 2017 14:52:07 +0200 Subject: [PATCH] Calendar Sync: detect changed events by hash code --- .../gadgetbridge/daogen/GBDaoGenerator.java | 2 +- .../externalevents/CalendarReceiver.java | 19 ++++++++----------- 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/GBDaoGenerator/src/nodomain/freeyourgadget/gadgetbridge/daogen/GBDaoGenerator.java b/GBDaoGenerator/src/nodomain/freeyourgadget/gadgetbridge/daogen/GBDaoGenerator.java index 12c5ff3f..4820d938 100644 --- a/GBDaoGenerator/src/nodomain/freeyourgadget/gadgetbridge/daogen/GBDaoGenerator.java +++ b/GBDaoGenerator/src/nodomain/freeyourgadget/gadgetbridge/daogen/GBDaoGenerator.java @@ -282,7 +282,7 @@ public class GBDaoGenerator { indexUnique.makeUnique(); calendarSyncState.addIndex(indexUnique); calendarSyncState.addToOne(device, deviceId); - calendarSyncState.addIntProperty("syncState").notNull(); + calendarSyncState.addIntProperty("hash").notNull(); } private static Property findProperty(Entity entity, String propertyName) { diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/CalendarReceiver.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/CalendarReceiver.java index 4918e695..b46ad414 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/CalendarReceiver.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/CalendarReceiver.java @@ -113,8 +113,11 @@ public class CalendarReceiver extends BroadcastReceiver { .build().unique(); if (calendarSyncState == null) { eventState.put(e.getId(), new EventSyncState(e, EventState.NOT_SYNCED)); - } else { - eventState.put(e.getId(), new EventSyncState(e, calendarSyncState.getSyncState())); + } else if (calendarSyncState.getHash() == e.hashCode()) { + eventState.put(e.getId(), new EventSyncState(e, EventState.NEEDS_UPDATE)); + } + else { + eventState.put(e.getId(), new EventSyncState(e, EventState.SYNCED)); } } } @@ -123,7 +126,7 @@ public class CalendarReceiver extends BroadcastReceiver { List CalendarSyncStateList = qb.where(CalendarSyncStateDao.Properties.DeviceId.eq(deviceId)).build().list(); for (CalendarSyncState CalendarSyncState : CalendarSyncStateList) { if (!eventState.containsKey(CalendarSyncState.getCalendarEntryId())) { - eventState.put(CalendarSyncState.getCalendarEntryId(), new EventSyncState(null, CalendarSyncState.getSyncState())); + eventState.put(CalendarSyncState.getCalendarEntryId(), new EventSyncState(null, EventState.NEEDS_DELETE)); LOG.info("insert null event for orphanded calendar id=" + CalendarSyncState.getCalendarEntryId() + " for device=" + mGBDevice.getName()); } } @@ -137,12 +140,6 @@ public class CalendarReceiver extends BroadcastReceiver { if (es.getState() == EventState.SYNCED) { if (!es.getEvent().equals(eventTable.get(i))) { eventState.put(i, new EventSyncState(eventTable.get(i), EventState.NEEDS_UPDATE)); - // update sync status of that Calendar entry in DB for all devices - CalendarSyncStateList = qb.where(CalendarSyncStateDao.Properties.CalendarEntryId.eq(i)).build().list(); - for (CalendarSyncState CalendarSyncState : CalendarSyncStateList) { - CalendarSyncState.setSyncState(EventState.NEEDS_UPDATE); - CalendarSyncState.update(); - } } } } else { @@ -160,7 +157,7 @@ public class CalendarReceiver extends BroadcastReceiver { } } catch (Exception e) { e.printStackTrace(); - GB.toast("Datebase Error while syncing Calendar", Toast.LENGTH_SHORT, GB.ERROR); + GB.toast("Database Error while syncing Calendar", Toast.LENGTH_SHORT, GB.ERROR); } } @@ -187,7 +184,7 @@ public class CalendarReceiver extends BroadcastReceiver { es.setState(EventState.SYNCED); eventState.put(i, es); // update db - session.insertOrReplace(new CalendarSyncState(null, deviceId, i, EventState.SYNCED)); + session.insertOrReplace(new CalendarSyncState(null, deviceId, i, es.event.hashCode())); } else if (syncState == EventState.NEEDS_DELETE) { GBApplication.deviceService().onDeleteCalendarEvent(CalendarEventSpec.TYPE_UNKNOWN, i); eventState.remove(i);