-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 |
4 files changed, 55 insertions, 93 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 @@ | |||
20 | * Version: $Id$ | 20 | * Version: $Id$ |
21 | * ===================================================================== | 21 | * ===================================================================== |
22 | * History: | 22 | * History: |
23 | * $Log$ | 23 | * $Log$ |
24 | * Revision 1.5 2002/10/16 10:52:40 eilers | ||
25 | * Added some docu to the interface and now using the cache infrastucture by zecke.. :) | ||
26 | * | ||
24 | * Revision 1.4 2002/10/14 16:21:54 eilers | 27 | * Revision 1.4 2002/10/14 16:21:54 eilers |
25 | * Some minor interface updates | 28 | * Some minor interface updates |
26 | * | 29 | * |
27 | * Revision 1.3 2002/10/07 17:34:24 eilers | 30 | * Revision 1.3 2002/10/07 17:34:24 eilers |
@@ -61,10 +64,9 @@ | |||
61 | 64 | ||
62 | 65 | ||
63 | OContactAccess::OContactAccess ( const QString appname, const QString , | 66 | OContactAccess::OContactAccess ( const QString appname, const QString , |
64 | OContactAccessBackend* end, bool autosync ): | 67 | OContactAccessBackend* end, bool autosync ): |
65 | OPimAccessTemplate<OContact>( end ), | 68 | OPimAccessTemplate<OContact>( end ) |
66 | m_changed ( false ) | ||
67 | { | 69 | { |
68 | /* take care of the backend. If there is no one defined, we | 70 | /* take care of the backend. If there is no one defined, we |
69 | * will use the XML-Backend as default (until we have a cute SQL-Backend..). | 71 | * will use the XML-Backend as default (until we have a cute SQL-Backend..). |
70 | */ | 72 | */ |
@@ -93,37 +95,28 @@ OContactAccess::~OContactAccess () | |||
93 | { | 95 | { |
94 | /* The user may forget to save the changed database, therefore try to | 96 | /* The user may forget to save the changed database, therefore try to |
95 | * do it for him.. | 97 | * do it for him.. |
96 | */ | 98 | */ |
97 | if ( m_changed ) | 99 | save(); |
98 | save(); | ||
99 | // delete m_backEnd; is done by template.. | 100 | // delete m_backEnd; is done by template.. |
100 | } | 101 | } |
101 | 102 | ||
102 | bool OContactAccess::load() | ||
103 | { | ||
104 | return ( m_backEnd->load() ); | ||
105 | } | ||
106 | 103 | ||
107 | bool OContactAccess::save () | 104 | bool OContactAccess::save () |
108 | { | 105 | { |
109 | /* If the database was changed externally, we could not save the | 106 | /* If the database was changed externally, we could not save the |
110 | * Data. This will remove added items which is unacceptable ! | 107 | * Data. This will remove added items which is unacceptable ! |
111 | * Therefore: Reload database and merge the data... | 108 | * Therefore: Reload database and merge the data... |
112 | */ | 109 | */ |
113 | if ( m_backEnd->wasChangedExternally() ) | 110 | if ( OPimAccessTemplate<OContact>::wasChangedExternally() ) |
114 | reload(); | 111 | reload(); |
115 | 112 | ||
116 | if ( m_changed ){ | 113 | bool status = OPimAccessTemplate<OContact>::save(); |
117 | bool status = m_backEnd->save(); | 114 | if ( !status ) return false; |
118 | if ( !status ) return false; | ||
119 | 115 | ||
120 | m_changed = false; | 116 | /* Now tell everyone that new data is available. |
121 | /* Now tell everyone that new data is available. | 117 | */ |
122 | */ | 118 | QCopEnvelope e( "QPE/PIM", "addressbookUpdated()" ); |
123 | QCopEnvelope e( "QPE/PIM", "addressbookUpdated()" ); | ||
124 | |||
125 | } | ||
126 | 119 | ||
127 | return true; | 120 | return true; |
128 | } | 121 | } |
129 | 122 | ||
@@ -136,43 +129,15 @@ bool OContactAccess::hasQuerySettings ( int querySettings ) const | |||
136 | { | 129 | { |
137 | return ( m_backEnd->hasQuerySettings ( querySettings ) ); | 130 | return ( m_backEnd->hasQuerySettings ( querySettings ) ); |
138 | } | 131 | } |
139 | 132 | ||
140 | bool OContactAccess::add ( const OContact& newcontact ) | ||
141 | { | ||
142 | m_changed = true; | ||
143 | return ( m_backEnd->add ( newcontact ) ); | ||
144 | } | ||
145 | |||
146 | bool OContactAccess::replace ( const OContact& contact ) | ||
147 | { | ||
148 | m_changed = true; | ||
149 | return ( m_backEnd->replace ( contact ) ); | ||
150 | } | ||
151 | |||
152 | bool OContactAccess::remove ( const OContact& t ) | ||
153 | { | ||
154 | m_changed = true; | ||
155 | return ( m_backEnd->remove ( t.uid() ) ); | ||
156 | } | ||
157 | |||
158 | bool OContactAccess::remove ( int uid ) | ||
159 | { | ||
160 | m_changed = true; | ||
161 | return ( m_backEnd->remove ( uid ) ); | ||
162 | } | ||
163 | 133 | ||
164 | bool OContactAccess::wasChangedExternally()const | 134 | bool OContactAccess::wasChangedExternally()const |
165 | { | 135 | { |
166 | return ( m_backEnd->wasChangedExternally() ); | 136 | return ( m_backEnd->wasChangedExternally() ); |
167 | } | 137 | } |
168 | 138 | ||
169 | 139 | ||
170 | bool OContactAccess::reload() | ||
171 | { | ||
172 | return ( m_backEnd->reload() ); | ||
173 | } | ||
174 | |||
175 | void OContactAccess::copMessage( const QCString &msg, const QByteArray & ) | 140 | void OContactAccess::copMessage( const QCString &msg, const QByteArray & ) |
176 | { | 141 | { |
177 | if ( msg == "addressbookUpdated()" ){ | 142 | if ( msg == "addressbookUpdated()" ){ |
178 | qWarning ("OContactAccess: Received addressbokUpdated()"); | 143 | 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 @@ | |||
16 | * Version: $Id$ | 16 | * Version: $Id$ |
17 | * ===================================================================== | 17 | * ===================================================================== |
18 | * History: | 18 | * History: |
19 | * $Log$ | 19 | * $Log$ |
20 | * Revision 1.3 2002/10/16 10:52:40 eilers | ||
21 | * Added some docu to the interface and now using the cache infrastucture by zecke.. :) | ||
22 | * | ||
20 | * Revision 1.2 2002/10/14 16:21:54 eilers | 23 | * Revision 1.2 2002/10/14 16:21:54 eilers |
21 | * Some minor interface updates | 24 | * Some minor interface updates |
22 | * | 25 | * |
23 | * Revision 1.1 2002/09/27 17:11:44 eilers | 26 | * Revision 1.1 2002/09/27 17:11:44 eilers |
@@ -90,53 +93,14 @@ class OContactAccess: public QObject, public OPimAccessTemplate<OContact> | |||
90 | * @return <i>true</i> if the given settings are correct and possible. | 93 | * @return <i>true</i> if the given settings are correct and possible. |
91 | */ | 94 | */ |
92 | bool hasQuerySettings ( int querySettings ) const; | 95 | bool hasQuerySettings ( int querySettings ) const; |
93 | 96 | ||
94 | /** Add Contact to database. | ||
95 | * @param newcontact The contact to add. | ||
96 | * @return <i>true</i> if added successfully. | ||
97 | */ | ||
98 | bool add (const OContact& newcontact); | ||
99 | |||
100 | /** Replace contact. | ||
101 | * Replaces given contact with contact with the user id <i>uid</i>. | ||
102 | * @param uid The user ID | ||
103 | * @param contact The new contact | ||
104 | * @return <i>true</i> if successful. | ||
105 | */ | ||
106 | bool replace ( const OContact& contact ); | ||
107 | |||
108 | /** Remove contact. | ||
109 | * Removes contact with the user id <i>uid</i>. | ||
110 | * @param The contact to remove | ||
111 | * @return <i>true</i> if successful. | ||
112 | */ | ||
113 | bool remove ( const OContact& t ); | ||
114 | |||
115 | /** Remove contact. | ||
116 | * Removes contact with the user id <i>uid</i>. | ||
117 | * @param The user id of the contact to remove | ||
118 | * @return <i>true</i> if successful. | ||
119 | */ | ||
120 | bool remove ( int uid ); | ||
121 | |||
122 | /** Load Database * | ||
123 | */ | ||
124 | bool load(); | ||
125 | |||
126 | /** | 97 | /** |
127 | * if the resource was changed externally. | 98 | * if the resource was changed externally. |
128 | * You should use the signal instead of polling possible changes ! | 99 | * You should use the signal instead of polling possible changes ! |
129 | */ | 100 | */ |
130 | bool wasChangedExternally()const; | 101 | bool wasChangedExternally()const; |
131 | 102 | ||
132 | /** Reload database. | ||
133 | * You should execute this function if the external database | ||
134 | * was changed. | ||
135 | * This function will load the external database and afterwards | ||
136 | * rejoin the local changes. Therefore the local database will be set consistent. | ||
137 | */ | ||
138 | bool reload(); | ||
139 | 103 | ||
140 | /** Save contacts database. | 104 | /** Save contacts database. |
141 | * Save is more a "commit". After calling this function, all changes are public available. | 105 | * Save is more a "commit". After calling this function, all changes are public available. |
142 | * @return true if successful | 106 | * @return true if successful |
@@ -157,9 +121,8 @@ class OContactAccess: public QObject, public OPimAccessTemplate<OContact> | |||
157 | // class OContactAccessPrivate; | 121 | // class OContactAccessPrivate; |
158 | // OContactAccessPrivate* d; | 122 | // OContactAccessPrivate* d; |
159 | OContactAccessBackend *m_backEnd; | 123 | OContactAccessBackend *m_backEnd; |
160 | bool m_loading:1; | 124 | bool m_loading:1; |
161 | bool m_changed; | ||
162 | 125 | ||
163 | private slots: | 126 | private slots: |
164 | void copMessage( const QCString &msg, const QByteArray &data ); | 127 | void copMessage( const QCString &msg, const QByteArray &data ); |
165 | 128 | ||
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 @@ | |||
16 | * Version: $Id$ | 16 | * Version: $Id$ |
17 | * ===================================================================== | 17 | * ===================================================================== |
18 | * History: | 18 | * History: |
19 | * $Log$ | 19 | * $Log$ |
20 | * Revision 1.4 2002/10/16 10:52:40 eilers | ||
21 | * Added some docu to the interface and now using the cache infrastucture by zecke.. :) | ||
22 | * | ||
20 | * Revision 1.3 2002/10/14 16:21:54 eilers | 23 | * Revision 1.3 2002/10/14 16:21:54 eilers |
21 | * Some minor interface updates | 24 | * Some minor interface updates |
22 | * | 25 | * |
23 | * Revision 1.2 2002/10/07 17:34:24 eilers | 26 | * Revision 1.2 2002/10/07 17:34:24 eilers |
@@ -55,9 +58,10 @@ using namespace Opie; | |||
55 | 58 | ||
56 | /* the default xml implementation */ | 59 | /* the default xml implementation */ |
57 | class OContactAccessBackend_XML : public OContactAccessBackend { | 60 | class OContactAccessBackend_XML : public OContactAccessBackend { |
58 | public: | 61 | public: |
59 | OContactAccessBackend_XML ( QString appname, QString filename = 0l ) | 62 | OContactAccessBackend_XML ( QString appname, QString filename = 0l ): |
63 | m_changed( false ) | ||
60 | { | 64 | { |
61 | m_appName = appname; | 65 | m_appName = appname; |
62 | 66 | ||
63 | /* Set journalfile name ... */ | 67 | /* Set journalfile name ... */ |
@@ -74,8 +78,12 @@ class OContactAccessBackend_XML : public OContactAccessBackend { | |||
74 | load (); | 78 | load (); |
75 | } | 79 | } |
76 | 80 | ||
77 | bool save() { | 81 | bool save() { |
82 | |||
83 | if ( !m_changed ) | ||
84 | return true; | ||
85 | |||
78 | QString strNewFile = m_fileName + ".new"; | 86 | QString strNewFile = m_fileName + ".new"; |
79 | QFile f( strNewFile ); | 87 | QFile f( strNewFile ); |
80 | if ( !f.open( IO_WriteOnly|IO_Raw ) ) | 88 | if ( !f.open( IO_WriteOnly|IO_Raw ) ) |
81 | return false; | 89 | return false; |
@@ -122,8 +130,10 @@ class OContactAccessBackend_XML : public OContactAccessBackend { | |||
122 | } | 130 | } |
123 | 131 | ||
124 | /* The journalfile should be removed now... */ | 132 | /* The journalfile should be removed now... */ |
125 | removeJournal(); | 133 | removeJournal(); |
134 | |||
135 | m_changed = false; | ||
126 | return true; | 136 | return true; |
127 | } | 137 | } |
128 | 138 | ||
129 | bool load () { | 139 | bool load () { |
@@ -144,8 +154,9 @@ class OContactAccessBackend_XML : public OContactAccessBackend { | |||
144 | } | 154 | } |
145 | 155 | ||
146 | void clear () { | 156 | void clear () { |
147 | m_contactList.clear(); | 157 | m_contactList.clear(); |
158 | m_changed = false; | ||
148 | 159 | ||
149 | } | 160 | } |
150 | 161 | ||
151 | bool wasChangedExternally() | 162 | bool wasChangedExternally() |
@@ -274,13 +285,18 @@ class OContactAccessBackend_XML : public OContactAccessBackend { | |||
274 | { | 285 | { |
275 | //qWarning("odefaultbackend: ACTION::ADD"); | 286 | //qWarning("odefaultbackend: ACTION::ADD"); |
276 | updateJournal (newcontact, OContact::ACTION_ADD); | 287 | updateJournal (newcontact, OContact::ACTION_ADD); |
277 | addContact_p( newcontact ); | 288 | addContact_p( newcontact ); |
289 | |||
290 | m_changed = true; | ||
291 | |||
278 | return true; | 292 | return true; |
279 | } | 293 | } |
280 | 294 | ||
281 | bool replace ( const OContact &contact ) | 295 | bool replace ( const OContact &contact ) |
282 | { | 296 | { |
297 | m_changed = true; | ||
298 | |||
283 | bool found = false; | 299 | bool found = false; |
284 | 300 | ||
285 | QValueListIterator<OContact> it; | 301 | QValueListIterator<OContact> it; |
286 | for( it = m_contactList.begin(); it != m_contactList.end(); ++it ){ | 302 | for( it = m_contactList.begin(); it != m_contactList.end(); ++it ){ |
@@ -299,8 +315,10 @@ class OContactAccessBackend_XML : public OContactAccessBackend { | |||
299 | } | 315 | } |
300 | 316 | ||
301 | bool remove ( int uid ) | 317 | bool remove ( int uid ) |
302 | { | 318 | { |
319 | m_changed = true; | ||
320 | |||
303 | bool found = false; | 321 | bool found = false; |
304 | QValueListIterator<OContact> it; | 322 | QValueListIterator<OContact> it; |
305 | for( it = m_contactList.begin(); it != m_contactList.end(); ++it ){ | 323 | for( it = m_contactList.begin(); it != m_contactList.end(); ++it ){ |
306 | if ((*it).uid() == uid){ | 324 | if ((*it).uid() == uid){ |
@@ -552,8 +570,9 @@ class OContactAccessBackend_XML : public OContactAccessBackend { | |||
552 | f.remove(); | 570 | f.remove(); |
553 | } | 571 | } |
554 | 572 | ||
555 | protected: | 573 | protected: |
574 | bool m_changed; | ||
556 | QString m_journalName; | 575 | QString m_journalName; |
557 | QString m_fileName; | 576 | QString m_fileName; |
558 | QString m_appName; | 577 | QString m_appName; |
559 | QValueList<OContact> m_contactList; | 578 | 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: | |||
36 | * load from the backend | 36 | * load from the backend |
37 | */ | 37 | */ |
38 | virtual bool load(); | 38 | virtual bool load(); |
39 | 39 | ||
40 | /** | 40 | /** Reload database. |
41 | * reload from the backend | 41 | * You should execute this function if the external database |
42 | * was changed. | ||
43 | * This function will load the external database and afterwards | ||
44 | * rejoin the local changes. Therefore the local database will be set consistent. | ||
42 | */ | 45 | */ |
43 | virtual bool reload(); | 46 | virtual bool reload(); |
44 | 47 | ||
45 | /** | 48 | /** Save contacts database. |
46 | * save to the backend | 49 | * Save is more a "commit". After calling this function, all changes are public available. |
50 | * @return true if successful | ||
47 | */ | 51 | */ |
48 | virtual bool save(); | 52 | virtual bool save(); |
49 | 53 | ||
50 | /** | 54 | /** |
51 | * if the resource was changed externally | 55 | * if the resource was changed externally |
56 | * You should use the signal handling instead of polling possible changes ! | ||
57 | * zecke: Do you implement a signal for otodoaccess ? | ||
52 | */ | 58 | */ |
53 | bool wasChangedExternally()const; | 59 | bool wasChangedExternally()const; |
54 | 60 | ||
55 | /** | 61 | /** |
@@ -58,9 +64,9 @@ public: | |||
58 | */ | 64 | */ |
59 | virtual List allRecords()const; | 65 | virtual List allRecords()const; |
60 | 66 | ||
61 | /** | 67 | /** |
62 | * queryByExample) | 68 | * queryByExample. |
63 | * @see otodoaccess, ocontactaccess | 69 | * @see otodoaccess, ocontactaccess |
64 | */ | 70 | */ |
65 | virtual List queryByExample( const T& t, int querySettings ); | 71 | virtual List queryByExample( const T& t, int querySettings ); |
66 | 72 | ||
@@ -82,24 +88,32 @@ public: | |||
82 | virtual void clear() ; | 88 | virtual void clear() ; |
83 | 89 | ||
84 | /** | 90 | /** |
85 | * add T to the backend | 91 | * add T to the backend |
92 | * @param t The item to add. | ||
93 | * @return <i>true</i> if added successfully. | ||
86 | */ | 94 | */ |
87 | virtual bool add( const T& t ) ; | 95 | virtual bool add( const T& t ) ; |
88 | 96 | ||
89 | /* only the uid matters */ | 97 | /* only the uid matters */ |
90 | /** | 98 | /** |
91 | * remove T from the backend | 99 | * remove T from the backend |
100 | * @param t The item to remove | ||
101 | * @return <i>true</i> if successful. | ||
92 | */ | 102 | */ |
93 | virtual bool remove( const T& t ); | 103 | virtual bool remove( const T& t ); |
94 | 104 | ||
95 | /** | 105 | /** |
96 | * remove the OPimRecord with uid | 106 | * remove the OPimRecord with uid |
107 | * @param uid The ID of the item to remove | ||
108 | * @return <i>true</i> if successful. | ||
97 | */ | 109 | */ |
98 | virtual bool remove( int uid ); | 110 | virtual bool remove( int uid ); |
99 | 111 | ||
100 | /** | 112 | /** |
101 | * replace T from backend | 113 | * replace T from backend |
114 | * @param t The item to replace | ||
115 | * @return <i>true</i> if successful. | ||
102 | */ | 116 | */ |
103 | virtual bool replace( const T& t) ; | 117 | virtual bool replace( const T& t) ; |
104 | 118 | ||
105 | /** | 119 | /** |
@@ -141,9 +155,10 @@ bool OPimAccessTemplate<T>::load() { | |||
141 | return m_backEnd->load(); | 155 | return m_backEnd->load(); |
142 | } | 156 | } |
143 | template <class T> | 157 | template <class T> |
144 | bool OPimAccessTemplate<T>::reload() { | 158 | bool OPimAccessTemplate<T>::reload() { |
145 | return m_backEnd->reload(); | 159 | invalidateCache(); // zecke: I think this should be added (se) |
160 | return m_backEnd->reload(); | ||
146 | } | 161 | } |
147 | template <class T> | 162 | template <class T> |
148 | bool OPimAccessTemplate<T>::save() { | 163 | bool OPimAccessTemplate<T>::save() { |
149 | return m_backEnd->save(); | 164 | return m_backEnd->save(); |