mirror of
https://github.com/SimpleMobileTools/Simple-Calendar.git
synced 2025-06-05 21:59:17 +02:00
insert the parsed events in db
This commit is contained in:
@@ -160,13 +160,8 @@ class MainActivity : SimpleActivity(), EventListFragment.DeleteListener {
|
|||||||
FilePickerDialog(this) {
|
FilePickerDialog(this) {
|
||||||
if (it.toLowerCase().endsWith(".ics")) {
|
if (it.toLowerCase().endsWith(".ics")) {
|
||||||
ImportEventsDialog(this, it) {
|
ImportEventsDialog(this, it) {
|
||||||
runOnUiThread {
|
if (it)
|
||||||
if (it) {
|
updateViewPager()
|
||||||
toast(R.string.events_imported_successfully)
|
|
||||||
} else {
|
|
||||||
toast(R.string.unknown_error_occurred)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
toast(R.string.invalid_file_format)
|
toast(R.string.invalid_file_format)
|
||||||
|
@@ -9,13 +9,11 @@ import com.simplemobiletools.calendar.R
|
|||||||
import com.simplemobiletools.calendar.extensions.getDefaultReminderTypeIndex
|
import com.simplemobiletools.calendar.extensions.getDefaultReminderTypeIndex
|
||||||
import com.simplemobiletools.calendar.extensions.setupReminderPeriod
|
import com.simplemobiletools.calendar.extensions.setupReminderPeriod
|
||||||
import com.simplemobiletools.calendar.helpers.*
|
import com.simplemobiletools.calendar.helpers.*
|
||||||
import com.simplemobiletools.commons.extensions.humanizePath
|
import com.simplemobiletools.calendar.helpers.IcsParser.ImportResult.*
|
||||||
import com.simplemobiletools.commons.extensions.setupDialogStuff
|
import com.simplemobiletools.commons.extensions.*
|
||||||
import com.simplemobiletools.commons.extensions.showKeyboard
|
|
||||||
import com.simplemobiletools.commons.extensions.value
|
|
||||||
import kotlinx.android.synthetic.main.dialog_import_events.view.*
|
import kotlinx.android.synthetic.main.dialog_import_events.view.*
|
||||||
|
|
||||||
class ImportEventsDialog(val activity: Activity, val path: String, val callback: (success: Boolean) -> Unit) : AlertDialog.Builder(activity) {
|
class ImportEventsDialog(val activity: Activity, val path: String, val callback: (refreshView: Boolean) -> Unit) : AlertDialog.Builder(activity) {
|
||||||
init {
|
init {
|
||||||
val view = LayoutInflater.from(activity).inflate(R.layout.dialog_import_events, null).apply {
|
val view = LayoutInflater.from(activity).inflate(R.layout.dialog_import_events, null).apply {
|
||||||
import_events_filename.text = activity.humanizePath(path)
|
import_events_filename.text = activity.humanizePath(path)
|
||||||
@@ -50,18 +48,26 @@ class ImportEventsDialog(val activity: Activity, val path: String, val callback:
|
|||||||
else -> getReminderMinutes(view)
|
else -> getReminderMinutes(view)
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
|
||||||
Thread({
|
Thread({
|
||||||
IcsParser.parseIcs(context, minutes, path)
|
val result = IcsParser().parseIcs(context, minutes, path)
|
||||||
callback.invoke(true)
|
handleParseResult(result)
|
||||||
|
dismiss()
|
||||||
}).start()
|
}).start()
|
||||||
} catch (e: Exception) {
|
|
||||||
callback.invoke(false)
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun handleParseResult(result: IcsParser.ImportResult) {
|
||||||
|
activity.runOnUiThread {
|
||||||
|
activity.toast(when (result) {
|
||||||
|
IMPORT_OK -> R.string.events_imported_successfully
|
||||||
|
IMPORT_PARTIAL -> R.string.importing_some_events_failed
|
||||||
|
else -> R.string.importing_some_events_failed
|
||||||
|
})
|
||||||
|
callback.invoke(result != IMPORT_FAIL)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun getReminderMinutes(view: View): Int {
|
private fun getReminderMinutes(view: View): Int {
|
||||||
val multiplier = when (view.import_events_custom_reminder_other_period.selectedItemPosition) {
|
val multiplier = when (view.import_events_custom_reminder_other_period.selectedItemPosition) {
|
||||||
1 -> HOUR_MINS
|
1 -> HOUR_MINS
|
||||||
|
@@ -2,12 +2,17 @@ package com.simplemobiletools.calendar.helpers
|
|||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import com.simplemobiletools.calendar.extensions.seconds
|
import com.simplemobiletools.calendar.extensions.seconds
|
||||||
|
import com.simplemobiletools.calendar.helpers.IcsParser.ImportResult.*
|
||||||
import com.simplemobiletools.calendar.models.Event
|
import com.simplemobiletools.calendar.models.Event
|
||||||
import org.joda.time.DateTimeZone
|
import org.joda.time.DateTimeZone
|
||||||
import org.joda.time.format.DateTimeFormat
|
import org.joda.time.format.DateTimeFormat
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
object IcsParser {
|
class IcsParser {
|
||||||
|
enum class ImportResult {
|
||||||
|
IMPORT_FAIL, IMPORT_OK, IMPORT_PARTIAL
|
||||||
|
}
|
||||||
|
|
||||||
private val BEGIN_EVENT = "BEGIN:VEVENT"
|
private val BEGIN_EVENT = "BEGIN:VEVENT"
|
||||||
private val BEGIN_ALARM = "BEGIN:VALARM"
|
private val BEGIN_ALARM = "BEGIN:VALARM"
|
||||||
private val END = "END:VEVENT"
|
private val END = "END:VEVENT"
|
||||||
@@ -21,10 +26,14 @@ object IcsParser {
|
|||||||
var curTitle = ""
|
var curTitle = ""
|
||||||
var curDescription = ""
|
var curDescription = ""
|
||||||
|
|
||||||
fun parseIcs(context: Context, reminderMinutes: Int, path: String) {
|
var eventsImported = 0
|
||||||
val inputStream = File(path).inputStream()
|
var eventsFailed = 0
|
||||||
|
|
||||||
inputStream.bufferedReader().use {
|
fun parseIcs(context: Context, reminderMinutes: Int, path: String): ImportResult {
|
||||||
|
try {
|
||||||
|
val dbHelper = DBHelper(context)
|
||||||
|
|
||||||
|
File(path).inputStream().bufferedReader().use {
|
||||||
while (true) {
|
while (true) {
|
||||||
val line = it.readLine()?.trim() ?: break
|
val line = it.readLine()?.trim() ?: break
|
||||||
if (line == BEGIN_EVENT) {
|
if (line == BEGIN_EVENT) {
|
||||||
@@ -42,16 +51,34 @@ object IcsParser {
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
val event = Event(0, curStart, curEnd, curTitle, curDescription, reminderMinutes)
|
val event = Event(0, curStart, curEnd, curTitle, curDescription, reminderMinutes)
|
||||||
|
dbHelper.insert(event)
|
||||||
|
eventsImported++
|
||||||
resetValues()
|
resetValues()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
eventsFailed++
|
||||||
|
}
|
||||||
|
|
||||||
|
return if (eventsImported == 0) {
|
||||||
|
IMPORT_FAIL
|
||||||
|
} else if (eventsFailed > 0) {
|
||||||
|
IMPORT_PARTIAL
|
||||||
|
} else {
|
||||||
|
IMPORT_OK
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getTimestamp(fullString: String): Int {
|
private fun getTimestamp(fullString: String): Int {
|
||||||
|
try {
|
||||||
val digitString = fullString.replace("T", "").replace("Z", "")
|
val digitString = fullString.replace("T", "").replace("Z", "")
|
||||||
val dateTimeFormat = DateTimeFormat.forPattern("yyyyMMddHHmmss")
|
val dateTimeFormat = DateTimeFormat.forPattern("yyyyMMddHHmmss")
|
||||||
return dateTimeFormat.parseDateTime(digitString).withZoneRetainFields(DateTimeZone.UTC).seconds()
|
return dateTimeFormat.parseDateTime(digitString).withZoneRetainFields(DateTimeZone.UTC).seconds()
|
||||||
|
} catch (e: Exception) {
|
||||||
|
eventsFailed++
|
||||||
|
return -1
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun resetValues() {
|
private fun resetValues() {
|
||||||
|
@@ -47,6 +47,7 @@
|
|||||||
<string name="import_events_from_ics">Import events from an .ics file</string>
|
<string name="import_events_from_ics">Import events from an .ics file</string>
|
||||||
<string name="event_reminder">Event reminder</string>
|
<string name="event_reminder">Event reminder</string>
|
||||||
<string name="events_imported_successfully">Events imported successfully</string>
|
<string name="events_imported_successfully">Events imported successfully</string>
|
||||||
|
<string name="importing_some_events_failed">Importing some events failed</string>
|
||||||
<string name="invalid_file_format">Invalid file format</string>
|
<string name="invalid_file_format">Invalid file format</string>
|
||||||
|
|
||||||
<!-- Day details -->
|
<!-- Day details -->
|
||||||
|
@@ -47,6 +47,7 @@
|
|||||||
<string name="import_events_from_ics">Import events from an .ics file</string>
|
<string name="import_events_from_ics">Import events from an .ics file</string>
|
||||||
<string name="event_reminder">Event reminder</string>
|
<string name="event_reminder">Event reminder</string>
|
||||||
<string name="events_imported_successfully">Events imported successfully</string>
|
<string name="events_imported_successfully">Events imported successfully</string>
|
||||||
|
<string name="importing_some_events_failed">Importing some events failed</string>
|
||||||
<string name="invalid_file_format">Invalid file format</string>
|
<string name="invalid_file_format">Invalid file format</string>
|
||||||
|
|
||||||
<!-- Day details -->
|
<!-- Day details -->
|
||||||
|
@@ -47,6 +47,7 @@
|
|||||||
<string name="import_events_from_ics">Import events from an .ics file</string>
|
<string name="import_events_from_ics">Import events from an .ics file</string>
|
||||||
<string name="event_reminder">Event reminder</string>
|
<string name="event_reminder">Event reminder</string>
|
||||||
<string name="events_imported_successfully">Events imported successfully</string>
|
<string name="events_imported_successfully">Events imported successfully</string>
|
||||||
|
<string name="importing_some_events_failed">Importing some events failed</string>
|
||||||
<string name="invalid_file_format">Invalid file format</string>
|
<string name="invalid_file_format">Invalid file format</string>
|
||||||
|
|
||||||
<!-- Day details -->
|
<!-- Day details -->
|
||||||
|
@@ -47,6 +47,7 @@
|
|||||||
<string name="import_events_from_ics">Import events from an .ics file</string>
|
<string name="import_events_from_ics">Import events from an .ics file</string>
|
||||||
<string name="event_reminder">Event reminder</string>
|
<string name="event_reminder">Event reminder</string>
|
||||||
<string name="events_imported_successfully">Events imported successfully</string>
|
<string name="events_imported_successfully">Events imported successfully</string>
|
||||||
|
<string name="importing_some_events_failed">Importing some events failed</string>
|
||||||
<string name="invalid_file_format">Invalid file format</string>
|
<string name="invalid_file_format">Invalid file format</string>
|
||||||
|
|
||||||
<!-- Day details -->
|
<!-- Day details -->
|
||||||
|
@@ -47,6 +47,7 @@
|
|||||||
<string name="import_events_from_ics">Import events from an .ics file</string>
|
<string name="import_events_from_ics">Import events from an .ics file</string>
|
||||||
<string name="event_reminder">Event reminder</string>
|
<string name="event_reminder">Event reminder</string>
|
||||||
<string name="events_imported_successfully">Events imported successfully</string>
|
<string name="events_imported_successfully">Events imported successfully</string>
|
||||||
|
<string name="importing_some_events_failed">Importing some events failed</string>
|
||||||
<string name="invalid_file_format">Invalid file format</string>
|
<string name="invalid_file_format">Invalid file format</string>
|
||||||
|
|
||||||
<!-- Day details -->
|
<!-- Day details -->
|
||||||
|
@@ -47,6 +47,7 @@
|
|||||||
<string name="import_events_from_ics">Import events from an .ics file</string>
|
<string name="import_events_from_ics">Import events from an .ics file</string>
|
||||||
<string name="event_reminder">Event reminder</string>
|
<string name="event_reminder">Event reminder</string>
|
||||||
<string name="events_imported_successfully">Events imported successfully</string>
|
<string name="events_imported_successfully">Events imported successfully</string>
|
||||||
|
<string name="importing_some_events_failed">Importing some events failed</string>
|
||||||
<string name="invalid_file_format">Invalid file format</string>
|
<string name="invalid_file_format">Invalid file format</string>
|
||||||
|
|
||||||
<!-- Day details -->
|
<!-- Day details -->
|
||||||
|
@@ -47,6 +47,7 @@
|
|||||||
<string name="import_events_from_ics">Import events from an .ics file</string>
|
<string name="import_events_from_ics">Import events from an .ics file</string>
|
||||||
<string name="event_reminder">תזכורת לאירוע</string>
|
<string name="event_reminder">תזכורת לאירוע</string>
|
||||||
<string name="events_imported_successfully">האירועים יובאו בהצלחה</string>
|
<string name="events_imported_successfully">האירועים יובאו בהצלחה</string>
|
||||||
|
<string name="importing_some_events_failed">Importing some events failed</string>
|
||||||
<string name="invalid_file_format">Invalid file format</string>
|
<string name="invalid_file_format">Invalid file format</string>
|
||||||
|
|
||||||
<!-- Day details -->
|
<!-- Day details -->
|
||||||
|
@@ -47,6 +47,7 @@
|
|||||||
<string name="import_events_from_ics">Import events from an .ics file</string>
|
<string name="import_events_from_ics">Import events from an .ics file</string>
|
||||||
<string name="event_reminder">Event reminder</string>
|
<string name="event_reminder">Event reminder</string>
|
||||||
<string name="events_imported_successfully">Events imported successfully</string>
|
<string name="events_imported_successfully">Events imported successfully</string>
|
||||||
|
<string name="importing_some_events_failed">Importing some events failed</string>
|
||||||
<string name="invalid_file_format">Invalid file format</string>
|
<string name="invalid_file_format">Invalid file format</string>
|
||||||
|
|
||||||
<!-- Day details -->
|
<!-- Day details -->
|
||||||
|
@@ -47,6 +47,7 @@
|
|||||||
<string name="import_events_from_ics">Import events from an .ics file</string>
|
<string name="import_events_from_ics">Import events from an .ics file</string>
|
||||||
<string name="event_reminder">Event reminder</string>
|
<string name="event_reminder">Event reminder</string>
|
||||||
<string name="events_imported_successfully">Events imported successfully</string>
|
<string name="events_imported_successfully">Events imported successfully</string>
|
||||||
|
<string name="importing_some_events_failed">Importing some events failed</string>
|
||||||
<string name="invalid_file_format">Invalid file format</string>
|
<string name="invalid_file_format">Invalid file format</string>
|
||||||
|
|
||||||
<!-- Day details -->
|
<!-- Day details -->
|
||||||
|
@@ -47,6 +47,7 @@
|
|||||||
<string name="import_events_from_ics">Import events from an .ics file</string>
|
<string name="import_events_from_ics">Import events from an .ics file</string>
|
||||||
<string name="event_reminder">Event reminder</string>
|
<string name="event_reminder">Event reminder</string>
|
||||||
<string name="events_imported_successfully">Events imported successfully</string>
|
<string name="events_imported_successfully">Events imported successfully</string>
|
||||||
|
<string name="importing_some_events_failed">Importing some events failed</string>
|
||||||
<string name="invalid_file_format">Invalid file format</string>
|
<string name="invalid_file_format">Invalid file format</string>
|
||||||
|
|
||||||
<!-- Day details -->
|
<!-- Day details -->
|
||||||
|
@@ -47,6 +47,7 @@
|
|||||||
<string name="import_events_from_ics">Import events from an .ics file</string>
|
<string name="import_events_from_ics">Import events from an .ics file</string>
|
||||||
<string name="event_reminder">Event reminder</string>
|
<string name="event_reminder">Event reminder</string>
|
||||||
<string name="events_imported_successfully">Events imported successfully</string>
|
<string name="events_imported_successfully">Events imported successfully</string>
|
||||||
|
<string name="importing_some_events_failed">Importing some events failed</string>
|
||||||
<string name="invalid_file_format">Invalid file format</string>
|
<string name="invalid_file_format">Invalid file format</string>
|
||||||
|
|
||||||
<!-- Day details -->
|
<!-- Day details -->
|
||||||
|
@@ -13,6 +13,6 @@
|
|||||||
<dimen name="min_widget_height">250dp</dimen>
|
<dimen name="min_widget_height">250dp</dimen>
|
||||||
|
|
||||||
<dimen name="meta_text_size">14sp</dimen>
|
<dimen name="meta_text_size">14sp</dimen>
|
||||||
<dimen name="day_text_size">20sp</dimen>
|
<dimen name="day_text_size">17sp</dimen>
|
||||||
<dimen name="month_text_size">22sp</dimen>
|
<dimen name="month_text_size">22sp</dimen>
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -47,6 +47,7 @@
|
|||||||
<string name="import_events_from_ics">Import events from an .ics file</string>
|
<string name="import_events_from_ics">Import events from an .ics file</string>
|
||||||
<string name="event_reminder">Event reminder</string>
|
<string name="event_reminder">Event reminder</string>
|
||||||
<string name="events_imported_successfully">Events imported successfully</string>
|
<string name="events_imported_successfully">Events imported successfully</string>
|
||||||
|
<string name="importing_some_events_failed">Importing some events failed</string>
|
||||||
<string name="invalid_file_format">Invalid file format</string>
|
<string name="invalid_file_format">Invalid file format</string>
|
||||||
|
|
||||||
<!-- Day details -->
|
<!-- Day details -->
|
||||||
|
Reference in New Issue
Block a user