-rw-r--r-- | libopie/pim/ocontactaccess.cpp | 57 | ||||
-rw-r--r-- | libopie/pim/ocontactaccess.h | 43 | ||||
-rw-r--r-- | libopie/pim/ocontactaccessbackend_xml.h | 21 | ||||
-rw-r--r-- | libopie/pim/opimaccesstemplate.h | 27 | ||||
-rw-r--r-- | libopie2/opiepim/backend/ocontactaccessbackend_xml.h | 21 | ||||
-rw-r--r-- | libopie2/opiepim/core/ocontactaccess.cpp | 57 | ||||
-rw-r--r-- | libopie2/opiepim/core/ocontactaccess.h | 43 | ||||
-rw-r--r-- | libopie2/opiepim/core/opimaccesstemplate.h | 27 |
8 files changed, 110 insertions, 186 deletions
diff --git a/libopie/pim/ocontactaccess.cpp b/libopie/pim/ocontactaccess.cpp index e8c0a45..2ca0283 100644 --- a/libopie/pim/ocontactaccess.cpp +++ b/libopie/pim/ocontactaccess.cpp @@ -20,8 +20,11 @@ * Version: $Id$ * ===================================================================== * History: * $Log$ + * Revision 1.5 2002/10/16 10:52:40 eilers + * Added some docu to the interface and now using the cache infrastucture by zecke.. :) + * * Revision 1.4 2002/10/14 16:21:54 eilers * Some minor interface updates * * Revision 1.3 2002/10/07 17:34:24 eilers @@ -61,10 +64,9 @@ OContactAccess::OContactAccess ( const QString appname, const QString , OContactAccessBackend* end, bool autosync ): - OPimAccessTemplate<OContact>( end ), - m_changed ( false ) + OPimAccessTemplate<OContact>( end ) { /* take care of the backend. If there is no one defined, we * will use the XML-Backend as default (until we have a cute SQL-Backend..). */ @@ -93,37 +95,28 @@ OContactAccess::~OContactAccess () { /* The user may forget to save the changed database, therefore try to * do it for him.. */ - if ( m_changed ) - save(); + save(); // delete m_backEnd; is done by template.. } -bool OContactAccess::load() -{ - return ( m_backEnd->load() ); -} bool OContactAccess::save () { /* If the database was changed externally, we could not save the * Data. This will remove added items which is unacceptable ! * Therefore: Reload database and merge the data... */ - if ( m_backEnd->wasChangedExternally() ) + if ( OPimAccessTemplate<OContact>::wasChangedExternally() ) reload(); - if ( m_changed ){ - bool status = m_backEnd->save(); - if ( !status ) return false; + bool status = OPimAccessTemplate<OContact>::save(); + if ( !status ) return false; - m_changed = false; - /* Now tell everyone that new data is available. - */ - QCopEnvelope e( "QPE/PIM", "addressbookUpdated()" ); - - } + /* Now tell everyone that new data is available. + */ + QCopEnvelope e( "QPE/PIM", "addressbookUpdated()" ); return true; } @@ -136,43 +129,15 @@ bool OContactAccess::hasQuerySettings ( int querySettings ) const { return ( m_backEnd->hasQuerySettings ( querySettings ) ); } -bool OContactAccess::add ( const OContact& newcontact ) -{ - m_changed = true; - return ( m_backEnd->add ( newcontact ) ); -} - -bool OContactAccess::replace ( const OContact& contact ) -{ - m_changed = true; - return ( m_backEnd->replace ( contact ) ); -} - -bool OContactAccess::remove ( const OContact& t ) -{ - m_changed = true; - return ( m_backEnd->remove ( t.uid() ) ); -} - -bool OContactAccess::remove ( int uid ) -{ - m_changed = true; - return ( m_backEnd->remove ( uid ) ); -} bool OContactAccess::wasChangedExternally()const { return ( m_backEnd->wasChangedExternally() ); } -bool OContactAccess::reload() -{ - return ( m_backEnd->reload() ); -} - void OContactAccess::copMessage( const QCString &msg, const QByteArray & ) { if ( msg == "addressbookUpdated()" ){ qWarning ("OContactAccess: Received addressbokUpdated()"); diff --git a/libopie/pim/ocontactaccess.h b/libopie/pim/ocontactaccess.h index adc66cf..da9c942 100644 --- a/libopie/pim/ocontactaccess.h +++ b/libopie/pim/ocontactaccess.h @@ -16,8 +16,11 @@ * Version: $Id$ * ===================================================================== * History: * $Log$ + * Revision 1.3 2002/10/16 10:52:40 eilers + * Added some docu to the interface and now using the cache infrastucture by zecke.. :) + * * Revision 1.2 2002/10/14 16:21:54 eilers * Some minor interface updates * * Revision 1.1 2002/09/27 17:11:44 eilers @@ -90,53 +93,14 @@ class OContactAccess: public QObject, public OPimAccessTemplate<OContact> * @return <i>true</i> if the given settings are correct and possible. */ bool hasQuerySettings ( int querySettings ) const; - /** Add Contact to database. - * @param newcontact The contact to add. - * @return <i>true</i> if added successfully. - */ - bool add (const OContact& newcontact); - - /** Replace contact. - * Replaces given contact with contact with the user id <i>uid</i>. - * @param uid The user ID - * @param contact The new contact - * @return <i>true</i> if successful. - */ - bool replace ( const OContact& contact ); - - /** Remove contact. - * Removes contact with the user id <i>uid</i>. - * @param The contact to remove - * @return <i>true</i> if successful. - */ - bool remove ( const OContact& t ); - - /** Remove contact. - * Removes contact with the user id <i>uid</i>. - * @param The user id of the contact to remove - * @return <i>true</i> if successful. - */ - bool remove ( int uid ); - - /** Load Database * - */ - bool load(); - /** * if the resource was changed externally. * You should use the signal instead of polling possible changes ! */ bool wasChangedExternally()const; - /** Reload database. - * You should execute this function if the external database - * was changed. - * This function will load the external database and afterwards - * rejoin the local changes. Therefore the local database will be set consistent. - */ - bool reload(); /** Save contacts database. * Save is more a "commit". After calling this function, all changes are public available. * @return true if successful @@ -157,9 +121,8 @@ class OContactAccess: public QObject, public OPimAccessTemplate<OContact> // class OContactAccessPrivate; // OContactAccessPrivate* d; OContactAccessBackend *m_backEnd; bool m_loading:1; - bool m_changed; private slots: void copMessage( const QCString &msg, const QByteArray &data ); 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 @@ -16,8 +16,11 @@ * 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 @@ -55,9 +58,10 @@ 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 ... */ @@ -74,8 +78,12 @@ class OContactAccessBackend_XML : public OContactAccessBackend { 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; @@ -122,8 +130,10 @@ class OContactAccessBackend_XML : public OContactAccessBackend { } /* The journalfile should be removed now... */ removeJournal(); + + m_changed = false; return true; } bool load () { @@ -144,8 +154,9 @@ class OContactAccessBackend_XML : public OContactAccessBackend { } void clear () { m_contactList.clear(); + m_changed = false; } bool wasChangedExternally() @@ -274,13 +285,18 @@ class OContactAccessBackend_XML : public OContactAccessBackend { { //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 ){ @@ -299,8 +315,10 @@ class OContactAccessBackend_XML : public OContactAccessBackend { } 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){ @@ -552,8 +570,9 @@ class OContactAccessBackend_XML : public OContactAccessBackend { f.remove(); } protected: + bool m_changed; QString m_journalName; QString m_fileName; QString m_appName; QValueList<OContact> m_contactList; diff --git a/libopie/pim/opimaccesstemplate.h b/libopie/pim/opimaccesstemplate.h index 3e1f393..50cb1e4 100644 --- a/libopie/pim/opimaccesstemplate.h +++ b/libopie/pim/opimaccesstemplate.h @@ -36,20 +36,26 @@ public: * load from the backend */ virtual bool load(); - /** - * reload from the backend + /** Reload database. + * You should execute this function if the external database + * was changed. + * This function will load the external database and afterwards + * rejoin the local changes. Therefore the local database will be set consistent. */ virtual bool reload(); - /** - * save to the backend + /** Save contacts database. + * Save is more a "commit". After calling this function, all changes are public available. + * @return true if successful */ virtual bool save(); /** * if the resource was changed externally + * You should use the signal handling instead of polling possible changes ! + * zecke: Do you implement a signal for otodoaccess ? */ bool wasChangedExternally()const; /** @@ -58,9 +64,9 @@ public: */ virtual List allRecords()const; /** - * queryByExample) + * queryByExample. * @see otodoaccess, ocontactaccess */ virtual List queryByExample( const T& t, int querySettings ); @@ -82,24 +88,32 @@ public: virtual void clear() ; /** * add T to the backend + * @param t The item to add. + * @return <i>true</i> if added successfully. */ virtual bool add( const T& t ) ; /* only the uid matters */ /** * remove T from the backend + * @param t The item to remove + * @return <i>true</i> if successful. */ virtual bool remove( const T& t ); /** * remove the OPimRecord with uid + * @param uid The ID of the item to remove + * @return <i>true</i> if successful. */ virtual bool remove( int uid ); /** * replace T from backend + * @param t The item to replace + * @return <i>true</i> if successful. */ virtual bool replace( const T& t) ; /** @@ -141,9 +155,10 @@ bool OPimAccessTemplate<T>::load() { return m_backEnd->load(); } template <class T> bool OPimAccessTemplate<T>::reload() { - return m_backEnd->reload(); + invalidateCache(); // zecke: I think this should be added (se) + return m_backEnd->reload(); } template <class T> bool OPimAccessTemplate<T>::save() { return m_backEnd->save(); diff --git a/libopie2/opiepim/backend/ocontactaccessbackend_xml.h b/libopie2/opiepim/backend/ocontactaccessbackend_xml.h index 50ea329..12a75ba 100644 --- a/libopie2/opiepim/backend/ocontactaccessbackend_xml.h +++ b/libopie2/opiepim/backend/ocontactaccessbackend_xml.h @@ -16,8 +16,11 @@ * 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 @@ -55,9 +58,10 @@ 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 ... */ @@ -74,8 +78,12 @@ class OContactAccessBackend_XML : public OContactAccessBackend { 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; @@ -122,8 +130,10 @@ class OContactAccessBackend_XML : public OContactAccessBackend { } /* The journalfile should be removed now... */ removeJournal(); + + m_changed = false; return true; } bool load () { @@ -144,8 +154,9 @@ class OContactAccessBackend_XML : public OContactAccessBackend { } void clear () { m_contactList.clear(); + m_changed = false; } bool wasChangedExternally() @@ -274,13 +285,18 @@ class OContactAccessBackend_XML : public OContactAccessBackend { { //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 ){ @@ -299,8 +315,10 @@ class OContactAccessBackend_XML : public OContactAccessBackend { } 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){ @@ -552,8 +570,9 @@ class OContactAccessBackend_XML : public OContactAccessBackend { f.remove(); } protected: + bool m_changed; QString m_journalName; QString m_fileName; QString m_appName; QValueList<OContact> m_contactList; diff --git a/libopie2/opiepim/core/ocontactaccess.cpp b/libopie2/opiepim/core/ocontactaccess.cpp index e8c0a45..2ca0283 100644 --- a/libopie2/opiepim/core/ocontactaccess.cpp +++ b/libopie2/opiepim/core/ocontactaccess.cpp @@ -20,8 +20,11 @@ * Version: $Id$ * ===================================================================== * History: * $Log$ + * Revision 1.5 2002/10/16 10:52:40 eilers + * Added some docu to the interface and now using the cache infrastucture by zecke.. :) + * * Revision 1.4 2002/10/14 16:21:54 eilers * Some minor interface updates * * Revision 1.3 2002/10/07 17:34:24 eilers @@ -61,10 +64,9 @@ OContactAccess::OContactAccess ( const QString appname, const QString , OContactAccessBackend* end, bool autosync ): - OPimAccessTemplate<OContact>( end ), - m_changed ( false ) + OPimAccessTemplate<OContact>( end ) { /* take care of the backend. If there is no one defined, we * will use the XML-Backend as default (until we have a cute SQL-Backend..). */ @@ -93,37 +95,28 @@ OContactAccess::~OContactAccess () { /* The user may forget to save the changed database, therefore try to * do it for him.. */ - if ( m_changed ) - save(); + save(); // delete m_backEnd; is done by template.. } -bool OContactAccess::load() -{ - return ( m_backEnd->load() ); -} bool OContactAccess::save () { /* If the database was changed externally, we could not save the * Data. This will remove added items which is unacceptable ! * Therefore: Reload database and merge the data... */ - if ( m_backEnd->wasChangedExternally() ) + if ( OPimAccessTemplate<OContact>::wasChangedExternally() ) reload(); - if ( m_changed ){ - bool status = m_backEnd->save(); - if ( !status ) return false; + bool status = OPimAccessTemplate<OContact>::save(); + if ( !status ) return false; - m_changed = false; - /* Now tell everyone that new data is available. - */ - QCopEnvelope e( "QPE/PIM", "addressbookUpdated()" ); - - } + /* Now tell everyone that new data is available. + */ + QCopEnvelope e( "QPE/PIM", "addressbookUpdated()" ); return true; } @@ -136,43 +129,15 @@ bool OContactAccess::hasQuerySettings ( int querySettings ) const { return ( m_backEnd->hasQuerySettings ( querySettings ) ); } -bool OContactAccess::add ( const OContact& newcontact ) -{ - m_changed = true; - return ( m_backEnd->add ( newcontact ) ); -} - -bool OContactAccess::replace ( const OContact& contact ) -{ - m_changed = true; - return ( m_backEnd->replace ( contact ) ); -} - -bool OContactAccess::remove ( const OContact& t ) -{ - m_changed = true; - return ( m_backEnd->remove ( t.uid() ) ); -} - -bool OContactAccess::remove ( int uid ) -{ - m_changed = true; - return ( m_backEnd->remove ( uid ) ); -} bool OContactAccess::wasChangedExternally()const { return ( m_backEnd->wasChangedExternally() ); } -bool OContactAccess::reload() -{ - return ( m_backEnd->reload() ); -} - void OContactAccess::copMessage( const QCString &msg, const QByteArray & ) { if ( msg == "addressbookUpdated()" ){ qWarning ("OContactAccess: Received addressbokUpdated()"); diff --git a/libopie2/opiepim/core/ocontactaccess.h b/libopie2/opiepim/core/ocontactaccess.h index adc66cf..da9c942 100644 --- a/libopie2/opiepim/core/ocontactaccess.h +++ b/libopie2/opiepim/core/ocontactaccess.h @@ -16,8 +16,11 @@ * Version: $Id$ * ===================================================================== * History: * $Log$ + * Revision 1.3 2002/10/16 10:52:40 eilers + * Added some docu to the interface and now using the cache infrastucture by zecke.. :) + * * Revision 1.2 2002/10/14 16:21:54 eilers * Some minor interface updates * * Revision 1.1 2002/09/27 17:11:44 eilers @@ -90,53 +93,14 @@ class OContactAccess: public QObject, public OPimAccessTemplate<OContact> * @return <i>true</i> if the given settings are correct and possible. */ bool hasQuerySettings ( int querySettings ) const; - /** Add Contact to database. - * @param newcontact The contact to add. - * @return <i>true</i> if added successfully. - */ - bool add (const OContact& newcontact); - - /** Replace contact. - * Replaces given contact with contact with the user id <i>uid</i>. - * @param uid The user ID - * @param contact The new contact - * @return <i>true</i> if successful. - */ - bool replace ( const OContact& contact ); - - /** Remove contact. - * Removes contact with the user id <i>uid</i>. - * @param The contact to remove - * @return <i>true</i> if successful. - */ - bool remove ( const OContact& t ); - - /** Remove contact. - * Removes contact with the user id <i>uid</i>. - * @param The user id of the contact to remove - * @return <i>true</i> if successful. - */ - bool remove ( int uid ); - - /** Load Database * - */ - bool load(); - /** * if the resource was changed externally. * You should use the signal instead of polling possible changes ! */ bool wasChangedExternally()const; - /** Reload database. - * You should execute this function if the external database - * was changed. - * This function will load the external database and afterwards - * rejoin the local changes. Therefore the local database will be set consistent. - */ - bool reload(); /** Save contacts database. * Save is more a "commit". After calling this function, all changes are public available. * @return true if successful @@ -157,9 +121,8 @@ class OContactAccess: public QObject, public OPimAccessTemplate<OContact> // class OContactAccessPrivate; // OContactAccessPrivate* d; OContactAccessBackend *m_backEnd; bool m_loading:1; - bool m_changed; private slots: void copMessage( const QCString &msg, const QByteArray &data ); diff --git a/libopie2/opiepim/core/opimaccesstemplate.h b/libopie2/opiepim/core/opimaccesstemplate.h index 3e1f393..50cb1e4 100644 --- a/libopie2/opiepim/core/opimaccesstemplate.h +++ b/libopie2/opiepim/core/opimaccesstemplate.h @@ -36,20 +36,26 @@ public: * load from the backend */ virtual bool load(); - /** - * reload from the backend + /** Reload database. + * You should execute this function if the external database + * was changed. + * This function will load the external database and afterwards + * rejoin the local changes. Therefore the local database will be set consistent. */ virtual bool reload(); - /** - * save to the backend + /** Save contacts database. + * Save is more a "commit". After calling this function, all changes are public available. + * @return true if successful */ virtual bool save(); /** * if the resource was changed externally + * You should use the signal handling instead of polling possible changes ! + * zecke: Do you implement a signal for otodoaccess ? */ bool wasChangedExternally()const; /** @@ -58,9 +64,9 @@ public: */ virtual List allRecords()const; /** - * queryByExample) + * queryByExample. * @see otodoaccess, ocontactaccess */ virtual List queryByExample( const T& t, int querySettings ); @@ -82,24 +88,32 @@ public: virtual void clear() ; /** * add T to the backend + * @param t The item to add. + * @return <i>true</i> if added successfully. */ virtual bool add( const T& t ) ; /* only the uid matters */ /** * remove T from the backend + * @param t The item to remove + * @return <i>true</i> if successful. */ virtual bool remove( const T& t ); /** * remove the OPimRecord with uid + * @param uid The ID of the item to remove + * @return <i>true</i> if successful. */ virtual bool remove( int uid ); /** * replace T from backend + * @param t The item to replace + * @return <i>true</i> if successful. */ virtual bool replace( const T& t) ; /** @@ -141,9 +155,10 @@ bool OPimAccessTemplate<T>::load() { return m_backEnd->load(); } template <class T> bool OPimAccessTemplate<T>::reload() { - return m_backEnd->reload(); + invalidateCache(); // zecke: I think this should be added (se) + return m_backEnd->reload(); } template <class T> bool OPimAccessTemplate<T>::save() { return m_backEnd->save(); |