mirror of
https://github.com/SimpleMobileTools/Simple-Calendar.git
synced 2025-06-05 21:59:17 +02:00
parsing a couple more fields at google calendar events
This commit is contained in:
@@ -11,13 +11,13 @@ import com.google.gson.JsonObject
|
|||||||
import com.google.gson.reflect.TypeToken
|
import com.google.gson.reflect.TypeToken
|
||||||
import com.simplemobiletools.calendar.R
|
import com.simplemobiletools.calendar.R
|
||||||
import com.simplemobiletools.calendar.activities.SettingsActivity
|
import com.simplemobiletools.calendar.activities.SettingsActivity
|
||||||
|
import com.simplemobiletools.calendar.extensions.config
|
||||||
|
import com.simplemobiletools.calendar.extensions.dbHelper
|
||||||
import com.simplemobiletools.calendar.extensions.seconds
|
import com.simplemobiletools.calendar.extensions.seconds
|
||||||
|
import com.simplemobiletools.calendar.helpers.FLAG_ALL_DAY
|
||||||
import com.simplemobiletools.calendar.helpers.Parser
|
import com.simplemobiletools.calendar.helpers.Parser
|
||||||
import com.simplemobiletools.calendar.helpers.RRULE
|
import com.simplemobiletools.calendar.helpers.RRULE
|
||||||
import com.simplemobiletools.calendar.models.Event
|
import com.simplemobiletools.calendar.models.*
|
||||||
import com.simplemobiletools.calendar.models.GoogleEvent
|
|
||||||
import com.simplemobiletools.calendar.models.GoogleEventReminder
|
|
||||||
import com.simplemobiletools.calendar.models.RepeatRule
|
|
||||||
import org.joda.time.DateTime
|
import org.joda.time.DateTime
|
||||||
|
|
||||||
// more info about event fields at https://developers.google.com/google-apps/calendar/v3/reference/events/insert
|
// more info about event fields at https://developers.google.com/google-apps/calendar/v3/reference/events/insert
|
||||||
@@ -31,6 +31,7 @@ class FetchGoogleEventsTask(val activity: Activity, credential: GoogleAccountCre
|
|||||||
|
|
||||||
private var service: com.google.api.services.calendar.Calendar
|
private var service: com.google.api.services.calendar.Calendar
|
||||||
private var lastError: Exception? = null
|
private var lastError: Exception? = null
|
||||||
|
private var dbHelper = activity.dbHelper
|
||||||
|
|
||||||
init {
|
init {
|
||||||
val transport = AndroidHttp.newCompatibleTransport()
|
val transport = AndroidHttp.newCompatibleTransport()
|
||||||
@@ -59,7 +60,9 @@ class FetchGoogleEventsTask(val activity: Activity, credential: GoogleAccountCre
|
|||||||
|
|
||||||
for (event in events) {
|
for (event in events) {
|
||||||
if (event.key == ITEMS) {
|
if (event.key == ITEMS) {
|
||||||
val parsed = parseEvents(event.value.toString())
|
dbHelper.getEventTypes {
|
||||||
|
parseEvents(event.value.toString(), it)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -73,7 +76,7 @@ class FetchGoogleEventsTask(val activity: Activity, credential: GoogleAccountCre
|
|||||||
return parsedEvents
|
return parsedEvents
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun parseEvents(json: String): List<Event> {
|
private fun parseEvents(json: String, eventTypes: ArrayList<EventType>): List<Event> {
|
||||||
val events = ArrayList<Event>()
|
val events = ArrayList<Event>()
|
||||||
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)
|
||||||
@@ -86,22 +89,36 @@ class FetchGoogleEventsTask(val activity: Activity, credential: GoogleAccountCre
|
|||||||
val end = googleEvent.end
|
val end = googleEvent.end
|
||||||
var startTS: Int
|
var startTS: Int
|
||||||
var endTS: Int
|
var endTS: Int
|
||||||
|
var flags = 0
|
||||||
|
var eventTypeId = -1
|
||||||
|
val eventType = "google_${googleEvent.colorId}"
|
||||||
|
eventTypes.forEach {
|
||||||
|
if (it.title.toLowerCase() == eventType)
|
||||||
|
eventTypeId = it.id
|
||||||
|
}
|
||||||
|
|
||||||
|
if (eventTypeId == -1) {
|
||||||
|
eventTypeId = dbHelper.insertEventType(EventType(0, eventType, activity.config.primaryColor))
|
||||||
|
}
|
||||||
|
|
||||||
if (start.date != null) {
|
if (start.date != null) {
|
||||||
startTS = DateTime(start.date).withHourOfDay(1).seconds()
|
startTS = DateTime(start.date).withHourOfDay(1).seconds()
|
||||||
endTS = DateTime(end.date).withHourOfDay(1).seconds()
|
endTS = DateTime(end.date).withHourOfDay(1).seconds()
|
||||||
|
flags = flags or FLAG_ALL_DAY
|
||||||
} else {
|
} else {
|
||||||
startTS = DateTime(start.dateTime).seconds()
|
startTS = DateTime(start.dateTime).seconds()
|
||||||
endTS = DateTime(end.dateTime).seconds()
|
endTS = DateTime(end.dateTime).seconds()
|
||||||
}
|
}
|
||||||
|
|
||||||
val recurrence = googleEvent.recurrence.firstOrNull()
|
val recurrence = googleEvent.recurrence?.firstOrNull()
|
||||||
var repeatRule = RepeatRule(0, 0, 0)
|
var repeatRule = RepeatRule(0, 0, 0)
|
||||||
if (recurrence != null) {
|
if (recurrence != null) {
|
||||||
repeatRule = Parser().parseRepeatInterval(recurrence.toString().trim('\"').substring(RRULE.length), startTS)
|
repeatRule = Parser().parseRepeatInterval(recurrence.toString().trim('\"').substring(RRULE.length), startTS)
|
||||||
}
|
}
|
||||||
|
|
||||||
Event(0, startTS, endTS, googleEvent.summary, googleEvent.description, reminders.getOrElse(0, { -1 }), reminders.getOrElse(1, { -1 }),
|
Event(0, startTS, endTS, googleEvent.summary, googleEvent.description, reminders.getOrElse(0, { -1 }), reminders.getOrElse(1, { -1 }),
|
||||||
reminders.getOrElse(2, { -1 }), repeatRule.repeatInterval, googleEvent.iCalUID)
|
reminders.getOrElse(2, { -1 }), repeatRule.repeatInterval, googleEvent.iCalUID, flags, repeatRule.repeatLimit, repeatRule.repeatRule,
|
||||||
|
eventTypeId)
|
||||||
}
|
}
|
||||||
return events
|
return events
|
||||||
}
|
}
|
||||||
|
@@ -4,4 +4,4 @@ import com.google.gson.JsonArray
|
|||||||
import com.google.gson.JsonObject
|
import com.google.gson.JsonObject
|
||||||
|
|
||||||
data class GoogleEvent(val summary: String, val description: String, val status: String, val start: GoogleEventDateTime, val end: GoogleEventDateTime,
|
data class GoogleEvent(val summary: String, val description: String, val status: String, val start: GoogleEventDateTime, val end: GoogleEventDateTime,
|
||||||
val reminders: JsonObject, val recurrence: JsonArray, val iCalUID: String)
|
val reminders: JsonObject, val recurrence: JsonArray?, val iCalUID: String, val colorId: Int)
|
||||||
|
Reference in New Issue
Block a user