author | zautrix <zautrix> | 2005-10-27 08:51:03 (UTC) |
---|---|---|
committer | zautrix <zautrix> | 2005-10-27 08:51:03 (UTC) |
commit | ff68b29b914fc3fbc3aa777d3e3ceeb8a64ecc09 (patch) (side-by-side diff) | |
tree | 0ed1f4c783ade8284a016cec611a61c586895261 /kabc/plugins | |
parent | 15b9123c6c1f9096a4b1a7729c323433d408c8d7 (diff) | |
download | kdepimpi-ff68b29b914fc3fbc3aa777d3e3ceeb8a64ecc09.zip kdepimpi-ff68b29b914fc3fbc3aa777d3e3ceeb8a64ecc09.tar.gz kdepimpi-ff68b29b914fc3fbc3aa777d3e3ceeb8a64ecc09.tar.bz2 |
files added
-rw-r--r-- | kabc/plugins/olaccess/olaccess.pro | 34 | ||||
-rw-r--r-- | kabc/plugins/olaccess/olaccessconverter.cpp | 444 | ||||
-rw-r--r-- | kabc/plugins/olaccess/olaccessconverter.h | 88 | ||||
-rw-r--r-- | kabc/plugins/olaccess/resourceolaccess.cpp | 303 | ||||
-rw-r--r-- | kabc/plugins/olaccess/resourceolaccess.h | 146 | ||||
-rw-r--r-- | kabc/plugins/olaccess/resourceolaccessconfig.cpp | 108 | ||||
-rw-r--r-- | kabc/plugins/olaccess/resourceolaccessconfig.h | 58 |
7 files changed, 1181 insertions, 0 deletions
diff --git a/kabc/plugins/olaccess/olaccess.pro b/kabc/plugins/olaccess/olaccess.pro new file mode 100644 index 0000000..ca0a6a8 --- a/dev/null +++ b/kabc/plugins/olaccess/olaccess.pro @@ -0,0 +1,34 @@ +TEMPLATE = lib +CONFIG += qt warn_on +TARGET = microkabc_olaccess + +include( ../../../variables.pri ) + +INCLUDEPATH += ../.. ../../../microkde ../../../microkde/kdecore ../../../microkde/kio/kfile ../../../microkde/kio/kio ../../../microkde/kresources ../../../qtcompat + +INTERFACES = \ + +HEADERS = \ + resourceolaccess.h \ + resourceolaccessconfig.h \ + olaccessconverter.h + +SOURCES = \ + resourceolaccess.cpp \ + resourceolaccessconfig.cpp \ + olaccessconverter.cpp + +unix : { +OBJECTS_DIR = obj/unix +MOC_DIR = moc/unix +} +win32: { +CONFIG += dll +DEFINES += _WIN32_ +OBJECTS_DIR = obj/win +MOC_DIR = moc/win +LIBS += ../../../bin/microkdepim.lib +LIBS += ../../../bin/microkcal.lib +LIBS += ../../../bin/microkde.lib +LIBS += ../../../bin/microkabc.lib +} diff --git a/kabc/plugins/olaccess/olaccessconverter.cpp b/kabc/plugins/olaccess/olaccessconverter.cpp new file mode 100644 index 0000000..4adcae4 --- a/dev/null +++ b/kabc/plugins/olaccess/olaccessconverter.cpp @@ -0,0 +1,444 @@ +/* + 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 <qregexp.h> + + +#include "sharpdtmconverter.h" + +#include <sl/slcategories.h> +#include <libkdepim/ksyncprofile.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; + + // for syncing: we need setting of the two fields + addr.setExternalUID( QString::number( contact ) ); + addr.setOriginalExternalUID( QString::number( contact ) ); + addr.setTempSyncStat( SYNC_TEMPSTATE_NEW_EXTERNAL ); + + + // name + //qDebug("SharpDTMConverter::sharpToAddressee check if the fileAs transformation works!!"); + addr.setFormattedName(db->readField(ZdbAdrs::FileAs)); + //addr.setName(db->readField(ZdbAdrs::FullName)); + + 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) ); + + + QString emailstr = db->readField(ZdbAdrs::Emails); + emailstr.replace( QRegExp(","), " " ); + emailstr.replace( QRegExp(";"), " " ); + emailstr.replace( QRegExp(":"), " " ); + //qDebug("SharpDTMConverter::sharpToAddressee whats the character to seperate the emailadresses? %s ", emailstr.latin1()); + QStringList emails = QStringList::split(" ", emailstr.simplifyWhiteSpace()); + bool defE = false; + bool found = false; + for ( QStringList::Iterator it = emails.begin(); it != emails.end(); ++it ) { + if (found ) + defE = false; + else + found = defE = ((*it).lower() == db->readField(ZdbAdrs::DefaultEmail).lower()); + addr.insertEmail( *it, defE ); + } + if ( ! found ) + 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).replace( QRegExp("\\r"), "")); + 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).replace( QRegExp("\\r"), "") ); + 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 == "1") + addr.insertCustom( "KADDRESSBOOK", "X-Gender", "male"); + else if (gen == "2") + addr.insertCustom( "KADDRESSBOOK", "X-Gender", "female"); + else + addr.insertCustom( "KADDRESSBOOK", "X-Gender", "undef"); + + + 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); + } else + addr.insertCustom( "KADDRESSBOOK", "X-Anniversary", " "); + + + + 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); + 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 ); + database->writeField(ZdbAdrs::HomePhone, homephone.number()); + PhoneNumber homefax = addr.phoneNumber( PhoneNumber::Home | PhoneNumber::Fax ); + database->writeField(ZdbAdrs::HomeFax, homefax.number()); + PhoneNumber homemobile = addr.phoneNumber( PhoneNumber::Home | PhoneNumber::Cell ); + database->writeField(ZdbAdrs::HomeMobile, homemobile.number()); + if (!homemobile.number().isEmpty()) { + cellHome = true; + } + database->writeField(ZdbAdrs::HomeWebPage, addr.url().url()); + // business + const Address businessaddress = addr.address(Address::Work); + //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()); + + PhoneNumber businessphone = addr.phoneNumber( PhoneNumber::Work ); + database->writeField(ZdbAdrs::BusinessPhone, businessphone.number()); + + PhoneNumber businessfax = addr.phoneNumber( PhoneNumber::Work | PhoneNumber::Fax ); + 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; + } + 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 ); + 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, "1"); + else if (gt == "female") + database->writeField(ZdbAdrs::Gender, "2"); + else + database->writeField(ZdbAdrs::Gender, ""); + + QString dateS ; + QDate dt = KGlobal::locale()->readDate(addr.custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d"); // = Qt::ISODate + if ( dt.isValid() ) { + dateS = KGlobal::locale()->formatDate(dt, true ); + } + database->writeField(ZdbAdrs::Anniversary, dateS ); + database->writeField(ZdbAdrs::Children, addr.custom( "KADDRESSBOOK", "X-Children" )); + dt = addr.birthday().date(); + dateS = ""; + if ( dt.isValid() ) { + 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; + + + //qDebug("SharpDTMConverter::addresseeToSharp please check if category transformation works"); + + 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 exist 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("SharpDTMConverter::Error updating categories"); + + return res; +} + +QDate SharpDTMConverter::convertDate( QString s) +{ + QDate dt = KGlobal::locale()->readDate( s ); + return dt; + return QDate (); +} diff --git a/kabc/plugins/olaccess/olaccessconverter.h b/kabc/plugins/olaccess/olaccessconverter.h new file mode 100644 index 0000000..db1bf2d --- a/dev/null +++ b/kabc/plugins/olaccess/olaccessconverter.h @@ -0,0 +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 diff --git a/kabc/plugins/olaccess/resourceolaccess.cpp b/kabc/plugins/olaccess/resourceolaccess.cpp new file mode 100644 index 0000000..e8f8bdd --- a/dev/null +++ b/kabc/plugins/olaccess/resourceolaccess.cpp @@ -0,0 +1,303 @@ +/* + This file is part of libkabc. + Copyright (c) 2004 Ulf Schenk + + 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 <sys/types.h> +#include <sys/stat.h> +#include <unistd.h> + +#include <qdir.h> +#include <qfile.h> +#include <qfileinfo.h> +#include <qregexp.h> +//US #include <qtimer.h> + +#include <kapplication.h> +#include <kconfig.h> +#include <kdebug.h> +#include <klocale.h> +//US #include <ksavefile.h> +#include <kstandarddirs.h> +#include <kmessagebox.h> + +#include <sl/slzdb.h> + +#include <libkdepim/ksyncprofile.h> + +#include "resourcesharpdtmconfig.h" +#include "resourcesharpdtm.h" + +#include "stdaddressbook.h" + +#include "sharpdtmconverter.h" +//#define ALLOW_LOCKING +using namespace KABC; +extern "C" +{ + void *init_microkabc_sharpdtm() + { + return new KRES::PluginFactory<ResourceSharpDTM,ResourceSharpDTMConfig>(); + } +} + +ResourceSharpDTM::ResourceSharpDTM( const KConfig *config ) + : Resource( config ), mConverter (0) +{ + // we can not choose the filename. Therefore use the default to display + mAccess = 0; + QString fileName = SlZDataBase::addressbookFileName(); + init( fileName ); +} + +ResourceSharpDTM::ResourceSharpDTM( const QString &fileName ) + : Resource( 0 ) +{ + mAccess = 0; + init( fileName ); +} + +void ResourceSharpDTM::init( const QString &fileName ) +{ + if (mConverter == 0) { + mConverter = new SharpDTMConverter(); + bool res = mConverter->init(); + if ( !res ) + { + QString msg("Unable to initialize sharp converter. Most likely a problem with the category file"); + qDebug(msg); + return; + } + } + setFileName( fileName ); +} + +ResourceSharpDTM::~ResourceSharpDTM() +{ + if (mConverter != 0) + delete mConverter; + + if(mAccess != 0) + delete mAccess; +} + +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, true); + } + if(mAccess == 0) + return false; + + qDebug("ResourceSharpDTM:: %x 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);; + 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/olaccess/resourceolaccess.h b/kabc/plugins/olaccess/resourceolaccess.h new file mode 100644 index 0000000..64d06f9 --- a/dev/null +++ b/kabc/plugins/olaccess/resourceolaccess.h @@ -0,0 +1,146 @@ +/* + This file is part of libkabc. + Copyright (c) 2004 Ulf Schenk + + 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_RESOURCESHARPDTM_H +#define KABC_RESOURCESHARPDTM_H + +#include <kconfig.h> +#include <kdirwatch.h> + +#include <sys/types.h> + +#include "resource.h" + + +class SlZDataBase; + +namespace KABC { + +class ResourceConfigWidget; +class SharpDTMConverter; + +/** + @internal +*/ +class ResourceSharpDTM : public Resource +{ + Q_OBJECT + +public: + + /** + Constructor. + + @param cfg The config object where custom resource settings are stored. + */ + ResourceSharpDTM( const KConfig *cfg ); + + /** + Construct file resource on file @arg fileName using format @arg formatName. + */ + ResourceSharpDTM( const QString &fileName ); + + /** + * Destructor. + */ + ~ResourceSharpDTM(); + + /** + Writes the config back. + */ + virtual void writeConfig( KConfig *cfg ); + + /** + * Tries to open the file and checks for the proper format. + * This method should be called before @ref load(). + */ + virtual bool doOpen(); + + /** + * Closes the file again. + */ + virtual void doClose(); + + /** + * Requests a save ticket, that is used by @ref save() + */ + virtual Ticket *requestSaveTicket(); + + /** + * Loads all addressees from file to the address book. + * Returns true if all addressees could be loaded otherwise false. + */ + virtual bool load(); + + /** + * Saves all addresses from address book to file. + * Returns true if all addressees could be saved otherwise false. + * + * @param ticket The ticket returned by @ref requestSaveTicket() + */ + virtual bool save( Ticket *ticket ); + + /** + * Remove a addressee from its source. + * This method is mainly called by KABC::AddressBook. + */ + virtual void removeAddressee( const Addressee& addr ); + + /** + * Set name of file to be used for saving. + */ + virtual void setFileName( const QString & ); + + /** + * This method is called by an error handler if the application + * crashed + */ + virtual void cleanUp(); + + +protected slots: + void fileChanged(); + +protected: + void init( const QString &fileName ); + + bool lock( const QString &fileName ); + void unlock( const QString &fileName ); + +private: + SlZDataBase* mAccess; + SharpDTMConverter* mConverter; + + QString mLockUniqueName; + + KDirWatch mDirWatch; +}; + +} + +#endif diff --git a/kabc/plugins/olaccess/resourceolaccessconfig.cpp b/kabc/plugins/olaccess/resourceolaccessconfig.cpp new file mode 100644 index 0000000..240f1d7 --- a/dev/null +++ b/kabc/plugins/olaccess/resourceolaccessconfig.cpp @@ -0,0 +1,108 @@ +/* + 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 <qlabel.h> +#include <qlayout.h> + +#include <kdebug.h> +#include <klocale.h> +#include <kstandarddirs.h> +#include <kdialog.h> + +#include <unistd.h> + +#include <qdir.h> +#include <qfile.h> +#include "resourcesharpdtm.h" + +#include "resourcesharpdtmconfig.h" + +#include <sl/slzdb.h> + +using namespace KABC; + +ResourceSharpDTMConfig::ResourceSharpDTMConfig( QWidget* parent, const char* name ) + : ConfigWidget( parent, name ) +{ + QGridLayout *mainLayout = new QGridLayout( this, 1, 2, 0, + KDialog::spacingHint() ); + + QLabel *label = new QLabel( i18n( "Location:" ), this ); + mFileNameEdit = new KURLRequester( this ); + + connect( mFileNameEdit, SIGNAL( textChanged( const QString & ) ), + SLOT( checkFilePermissions( const QString & ) ) ); + + mainLayout->addWidget( label, 0, 0 ); + mainLayout->addWidget( mFileNameEdit, 0, 1 ); + +} + +void ResourceSharpDTMConfig::loadSettings( KRES::Resource *res ) +{ +//US ResourceFile *resource = dynamic_cast<ResourceFile*>( res ); + ResourceSharpDTM *resource = (ResourceSharpDTM*)( res ); + + if ( !resource ) { + kdDebug(5700) << "ResourceSharpDTMConfig::loadSettings(): cast failed" << endl; + return; + } + + mFileNameEdit->setURL( resource->fileName() ); + if ( mFileNameEdit->url().isEmpty() ) + mFileNameEdit->setURL( SlZDataBase::addressbookFileName() ); + + //US Sharp DTM resources are ReadOnly by definition + emit setPersistentReadOnly( true ); + + //US we can not choose the filename for the sharp backend => make it readonly. + mFileNameEdit->setEnabled( false ); + +} + +void ResourceSharpDTMConfig::saveSettings( KRES::Resource *res ) +{ +//US ResourceFile *resource = dynamic_cast<ResourceFile*>( res ); + ResourceSharpDTM *resource = (ResourceSharpDTM*)( res ); + + if ( !resource ) { + kdDebug(5700) << "ResourceSharpDTMConfig::saveSettings(): cast failed" << endl; + return; + } + + resource->setFileName( mFileNameEdit->url() ); +} + +void ResourceSharpDTMConfig::checkFilePermissions( const QString& fileName ) +{ + // If file exist but is not writeable... +/*US + if ( access( QFile::encodeName( fileName ), F_OK ) == 0 ) + emit setReadOnly( access( QFile::encodeName( fileName ), W_OK ) < 0 ); +*/ +} + diff --git a/kabc/plugins/olaccess/resourceolaccessconfig.h b/kabc/plugins/olaccess/resourceolaccessconfig.h new file mode 100644 index 0000000..29765c8 --- a/dev/null +++ b/kabc/plugins/olaccess/resourceolaccessconfig.h @@ -0,0 +1,58 @@ +/* + 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 RESOURCESHARPDTMCONFIG_H +#define RESOURCESHARPDTMCONFIG_H + +#include <kurlrequester.h> + +#include <kresources/configwidget.h> + +namespace KABC { + +class ResourceSharpDTMConfig : public KRES::ConfigWidget +{ + Q_OBJECT + +public: + ResourceSharpDTMConfig( QWidget* parent = 0, const char* name = 0 ); + +public slots: + void loadSettings( KRES::Resource *resource ); + void saveSettings( KRES::Resource *resource ); + +protected slots: + void checkFilePermissions( const QString& fileName ); + +private: + KURLRequester* mFileNameEdit; +}; + +} + +#endif |