try parsing one category from ics files at importing
This commit is contained in:
parent
848c084a68
commit
c8af7f25be
|
@ -27,7 +27,7 @@ class EventActivity : SimpleActivity(), DBHelper.EventUpdateListener {
|
|||
private var mReminder3Minutes = 0
|
||||
private var mRepeatInterval = 0
|
||||
private var mRepeatLimit = 0
|
||||
private var mEventTypeId = DBHelper.REGULAR_EVENT_ID
|
||||
private var mEventTypeId = DBHelper.REGULAR_EVENT_TYPE_ID
|
||||
private var mDialogTheme = 0
|
||||
|
||||
lateinit var mEventStartDateTime: DateTime
|
||||
|
|
|
@ -46,7 +46,7 @@ class ManageEventTypesActivity : SimpleActivity(), DeleteItemsListener {
|
|||
}
|
||||
|
||||
override fun deleteItems(ids: ArrayList<Int>) {
|
||||
if (ids.contains(DBHelper.REGULAR_EVENT_ID)) {
|
||||
if (ids.contains(DBHelper.REGULAR_EVENT_TYPE_ID)) {
|
||||
toast(R.string.cannot_delete_default_type)
|
||||
}
|
||||
|
||||
|
|
|
@ -51,7 +51,7 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
|
|||
companion object {
|
||||
private val DB_VERSION = 7
|
||||
val DB_NAME = "events.db"
|
||||
val REGULAR_EVENT_ID = 1
|
||||
val REGULAR_EVENT_TYPE_ID = 1
|
||||
|
||||
private var mEventsListener: EventUpdateListener? = null
|
||||
|
||||
|
@ -64,7 +64,7 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
|
|||
override fun onCreate(db: SQLiteDatabase) {
|
||||
db.execSQL("CREATE TABLE $MAIN_TABLE_NAME ($COL_ID INTEGER PRIMARY KEY, $COL_START_TS INTEGER, $COL_END_TS INTEGER, $COL_TITLE TEXT, " +
|
||||
"$COL_DESCRIPTION TEXT, $COL_REMINDER_MINUTES INTEGER, $COL_REMINDER_MINUTES_2 INTEGER, $COL_REMINDER_MINUTES_3 INTEGER, " +
|
||||
"$COL_IMPORT_ID TEXT, $COL_FLAGS INTEGER, $COL_EVENT_TYPE INTEGER NOT NULL DEFAULT $REGULAR_EVENT_ID)")
|
||||
"$COL_IMPORT_ID TEXT, $COL_FLAGS INTEGER, $COL_EVENT_TYPE INTEGER NOT NULL DEFAULT $REGULAR_EVENT_TYPE_ID)")
|
||||
|
||||
createMetaTable(db)
|
||||
createTypesTable(db)
|
||||
|
@ -95,7 +95,7 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
|
|||
|
||||
if (oldVersion < 7) {
|
||||
createTypesTable(db)
|
||||
db.execSQL("ALTER TABLE $MAIN_TABLE_NAME ADD COLUMN $COL_EVENT_TYPE INTEGER NOT NULL DEFAULT $REGULAR_EVENT_ID")
|
||||
db.execSQL("ALTER TABLE $MAIN_TABLE_NAME ADD COLUMN $COL_EVENT_TYPE INTEGER NOT NULL DEFAULT $REGULAR_EVENT_TYPE_ID")
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -111,7 +111,7 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
|
|||
|
||||
private fun addRegularEventType(db: SQLiteDatabase) {
|
||||
val regularEvent = context.resources.getString(R.string.regular_event)
|
||||
val eventType = EventType(REGULAR_EVENT_ID, regularEvent, context.config.primaryColor)
|
||||
val eventType = EventType(REGULAR_EVENT_TYPE_ID, regularEvent, context.config.primaryColor)
|
||||
addEventType(eventType, db)
|
||||
}
|
||||
|
||||
|
@ -261,8 +261,8 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
|
|||
|
||||
fun deleteEventTypes(ids: ArrayList<Int>, callback: (deletedCnt: Int) -> Unit) {
|
||||
var deleteIds = ids
|
||||
if (ids.contains(DBHelper.REGULAR_EVENT_ID))
|
||||
deleteIds = ids.filter { it != DBHelper.REGULAR_EVENT_ID } as ArrayList<Int>
|
||||
if (ids.contains(DBHelper.REGULAR_EVENT_TYPE_ID))
|
||||
deleteIds = ids.filter { it != DBHelper.REGULAR_EVENT_TYPE_ID } as ArrayList<Int>
|
||||
|
||||
val deletedSet = HashSet<String>()
|
||||
deleteIds.map { deletedSet.add(it.toString()) }
|
||||
|
@ -281,7 +281,7 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
|
|||
|
||||
private fun resetEventsWithType(eventTypeId: Int) {
|
||||
val values = ContentValues()
|
||||
values.put(COL_EVENT_TYPE, REGULAR_EVENT_ID)
|
||||
values.put(COL_EVENT_TYPE, REGULAR_EVENT_TYPE_ID)
|
||||
|
||||
val selection = "$COL_EVENT_TYPE = ?"
|
||||
val selectionArgs = arrayOf(eventTypeId.toString())
|
||||
|
|
|
@ -1,9 +1,11 @@
|
|||
package com.simplemobiletools.calendar.helpers
|
||||
|
||||
import android.content.Context
|
||||
import com.simplemobiletools.calendar.R
|
||||
import com.simplemobiletools.calendar.extensions.seconds
|
||||
import com.simplemobiletools.calendar.helpers.IcsParser.ImportResult.*
|
||||
import com.simplemobiletools.calendar.models.Event
|
||||
import com.simplemobiletools.calendar.models.EventType
|
||||
import org.joda.time.DateTimeZone
|
||||
import org.joda.time.format.DateTimeFormat
|
||||
import java.io.File
|
||||
|
@ -24,6 +26,7 @@ class IcsParser {
|
|||
private val ACTION = "ACTION:"
|
||||
private val TRIGGER = "TRIGGER:"
|
||||
private val RRULE = "RRULE:"
|
||||
private val CATEGORIES = "CATEGORIES:"
|
||||
|
||||
private val DISPLAY = "DISPLAY"
|
||||
private val FREQ = "FREQ"
|
||||
|
@ -45,6 +48,7 @@ class IcsParser {
|
|||
var curReminderMinutes = -1
|
||||
var curRepeatInterval = 0
|
||||
var curRepeatLimit = 0
|
||||
var curEventType = DBHelper.REGULAR_EVENT_TYPE_ID
|
||||
var curShouldHaveNotification = false
|
||||
var isNotificationDescription = false
|
||||
|
||||
|
@ -94,13 +98,16 @@ class IcsParser {
|
|||
if (curReminderMinutes == -1 && curShouldHaveNotification) {
|
||||
curReminderMinutes = decodeTime(line.substring(TRIGGER.length)) / 60
|
||||
}
|
||||
} else if (line.startsWith(CATEGORIES)) {
|
||||
val categories = line.substring(CATEGORIES.length)
|
||||
tryAddCategories(categories, context)
|
||||
} else if (line == END) {
|
||||
if (curTitle.isEmpty() || curStart == -1 || curEnd == -1 || importIDs.contains(curImportId))
|
||||
continue
|
||||
|
||||
importIDs.add(curImportId)
|
||||
val event = Event(0, curStart, curEnd, curTitle, curDescription, curReminderMinutes, -1, -1, curRepeatInterval,
|
||||
curImportId, curFlags, curRepeatLimit)
|
||||
curImportId, curFlags, curRepeatLimit, curEventType)
|
||||
dbHelper.insert(event) { }
|
||||
eventsImported++
|
||||
resetValues()
|
||||
|
@ -146,6 +153,20 @@ class IcsParser {
|
|||
}
|
||||
}
|
||||
|
||||
private fun tryAddCategories(categories: String, context: Context) {
|
||||
if (!categories.contains(",")) {
|
||||
val eventTitle = categories
|
||||
val dbHelper = DBHelper.newInstance(context)
|
||||
val eventId = dbHelper.getEventTypeIdWithTitle(eventTitle)
|
||||
if (eventId == -1) {
|
||||
val eventType = EventType(0, eventTitle, context.resources.getColor(R.color.color_primary))
|
||||
curEventType = dbHelper.insertEventType(eventType)
|
||||
} else {
|
||||
curEventType = eventId
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// P0DT1H0M0S
|
||||
private fun decodeTime(duration: String): Int {
|
||||
val weeks = getDurationValue(duration, "W")
|
||||
|
@ -216,6 +237,7 @@ class IcsParser {
|
|||
curReminderMinutes = -1
|
||||
curRepeatInterval = 0
|
||||
curRepeatLimit = 0
|
||||
curEventType = DBHelper.REGULAR_EVENT_TYPE_ID
|
||||
curShouldHaveNotification = false
|
||||
isNotificationDescription = false
|
||||
}
|
||||
|
|
|
@ -7,7 +7,7 @@ import java.io.Serializable
|
|||
|
||||
data class Event(var id: Int = 0, var startTS: Int = 0, var endTS: Int = 0, var title: String = "", var description: String = "",
|
||||
var reminder1Minutes: Int = -1, var reminder2Minutes: Int = -1, var reminder3Minutes: Int = -1, var repeatInterval: Int = 0,
|
||||
var importId: String? = "", var flags: Int = 0, var repeatLimit: Int = 0, var eventType: Int = DBHelper.REGULAR_EVENT_ID) : Serializable {
|
||||
var importId: String? = "", var flags: Int = 0, var repeatLimit: Int = 0, var eventType: Int = DBHelper.REGULAR_EVENT_TYPE_ID) : Serializable {
|
||||
|
||||
companion object {
|
||||
private val serialVersionUID = -32456795132344616L
|
||||
|
|
Loading…
Reference in New Issue