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) (ignore whitespace changes)
-rw-r--r--bin/kdepim/WhatsNew.txt11
-rw-r--r--kabc/plugins/sharpdtm/resourcesharpdtm.cpp4
-rw-r--r--kabc/plugins/sharpdtm/sharpdtmconverter.cpp154
-rw-r--r--kabc/plugins/sharpdtm/sharpdtmconverter.h1
4 files changed, 109 insertions, 61 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,98 +1,105 @@
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,
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
@@ -155,124 +155,126 @@ bool ResourceSharpDTM::load()
{
addressee.setResource( this );
addressBook()->insertAddressee( addressee );
}
}
if(mAccess != 0)
delete mAccess;
mAccess = 0;
return true;
}
bool ResourceSharpDTM::save( Ticket *ticket )
{
if (!mConverter)
return false;
QString fileN = SlZDataBase::addressbookFileName();
if ( ! mAccess ) {
mAccess = new SlZDataBase(fileN,
SlZDataBase::addressbookItems(),
0, false);
}
if(mAccess == 0)
return false;
qDebug("ResourceSharpDTM::save: %s", fileName().latin1());
KABC::AddressBook::Iterator it;
bool res;
KABC::Addressee::List changedAddressees;
typedef QMap<int,QString> AddresseeMap;
AddresseeMap map;
CardId id ;
for ( it = addressBook()->begin(); it != addressBook()->end(); ++it ) {
if ( (*it).tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL ) {
QString uid = (*it).originalExternalUID();
bool res;
if ( uid.isEmpty() )
id = 0;
else
id = uid.toUInt();
KABC::Addressee addressee = (*it);
if ( (*it).tempSyncStat() == SYNC_TEMPSTATE_ADDED_EXTERNAL ) {
res = mAccess->startEditCard(id);
if (res == true)
{
res = mConverter->addresseeToSharp( (*it), mAccess, id );
if (res == true)
{
- res = mAccess->finishEditCard(&id);;
+ res = mAccess->finishEditCard(&id);;
+ mConverter->setCategories( (*it), mAccess, id );
map.insert(id,(*it).uid());
if (res == false)
qDebug("Unable to append Contact: %s", addressee.formattedName().latin1());
}
else
{
qDebug("Unable to convert Addressee: %s", addressee.formattedName().latin1());
mAccess->cancelEditCard();
}
}
} else if ( (*it).tempSyncStat() == SYNC_TEMPSTATE_DELETE ) {
res = mAccess->deleteCard(&id);
if ( !res )
qDebug("delete error ");
} else if ( (*it).tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL ) {
//changed
res = mAccess->startEditCard(id);
if (res == true)
{
res = mConverter->addresseeToSharp( (*it), mAccess, id );
if (res == true)
{
res = mAccess->finishEditCard(&id);
+ mConverter->setCategories( (*it), mAccess, id );
map.insert(id,(*it).uid());
if (res == false)
qDebug("Unable to append Contact: %s", addressee.formattedName().latin1());
}
else
{
qDebug("Unable to convert Addressee: %s", addressee.formattedName().latin1());
mAccess->cancelEditCard();
}
}
}
}
}
AddresseeMap::Iterator itam;
for ( res=mAccess->first(); res == true; res=mAccess->next())
{
id = mAccess->cardId();
int idint = id;
itam = map.find( idint );
if ( itam != map.end() ) {
KABC::Addressee addressee;
res = mConverter->sharpToAddressee( id, mAccess, addressee );
if ( !addressee.isEmpty() && res )
{
addressee.setResource( this );
addressee.setUid( itam.data() );
addressee.setTempSyncStat( SYNC_TEMPSTATE_NEW_ID );
addressBook()->insertAddressee( addressee , false );
}
}
}
delete ticket;
if(mAccess != 0)
delete mAccess;
mAccess = 0;
return true;
}
bool ResourceSharpDTM::lock( const QString &lockfileName )
{
return true;
}
void ResourceSharpDTM::unlock( const QString &fileName )
{
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
@@ -262,183 +262,221 @@ bool SharpDTMConverter::sharpToAddressee( const CardId &contact, const SlZDataBa
//qDebug("SharpDTMConverter::sharpToAddressee please check that the categories will be converted" );
QArray<int> catArray = db->readCategories();
QString cat;
for ( unsigned int i=0; i < catArray.size(); i++ ) {
cat = catDB->label(catArray[i]);
if ( cat.isEmpty() )
addr.insertCategory(QString::number(catArray[i]));
else
addr.insertCategory( cat );
}
return true;
}
bool SharpDTMConverter::addresseeToSharp( const Addressee &addr, SlZDataBase* database , const CardId &contact )
{
bool cellHome = false, cellWork = false;
// name
database->writeField(ZdbAdrs::LastName, addr.familyName());
database->writeField(ZdbAdrs::FirstName, addr.givenName());
database->writeField(ZdbAdrs::MiddleName, addr.additionalName());
database->writeField(ZdbAdrs::Title, addr.prefix());
database->writeField(ZdbAdrs::Suffix, addr.suffix());
//qDebug("SharpDTMConverter::addresseeToSharp check if the fileAs transformation works!!\n%s",addr.formattedName().latin1() );
QString formattedName = addr.formattedName();
if ( formattedName.isEmpty() ) {
if ( !addr.familyName().isEmpty() ) {
formattedName = addr.familyName();
if ( !addr.givenName().isEmpty() ) {
formattedName += ", ";
formattedName += addr.givenName();
}
} else
formattedName = addr.givenName();
}
database->writeField(ZdbAdrs::FileAs, formattedName);
database->writeField(ZdbAdrs::FullName, formattedName);
// email
//qDebug("SharpDTMConverter::addresseeToSharp check which seperator we need here for the emails!!");
//qDebug("SharpDTMConverter::addresseeToSharp its probably the same from sharpToAddressee");
QString emails = addr.emails().join(" ");
database->writeField(ZdbAdrs::Emails, emails );
database->writeField(ZdbAdrs::DefaultEmail, addr.preferredEmail() );
-
-
// home
const Address homeaddress = addr.address(Address::Home);
- if (!homeaddress.isEmpty()) {
- //qDebug("write home address ");
- database->writeField(ZdbAdrs::HomeStreet, homeaddress.street());
- database->writeField(ZdbAdrs::HomeCity, homeaddress.locality());
- database->writeField(ZdbAdrs::HomeState, homeaddress.region());
- database->writeField(ZdbAdrs::HomeZip, homeaddress.postalCode());
- database->writeField(ZdbAdrs::HomeCountry, homeaddress.country());
- }
-
+ database->writeField(ZdbAdrs::HomeStreet, homeaddress.street());
+ database->writeField(ZdbAdrs::HomeCity, homeaddress.locality());
+ database->writeField(ZdbAdrs::HomeState, homeaddress.region());
+ database->writeField(ZdbAdrs::HomeZip, homeaddress.postalCode());
+ database->writeField(ZdbAdrs::HomeCountry, homeaddress.country());
+
PhoneNumber homephone = addr.phoneNumber( PhoneNumber::Home );
- if (!homephone.number().isEmpty())
- database->writeField(ZdbAdrs::HomePhone, homephone.number());
-
+ database->writeField(ZdbAdrs::HomePhone, homephone.number());
PhoneNumber homefax = addr.phoneNumber( PhoneNumber::Home | PhoneNumber::Fax );
- if (!homefax.number().isEmpty())
- database->writeField(ZdbAdrs::HomeFax, homefax.number());
-
+ database->writeField(ZdbAdrs::HomeFax, homefax.number());
PhoneNumber homemobile = addr.phoneNumber( PhoneNumber::Home | PhoneNumber::Cell );
+ database->writeField(ZdbAdrs::HomeMobile, homemobile.number());
if (!homemobile.number().isEmpty()) {
- database->writeField(ZdbAdrs::HomeMobile, homemobile.number());
cellHome = true;
}
-
database->writeField(ZdbAdrs::HomeWebPage, addr.url().url());
-
-
// business
const Address businessaddress = addr.address(Address::Work);
- if (!businessaddress.isEmpty()) {
//qDebug("write business address ");
- database->writeField(ZdbAdrs::BusinessStreet, businessaddress.street());
- database->writeField(ZdbAdrs::BusinessCity, businessaddress.locality());
- database->writeField(ZdbAdrs::BusinessState, businessaddress.region());
- database->writeField(ZdbAdrs::BusinessZip, businessaddress.postalCode());
- database->writeField(ZdbAdrs::BusinessCountry, businessaddress.country());
- }
-
+ database->writeField(ZdbAdrs::BusinessStreet, businessaddress.street());
+ database->writeField(ZdbAdrs::BusinessCity, businessaddress.locality());
+ database->writeField(ZdbAdrs::BusinessState, businessaddress.region());
+ database->writeField(ZdbAdrs::BusinessZip, businessaddress.postalCode());
+ database->writeField(ZdbAdrs::BusinessCountry, businessaddress.country());
+
PhoneNumber businessphone = addr.phoneNumber( PhoneNumber::Work );
- if (!businessphone.number().isEmpty())
- database->writeField(ZdbAdrs::BusinessPhone, businessphone.number());
+ database->writeField(ZdbAdrs::BusinessPhone, businessphone.number());
PhoneNumber businessfax = addr.phoneNumber( PhoneNumber::Work | PhoneNumber::Fax );
- if (!businessfax.number().isEmpty())
- database->writeField(ZdbAdrs::BusinessFax, businessfax.number());
+ database->writeField(ZdbAdrs::BusinessFax, businessfax.number());
PhoneNumber businessmobile = addr.phoneNumber( PhoneNumber::Work | PhoneNumber::Cell );
+ database->writeField(ZdbAdrs::BusinessMobile, businessmobile.number());
if (!businessmobile.number().isEmpty()) {
cellWork = true;
- database->writeField(ZdbAdrs::BusinessMobile, businessmobile.number());
}
PhoneNumber mobile = addr.phoneNumber( PhoneNumber::Cell );
if (! mobile.number().isEmpty()) {
if ( ! cellHome )
database->writeField(ZdbAdrs::HomeMobile, mobile.number());
else if (! cellWork )
database->writeField(ZdbAdrs::BusinessMobile, mobile.number());
}
PhoneNumber businesspager = addr.phoneNumber( PhoneNumber::Work | PhoneNumber::Pager );
- if (!businesspager.number().isEmpty())
- database->writeField(ZdbAdrs::BusinessPager, businesspager.number());
+ database->writeField(ZdbAdrs::BusinessPager, businesspager.number());
database->writeField(ZdbAdrs::JobTitle, addr.role());
database->writeField(ZdbAdrs::Company, addr.organization());
database->writeField(ZdbAdrs::Profession, addr.custom( "KADDRESSBOOK", "X-Profession" ));
database->writeField(ZdbAdrs::Assistant, addr.custom( "KADDRESSBOOK", "X-AssistantsName" ));
database->writeField(ZdbAdrs::Department, addr.custom( "KADDRESSBOOK", "X-Department" ));
database->writeField(ZdbAdrs::Manager, addr.custom( "KADDRESSBOOK", "X-ManagersName" ));
database->writeField(ZdbAdrs::Office, addr.custom( "KADDRESSBOOK", "X-Office" ));
//personal
database->writeField(ZdbAdrs::Spouse, addr.custom( "KADDRESSBOOK", "X-Spouse" ));
QString gt = addr.custom( "KADDRESSBOOK", "X-Gender" );
//qDebug("SharpDTMConverter::addresseeToSharp please check that gender works!! : Gender: %s", gt.latin1());
//qDebug("SharpDTMConverter::addresseeToSharp: may be writeField(\"ZdbAdrs::Gender\", ushort) is here better suited?");
//qDebug("SharpDTMConverter::addresseeToSharp: check also the reverse functionality in sharpToAddressee");
if (gt == "male")
database->writeField(ZdbAdrs::Gender, "male");
else if (gt == "female")
database->writeField(ZdbAdrs::Gender, "female");
else
database->writeField(ZdbAdrs::Gender, "");
-
- QDate dt = KGlobal::locale()->readDate(
- addr.custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d"); // = Qt::ISODate
+ QString dateS ;
+ QDate dt = KGlobal::locale()->readDate(addr.custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d"); // = Qt::ISODate
if ( dt.isValid() ) {
- QString dateS = KGlobal::locale()->formatDate(dt, true );
- database->writeField(ZdbAdrs::Anniversary, dateS );
+ dateS = KGlobal::locale()->formatDate(dt, true );
}
+ database->writeField(ZdbAdrs::Anniversary, dateS );
database->writeField(ZdbAdrs::Children, addr.custom( "KADDRESSBOOK", "X-Children" ));
- dt = addr.birthday().date();
+ dt = addr.birthday().date();
+ dateS = "";
if ( dt.isValid() ) {
- QString dateS = KGlobal::locale()->formatDate(dt, true );
- database->writeField(ZdbAdrs::Birthday, dateS);
+ dateS = KGlobal::locale()->formatDate(dt, true );
}
+ database->writeField(ZdbAdrs::Birthday, dateS);
database->writeField(ZdbAdrs::Nickname, addr.nickName());
// other
database->writeField(ZdbAdrs::Notes, addr.note());
//US QString groups() const { return find( Qtopia::Groups ); }
-//US QStringList groupList() const;
+//US QStringList groupList() const;
//qDebug("SharpDTMConverter::addresseeToSharp please check if category transformation works");
- QStringList cats = addr.categories();
- int ii;
- for ( ii = 0; ii < cats.count() ;++ii ) {
- if ( !catDB->exists( cats[ii] ))
- catDB->addCategory(cats[ii]);
- }
- QArray<int> iar;
- if ( !cats.isEmpty() ) {
- QArray<int> iar = catDB->ids(cats);
- //qDebug("***cat count is %d ", iar.count());
- database->updateCategories(contact, iar);
- }
-
return true;
}
+
+bool SharpDTMConverter::setCategories( const Addressee &addr, SlZDataBase* database , const CardId &contact )
+{
+ QStringList list = addr.categories();
+
+ QArray<int> ids(list.count());
+ uint index = 0;
+ for(uint i=0; i<ids.size(); i++){
+ if(catDB->exists(list[i])){
+ ids[index] = catDB->id(list[i]);
+ qDebug("set ex cat %d %s ",ids[index] , list[i].latin1());
+ index++;
+ } else {
+ ids[index] = catDB->addCategory(list[i]);
+ qDebug("add new cat %d %s ",ids[index] , list[i].latin1());
+ index++;
+ }
+ }
+ bool res ;
+ if ( res = database->updateCategories(contact, ids) )
+ qDebug("cat updated ");
+ else
+ qDebug("error cat updating ");
+
+ return res;
+}
+
+#if 0
+ m_pCategories = new SlCategories;
+catDB
+
+ if(categories == QString::null) return true;
+ QStringList list = CSVParser::parse(categories);
+ QArray<int> ids(list.count());
+ uint index = 0;
+ for(uint i=0; i<ids.size(); i++){
+#if 0
+ bool ok;
+ ids[index] = list[i].toInt(&ok);
+ if(ok){
+ index++;
+ } else {
+ if(m_pCategories->exists(list[i])){
+ ids[index] = m_pCategories->id(list[i]);
+ index++;
+ }
+ }
+#else
+ if(m_pCategories->exists(list[i])){
+ ids[index] = m_pCategories->id(list[i]);
+ index++;
+ } else if(m_addCategory){
+ ids[index] = m_pCategories->addCategory(list[i]);
+ index++;
+ }
+#endif
+ }
+ if(ids.size() > 0 && index == 0){
+ return true;
+ } else if(index != ids.size()){
+ ids.resize(index);
+ }
+ if(!m_pZdb->updateCategories(id, ids)){
+ return false;
+ }
+ return true;
+#endif
+
QDate SharpDTMConverter::convertDate( QString s)
{
QDate dt = KGlobal::locale()->readDate( s );
return dt;
return QDate ();
}
diff --git a/kabc/plugins/sharpdtm/sharpdtmconverter.h b/kabc/plugins/sharpdtm/sharpdtmconverter.h
index a04083e..db1bf2d 100644
--- a/kabc/plugins/sharpdtm/sharpdtmconverter.h
+++ b/kabc/plugins/sharpdtm/sharpdtmconverter.h
@@ -30,58 +30,59 @@ $Id$
#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