Diffstat (limited to 'libopie/pim/ocontactaccessbackend_xml.h') (more/less context) (ignore whitespace changes)
-rw-r--r-- | libopie/pim/ocontactaccessbackend_xml.h | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/libopie/pim/ocontactaccessbackend_xml.h b/libopie/pim/ocontactaccessbackend_xml.h index 50ea329..12a75ba 100644 --- a/libopie/pim/ocontactaccessbackend_xml.h +++ b/libopie/pim/ocontactaccessbackend_xml.h @@ -12,16 +12,19 @@ * ToDo: XML-Backend: Automatic reload if something was changed... * * * ===================================================================== * Version: $Id$ * ===================================================================== * History: * $Log$ + * Revision 1.4 2002/10/16 10:52:40 eilers + * Added some docu to the interface and now using the cache infrastucture by zecke.. :) + * * Revision 1.3 2002/10/14 16:21:54 eilers * Some minor interface updates * * Revision 1.2 2002/10/07 17:34:24 eilers * added OBackendFactory for advanced backend access * * Revision 1.1 2002/09/27 17:11:44 eilers * Added API for accessing the Contact-Database ! It is compiling, but @@ -51,17 +54,18 @@ #include <stdlib.h> #include <errno.h> using namespace Opie; /* the default xml implementation */ class OContactAccessBackend_XML : public OContactAccessBackend { public: - OContactAccessBackend_XML ( QString appname, QString filename = 0l ) + OContactAccessBackend_XML ( QString appname, QString filename = 0l ): + m_changed( false ) { m_appName = appname; /* Set journalfile name ... */ m_journalName = getenv("HOME"); m_journalName +="/.abjournal" + appname; /* Expecting to access the default filename if nothing else is set */ @@ -70,16 +74,20 @@ class OContactAccessBackend_XML : public OContactAccessBackend { } else m_fileName = filename; /* Load Database now */ load (); } bool save() { + + if ( !m_changed ) + return true; + QString strNewFile = m_fileName + ".new"; QFile f( strNewFile ); if ( !f.open( IO_WriteOnly|IO_Raw ) ) return false; int total_written; QString out; out = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><!DOCTYPE Addressbook ><AddressBook>\n" @@ -118,16 +126,18 @@ class OContactAccessBackend_XML : public OContactAccessBackend { qWarning( "problem renaming file %s to %s, errno: %d", strNewFile.latin1(), m_journalName.latin1(), errno ); // remove the tmp file... QFile::remove( strNewFile ); } /* The journalfile should be removed now... */ removeJournal(); + + m_changed = false; return true; } bool load () { m_contactList.clear(); /* Load XML-File and journal if it exists */ if ( !load ( m_fileName, false ) ) @@ -140,16 +150,17 @@ class OContactAccessBackend_XML : public OContactAccessBackend { */ load (m_journalName, true); return true; } void clear () { m_contactList.clear(); + m_changed = false; } bool wasChangedExternally() { QFileInfo fi( m_fileName ); QDateTime lastmod = fi.lastModified (); @@ -270,21 +281,26 @@ class OContactAccessBackend_XML : public OContactAccessBackend { } } bool add ( const OContact &newcontact ) { //qWarning("odefaultbackend: ACTION::ADD"); updateJournal (newcontact, OContact::ACTION_ADD); addContact_p( newcontact ); + + m_changed = true; + return true; } bool replace ( const OContact &contact ) { + m_changed = true; + bool found = false; QValueListIterator<OContact> it; for( it = m_contactList.begin(); it != m_contactList.end(); ++it ){ if ( (*it).uid() == contact.uid() ){ found = true; break; } @@ -295,16 +311,18 @@ class OContactAccessBackend_XML : public OContactAccessBackend { m_contactList.append (contact); return true; } else return false; } bool remove ( int uid ) { + m_changed = true; + bool found = false; QValueListIterator<OContact> it; for( it = m_contactList.begin(); it != m_contactList.end(); ++it ){ if ((*it).uid() == uid){ found = true; break; } } @@ -548,16 +566,17 @@ class OContactAccessBackend_XML : public OContactAccessBackend { void removeJournal() { QFile f ( m_journalName ); if ( f.exists() ) f.remove(); } protected: + bool m_changed; QString m_journalName; QString m_fileName; QString m_appName; QValueList<OContact> m_contactList; QDateTime m_readtime; }; #endif |