В Пнд, 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

Reply via email to