From: <luc...@us...> - 2003-06-23 21:27:44
|
Update of /cvsroot/zxsync/zXSync/plugins/zaurus In directory sc8-pr-cvs1:/tmp/cvs-serv12774 Modified Files: zauruscontacts.py Log Message: - Small correction to telephone number handling - Added notification mechanism Index: zauruscontacts.py =================================================================== RCS file: /cvsroot/zxsync/zXSync/plugins/zaurus/zauruscontacts.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** zauruscontacts.py 11 May 2003 18:07:40 -0000 1.2 --- zauruscontacts.py 23 Jun 2003 21:27:40 -0000 1.3 *************** *** 28,31 **** --- 28,32 ---- from zxsync import syncbase import zxsync.vcard + from zxsync import vcard ADDRESSBOOK_DIR = "Applications/addressbook" *************** *** 83,86 **** --- 84,133 ---- "%m.%d.%y") + supportedFields = \ + [X_ZAURUS_BIRTHDAY, X_ZAURUS_CATEGORIES, X_ZAURUS_UNKNOWN, + vcard.UID, vcard.N, vcard.FN, vcard.NICKNAME, vcard.BDAY, vcard.ADR, + vcard.TEL, vcard.EMAIL, vcard.NOTE, vcard.ORG, vcard.TITLE, vcard.URL, + vcard.X_URL_HOME, vcard.X_URL_WORK + ] + + + def getTelTypes(vcardTypes): + """ + Returns the Zaurus field names for the types of a TEL field. + For example, if the types are FAX, HOME, and WORK, the returned + sequence contains BUSINESS_FAX and HOME_FAX. + """ + retVal = [] + if zxsync.vcard.HOME in vcardTypes: + found = 0 + if zxsync.vcard.FAX in vcardTypes: + retVal.append(HOME_FAX) + found = 1 + if zxsync.vcard.CELL in vcardTypes: + retVal.append(HOME_MOBILE) + found = 1 + if zxsync.vcard.VOICE in vcardTypes: + retVal.append(HOME_PHONE) + found = 1 + if (not (zxsync.vcard.PAGER in vcardTypes)) and (not found): + retVal.append(HOME_PHONE) + if zxsync.vcard.WORK in vcardTypes: + found = 0 + if zxsync.vcard.FAX in vcardTypes: + retVal.append(BUSINESS_FAX) + found = 1 + if zxsync.vcard.CELL in vcardTypes: + retVal.append(BUSINESS_MOBILE) + found = 1 + if zxsync.vcard.VOICE in vcardTypes: + retVal.append(BUSINESS_PHONE) + found = 1 + if zxsync.vcard.PAGER in vcardTypes: + retVal.append(BUSINESS_PAGER) + found = 1 + if not found: + retVal.append(BUSINESS_PHONE) + return retVal + def getValue(dict, key): *************** *** 387,391 **** entryXML = addField(entryXML, HOME_MOBILE, phoneValue) phoneAdded = 1 ! if zxsync.vcard.VOICE in phoneTypes or not phoneAdded: entryXML = addField(entryXML, HOME_PHONE, phoneValue) if zxsync.vcard.WORK in phoneTypes: --- 434,438 ---- entryXML = addField(entryXML, HOME_MOBILE, phoneValue) phoneAdded = 1 ! if (not (zxsync.vcard.PAGER) in phoneTypes) and (not phoneAdded): entryXML = addField(entryXML, HOME_PHONE, phoneValue) if zxsync.vcard.WORK in phoneTypes: *************** *** 400,404 **** entryXML = addField(entryXML, BUSINESS_PAGER, phoneValue) phoneAdded = 1 ! if zxsync.vcard.VOICE in phoneTypes or not phoneAdded: entryXML = addField(entryXML, BUSINESS_PHONE, phoneValue) --- 447,451 ---- entryXML = addField(entryXML, BUSINESS_PAGER, phoneValue) phoneAdded = 1 ! if not phoneAdded: entryXML = addField(entryXML, BUSINESS_PHONE, phoneValue) *************** *** 476,477 **** --- 523,603 ---- zaurusXML.encode("UTF-8")) + + def notifyAddField(self, newField, parentEntry): + """ + Called to notify the plugin when a field is about to be added to + zXSync's internal pool of data for this application. + """ + fieldId = newField.getId() + if not (fieldId in supportedFields): + return 0 + fieldTypes = newField.getTypes() + sameFields = parentEntry.getChildrenWithId(fieldId) + + # check ADR field + if fieldId == zxsync.vcard.ADR: + fieldOK = 0 + for fieldType in fieldTypes: + if fieldType == zxsync.vcard.WORK or \ + fieldType == zxsync.vcard.HOME: + for address in sameFields: + if fieldType in address.getTypes(): + # only one address of a type is supported + break + else: + fieldOK = 1 + index += 1 + return fieldOK + + # check TEL field + if fieldId == zxsync.vcard.TEL: + zaurusTypes = getTelTypes(fieldTypes) + if len(zaurusTypes) == 0: + return 0 + for phoneNumber in sameFields: + otherZaurusTypes = getTelTypes(phoneNumber.getTypes()) + index = 0 + while index < len(zaurusTypes): + zaurusType = zaurusTypes[index] + if zaurusType in otherZaurusTypes: + # only one number of a certain type + # (e.g. BUSINESS_FAX) is allowed + del zaurusTypes[index] + index -= 1 + index += 1 + return (len(zaurusTypes) > 0) + + # check NOTE field + if fieldId == zxsync.vcard.NOTE: + if len(sameFields) > 0: + return 0 + return 1 + + # check ORG field + if fieldId == zxsync.vcard.ORG: + if len(sameFields) > 0: + return 0 + return 1 + + # check TITLE field + if fieldId == zxsync.vcard.TITLE: + if len(sameFields) > 0: + return 0 + return 1 + + # check URL field + if fieldId == zxsync.vcard.X_URL_HOME: + if len(sameFields) > 0: + return 0 + return 1 + if fieldId == zxsync.vcard.X_URL_WORK: + if len(sameFields) > 0: + return 0 + return 1 + if fieldId == zxsync.vcard.URL: + if len(entry.getChildrenWithId(zxsync.vcard.X_URL_HOME)) > 0: + return 0 + return 1 + + return 1 + |