summaryrefslogtreecommitdiffabout
authorzautrix <zautrix>2004-10-30 00:27:02 (UTC)
committer zautrix <zautrix>2004-10-30 00:27:02 (UTC)
commitaf857a738da80e9eb68cf311832d44ecb9caf1dd (patch) (side-by-side diff)
tree7e45bdfeb5d2f70f8125f5fed20c28366de91c9a
parent84afedde379f67982d96dc9efa7abf9d200734e4 (diff)
downloadkdepimpi-af857a738da80e9eb68cf311832d44ecb9caf1dd.zip
kdepimpi-af857a738da80e9eb68cf311832d44ecb9caf1dd.tar.gz
kdepimpi-af857a738da80e9eb68cf311832d44ecb9caf1dd.tar.bz2
fixed DTM sync cat handling
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--bin/kdepim/WhatsNew.txt11
-rw-r--r--kabc/plugins/sharpdtm/resourcesharpdtm.cpp2
-rw-r--r--kabc/plugins/sharpdtm/sharpdtmconverter.cpp110
-rw-r--r--kabc/plugins/sharpdtm/sharpdtmconverter.h1
4 files changed, 86 insertions, 38 deletions
diff --git a/bin/kdepim/WhatsNew.txt b/bin/kdepim/WhatsNew.txt
index 756ccc1..f38dd70 100644
--- a/bin/kdepim/WhatsNew.txt
+++ b/bin/kdepim/WhatsNew.txt
@@ -1,242 +1,249 @@
Info about the changes in new versions of KDE-Pim/Pi
********** VERSION 1.9.11 ************
Fixed several problems in PWM/Pi, like
asking the user, if unsaved changed are pending
when closing the app.
+And PwM/Pi handles now different texts for the
+fields Description, Username, Password, configurable per category.
Fixed a crash in KO/Pi , when importing/loading vcs files
which have an entry with an attendee with state:
NEEDS ACTION
Fixed some problems in the German translation of OM/Pi,
which makes some dialogs not fitting on the screen
of the Z 5500.
Fixed Qtopia crash, when disabling/deinstalling
KO/Pi alarm applet.
Implemented direct KDE<->KA/Pi sync for KA/Pi running
on Linux desktop.
Added feature "remove sync info" to sync menu.
Tweaked the KO/Pi What's next view a bit, added
setting to hide events that are done.
Disabled "beam receive enabled" on startup to
avoid problems if Fastload is enabled.
Please set "beam receive enabled",
if you want to receive data via IR.
Fixed bug in direct KDE<->KO/Pi sync for KO/Pi running
on Linux desktop.
Made in KA/Pi scrolling possible, if details view is selected.
(The keyboard focus is set automatically to the search line)
Fixed a bug in DMT sync, that a new entry in DTM was added
on every sync to Kx/Pi.
Fixed a bug in DMT sync with todos created in KO/Pi containing
non-latin1 characters.
Rearranged package contents of Sharp-ipks and made all
packages installable on SD again.
-PwM/Pi handles now different texts for the
-fields Description, Username, Password, configurable per category.
+Fixed the writing of addressbook data in DTM sync.
+Empty fields in KA/Pi were not removed.
+Added better category handling in KA/Pi:
+Menu "change selected has now"
+Set Categories and
+Add Categories option.
+Possible to configure a view to display categories.
********** VERSION 1.9.10 ************
Many internal small bugfixes.
And fix of the "big" bug in KO/Pi,
that after Syncing the appointments had an offset by several hours.
That was a problem with the internal timezone setting,
introduced by the changed timezone configuration settings.
German translation for OM/Pi is now available.
********** VERSION 1.9.9 ************
KDE-Pim/Pi has a new Member!
It is called PWM/Pi (Passwordmanager/platform-independent)
and it is available for the Zaurus.
It is planned, that it will be available later for Windows.
(And for Linux, of course).
It is a port of the Passwordmanager of KDE.
It will need the MicroKDElibs to run.
Made loading of addressbooks in KA/Pi up to 7 times faster!
The bigger your addressbook file, the more starting speed
will you gain. (relatively)
The Qtopia addressbook connector is now platform independend
as well and should work on any platform for importing/exporting
Qtopia and Opie XML files.
Added a +30min feature to the timezone settings to make
KDE-Pim/Pi useable in Australia and other parts on the
world with strange timezones ;-)
German "Umlaute" should now be sorted correctly on the Z in KA/Pi.
It is now possible to disable the
"receive data via infrared" feature, such that syncing with
Outlook is now possible again with Kx/Pi runing.
Please disable it, before syncing Sharp DTM with Outlook.
For your convenience, the "receive data via infrared" feature
is disabled automatically, if you sync Kx/Pi with DTM.
You have to enable it again manually after syncing.
Enabling this feature makes it impossible to start the
Sharp DTM apps. If this feature is enabled, you will only get the
alarm notification from KO/Pi and not from the Sharp calendar.
This is very useful if you sync KO/Pi with Sharp DTM,
because after syncing you usually would get notified about
an alarm by KO/Pi and the Sharp Calendar.
Together with the Linux desktop version of KO/Pi
it is now possible to sync KO/Pi on the Zaurus
with the complete KDE-desktop (3.3 or later)
calendar data easily.
That makes it possible to sync the Z with one
click of a mouse with the KDE-Desktop.
This feature it available for all Zaurus platforms KO/Pi
is running on.
The only thing needed is a running KO/Pi on Linux and
a compiled version of the small
KDE-Pim/Pi<->KDE-Desktop access command line program,
which is in the KDE-Pim/Pi sources available.
The "KDE-desktop" syncing feature for KA/Pi will follow
in the next releases.
Fixed the vcard export bug, which had the version 1.9.8.
Added missing GERMAN translation to KO/Pi.
Hi PsionX, could you add the missing french translation?Thx!
Translation files for KA/Pi are available as well.
GERMAN translation will be available in the next release.
PsionX ( yres, you again ;-) ), could you start translating
KA/Pi? Thx!
You can download the version 1.9.9 at
http://sourceforge.net/project/showfiles.php?group_id=104103&package_id=112604
Note:
To run the mail program OM/Pi you need libopenssl.
A link to a download loaction is available at
ZSI at www.killefiz.de
********** VERSION 1.9.8 ************
Fixed character decoding in OM/Pi.
(e.g. German "Umlaute" were not displayed properly.)
Made is possible to reparent todos in KO/Pi.
Use contextmenu or keys (look at Help-Keys + Colors) for that.
Added the missing Sync-Howto and WhatsNew to the packages.
KO/Pi on Linux desktop can now sync with KDE desktop.
That means: When using KO/Pi on Linux desktop for syncing with
KDE desktop and the Zaurus, the Zaurus can be synced now
with all KDE-Calendar resources, not only with one local file.
(That makes it possible to sync the Zaurus with the
calendar data on a Kolab server)
KA/Pi syncing with KDE desktop will be available in the next version.
********** VERSION 1.9.7 ************
KO/Pi - KA/Pi on Windows:
Now a directory can be defined by the user, where the
application/config data should be saved.
Define your desired path in the evironment variable
MICROKDEHOME
before starting KO/Pi or KA/Pi.
An easy Kx/Pi to Kx/Pi syncing is now possible
(it is called Pi-Sync) via network.
Please look at the Sync Howto.
Exporting of calendar data and contacts to mobile phones is now possible.
The SyncHowto is updated with information howto
access/sync mobile phones.
Please look at the Sync Howto.
Now KO/Pi and KA/Pi on the Zaurus can receive data via infrared directly.
Please disable Fastload for the original contact/calendar applications
and close them.
KO/Pi and KA/Pi must be running in order to receive the data.
(KO/Pi and KA/Pi are always running if Fastload for them is enabled!)
In the KA/Pi details view are now the preferred tel. numbers displayed on top
of the other data ( emails/tel.numbers/addresses)
Fixed some syncing problems in KA/Pi.
Added font settings for the KA/Pi details view.
Added fields "children's name" and "gender" to KA/Pi.
Made searching in KA/Pi better:
Now the first item in a view is selected after a search automatically and
the views can be scrolled up/down when the search input field has the keyboard focus.
And, of course, fixed a bunch of reported bugs in KO/Pi and KA/Pi.
********** VERSION 1.9.6 ************
Changes in the external application communication on the Zaurus
in order to use less RAM when the apps are running.
First syncing of addressbooks (KA/Pi) is possible.
********** VERSION 1.9.5a ************
Fixed a bug in KO/Pi in the SharpDTM sync of version 1.9.5.
Fixed some small bugs.
KA/Pi shows now the birthday in summary view.
Now OM/Pi and KA/Pi are using the date format defined in KO/Pi
for displaying dates.
********** VERSION 1.9.5 ************
There is still no Addressbook syncing!
New in 1.9.5:
Many bugfixes.
Better searching in KA/Pi.
You can configure in KA/Pi if you want to search only after
<return> key pressed.
Better mail downloading in OM/Pi.
First experimental alpha version of sync of KO/Pi with mobile phones.
See gammu documentation for supported phones.
You need to install the package kammu_1.9.5_arm.ipk for sync of KO/Pi with mobile phones. kammu_1.9.5_arm.ipk needs libbluetooth and libsdp.
Quick hint how to use:
NOTE: MOBILE PHONE SYNC IS EXPERIMENTAL!
Install kammu_1.9.5_arm.ipk , libbluetooth and libsdp.
Create syncprofile - mobile device
Remove entry for model. (Leave empty ).
Enable infrared on Zaurus and your Phone.
Sync.
To get a more detailed log, start kopi from konsole.
********** VERSION 1.9.4 ************
This is the version 1.9.4 of KDE-Pim/Pi for the Zaurus.
WARNING:
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
@@ -12,290 +12,292 @@
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, 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);;
+ 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
@@ -118,327 +118,365 @@ bool SharpDTMConverter::sharpToAddressee( const CardId &contact, const SlZDataBa
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 == "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());
- }
PhoneNumber homephone = addr.phoneNumber( PhoneNumber::Home );
- if (!homephone.number().isEmpty())
database->writeField(ZdbAdrs::HomePhone, homephone.number());
-
PhoneNumber homefax = addr.phoneNumber( PhoneNumber::Home | PhoneNumber::Fax );
- if (!homefax.number().isEmpty())
database->writeField(ZdbAdrs::HomeFax, homefax.number());
-
PhoneNumber homemobile = addr.phoneNumber( PhoneNumber::Home | PhoneNumber::Cell );
- if (!homemobile.number().isEmpty()) {
database->writeField(ZdbAdrs::HomeMobile, homemobile.number());
+ if (!homemobile.number().isEmpty()) {
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());
- }
PhoneNumber businessphone = addr.phoneNumber( PhoneNumber::Work );
- if (!businessphone.number().isEmpty())
database->writeField(ZdbAdrs::BusinessPhone, businessphone.number());
PhoneNumber businessfax = addr.phoneNumber( PhoneNumber::Work | PhoneNumber::Fax );
- if (!businessfax.number().isEmpty())
database->writeField(ZdbAdrs::BusinessFax, businessfax.number());
PhoneNumber businessmobile = addr.phoneNumber( PhoneNumber::Work | PhoneNumber::Cell );
+ 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::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();
+ 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;
//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]);
+ 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++;
}
- QArray<int> iar;
- if ( !cats.isEmpty() ) {
- QArray<int> iar = catDB->ids(cats);
- //qDebug("***cat count is %d ", iar.count());
- database->updateCategories(contact, iar);
+ }
+ 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