В Пнд, 07/12/2009 в 23:54 +0100, Bernhard Reiter пишет:
> Thanks. I think last time I used it, there was no opimd support yet.
>
> Uhm, and is there a feed for shr-t? If I just try
> opkg install pisi
> I get
> * Cannot find package pisi.
You can try to use mine import script. It's in attachment.
It needs python-vobject, python-sqlite and another one package which
contains base64 codec, but I always forget how it is named.
--
WBR, Vladimir Berezenko
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import sys
import string
import dbus
from sys import argv
from sqlite3 import dbapi2 as sqlite
import vobject
def addField(entry, key, value):
if entry.has_key(key):
if type(entry[key]) == list:
entry[key].append(value)
else:
entry[key]=[entry[key], value]
else:
entry[key]=value
# define some nice dbus helper, which I really like, cause make code easier to read :)
def getDbusObject (bus, busname , objectpath , interface):
dbusObject = bus.get_object(busname, objectpath)
return dbus.Interface(dbusObject, dbus_interface=interface)
dbusEn = 1
print "Starting importing"
try:
if len(sys.argv) > 3:
print "Too many arguments\n"
raise
if len(sys.argv) == 3:
if (sys.argv[1] == "-t"):
print "Test mode enabled\nFile: %s\n" % (sys.argv[2])
dbusEn = 0
filecont = open(sys.argv[2], "r")
else:
print "Wrong parameters\n"
raise
elif len(sys.argv) == 2:
if (sys.argv[1] != "-t"):
print "Real mode\nFile: %s\n" % (sys.argv[1])
filecont = open(sys.argv[1], "r")
else:
print "Test mode enabled\nFile: ./Contacts.vcf\n"
filecont = open("./Contacts.vcf","r")
dbusEn = 0
else:
filecont = open("./Contacts.vcf","r")
except:
print "Usage:\nimportVCF [-t] [Contacts.vcf]"
sys.exit(0)
if dbusEn:
try:
bus = dbus.SystemBus()
interface = getDbusObject (bus, "org.freesmartphone.opimd", "/org/freesmartphone/PIM/Contacts", "org.freesmartphone.PIM.Contacts")
except:
print "No DBUS\nTest mode enabled\n"
dbusEn = 0
#N Name,Sirname (single field per contact)
#ORG Organization
#ROLE Role
#NICKNAME Nick (single field per contact)
#TEL [CELL, WORK, HOME, FAX] Work cell phone, Home cell phone, Cell phone, Work phone, Home phone, Phone, Work fax, Home fax, Fax
#EMAIL [WORK, HOME] Work e-mail, Home e-mail, E-mail
#BDAY Birthday (single field per contact)
#NOTE Note (single field per contact)
#ADR [WORK, HOME] Work address (single field per contact), Home address (single field per contact), Address
#PHOTO Photo (single field per contact)
#X-ICQ ICQ
#X-JABBER Jabber
#URL [WORK, HOME] WorkURL, HomeURL, URL
for contact in vobject.readComponents(filecont):
paramDict = {}
print "/----------------------------------------------------------------------\\"
name = contact.n.value.given
if len(contact.n.value.additional) > 0:
name += " "+contact.n.value.additional
surname = contact.n.value.family
paramDict[u"Name"] = name
paramDict[u"Surname"] = surname
for element in contact.getChildren():
if (element.name == "TEL"):
if "WORK" in element.type_paramlist:
phoneType = u"Work"
elif "HOME" in element.type_paramlist:
phoneType = u"Home"
else:
phoneType = ""
if "CELL" in element.type_paramlist:
if phoneType == "":
addField(paramDict, u"Cell phone", u"tel:"+element.value.strip())
else:
addField(paramDict, phoneType+u" cell phone", u"tel:"+element.value.strip())
elif "FAX" in element.type_paramlist:
if phoneType == "":
addField(paramDict, u"Fax", u"tel:"+element.value.strip())
else:
addField(paramDict, phoneType+u" fax", u"tel:"+element.value.strip())
else:
if phoneType == "":
addField(paramDict, u"Phone", u"tel:"+element.value.strip())
else:
addField(paramDict, phoneType+u" phone", u"tel:"+element.value.strip())
elif (element.name == "NICKNAME"):
if len(element.value) > 0:
paramDict[u"Nickname"] = element.value.strip()
elif (element.name == "BDAY"):
paramDict[u"Birthdate"] = element.value.strip()
elif (element.name == "ADR"):
try:
if "WORK" in element.type_paramlist:
addrType = u"Work"
elif "HOME" in element.type_paramlist:
addrType = u"Home"
else:
addrType = ""
except:
addrType = ""
# print (addrType+" Address: ").strip()
# print " ZIP = "+element.value.code
# print " Country = "+element.value.country
# print " City = "+element.value.city
# print " Street = "+element.value.street
paramDict[addrType+u"Address"] = element.value.street+";"+element.value.city+";"+element.value.country+";"+element.value.code
elif (element.name == "NOTE"):
if len(element.value) > 0:
paramDict[u"Note"] = element.value
elif (element.name == "EMAIL"):
try:
if "WORK" in element.type_paramlist:
emailType = u"Work"
elif "HOME" in element.type_paramlist:
emailType = u"Home"
else:
emailType = ""
except:
emailType =""
addField(paramDict, emailType+u"E-mail", u"mail:"+element.value.strip())
elif (element.name == "PHOTO"):
print "Photos are disabled for now"
# pict = open(name+" "+surname+"."+element.type_param, "w")
# pict.write(element.value)
# paramDict[u"Photo"] = u"file://"+name+"\\ "+surname+"."+element.type_param.strip()
elif (element.name == "X-ICQ"):
addField(paramDict, u"ICQ", u"icq://"+element.value.strip())
elif (element.name == "X-JABBER"):
addField(paramDict, u"Jabber", u"jabber://"+element.value.strip())
elif (element.name == "ORG"):
# print "Organizations:"
for org in element.value:
if len(org) > 0:
addField(paramDict, u"Organization", org.strip())
elif (element.name == "ROLE"):
if len(element.value) > 0:
paramDict[u"Role"] = element.value.strip()
elif (element.name == "URL"):
if len(element.value) > 0:
try:
if "WORK" in element.type_paramlist:
urlType = u"Work"
elif "HOME" in element.type_paramlist:
urlType = u"Home"
else:
urlType = ""
except:
urlType = ""
addField(paramDict, urlType+u"URL", u"url://"+element.value.strip())
print paramDict
if dbusEn:
try:
interface.Add(paramDict)
except:
print "Error in DBUS\nTest mode enabled\n"
dbusEn = 0
print "\\----------------------------------------------------------------------/"
_______________________________________________
Openmoko community mailing list
[email protected]
http://lists.openmoko.org/mailman/listinfo/community