author | zautrix <zautrix> | 2004-10-30 00:27:02 (UTC) |
---|---|---|
committer | zautrix <zautrix> | 2004-10-30 00:27:02 (UTC) |
commit | af857a738da80e9eb68cf311832d44ecb9caf1dd (patch) (side-by-side diff) | |
tree | 7e45bdfeb5d2f70f8125f5fed20c28366de91c9a /kabc | |
parent | 84afedde379f67982d96dc9efa7abf9d200734e4 (diff) | |
download | kdepimpi-af857a738da80e9eb68cf311832d44ecb9caf1dd.zip kdepimpi-af857a738da80e9eb68cf311832d44ecb9caf1dd.tar.gz kdepimpi-af857a738da80e9eb68cf311832d44ecb9caf1dd.tar.bz2 |
fixed DTM sync cat handling
-rw-r--r-- | kabc/plugins/sharpdtm/resourcesharpdtm.cpp | 4 | ||||
-rw-r--r-- | kabc/plugins/sharpdtm/sharpdtmconverter.cpp | 154 | ||||
-rw-r--r-- | kabc/plugins/sharpdtm/sharpdtmconverter.h | 1 |
3 files changed, 100 insertions, 59 deletions
diff --git a/kabc/plugins/sharpdtm/resourcesharpdtm.cpp b/kabc/plugins/sharpdtm/resourcesharpdtm.cpp index 7069f5d..6413b42 100644 --- a/kabc/plugins/sharpdtm/resourcesharpdtm.cpp +++ b/kabc/plugins/sharpdtm/resourcesharpdtm.cpp @@ -107,195 +107,197 @@ void ResourceSharpDTM::writeConfig( KConfig *config ) { Resource::writeConfig( config ); } Ticket *ResourceSharpDTM::requestSaveTicket() { qDebug("ResourceSharpDTM::requestSaveTicket: %s", fileName().latin1()); if ( !addressBook() ) return 0; return createTicket( this ); } bool ResourceSharpDTM::doOpen() { if (!mConverter) return false; return true; } void ResourceSharpDTM::doClose() { return; } bool ResourceSharpDTM::load() { if (!mConverter) return false; QString fileN = SlZDataBase::addressbookFileName(); if ( ! mAccess ) { mAccess = new SlZDataBase(fileN, SlZDataBase::addressbookItems(), 0, false); } if(mAccess == 0) return false; qDebug("%xResourceSharpDTM::load: %s",this, fileName().latin1()); bool res = false; CardId id; for (bool res=mAccess->first(); res == true; res=mAccess->next()) { id = mAccess->cardId(); KABC::Addressee addressee; res = mConverter->sharpToAddressee( id, mAccess, addressee ); if ( !addressee.isEmpty() && res ) { addressee.setResource( this ); addressBook()->insertAddressee( addressee ); } } if(mAccess != 0) delete mAccess; mAccess = 0; return true; } bool ResourceSharpDTM::save( Ticket *ticket ) { if (!mConverter) return false; QString fileN = SlZDataBase::addressbookFileName(); if ( ! mAccess ) { mAccess = new SlZDataBase(fileN, SlZDataBase::addressbookItems(), 0, false); } if(mAccess == 0) return false; qDebug("ResourceSharpDTM::save: %s", fileName().latin1()); KABC::AddressBook::Iterator it; bool res; KABC::Addressee::List changedAddressees; typedef QMap<int,QString> AddresseeMap; AddresseeMap map; CardId id ; for ( it = addressBook()->begin(); it != addressBook()->end(); ++it ) { if ( (*it).tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL ) { QString uid = (*it).originalExternalUID(); bool res; if ( uid.isEmpty() ) id = 0; else id = uid.toUInt(); KABC::Addressee addressee = (*it); if ( (*it).tempSyncStat() == SYNC_TEMPSTATE_ADDED_EXTERNAL ) { res = mAccess->startEditCard(id); if (res == true) { res = mConverter->addresseeToSharp( (*it), mAccess, id ); if (res == true) { - res = mAccess->finishEditCard(&id);; + res = mAccess->finishEditCard(&id);; + mConverter->setCategories( (*it), mAccess, id ); map.insert(id,(*it).uid()); if (res == false) qDebug("Unable to append Contact: %s", addressee.formattedName().latin1()); } else { qDebug("Unable to convert Addressee: %s", addressee.formattedName().latin1()); mAccess->cancelEditCard(); } } } else if ( (*it).tempSyncStat() == SYNC_TEMPSTATE_DELETE ) { res = mAccess->deleteCard(&id); if ( !res ) qDebug("delete error "); } else if ( (*it).tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL ) { //changed res = mAccess->startEditCard(id); if (res == true) { res = mConverter->addresseeToSharp( (*it), mAccess, id ); if (res == true) { res = mAccess->finishEditCard(&id); + mConverter->setCategories( (*it), mAccess, id ); map.insert(id,(*it).uid()); if (res == false) qDebug("Unable to append Contact: %s", addressee.formattedName().latin1()); } else { qDebug("Unable to convert Addressee: %s", addressee.formattedName().latin1()); mAccess->cancelEditCard(); } } } } } AddresseeMap::Iterator itam; for ( res=mAccess->first(); res == true; res=mAccess->next()) { id = mAccess->cardId(); int idint = id; itam = map.find( idint ); if ( itam != map.end() ) { KABC::Addressee addressee; res = mConverter->sharpToAddressee( id, mAccess, addressee ); if ( !addressee.isEmpty() && res ) { addressee.setResource( this ); addressee.setUid( itam.data() ); addressee.setTempSyncStat( SYNC_TEMPSTATE_NEW_ID ); addressBook()->insertAddressee( addressee , false ); } } } delete ticket; if(mAccess != 0) delete mAccess; mAccess = 0; return true; } bool ResourceSharpDTM::lock( const QString &lockfileName ) { return true; } void ResourceSharpDTM::unlock( const QString &fileName ) { } void ResourceSharpDTM::setFileName( const QString &newFileName ) { Resource::setFileName( newFileName ); } void ResourceSharpDTM::fileChanged() { } void ResourceSharpDTM::removeAddressee( const Addressee &addr ) { } void ResourceSharpDTM::cleanUp() { } diff --git a/kabc/plugins/sharpdtm/sharpdtmconverter.cpp b/kabc/plugins/sharpdtm/sharpdtmconverter.cpp index 396be0a..ae4cfbb 100644 --- a/kabc/plugins/sharpdtm/sharpdtmconverter.cpp +++ b/kabc/plugins/sharpdtm/sharpdtmconverter.cpp @@ -214,231 +214,269 @@ bool SharpDTMConverter::sharpToAddressee( const CardId &contact, const SlZDataBa 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 = KGlobal::locale()->readDate( db->readField(ZdbAdrs::Anniversary) ); if (ann.isValid()) { QString dt = KGlobal::locale()->formatDate(ann, true, KLocale::ISODate); //qDebug("qtopiaToAddressee annyversary found:%s", dt.latin1()); addr.insertCustom( "KADDRESSBOOK", "X-Anniversary", dt); } addr.insertCustom( "KADDRESSBOOK", "X-Children", db->readField(ZdbAdrs::Children) ); QDate birthd = KGlobal::locale()->readDate( db->readField(ZdbAdrs::Birthday) ); //qDebug("birtd %s ", birthd.toString().latin1()); 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"; if ( addr.url().isEmpty() ) addr.setUrl( db->readField(ZdbAdrs::BusinessWebPage) ); addr.setNote( db->readField(ZdbAdrs::Notes).replace( QRegExp("\\r"), "")); //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 ) { bool cellHome = false, cellWork = false; // 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!!\n%s",addr.formattedName().latin1() ); QString formattedName = addr.formattedName(); if ( formattedName.isEmpty() ) { if ( !addr.familyName().isEmpty() ) { formattedName = addr.familyName(); if ( !addr.givenName().isEmpty() ) { formattedName += ", "; formattedName += addr.givenName(); } } else formattedName = addr.givenName(); } database->writeField(ZdbAdrs::FileAs, formattedName); database->writeField(ZdbAdrs::FullName, 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()) { - //qDebug("write home address "); - 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()); - } - + 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()); - + database->writeField(ZdbAdrs::HomePhone, homephone.number()); PhoneNumber homefax = addr.phoneNumber( PhoneNumber::Home | PhoneNumber::Fax ); - if (!homefax.number().isEmpty()) - database->writeField(ZdbAdrs::HomeFax, homefax.number()); - + database->writeField(ZdbAdrs::HomeFax, homefax.number()); PhoneNumber homemobile = addr.phoneNumber( PhoneNumber::Home | PhoneNumber::Cell ); + database->writeField(ZdbAdrs::HomeMobile, homemobile.number()); if (!homemobile.number().isEmpty()) { - database->writeField(ZdbAdrs::HomeMobile, homemobile.number()); cellHome = true; } - database->writeField(ZdbAdrs::HomeWebPage, addr.url().url()); - - // business const Address businessaddress = addr.address(Address::Work); - if (!businessaddress.isEmpty()) { //qDebug("write business address "); - 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()); - } - + 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()); + database->writeField(ZdbAdrs::BusinessPhone, businessphone.number()); PhoneNumber businessfax = addr.phoneNumber( PhoneNumber::Work | PhoneNumber::Fax ); - if (!businessfax.number().isEmpty()) - database->writeField(ZdbAdrs::BusinessFax, businessfax.number()); + database->writeField(ZdbAdrs::BusinessFax, businessfax.number()); PhoneNumber businessmobile = addr.phoneNumber( PhoneNumber::Work | PhoneNumber::Cell ); + database->writeField(ZdbAdrs::BusinessMobile, businessmobile.number()); if (!businessmobile.number().isEmpty()) { cellWork = true; - database->writeField(ZdbAdrs::BusinessMobile, businessmobile.number()); } PhoneNumber mobile = addr.phoneNumber( PhoneNumber::Cell ); if (! mobile.number().isEmpty()) { if ( ! cellHome ) database->writeField(ZdbAdrs::HomeMobile, mobile.number()); else if (! cellWork ) database->writeField(ZdbAdrs::BusinessMobile, mobile.number()); } PhoneNumber businesspager = addr.phoneNumber( PhoneNumber::Work | PhoneNumber::Pager ); - if (!businesspager.number().isEmpty()) - database->writeField(ZdbAdrs::BusinessPager, businesspager.number()); + 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 + QString dateS ; + QDate dt = KGlobal::locale()->readDate(addr.custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d"); // = Qt::ISODate if ( dt.isValid() ) { - QString dateS = KGlobal::locale()->formatDate(dt, true ); - database->writeField(ZdbAdrs::Anniversary, dateS ); + dateS = KGlobal::locale()->formatDate(dt, true ); } + database->writeField(ZdbAdrs::Anniversary, dateS ); database->writeField(ZdbAdrs::Children, addr.custom( "KADDRESSBOOK", "X-Children" )); - dt = addr.birthday().date(); + dt = addr.birthday().date(); + dateS = ""; if ( dt.isValid() ) { - QString dateS = KGlobal::locale()->formatDate(dt, true ); - database->writeField(ZdbAdrs::Birthday, dateS); + dateS = KGlobal::locale()->formatDate(dt, true ); } + database->writeField(ZdbAdrs::Birthday, dateS); 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; +//US QStringList groupList() const; //qDebug("SharpDTMConverter::addresseeToSharp please check if category transformation works"); - QStringList cats = addr.categories(); - int ii; - for ( ii = 0; ii < cats.count() ;++ii ) { - if ( !catDB->exists( cats[ii] )) - catDB->addCategory(cats[ii]); - } - QArray<int> iar; - if ( !cats.isEmpty() ) { - QArray<int> iar = catDB->ids(cats); - //qDebug("***cat count is %d ", iar.count()); - database->updateCategories(contact, iar); - } - return true; } + +bool SharpDTMConverter::setCategories( const Addressee &addr, SlZDataBase* database , const CardId &contact ) +{ + QStringList list = addr.categories(); + + QArray<int> ids(list.count()); + uint index = 0; + for(uint i=0; i<ids.size(); i++){ + if(catDB->exists(list[i])){ + ids[index] = catDB->id(list[i]); + qDebug("set ex cat %d %s ",ids[index] , list[i].latin1()); + index++; + } else { + ids[index] = catDB->addCategory(list[i]); + qDebug("add new cat %d %s ",ids[index] , list[i].latin1()); + index++; + } + } + bool res ; + if ( res = database->updateCategories(contact, ids) ) + qDebug("cat updated "); + else + qDebug("error cat updating "); + + return res; +} + +#if 0 + m_pCategories = new SlCategories; +catDB + + if(categories == QString::null) return true; + QStringList list = CSVParser::parse(categories); + QArray<int> ids(list.count()); + uint index = 0; + for(uint i=0; i<ids.size(); i++){ +#if 0 + bool ok; + ids[index] = list[i].toInt(&ok); + if(ok){ + index++; + } else { + if(m_pCategories->exists(list[i])){ + ids[index] = m_pCategories->id(list[i]); + index++; + } + } +#else + if(m_pCategories->exists(list[i])){ + ids[index] = m_pCategories->id(list[i]); + index++; + } else if(m_addCategory){ + ids[index] = m_pCategories->addCategory(list[i]); + index++; + } +#endif + } + if(ids.size() > 0 && index == 0){ + return true; + } else if(index != ids.size()){ + ids.resize(index); + } + if(!m_pZdb->updateCategories(id, ids)){ + return false; + } + return true; +#endif + QDate SharpDTMConverter::convertDate( QString s) { QDate dt = KGlobal::locale()->readDate( s ); return dt; return QDate (); } diff --git a/kabc/plugins/sharpdtm/sharpdtmconverter.h b/kabc/plugins/sharpdtm/sharpdtmconverter.h index a04083e..db1bf2d 100644 --- a/kabc/plugins/sharpdtm/sharpdtmconverter.h +++ b/kabc/plugins/sharpdtm/sharpdtmconverter.h @@ -1,87 +1,88 @@ /* 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 ); + bool setCategories( const Addressee &addr, SlZDataBase* database , const CardId &contact ); private: SlCategory::SlCategories* catDB; QDate convertDate( QString ); }; } #endif |