mirror of
https://github.com/SimpleMobileTools/Simple-Contacts.git
synced 2025-06-05 21:59:27 +02:00
implement the actual contact importer parser
This commit is contained in:
@ -27,13 +27,13 @@ val DEFAULT_EVENT_TYPE = CommonDataKinds.Event.TYPE_BIRTHDAY
|
|||||||
val BEGIN_VCARD = "BEGIN:VCARD"
|
val BEGIN_VCARD = "BEGIN:VCARD"
|
||||||
val END_VCARD = "END:VCARD"
|
val END_VCARD = "END:VCARD"
|
||||||
val N = "N:"
|
val N = "N:"
|
||||||
val FN = "FN:"
|
|
||||||
val TEL = "TEL"
|
val TEL = "TEL"
|
||||||
val BDAY = "BDAY:"
|
val BDAY = "BDAY:"
|
||||||
|
val ANNIVERSARY = "ANNIVERSARY:"
|
||||||
val PHOTO = "PHOTO"
|
val PHOTO = "PHOTO"
|
||||||
val EMAIL = "EMAIL;"
|
val EMAIL = "EMAIL"
|
||||||
|
|
||||||
// phone number types
|
// phone number/email types
|
||||||
val CELL = "CELL"
|
val CELL = "CELL"
|
||||||
val WORK = "WORK"
|
val WORK = "WORK"
|
||||||
val HOME = "HOME"
|
val HOME = "HOME"
|
||||||
@ -41,5 +41,4 @@ val PREF = "PREF"
|
|||||||
val WORK_FAX = "WORK;FAX"
|
val WORK_FAX = "WORK;FAX"
|
||||||
val HOME_FAX = "HOME;FAX"
|
val HOME_FAX = "HOME;FAX"
|
||||||
val PAGER = "PAGER"
|
val PAGER = "PAGER"
|
||||||
val VOICE = "VOICE"
|
val MOBILE = "MOBILE"
|
||||||
val EMPTY = ""
|
|
||||||
|
@ -1,9 +1,14 @@
|
|||||||
package com.simplemobiletools.contacts.helpers
|
package com.simplemobiletools.contacts.helpers
|
||||||
|
|
||||||
|
import android.provider.ContactsContract.CommonDataKinds
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import com.simplemobiletools.commons.extensions.showErrorToast
|
import com.simplemobiletools.commons.extensions.showErrorToast
|
||||||
import com.simplemobiletools.contacts.activities.SimpleActivity
|
import com.simplemobiletools.contacts.activities.SimpleActivity
|
||||||
import com.simplemobiletools.contacts.helpers.VcfImporter.ImportResult.*
|
import com.simplemobiletools.contacts.helpers.VcfImporter.ImportResult.*
|
||||||
|
import com.simplemobiletools.contacts.models.Contact
|
||||||
|
import com.simplemobiletools.contacts.models.Email
|
||||||
|
import com.simplemobiletools.contacts.models.Event
|
||||||
|
import com.simplemobiletools.contacts.models.PhoneNumber
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
class VcfImporter(val activity: SimpleActivity) {
|
class VcfImporter(val activity: SimpleActivity) {
|
||||||
@ -11,6 +16,13 @@ class VcfImporter(val activity: SimpleActivity) {
|
|||||||
IMPORT_FAIL, IMPORT_OK, IMPORT_PARTIAL
|
IMPORT_FAIL, IMPORT_OK, IMPORT_PARTIAL
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private var curFirstName = ""
|
||||||
|
private var curMiddleName = ""
|
||||||
|
private var curSurname = ""
|
||||||
|
private var curPhoneNumbers = ArrayList<PhoneNumber>()
|
||||||
|
private var curEmails = ArrayList<Email>()
|
||||||
|
private var curEvents = ArrayList<Event>()
|
||||||
|
|
||||||
private var contactsImported = 0
|
private var contactsImported = 0
|
||||||
private var contactsFailed = 0
|
private var contactsFailed = 0
|
||||||
|
|
||||||
@ -25,13 +37,18 @@ class VcfImporter(val activity: SimpleActivity) {
|
|||||||
inputStream.bufferedReader().use {
|
inputStream.bufferedReader().use {
|
||||||
while (true) {
|
while (true) {
|
||||||
val line = it.readLine() ?: break
|
val line = it.readLine() ?: break
|
||||||
if (line.trim().isEmpty())
|
if (line.trim().isEmpty()) {
|
||||||
continue
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
if (line == BEGIN_VCARD) {
|
when {
|
||||||
resetValues()
|
line == BEGIN_VCARD -> resetValues()
|
||||||
} else if (line == END_VCARD) {
|
line.startsWith(N) -> parseNames(line.substring(N.length))
|
||||||
contactsImported++
|
line.startsWith(TEL) -> addPhoneNumber(line.substring(TEL.length))
|
||||||
|
line.startsWith(EMAIL) -> addEmail(line.substring(EMAIL.length))
|
||||||
|
line.startsWith(BDAY) -> addBirthday(line.substring(BDAY.length))
|
||||||
|
line.startsWith(ANNIVERSARY) -> addAnniversary(line.substring(ANNIVERSARY.length))
|
||||||
|
line == END_VCARD -> saveContact(targetContactSource)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -47,7 +64,66 @@ class VcfImporter(val activity: SimpleActivity) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun resetValues() {
|
private fun parseNames(names: String) {
|
||||||
|
val nameParts = names.split(";")
|
||||||
|
curFirstName = nameParts[1]
|
||||||
|
curMiddleName = nameParts[2]
|
||||||
|
curSurname = nameParts[0]
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun addPhoneNumber(phoneNumber: String) {
|
||||||
|
val phoneParts = phoneNumber.trimStart(';').split(":")
|
||||||
|
val type = getPhoneNumberTypeId(phoneParts[0])
|
||||||
|
val value = phoneParts[1]
|
||||||
|
curPhoneNumbers.add(PhoneNumber(value, type))
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun getPhoneNumberTypeId(type: String) = when (type) {
|
||||||
|
CELL -> CommonDataKinds.Phone.TYPE_MOBILE
|
||||||
|
WORK -> CommonDataKinds.Phone.TYPE_WORK
|
||||||
|
HOME -> CommonDataKinds.Phone.TYPE_HOME
|
||||||
|
PREF -> CommonDataKinds.Phone.TYPE_MAIN
|
||||||
|
WORK_FAX -> CommonDataKinds.Phone.TYPE_FAX_WORK
|
||||||
|
HOME_FAX -> CommonDataKinds.Phone.TYPE_FAX_HOME
|
||||||
|
PAGER -> CommonDataKinds.Phone.TYPE_PAGER
|
||||||
|
else -> CommonDataKinds.Phone.TYPE_OTHER
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun addEmail(email: String) {
|
||||||
|
val emailParts = email.trimStart(';').split(":")
|
||||||
|
val type = getEmailTypeId(emailParts[0])
|
||||||
|
val value = emailParts[1]
|
||||||
|
curEmails.add(Email(value, type))
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun getEmailTypeId(type: String) = when (type) {
|
||||||
|
HOME -> CommonDataKinds.Email.TYPE_HOME
|
||||||
|
WORK -> CommonDataKinds.Email.TYPE_WORK
|
||||||
|
MOBILE -> CommonDataKinds.Email.TYPE_MOBILE
|
||||||
|
else -> CommonDataKinds.Email.TYPE_OTHER
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun addBirthday(birthday: String) {
|
||||||
|
curEvents.add(Event(birthday, CommonDataKinds.Event.TYPE_BIRTHDAY))
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun addAnniversary(anniversary: String) {
|
||||||
|
curEvents.add(Event(anniversary, CommonDataKinds.Event.TYPE_ANNIVERSARY))
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun saveContact(source: String) {
|
||||||
|
val contact = Contact(0, curFirstName, curMiddleName, curSurname, "", curPhoneNumbers, curEmails, curEvents, source, 0, 0)
|
||||||
|
if (ContactsHelper(activity).insertContact(contact)) {
|
||||||
|
contactsImported++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun resetValues() {
|
||||||
|
curFirstName = ""
|
||||||
|
curMiddleName = ""
|
||||||
|
curSurname = ""
|
||||||
|
curPhoneNumbers = ArrayList()
|
||||||
|
curEmails = ArrayList()
|
||||||
|
curEvents = ArrayList()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user