summaryrefslogtreecommitdiffabout
path: root/kabc
Side-by-side diff
Diffstat (limited to 'kabc') (more/less context) (ignore whitespace changes)
-rw-r--r--kabc/plugins/olaccess/olaccess.pro34
-rw-r--r--kabc/plugins/olaccess/olaccessconverter.cpp444
-rw-r--r--kabc/plugins/olaccess/olaccessconverter.h88
-rw-r--r--kabc/plugins/olaccess/resourceolaccess.cpp303
-rw-r--r--kabc/plugins/olaccess/resourceolaccess.h146
-rw-r--r--kabc/plugins/olaccess/resourceolaccessconfig.cpp108
-rw-r--r--kabc/plugins/olaccess/resourceolaccessconfig.h58
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