-rw-r--r-- | kabc/plugins/sharpdtm/sharpdtmE.pro | 6 | ||||
-rw-r--r-- | kabc/plugins/sharpdtm/sharpdtmconverter.cpp | 384 | ||||
-rw-r--r-- | kabc/plugins/sharpdtm/sharpdtmconverter.h | 86 |
3 files changed, 474 insertions, 2 deletions
diff --git a/kabc/plugins/sharpdtm/sharpdtmE.pro b/kabc/plugins/sharpdtm/sharpdtmE.pro index a03454f..54ef083 100644 --- a/kabc/plugins/sharpdtm/sharpdtmE.pro +++ b/kabc/plugins/sharpdtm/sharpdtmE.pro @@ -1,29 +1,31 @@ TEMPLATE = lib CONFIG += qt warn_on TARGET = microkabc_sharpdtm -INCLUDEPATH += ../.. $(SHARPDTMSDK)/include ../../converter/sharpdtm ../../../microkde ../../../microkde/kdecore ../../../microkde/kio/kfile ../../../microkde/kio/kio ../../../qtcompat $(QPEDIR)/include +INCLUDEPATH += ../.. $(SHARPDTMSDK)/include ../../../microkde ../../../microkde/kdecore ../../../microkde/kio/kfile ../../../microkde/kio/kio ../../../qtcompat $(QPEDIR)/include OBJECTS_DIR = obj/$(PLATFORM) MOC_DIR = moc/$(PLATFORM) DESTDIR = $(QPEDIR)/lib LIBS += -lmicrokde LIBS += -lmicrokabc LIBS += -L$(QPEDIR)/lib LIBS += -lqpe LIBS += -lqte LIBS += -lzdtm -LIBS += -lmicrokabc_sharpdtmconverter + INTERFACES = \ HEADERS = \ resourcesharpdtm.h \ resourcesharpdtmconfig.h \ + sharpdtmconverter.h SOURCES = \ resourcesharpdtm.cpp \ resourcesharpdtmconfig.cpp \ + sharpdtmconverter.cpp diff --git a/kabc/plugins/sharpdtm/sharpdtmconverter.cpp b/kabc/plugins/sharpdtm/sharpdtmconverter.cpp new file mode 100644 index 0000000..8f8334e --- a/dev/null +++ b/kabc/plugins/sharpdtm/sharpdtmconverter.cpp @@ -0,0 +1,384 @@ +/* + This file is part of libkabc. + Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. +*/ + +/* +Enhanced Version of the file for platform independent KDE tools. +Copyright (c) 2004 Ulf Schenk + +$Id$ +*/ + +#include "kglobal.h" + + +#include "sharpdtmconverter.h" + +#include <sl/slcategories.h> +//US #include <qpe/categoryselect.h> + + +using namespace KABC; +using namespace SlCategory; + +SharpDTMConverter::SharpDTMConverter() : catDB(0) +{ +} + +SharpDTMConverter::~SharpDTMConverter() +{ + deinit(); +} + +bool SharpDTMConverter::init() +{ + catDB = new SlCategory::SlCategories(); + + if (!catDB) + return false; + +// catDB->load( categoryFileName() ); + return true; +} + +void SharpDTMConverter::deinit() +{ + if (catDB) + { + delete catDB; + catDB = 0; + } +} + +bool SharpDTMConverter::sharpToAddressee( const CardId &contact, const SlZDataBase* database, Addressee &addr ) +{ + SlZDataBase* db = (SlZDataBase*)database; + // name + qDebug("SharpDTMConverter::sharpToAddressee check if the fileAs transformation works!!"); + addr.setFormattedName(db->readField(ZdbAdrs::FileAs)); + + addr.setFamilyName( db->readField(ZdbAdrs::LastName) ); + addr.setGivenName( db->readField(ZdbAdrs::FirstName) ); + addr.setAdditionalName( db->readField(ZdbAdrs::MiddleName) ); + addr.setPrefix( db->readField(ZdbAdrs::Title) ); + addr.setSuffix( db->readField(ZdbAdrs::Suffix) ); + + + // email + QString emailstr = db->readField(ZdbAdrs::Emails); + qDebug("SharpDTMConverter::sharpToAddressee whats the character to seperate the emailadresses? %s ", emailstr.latin1()); + QStringList emails = QStringList::split(",", emailstr); + + for ( QStringList::Iterator it = emails.begin(); it != emails.end(); ++it ) { + addr.insertEmail( *it, ((*it) == db->readField(ZdbAdrs::DefaultEmail)) ); + } + + if (!db->readField(ZdbAdrs::DefaultEmail).isEmpty()) + addr.insertEmail(db->readField(ZdbAdrs::DefaultEmail), true); + + // home + if ((!db->readField(ZdbAdrs::HomeStreet).isEmpty()) || + (!db->readField(ZdbAdrs::HomeCity).isEmpty()) || + (!db->readField(ZdbAdrs::HomeState).isEmpty()) || + (!db->readField(ZdbAdrs::HomeZip).isEmpty()) || + (!db->readField(ZdbAdrs::HomeCountry).isEmpty())) + { + Address homeaddress; + homeaddress.setType(Address::Home); +//US homeaddress.setPostOfficeBox( "" ); +//US homeaddress.setExtended( "" ); + homeaddress.setStreet( db->readField(ZdbAdrs::HomeStreet) ); + homeaddress.setLocality( db->readField(ZdbAdrs::HomeCity) ); + homeaddress.setRegion( db->readField(ZdbAdrs::HomeState) ); + homeaddress.setPostalCode( db->readField(ZdbAdrs::HomeZip) ); + homeaddress.setCountry( db->readField(ZdbAdrs::HomeCountry) ); + + addr.insertAddress( homeaddress ); + } + + if (!db->readField(ZdbAdrs::HomePhone).isEmpty()) + { + PhoneNumber homephone; + homephone.setType( PhoneNumber::Home ); + homephone.setNumber( db->readField(ZdbAdrs::HomePhone) ); + addr.insertPhoneNumber( homephone ); + } + + if (!db->readField(ZdbAdrs::HomeFax).isEmpty()) + { + PhoneNumber homefax; + homefax.setType( PhoneNumber::Home | PhoneNumber::Fax ); + homefax.setNumber( db->readField(ZdbAdrs::HomeFax) ); + addr.insertPhoneNumber( homefax ); + } + + if (!db->readField(ZdbAdrs::HomeMobile).isEmpty()) + { + PhoneNumber homemobile; + homemobile.setType( PhoneNumber::Home | PhoneNumber::Cell ); + homemobile.setNumber( db->readField(ZdbAdrs::HomeMobile) ); + addr.insertPhoneNumber( homemobile ); + } + + addr.setUrl( db->readField(ZdbAdrs::HomeWebPage) ); + + + // business + if ((!db->readField(ZdbAdrs::BusinessStreet).isEmpty()) || + (!db->readField(ZdbAdrs::BusinessCity).isEmpty()) || + (!db->readField(ZdbAdrs::BusinessState).isEmpty()) || + (!db->readField(ZdbAdrs::BusinessZip).isEmpty()) || + (!db->readField(ZdbAdrs::BusinessCountry).isEmpty())) + { + Address businessaddress; + businessaddress.setType(Address::Work); +//US businessaddress.setPostOfficeBox( "" ); +//US businessaddress.setExtended( "" ); + businessaddress.setStreet( db->readField(ZdbAdrs::BusinessStreet) ); + businessaddress.setLocality( db->readField(ZdbAdrs::BusinessCity) ); + businessaddress.setRegion( db->readField(ZdbAdrs::BusinessState) ); + businessaddress.setPostalCode( db->readField(ZdbAdrs::BusinessZip) ); + businessaddress.setCountry( db->readField(ZdbAdrs::BusinessCountry) ); + + addr.insertAddress( businessaddress ); + } + + + if (!db->readField(ZdbAdrs::BusinessPhone).isEmpty()) + { + PhoneNumber businessphone; + businessphone.setType( PhoneNumber::Work ); + businessphone.setNumber( db->readField(ZdbAdrs::BusinessPhone) ); + addr.insertPhoneNumber( businessphone ); + } + + if (!db->readField(ZdbAdrs::BusinessFax).isEmpty()) + { + PhoneNumber businessfax; + businessfax.setType( PhoneNumber::Work | PhoneNumber::Fax ); + businessfax.setNumber( db->readField(ZdbAdrs::BusinessFax) ); + addr.insertPhoneNumber( businessfax ); + } + + if (!db->readField(ZdbAdrs::BusinessMobile).isEmpty()) + { + PhoneNumber businessmobile; + businessmobile.setType( PhoneNumber::Work | PhoneNumber::Cell ); + businessmobile.setNumber( db->readField(ZdbAdrs::BusinessMobile) ); + addr.insertPhoneNumber( businessmobile ); + } + + if (!db->readField(ZdbAdrs::BusinessPager).isEmpty()) + { + PhoneNumber businesspager; + businesspager.setType( PhoneNumber::Work | PhoneNumber::Pager ); + businesspager.setNumber( db->readField(ZdbAdrs::BusinessPager) ); + addr.insertPhoneNumber( businesspager ); + } + + addr.setRole( db->readField(ZdbAdrs::JobTitle) ); //? + addr.setOrganization( db->readField(ZdbAdrs::Company) ); + addr.insertCustom( "KADDRESSBOOK", "X-Profession", db->readField(ZdbAdrs::Profession) ); + addr.insertCustom( "KADDRESSBOOK", "X-AssistantsName", db->readField(ZdbAdrs::Assistant) ); + addr.insertCustom( "KADDRESSBOOK", "X-Department", db->readField(ZdbAdrs::Department) ); + addr.insertCustom( "KADDRESSBOOK", "X-ManagersName", db->readField(ZdbAdrs::Manager) ); + addr.insertCustom( "KADDRESSBOOK", "X-Office", db->readField(ZdbAdrs::Office) ); + + //personal + addr.insertCustom( "KADDRESSBOOK", "X-SpousesName", db->readField(ZdbAdrs::Spouse) ); + + QString gen = db->readField(ZdbAdrs::Gender); + qDebug("SharpDTMConverter::sharpToAddressee pleas check that gender works!! : Gender: %s", gen.latin1()); + qDebug("SharpDTMConverter::sharpToAddressee: may be int db->readUshortField(\"ZdbAdrs::Gender\") is here better suited"); + + if (gen == "male") + addr.insertCustom( "KADDRESSBOOK", "X-Gender", "male"); + else if (gen == "female") + addr.insertCustom( "KADDRESSBOOK", "X-Gender", "female"); + + + QDate ann = db->readDateField(ZdbAdrs::Anniversary); + + if (ann.isValid()) { + QString dt = KGlobal::locale()->formatDate(ann, true, KLocale::ISODate); +//US +// qDebug("QtopiaConverter::qtopiaToAddressee found:%s", dt.latin1()); + addr.insertCustom( "KADDRESSBOOK", "X-Anniversary", dt); + } + + addr.insertCustom( "KADDRESSBOOK", "X-Children", db->readField(ZdbAdrs::Children) ); + + + QDate birthd = db->readDateField(ZdbAdrs::Birthday); + if (birthd.isValid()) + addr.setBirthday( birthd ); + + addr.setNickName( db->readField(ZdbAdrs::Nickname) ); + + // others + //US I put opies BusinessWebPage into Ka/Pi's notes block, because no other native field is available. + QString notes = db->readField(ZdbAdrs::Notes); + notes += "\nBusinessWebPage: " + db->readField(ZdbAdrs::BusinessWebPage) + "\n"; + + addr.setNote( db->readField(ZdbAdrs::Notes) ); + + + +//US QString groups() const { return find( Qtopia::Groups ); } +//US QStringList groupList() const; + + qDebug("SharpDTMConverter::sharpToAddressee please check that the categories will be converted" ); + QArray<int> catArray = db->readCategories(); + QString cat; + + for ( unsigned int i=0; i < catArray.size(); i++ ) { + cat = catDB->label(catArray[i]); + if ( cat.isEmpty() ) + addr.insertCategory(QString::number(catArray[i])); + else + addr.insertCategory( cat ); + } + + return true; +} + +bool SharpDTMConverter::addresseeToSharp( const Addressee &addr, SlZDataBase* database , const CardId &contact ) +{ + // name + database->writeField(ZdbAdrs::LastName, addr.familyName()); + database->writeField(ZdbAdrs::FirstName, addr.givenName()); + database->writeField(ZdbAdrs::MiddleName, addr.additionalName()); + database->writeField(ZdbAdrs::Title, addr.prefix()); + database->writeField(ZdbAdrs::Suffix, addr.suffix()); + + qDebug("SharpDTMConverter::addresseeToSharp check if the fileAs transformation works!!"); + database->writeField(ZdbAdrs::FileAs, addr.formattedName()); + + + // email + qDebug("SharpDTMConverter::addresseeToSharp check which seperator we need here for the emails!!"); + qDebug("SharpDTMConverter::addresseeToSharp its probably the same from sharpToAddressee"); + QString emails = addr.emails().join(","); + database->writeField(ZdbAdrs::Emails, emails ); + + database->writeField(ZdbAdrs::DefaultEmail, addr.preferredEmail() ); + + + // home + const Address homeaddress = addr.address(Address::Home); + if (!homeaddress.isEmpty()) { + database->writeField(ZdbAdrs::HomeStreet, homeaddress.street()); + database->writeField(ZdbAdrs::HomeCity, homeaddress.locality()); + database->writeField(ZdbAdrs::HomeState, homeaddress.region()); + database->writeField(ZdbAdrs::HomeZip, homeaddress.postalCode()); + database->writeField(ZdbAdrs::HomeCountry, homeaddress.country()); + } + + PhoneNumber homephone = addr.phoneNumber( PhoneNumber::Home ); + if (!homephone.number().isEmpty()) + database->writeField(ZdbAdrs::HomePhone, homephone.number()); + + PhoneNumber homefax = addr.phoneNumber( PhoneNumber::Home | PhoneNumber::Fax ); + if (!homefax.number().isEmpty()) + database->writeField(ZdbAdrs::HomeFax, homefax.number()); + + PhoneNumber homemobile = addr.phoneNumber( PhoneNumber::Home | PhoneNumber::Cell ); + if (!homemobile.number().isEmpty()) + database->writeField(ZdbAdrs::HomeMobile, homemobile.number()); + + database->writeField(ZdbAdrs::HomeWebPage, addr.url().url()); + + + // business + const Address businessaddress = addr.address(Address::Work); + if (!businessaddress.isEmpty()) { + database->writeField(ZdbAdrs::BusinessStreet, businessaddress.street()); + database->writeField(ZdbAdrs::BusinessCity, businessaddress.locality()); + database->writeField(ZdbAdrs::BusinessState, businessaddress.region()); + database->writeField(ZdbAdrs::BusinessZip, businessaddress.postalCode()); + database->writeField(ZdbAdrs::BusinessCountry, businessaddress.country()); + } + + PhoneNumber businessphone = addr.phoneNumber( PhoneNumber::Work ); + if (!businessphone.number().isEmpty()) + database->writeField(ZdbAdrs::BusinessPhone, businessphone.number()); + + PhoneNumber businessfax = addr.phoneNumber( PhoneNumber::Work | PhoneNumber::Fax ); + if (!businessfax.number().isEmpty()) + database->writeField(ZdbAdrs::BusinessFax, businessfax.number()); + + PhoneNumber businessmobile = addr.phoneNumber( PhoneNumber::Work | PhoneNumber::Cell ); + if (!businessmobile.number().isEmpty()) + database->writeField(ZdbAdrs::BusinessMobile, businessmobile.number()); + + PhoneNumber businesspager = addr.phoneNumber( PhoneNumber::Work | PhoneNumber::Pager ); + if (!businesspager.number().isEmpty()) + database->writeField(ZdbAdrs::BusinessPager, businesspager.number()); + + database->writeField(ZdbAdrs::JobTitle, addr.role()); + database->writeField(ZdbAdrs::Company, addr.organization()); + + database->writeField(ZdbAdrs::Profession, addr.custom( "KADDRESSBOOK", "X-Profession" )); + database->writeField(ZdbAdrs::Assistant, addr.custom( "KADDRESSBOOK", "X-AssistantsName" )); + database->writeField(ZdbAdrs::Department, addr.custom( "KADDRESSBOOK", "X-Department" )); + database->writeField(ZdbAdrs::Manager, addr.custom( "KADDRESSBOOK", "X-ManagersName" )); + database->writeField(ZdbAdrs::Office, addr.custom( "KADDRESSBOOK", "X-Office" )); + + //personal + database->writeField(ZdbAdrs::Spouse, addr.custom( "KADDRESSBOOK", "X-Spouse" )); + + QString gt = addr.custom( "KADDRESSBOOK", "X-Gender" ); + qDebug("SharpDTMConverter::addresseeToSharp please check that gender works!! : Gender: %s", gt.latin1()); + qDebug("SharpDTMConverter::addresseeToSharp: may be writeField(\"ZdbAdrs::Gender\", ushort) is here better suited?"); + qDebug("SharpDTMConverter::addresseeToSharp: check also the reverse functionality in sharpToAddressee"); + if (gt = "male") + database->writeField(ZdbAdrs::Gender, "male"); + else if (gt = "female") + database->writeField(ZdbAdrs::Gender, "female"); + else + database->writeField(ZdbAdrs::Gender, ""); + + + QDate dt = KGlobal::locale()->readDate( + addr.custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d"); // = Qt::ISODate + database->writeField(ZdbAdrs::Anniversary, dt ); + + database->writeField(ZdbAdrs::Children, addr.custom( "KADDRESSBOOK", "X-Children" )); + + database->writeField(ZdbAdrs::Birthday, addr.birthday().date()); + database->writeField(ZdbAdrs::Nickname, addr.nickName()); + + // other + database->writeField(ZdbAdrs::Notes, addr.note()); + +//US QString groups() const { return find( Qtopia::Groups ); } +//US QStringList groupList() const; + + + qDebug("SharpDTMConverter::addresseeToSharp please check if category transformation works"); + + QStringList cats = addr.categories(); + QArray<int> iar; + if ( !cats.isEmpty() ) { + QArray<int> iar = catDB->ids(cats); + database->updateCategories(contact, iar); + } + + return true; +} diff --git a/kabc/plugins/sharpdtm/sharpdtmconverter.h b/kabc/plugins/sharpdtm/sharpdtmconverter.h new file mode 100644 index 0000000..99e0413 --- a/dev/null +++ b/kabc/plugins/sharpdtm/sharpdtmconverter.h @@ -0,0 +1,86 @@ +/* + This file is part of libkabc. + Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. +*/ + +/* +Enhanced Version of the file for platform independent KDE tools. +Copyright (c) 2004 Ulf Schenk +$Id$ +*/ + +#ifndef KABC_SHARPDTMCONVERTER_H +#define KABC_SHARPDTMCONVERTER_H + +#include <qstring.h> + +#include <sl/slzdb.h> + +#include "addressee.h" + +namespace SlCategory { + class SlCategories; +} + +class SlZDataBase; + +namespace KABC { + +class SharpDTMConverter +{ +public: + + /** + * Constructor. + */ + SharpDTMConverter(); + + /** + * Destructor. + */ + virtual ~SharpDTMConverter(); + + bool init(); + void deinit(); + + /** + * Converts a given sharp card to an addressee. + * + * @param contact The sharp card id, eventhough it might be 0, if the contact is a new one. + * @param database The sharp database pointer we use for the conversion + * @param addr The addressee. + */ + bool sharpToAddressee( const CardId &contact, const SlZDataBase* database, Addressee &addr ); + + /** + * Converts an addressee to a sharp dtm contact. + * + * @param addr The addressee. + * @param database The sharp database pointer we use for the conversion + * @param contact The sharp card id, eventhough it might be 0, if the contact is a new one. + */ + bool addresseeToSharp( const Addressee &addr, SlZDataBase* database , const CardId &contact ); + + private: + SlCategory::SlCategories* catDB; + + +}; + +} +#endif |