summaryrefslogtreecommitdiffabout
path: root/kabc
authorzautrix <zautrix>2004-10-20 21:49:51 (UTC)
committer zautrix <zautrix>2004-10-20 21:49:51 (UTC)
commitbb235c5a639b914574e1e247d2de6e479517585f (patch) (side-by-side diff)
tree0f074ec87d93b6f5fb81b6893f0174cabc52c1df /kabc
parent8e00329a4a5f0b66d26d20f067ab6aefca17f17a (diff)
downloadkdepimpi-bb235c5a639b914574e1e247d2de6e479517585f.zip
kdepimpi-bb235c5a639b914574e1e247d2de6e479517585f.tar.gz
kdepimpi-bb235c5a639b914574e1e247d2de6e479517585f.tar.bz2
qtopia resource fixes
Diffstat (limited to 'kabc') (more/less context) (ignore whitespace changes)
-rw-r--r--kabc/plugins/qtopia/qtopiaconverter.cpp24
-rw-r--r--kabc/plugins/qtopia/resourceqtopia.cpp98
2 files changed, 37 insertions, 85 deletions
diff --git a/kabc/plugins/qtopia/qtopiaconverter.cpp b/kabc/plugins/qtopia/qtopiaconverter.cpp
index 040226c..106596f 100644
--- a/kabc/plugins/qtopia/qtopiaconverter.cpp
+++ b/kabc/plugins/qtopia/qtopiaconverter.cpp
@@ -246,207 +246,211 @@ bool QtopiaConverter::qtopiaToAddressee( const QDomElement& el, Addressee &adr )
if ( !homeMobile.number().isEmpty() )
adr.insertPhoneNumber( homeMobile );
KABC::Address business( KABC::Address::Work );
business.setStreet( el.attribute( "BusinessStreet" ) );
business.setLocality( el.attribute( "BusinessCity" ) );
business.setRegion( el.attribute( "BusinessState" ) );
business.setPostalCode( el.attribute( "BusinessZip" ) );
business.setCountry( el.attribute( "BusinessCountry" ) );
if ( !business.isEmpty() )
adr.insertAddress( business );
KABC::Address home( KABC::Address::Home );
home.setStreet( el.attribute( "HomeStreet" ) );
home.setLocality( el.attribute( "HomeCity" ) );
home.setRegion( el.attribute( "HomeState" ) );
home.setPostalCode( el.attribute( "HomeZip" ) );
home.setCountry( el.attribute( "HomeCountry" ) );
if ( !home.isEmpty() )
adr.insertAddress( home );
adr.setNickName( el.attribute( "Nickname" ) );
adr.setNote( el.attribute( "Notes" ) );
{
QStringList categories = QStringList::split(";", el.attribute("Categories" ) );
QString cat;
QStringList added;
for ( uint i = 0; i < categories.count(); i++ ) {
cat = m_edit->categoryById( categories[ i ], "Contacts" );
// if name is not empty and we did not add the
// cat try to repair broken files
if ( !cat.isEmpty() && !added.contains( cat ) ) {
adr.insertCategory( cat );
added << cat;
}
}
}
if ( !el.attribute( "Department" ).isEmpty() )
adr.insertCustom( "KADDRESSBOOK", "X-Department", el.attribute( "Department" ) );
if ( !el.attribute( "HomeWebPage" ).isEmpty() )
adr.insertCustom( "opie", "HomeWebPage", el.attribute( "HomeWebPage" ) );
if ( !el.attribute( "Spouse" ).isEmpty() )
adr.insertCustom( "KADDRESSBOOK", "X-SpousesName", el.attribute( "Spouse" ) );
- if ( !el.attribute( "Gender" ).isEmpty() )
- adr.insertCustom( "opie", "Gender", el.attribute( "Gender" ) );
-
+ if ( !el.attribute( "Gender" ).isEmpty() ) {
+ if ( el.attribute( "Gender" ) == "1" )
+ adr.insertCustom( "KADDRESSBOOK", "X-Gender", "male" );
+ else if ( el.attribute( "Gender" ) == "2" )
+ adr.insertCustom( "KADDRESSBOOK", "X-Gender", "female" );
+ }
QDate ann = dateFromString( el.attribute( "Anniversary" ) );
if ( ann.isValid() ) {
QString dt = KGlobal::locale()->formatDate(ann, true, KLocale::ISODate);
adr.insertCustom( "KADDRESSBOOK", "X-Anniversary", dt );
}
if ( !el.attribute( "Children" ).isEmpty() )
- adr.insertCustom("opie", "Children", el.attribute("Children") );
+ adr.insertCustom("KADDRESSBOOK", "X-Children", el.attribute("Children") );
if ( !el.attribute( "Office" ).isEmpty() )
adr.insertCustom("KADDRESSBOOK", "X-Office", el.attribute("Office") );
if ( !el.attribute( "Profession" ).isEmpty() )
adr.insertCustom("KADDRESSBOOK", "X-Profession", el.attribute("Profession") );
if ( !el.attribute( "Assistant" ).isEmpty() )
adr.insertCustom("KADDRESSBOOK", "X-AssistantsName", el.attribute("Assistant") );
if ( !el.attribute( "Manager" ).isEmpty() )
adr.insertCustom("KADDRESSBOOK", "X-ManagersName", el.attribute("Manager") );
}
return true;
}
bool QtopiaConverter::addresseeToQtopia( const Addressee &ab, QTextStream *stream )
{
*stream << "<Contact ";
*stream << "FirstName=\"" << escape(ab.givenName()) << "\" ";
*stream << "MiddleName=\"" << escape(ab.additionalName()) << "\" ";
*stream << "LastName=\"" << escape(ab.familyName()) << "\" ";
*stream << "Suffix=\"" << escape(ab.suffix()) << "\" ";
QString sortStr;
sortStr = ab.formattedName();
/* is formattedName is empty we use the assembled name as fallback */
if (sortStr.isEmpty() )
sortStr = ab.assembledName();
*stream << "FileAs=\"" << escape(sortStr) << "\" ";
*stream << "JobTitle=\"" << escape(ab.role()) << "\" ";
*stream << "Department=\"" << escape(ab.custom( "KADDRESSBOOK", "X-Department" )) << "\" ";
*stream << "Company=\"" << escape(ab.organization()) << "\" ";
KABC::PhoneNumber businessPhoneNum = ab.phoneNumber(KABC::PhoneNumber::Work );
*stream << "BusinessPhone=\"" << escape( businessPhoneNum.number() ) << "\" ";
KABC::PhoneNumber businessFaxNum = ab.phoneNumber(KABC::PhoneNumber::Work | KABC::PhoneNumber::Fax );
*stream << "BusinessFax=\"" << escape( businessFaxNum.number() )<< "\" ";
KABC::PhoneNumber businessMobile = ab.phoneNumber(KABC::PhoneNumber::Work | KABC::PhoneNumber::Cell );
*stream << "BusinessMobile=\"" << escape( businessMobile.number() ) << "\" ";
*stream << "DefaultEmail=\"" << escape( ab.preferredEmail() ) << "\" ";
QStringList list = ab.emails();
if ( list.count() > 0 ) {
QStringList::Iterator it = list.begin();
*stream << "Emails=\"" << escape( *it );
while (++it != list.end())
*stream << ' ' << escape( *it );
*stream << "\" ";
}
KABC::PhoneNumber homePhoneNum = ab.phoneNumber(KABC::PhoneNumber::Home );
*stream << "HomePhone=\"" << escape( homePhoneNum.number() ) << "\" ";
KABC::PhoneNumber homeFax = ab.phoneNumber( KABC::PhoneNumber::Home | KABC::PhoneNumber::Fax );
*stream << "HomeFax=\"" << escape( homeFax.number() ) << "\" ";
KABC::PhoneNumber homeMobile = ab.phoneNumber( KABC::PhoneNumber::Cell );
*stream << "HomeMobile=\"" << escape( homeMobile.number() ) << "\" ";
KABC::Address business = ab.address(KABC::Address::Work );
*stream << "BusinessStreet=\"" << escape( business.street() ) << "\" ";
*stream << "BusinessCity=\"" << escape( business.locality() ) << "\" ";
*stream << "BusinessZip=\"" << escape( business.postalCode() ) << "\" ";
*stream << "BusinessCountry=\"" << escape( business.country() ) << "\" ";
*stream << "BusinessState=\"" << escape( business.region() ) << "\" ";
//stream << "BusinessPager=\"" << << "\" ";
*stream << "Office=\"" << escape( ab.custom( "KADDRESSBOOK", "X-Office" ) ) << "\" ";
*stream << "Profession=\"" << escape( ab.custom( "KADDRESSBOOK", "X-Profession" ) ) << "\" ";
*stream << "Assistant=\"" << escape( ab.custom( "KADDRESSBOOK", "X-AssistantsName") ) << "\" ";
*stream << "Manager=\"" << escape( ab.custom( "KADDRESSBOOK", "X-ManagersName" ) ) << "\" ";
KABC::Address home = ab.address( KABC::Address::Home );
*stream << "HomeStreet=\"" << escape( home.street() ) << "\" ";
*stream << "HomeCity=\"" << escape( home.locality() ) << "\" ";
*stream << "HomeState=\"" << escape( home.region() ) << "\" ";
*stream << "HomeZip=\"" << escape( home.postalCode() ) << "\" ";
*stream << "HomeCountry=\"" << escape( home.country() ) << "\" ";
*stream << "HomeWebPage=\"" << escape( ab.custom( "opie", "HomeWebPage" ) ) << "\" ";
*stream << "Spouse=\"" << escape( ab.custom( "KADDRESSBOOK", "X-SpousesName") ) << "\" ";
- *stream << "Gender=\"" << escape( ab.custom( "opie", "Gender") ) << "\" ";
+ QString gen = "0";
+ if ( ab.custom( "KADDRESSBOOK", "X-Gender") == "male" )
+ gen = "1";
+ else if ( ab.custom( "KADDRESSBOOK", "X-Gender") == "female" )
+ gen = "2";
+ *stream << "Gender=\"" << escape( gen ) << "\" ";
if ( ab.birthday().date().isValid() )
*stream << "Birthday=\"" << escape( dateToString(ab.birthday().date() ) ) << "\" ";
- /*
- * Anniversary block again
- * Go from ISO -> QDate -> toString and then escape
- */
{
QDate ann = KGlobal::locale()->readDate( ab.custom("KADDRESSBOOK", "X-Anniversary" ),
"%Y-%m-%d");
if (ann.isValid() ) {
*stream << "Anniversary=\"" << escape( dateToString( ann ) ) << "\" ";
}
}
*stream << "Nickname=\"" << escape( ab.nickName() ) << "\" ";
- *stream << "Children=\"" << escape( ab.custom("opie", "Children" ) ) << "\" ";
+ *stream << "Children=\"" << escape( ab.custom("KADDRESSBOOK", "X-Children" ) ) << "\" ";
*stream << "Notes=\"" << escape( ab.note() ) << "\" ";
*stream << "Categories=\"" << categoriesToNumber( ab.categories(), "Contacts") << "\" ";
QString uid = ab.uid();
*stream << "Uid=\"" << uid << "\" ";
//*stream << map.toString( "addressbook", uid );
*stream << " />" << "\n";
return true;
}
#if 0
KTempFile* AddressBook::fromKDE( KSync::AddressBookSyncee *syncee, ExtraMap& map )
{
}
QStringList AddressBook::attributes()const {
QStringList lst;
lst << "FirstName";
lst << "MiddleName";
lst << "LastName";
lst << "Suffix";
lst << "FileAs";
lst << "JobTitle";
lst << "Department";
lst << "Company";
lst << "BusinessPhone";
lst << "BusinessFax";
lst << "BusinessMobile";
lst << "DefaultEmail";
lst << "Emails";
lst << "HomePhone";
lst << "HomeFax";
lst << "HomeMobile";
lst << "BusinessStreet";
lst << "BusinessCity";
lst << "BusinessZip";
lst << "BusinessCountry";
lst << "BusinessState";
lst << "Office";
lst << "Profession";
lst << "Assistant";
lst << "Manager";
lst << "HomeStreet";
lst << "HomeCity";
diff --git a/kabc/plugins/qtopia/resourceqtopia.cpp b/kabc/plugins/qtopia/resourceqtopia.cpp
index b7263bb..4ee3c3c 100644
--- a/kabc/plugins/qtopia/resourceqtopia.cpp
+++ b/kabc/plugins/qtopia/resourceqtopia.cpp
@@ -33,350 +33,298 @@ $Id$
#include <qtextstream.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 <qpe/pim/addressbookaccess.h>
#include "resourceqtopiaconfig.h"
#include "stdaddressbook.h"
#include "qtopiaconverter.h"
#include "resourceqtopia.h"
using namespace KABC;
extern "C"
{
void *init_microkabc_qtopia()
{
return new KRES::PluginFactory<ResourceQtopia,ResourceQtopiaConfig>();
}
}
ResourceQtopia::ResourceQtopia( const KConfig *config )
: Resource( config ), mConverter (0)
{
// we can not choose the filename. Therefore use the default to display
QString fileName = QDir::homeDirPath() + "/Applications/addressbook/addressbook.xml";
init( fileName );
}
ResourceQtopia::ResourceQtopia( const QString &fileName )
: Resource( 0 )
{
init( fileName );
}
void ResourceQtopia::init( const QString &fileName )
{
-
+#ifdef _USE_DIRWATCH_
connect( &mDirWatch, SIGNAL( dirty(const QString&) ), SLOT( fileChanged() ) );
connect( &mDirWatch, SIGNAL( created(const QString&) ), SLOT( fileChanged() ) );
connect( &mDirWatch, SIGNAL( deleted(const QString&) ), SLOT( fileChanged() ) );
-
+#endif
setFileName( fileName );
}
ResourceQtopia::~ResourceQtopia()
{
if (mConverter != 0)
delete mConverter;
}
void ResourceQtopia::writeConfig( KConfig *config )
{
Resource::writeConfig( config );
}
Ticket *ResourceQtopia::requestSaveTicket()
{
kdDebug(5700) << "ResourceQtopia::requestSaveTicket()" << endl;
qDebug("ResourceQtopia::requestSaveTicket: %s", fileName().latin1());
if ( !addressBook() ) return 0;
if ( !lock( fileName() ) ) {
kdDebug(5700) << "ResourceQtopia::requestSaveTicket(): Unable to lock file '"
<< fileName() << "'" << endl;
return 0;
}
return createTicket( this );
}
bool ResourceQtopia::doOpen()
{
qDebug("ResourceQtopia::doOpen(): %s", fileName().latin1());
if (mConverter == 0)
{
mConverter = new QtopiaConverter();
bool res = mConverter->init();
if ( !res )
{
QString msg("Unable to initialize qtopia converter. Most likely a problem with the category file");
qDebug(msg);
return false;
}
}
return true;
}
void ResourceQtopia::doClose()
{
qDebug("ResourceQtopia::doClose: %s", fileName().latin1());
// it seems so, that deletion of access deletes backend as well
//delete backend;
return;
}
bool ResourceQtopia::load()
{
QFile file( fileName() );
if ( !file.open(IO_ReadOnly ) ) {
return false;
}
QDomDocument doc("mydocument" );
if ( !doc.setContent( &file ) ) {
file.close();
return false;
}
bool res;
QDomElement docElem = doc.documentElement( );
QDomNode n = docElem.firstChild();
while ( !n.isNull() ) {
QDomElement e = n.toElement();
if ( !e.isNull() ) {
- if ( e.tagName() == QString::fromLatin1( "Contacts" ) ) { // we're looking for them
+ if ( e.tagName() == QString::fromLatin1( "Contacts" ) ) {
QDomNode no = e.firstChild();
while ( !no.isNull() ) {
QDomElement el = no.toElement();
if ( !el.isNull() ) {
KABC::Addressee addressee;
res = mConverter->qtopiaToAddressee( el, addressee );
if ( !addressee.isEmpty() && res )
{
addressee.setResource( this );
addressBook()->insertAddressee( addressee );
}
}
no = no.nextSibling();
}
}
}
n = n.nextSibling();
}
-
-#if 0
-/ old code
- qDebug("ResourceQtopia::load: %s", fileName().latin1());
-
- AddressBookIterator it(*mAccess);
- const PimContact* contact;
- bool res;
-
- for (contact=it.toFirst(); it.current(); ++it)
- {
- contact = it.current();
-
- KABC::Addressee addressee;
-
- //LRres = mConverter->qtopiaToAddressee( (*contact), addressee );
-
- if ( !addressee.isEmpty() && res )
- {
- addressee.setResource( this );
- addressBook()->insertAddressee( addressee );
- }
- }
-#endif
return true;
}
bool ResourceQtopia::save( Ticket *ticket )
{
-
+#ifdef _USE_DIRWATCH_
mDirWatch.stopScan();
+#endif
KABC::AddressBook::Iterator it;
- bool res;
- //pending open file for stream
- QTextStream *stream;// = tempFile->textStream();
+ bool res;
+ QFile file( fileName() );
+ if (!file.open( IO_WriteOnly ) ) {
+ return false;
+ }
+ QTextStream ts( &file );
+ QTextStream *stream = &ts;
stream->setEncoding( QTextStream::UnicodeUTF8 );
*stream << "<?xml version=\"1.0\" encoding=\"UTF-8\"?><!DOCTYPE Addressbook ><AddressBook>" << endl;
*stream << " <Groups>" << endl;
*stream << " </Groups>" << endl;
*stream << " <Contacts> " << endl;
// for all entries
KABC::Addressee ab;
for ( it = addressBook()->begin(); it != addressBook()->end(); ++it ) {
KABC::Addressee addressee = (*it);
res = mConverter->addresseeToQtopia( addressee, stream );
if (!res == true)
{
qDebug("Unable to convert Addressee %s", addressee.formattedName().latin1());
}
}
-
-
*stream << "</Contacts>" << endl;
*stream << "</AddressBook>" << endl;
- //pending close file
+ file.close();
+#ifdef _USE_DIRWATCH_
mDirWatch.startScan();
-
+#endif
delete ticket;
unlock( fileName() );
-
-
-#if 0
- //old code
- qDebug("ResourceQtopia::save: %s", fileName().latin1());
-
- mDirWatch.stopScan();
-
- KABC::AddressBook::Iterator it;
- bool res;
-
- for ( it = addressBook()->begin(); it != addressBook()->end(); ++it ) {
- PimContact c;
- KABC::Addressee addressee = (*it);
-
- //res = mConverter->addresseeToQtopia( *it, c );
- if (res == true)
- {
- mAccess->addContact(c);
-// if (res == false)
-// qDebug("Unable to append Contact %s", c.fullName().latin1());
- }
- else
- {
- qDebug("Unable to convert Addressee %s", addressee.formattedName().latin1());
- }
- }
-
-// mAccess->addressBookUpdated();
-
- mDirWatch.startScan();
-
- delete ticket;
- unlock( fileName() );
-#endif
return true;
}
bool ResourceQtopia::lock( const QString &lockfileName )
{
+ //disabled
+ return true;
qDebug("ResourceQtopia::lock: %s", fileName().latin1());
-
- kdDebug(5700) << "ResourceQtopia::lock()" << endl;
-
QString fn = lockfileName;
KURL url(fn);
QString lockName = locateLocal( "data", "kabc/lock/" + url.fileName() + ".lock" );
- kdDebug(5700) << "-- lock name: " << lockName << endl;
-
if (QFile::exists( lockName ))
{
qDebug("ResourceOpie::lock: lockfile %s already exists. (Delete it before continuing if nobody else is accessing the resourcefile %s)", lockName.latin1(), fileName().latin1());
return false;
}
QString lockUniqueName;
lockUniqueName = fn + KApplication::randomString( 8 );
url = lockUniqueName;
//US mLockUniqueName = locateLocal( "data", "kabc/lock/" + lockUniqueName );
mLockUniqueName = locateLocal( "data", "kabc/lock/" + url.fileName() );
kdDebug(5700) << "-- lock unique name: " << mLockUniqueName << endl;
// Create unique file
QFile file( mLockUniqueName );
file.open( IO_WriteOnly );
file.close();
// Create lock file
int result = 0;
#ifndef _WIN32_
result = ::link( QFile::encodeName( mLockUniqueName ),
QFile::encodeName( lockName ) );
#endif
if ( result == 0 ) {
addressBook()->emitAddressBookLocked();
return true;
}
// TODO: check stat
return false;
}
void ResourceQtopia::unlock( const QString &fileName )
{
+ //disabled
+ return;
qDebug("ResourceQtopia::unlock() %s", fileName.latin1());
QString fn = fileName;
KURL url(fn);
QString lockName = locateLocal( "data", "kabc/lock/" + url.fileName() + ".lock" );
QFile::remove( lockName );
QFile::remove( mLockUniqueName );
addressBook()->emitAddressBookUnlocked();
}
void ResourceQtopia::setFileName( const QString &newFileName )
{
+#ifdef _USE_DIRWATCH_
mDirWatch.stopScan();
+#endif
mDirWatch.removeFile( fileName() );
Resource::setFileName( newFileName );
mDirWatch.addFile( fileName() );
+#ifdef _USE_DIRWATCH_
mDirWatch.startScan();
+#endif
}
void ResourceQtopia::fileChanged()
{
// There is a small theoretical chance that KDirWatch calls us before
// we are fully constructed
if (!addressBook())
return;
QString text( i18n( "Qtopia resource '%1'<br> has been changed by third party.<br>Do you want to reload?").arg( fileName() ) );
if ( readOnly() || KMessageBox::questionYesNo( 0, text ) == KMessageBox::Yes ) {
load();
addressBook()->emitAddressBookChanged();
}
}
void ResourceQtopia::removeAddressee( const Addressee &addr )
{
}
void ResourceQtopia::cleanUp()
{
unlock( fileName() );
}
//US #include "resourceqtopia.moc"