mirror of
https://github.com/SimpleMobileTools/Simple-Calendar.git
synced 2025-06-05 21:59:17 +02:00
delete redundant local google sync events when appropriate
This commit is contained in:
@ -113,7 +113,7 @@ class SettingsActivity : SimpleActivity() {
|
|||||||
settings_google_sync_holder.setOnClickListener {
|
settings_google_sync_holder.setOnClickListener {
|
||||||
if (config.googleSync) {
|
if (config.googleSync) {
|
||||||
ConfirmationDialog(this, getString(R.string.google_sync_disabling), positive = R.string.ok, negative = R.string.cancel) {
|
ConfirmationDialog(this, getString(R.string.google_sync_disabling), positive = R.string.ok, negative = R.string.cancel) {
|
||||||
dbHelper.deleteGoogleSyncEvents()
|
dbHelper.deleteAllGoogleSyncEvents()
|
||||||
toggleGoogleSync()
|
toggleGoogleSync()
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -62,7 +62,9 @@ class FetchGoogleEventsTask(val activity: Activity, val googleSyncListener: Goog
|
|||||||
for ((key, value) in events) {
|
for ((key, value) in events) {
|
||||||
if (key == ITEMS) {
|
if (key == ITEMS) {
|
||||||
eventTypes = dbHelper.fetchEventTypes()
|
eventTypes = dbHelper.fetchEventTypes()
|
||||||
parseEvents(value.toString())
|
val localGoogleEvents = dbHelper.getGoogleSyncEvents()
|
||||||
|
val remoteGoogleEvents = parseEvents(value.toString())
|
||||||
|
removeRedundantLocalEvents(localGoogleEvents, remoteGoogleEvents)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -74,18 +76,20 @@ class FetchGoogleEventsTask(val activity: Activity, val googleSyncListener: Goog
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun parseEvents(json: String) {
|
private fun parseEvents(json: String): ArrayList<String> {
|
||||||
|
val remoteImportIds = ArrayList<String>()
|
||||||
var updateEvent = false
|
var updateEvent = false
|
||||||
var eventId = 0
|
var eventId = 0
|
||||||
val importIDs = activity.dbHelper.getImportIds()
|
val importIDs = activity.dbHelper.getImportIds()
|
||||||
val token = object : TypeToken<List<GoogleEvent>>() {}.type
|
val token = object : TypeToken<List<GoogleEvent>>() {}.type
|
||||||
val googleEvents = Gson().fromJson<ArrayList<GoogleEvent>>(json, token) ?: ArrayList<GoogleEvent>(8)
|
val googleEvents = Gson().fromJson<ArrayList<GoogleEvent>>(json, token) ?: ArrayList<GoogleEvent>(8)
|
||||||
for (googleEvent in googleEvents) {
|
for (googleEvent in googleEvents) {
|
||||||
|
val importId = googleEvent.id
|
||||||
|
remoteImportIds.add(importId)
|
||||||
if (googleEvent.status != CONFIRMED)
|
if (googleEvent.status != CONFIRMED)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
val lastUpdate = DateTime(googleEvent.updated).millis
|
val lastUpdate = DateTime(googleEvent.updated).millis
|
||||||
val importId = googleEvent.id
|
|
||||||
if (importIDs.contains(importId)) {
|
if (importIDs.contains(importId)) {
|
||||||
val oldEvent = dbHelper.getEventWithImportId(importId)
|
val oldEvent = dbHelper.getEventWithImportId(importId)
|
||||||
if (oldEvent != null) {
|
if (oldEvent != null) {
|
||||||
@ -132,6 +136,13 @@ class FetchGoogleEventsTask(val activity: Activity, val googleSyncListener: Goog
|
|||||||
dbHelper.insert(event) {}
|
dbHelper.insert(event) {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return remoteImportIds
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun removeRedundantLocalEvents(localGoogleEvents: List<Event>, remoteGoogleEvents: ArrayList<String>) {
|
||||||
|
val filtered = localGoogleEvents.filter { !remoteGoogleEvents.contains(it.importId) }
|
||||||
|
val filteredIds = Array(filtered.size, { i -> (filtered[i].id.toString()) })
|
||||||
|
dbHelper.deleteEvents(filteredIds, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getEventTypeId(colorId: Int): Int {
|
private fun getEventTypeId(colorId: Int): Int {
|
||||||
|
@ -345,7 +345,7 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
|
|||||||
context.cancelNotification(it.toInt())
|
context.cancelNotification(it.toInt())
|
||||||
}
|
}
|
||||||
|
|
||||||
deleteChildEvents(args)
|
deleteChildEvents(args, deleteFromGoogle)
|
||||||
if (deleteFromGoogle) {
|
if (deleteFromGoogle) {
|
||||||
importIDs.forEach {
|
importIDs.forEach {
|
||||||
Thread({
|
Thread({
|
||||||
@ -360,7 +360,7 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun deleteChildEvents(ids: String) {
|
private fun deleteChildEvents(ids: String, deleteFromGoogle: Boolean) {
|
||||||
val projection = arrayOf(COL_ID)
|
val projection = arrayOf(COL_ID)
|
||||||
val selection = "$COL_PARENT_EVENT_ID IN ($ids)"
|
val selection = "$COL_PARENT_EVENT_ID IN ($ids)"
|
||||||
val childIds = ArrayList<String>()
|
val childIds = ArrayList<String>()
|
||||||
@ -378,7 +378,7 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (childIds.isNotEmpty())
|
if (childIds.isNotEmpty())
|
||||||
deleteEvents(childIds.toTypedArray())
|
deleteEvents(childIds.toTypedArray(), deleteFromGoogle)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getGoogleSyncEvents(): List<Event> {
|
fun getGoogleSyncEvents(): List<Event> {
|
||||||
@ -387,7 +387,7 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
|
|||||||
return fillEvents(cursor)
|
return fillEvents(cursor)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun deleteGoogleSyncEvents() {
|
fun deleteAllGoogleSyncEvents() {
|
||||||
val events = getGoogleSyncEvents()
|
val events = getGoogleSyncEvents()
|
||||||
val eventIDs = Array(events.size, { i -> (events[i].id.toString()) })
|
val eventIDs = Array(events.size, { i -> (events[i].id.toString()) })
|
||||||
deleteEvents(eventIDs, false)
|
deleteEvents(eventIDs, false)
|
||||||
|
Reference in New Issue
Block a user