blob: f2c3968e65d6bedfb5e644b31918aa4adbf5b1e7 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
package at.bitfire.vcard4android.contactrow
import android.content.ContentValues
import android.provider.ContactsContract.CommonDataKinds.Im
import at.bitfire.vcard4android.Constants
import at.bitfire.vcard4android.Contact
import at.bitfire.vcard4android.LabeledProperty
import ezvcard.parameter.ImppType
import ezvcard.property.Impp
object ImHandler: DataRowHandler() {
override fun forMimeType() = Im.CONTENT_ITEM_TYPE
override fun handle(values: ContentValues, contact: Contact) {
super.handle(values, contact)
val handle = values.getAsString(Im.DATA)
if (handle == null) {
Constants.log.warning("Ignoring instant messenger record without handle")
return
}
var impp: Impp? = null
when (values.getAsInteger(Im.PROTOCOL)) {
Im.PROTOCOL_AIM ->
impp = Impp.aim(handle)
Im.PROTOCOL_MSN ->
impp = Impp.msn(handle)
Im.PROTOCOL_YAHOO ->
impp = Impp.yahoo(handle)
Im.PROTOCOL_SKYPE ->
impp = Impp.skype(handle)
Im.PROTOCOL_QQ ->
impp = Impp("qq", handle)
Im.PROTOCOL_GOOGLE_TALK ->
impp = Impp("google-talk", handle)
Im.PROTOCOL_ICQ ->
impp = Impp.icq(handle)
Im.PROTOCOL_JABBER ->
impp = Impp.xmpp(handle)
Im.PROTOCOL_NETMEETING ->
impp = Impp("netmeeting", handle)
Im.PROTOCOL_CUSTOM ->
try {
impp = Impp(protocolToUriScheme(values.getAsString(Im.CUSTOM_PROTOCOL)), handle)
} catch(e: IllegalArgumentException) {
Constants.log.warning("Messenger type/value can't be expressed as URI; ignoring")
}
}
if (impp == null)
return
val labeledImpp = LabeledProperty(impp)
when (values.getAsInteger(Im.TYPE)) {
Im.TYPE_HOME ->
impp.types += ImppType.HOME
Im.TYPE_WORK ->
impp.types += ImppType.WORK
Im.TYPE_CUSTOM ->
values.getAsString(Im.LABEL)?.let {
labeledImpp.label = it
}
}
contact.impps += labeledImpp
}
fun protocolToUriScheme(s: String?) =
// RFC 3986 3.1
// scheme = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )
// ALPHA = %x41-5A / %x61-7A ; A-Z / a-z
// DIGIT = %x30-39 ; 0-9
s?.replace(Regex("^[^a-zA-Z]+"), "")?.replace(Regex("[^\\da-zA-Z+-.]"), "")?.lowercase()
}
|