summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opiepim/ChangeLog2
-rw-r--r--libopie2/opiepim/backend/ocontactaccessbackend.cpp41
2 files changed, 22 insertions, 21 deletions
diff --git a/libopie2/opiepim/ChangeLog b/libopie2/opiepim/ChangeLog
index 52b3f6b..a1b4db0 100644
--- a/libopie2/opiepim/ChangeLog
+++ b/libopie2/opiepim/ChangeLog
@@ -1,31 +1,33 @@
12005-03.19 Stefan Eilers <stefan@eilers-online.net>
2 * Minor update for sorted(). Now ignoring any category search if "DoNotShowWithCategory" filter is activated.
12005-03-18 Stefan Eilers <stefan@eilers-online.net> 32005-03-18 Stefan Eilers <stefan@eilers-online.net>
2 * Rewrote generic sorted filter and added filter for "DoNotShowWithCategory", needed by addressbook (other filters need to be added!) 4 * Rewrote generic sorted filter and added filter for "DoNotShowWithCategory", needed by addressbook (other filters need to be added!)
32005-01-16 Stefan Eilers <stefan@eilers-online.net> 52005-01-16 Stefan Eilers <stefan@eilers-online.net>
4 * Added new OPimEventSortVector class, improved OPimSortVector 6 * Added new OPimEventSortVector class, improved OPimSortVector
5 * OPimAccessBackend now supports generic sorting. 7 * OPimAccessBackend now supports generic sorting.
62005-01-03 Stefan Eilers <stefan@eilers-online.net> 82005-01-03 Stefan Eilers <stefan@eilers-online.net>
7 * Fixing bug in API documentation 9 * Fixing bug in API documentation
8 * Moving hasQuerySettings() and querySettings() to OPimAccessTemplate to be available for all frontends 10 * Moving hasQuerySettings() and querySettings() to OPimAccessTemplate to be available for all frontends
92004-12-28 Stefan Eilers <stefan@eilers-online.net> 112004-12-28 Stefan Eilers <stefan@eilers-online.net>
10 * Make improved query by example accessable via frontend 12 * Make improved query by example accessable via frontend
11 * Some API documentation improvement 13 * Some API documentation improvement
12 * Cleanup of backend api.. 14 * Cleanup of backend api..
13 * Fixing bug #1501 15 * Fixing bug #1501
142004-11-23 Stefan Eilers <stefan@eilers-online.net> 162004-11-23 Stefan Eilers <stefan@eilers-online.net>
15 * Implement fast and full featured version of sorted() for addressbook 17 * Implement fast and full featured version of sorted() for addressbook
16 * Implement generic queryByExample for all Addressboook backends. It allows incremental search. 18 * Implement generic queryByExample for all Addressboook backends. It allows incremental search.
17 * Update of API Documentation 19 * Update of API Documentation
182004-11-18 Holger Freyther <freyther@handhelds.org> 202004-11-18 Holger Freyther <freyther@handhelds.org>
19 * Every Access can give a set of Occurrences for a period or a datetime 21 * Every Access can give a set of Occurrences for a period or a datetime
20 * QueryByExample, Find, Sort can be generically accessed by OPimBase 22 * QueryByExample, Find, Sort can be generically accessed by OPimBase
21 pointer interface 23 pointer interface
22 * OPimBackendOccurrence gets split up to OPimOccurrences by 24 * OPimBackendOccurrence gets split up to OPimOccurrences by
23 OPimTemplateBase 25 OPimTemplateBase
24 * Add safeCast to various OPimRecords 26 * Add safeCast to various OPimRecords
25 * Kill memleak in OPimTodo 27 * Kill memleak in OPimTodo
26 * Add SortVector implementations for OPimTodo and OPimContact 28 * Add SortVector implementations for OPimTodo and OPimContact
27 29
28 2004-??-??The Opie Team <opie@handhelds.org> 30 2004-??-??The Opie Team <opie@handhelds.org>
29 * Implemented some important modifications to allow to use OPimRecords as it is, without 31 * Implemented some important modifications to allow to use OPimRecords as it is, without
30 have to cast them. This makes it possible to write applications which handling pim 32 have to cast them. This makes it possible to write applications which handling pim
31 data in a generic manner (see opimconvertion tool) (eilers) \ No newline at end of file 33 data in a generic manner (see opimconvertion tool) (eilers) \ No newline at end of file
diff --git a/libopie2/opiepim/backend/ocontactaccessbackend.cpp b/libopie2/opiepim/backend/ocontactaccessbackend.cpp
index 6ac9934..e942905 100644
--- a/libopie2/opiepim/backend/ocontactaccessbackend.cpp
+++ b/libopie2/opiepim/backend/ocontactaccessbackend.cpp
@@ -163,164 +163,163 @@ UIDArray OPimContactAccessBackend::queryByExample( const UIDArray& uid_array, co
163 } 163 }
164 } 164 }
165 } 165 }
166 } 166 }
167 if ( allcorrect ){ 167 if ( allcorrect ){
168 m_currentQuery[arraycounter++] = uid_array[it]; 168 m_currentQuery[arraycounter++] = uid_array[it];
169 } 169 }
170 } 170 }
171 171
172 // Shrink to fit.. 172 // Shrink to fit..
173 m_currentQuery.resize(arraycounter); 173 m_currentQuery.resize(arraycounter);
174 174
175 return m_currentQuery; 175 return m_currentQuery;
176 176
177} 177}
178 178
179const uint OPimContactAccessBackend::querySettings() const 179const uint OPimContactAccessBackend::querySettings() const
180{ 180{
181 return ( OPimContactAccess::WildCards 181 return ( OPimContactAccess::WildCards
182 | OPimContactAccess::IgnoreCase 182 | OPimContactAccess::IgnoreCase
183 | OPimContactAccess::RegExp 183 | OPimContactAccess::RegExp
184 | OPimContactAccess::ExactMatch 184 | OPimContactAccess::ExactMatch
185 | OPimContactAccess::DateDiff 185 | OPimContactAccess::DateDiff
186 | OPimContactAccess::DateYear 186 | OPimContactAccess::DateYear
187 | OPimContactAccess::DateMonth 187 | OPimContactAccess::DateMonth
188 | OPimContactAccess::DateDay 188 | OPimContactAccess::DateDay
189 ); 189 );
190} 190}
191 191
192bool OPimContactAccessBackend::hasQuerySettings (uint querySettings) const 192bool OPimContactAccessBackend::hasQuerySettings (uint querySettings) const
193{ 193{
194 /* OPimContactAccess::IgnoreCase, DateDiff, DateYear, DateMonth, DateDay 194 /* OPimContactAccess::IgnoreCase, DateDiff, DateYear, DateMonth, DateDay
195 * may be added with any of the other settings. IgnoreCase should never used alone. 195 * may be added with any of the other settings. IgnoreCase should never used alone.
196 * Wildcards, RegExp, ExactMatch should never used at the same time... 196 * Wildcards, RegExp, ExactMatch should never used at the same time...
197 */ 197 */
198 198
199 // Step 1: Check whether the given settings are supported by this backend 199 // Step 1: Check whether the given settings are supported by this backend
200 if ( ( querySettings & ( 200 if ( ( querySettings & (
201 OPimContactAccess::IgnoreCase 201 OPimContactAccess::IgnoreCase
202 | OPimContactAccess::WildCards 202 | OPimContactAccess::WildCards
203 | OPimContactAccess::DateDiff 203 | OPimContactAccess::DateDiff
204 | OPimContactAccess::DateYear 204 | OPimContactAccess::DateYear
205 | OPimContactAccess::DateMonth 205 | OPimContactAccess::DateMonth
206 | OPimContactAccess::DateDay 206 | OPimContactAccess::DateDay
207 | OPimContactAccess::RegExp 207 | OPimContactAccess::RegExp
208 | OPimContactAccess::ExactMatch 208 | OPimContactAccess::ExactMatch
209 ) ) != querySettings ) 209 ) ) != querySettings )
210 return false; 210 return false;
211 211
212 // Step 2: Check whether the given combinations are ok.. 212 // Step 2: Check whether the given combinations are ok..
213 213
214 // IngoreCase alone is invalid 214 // IngoreCase alone is invalid
215 if ( querySettings == OPimContactAccess::IgnoreCase ) 215 if ( querySettings == OPimContactAccess::IgnoreCase )
216 return false; 216 return false;
217 217
218 // WildCards, RegExp and ExactMatch should never used at the same time 218 // WildCards, RegExp and ExactMatch should never used at the same time
219 switch ( querySettings & ~( OPimContactAccess::IgnoreCase 219 switch ( querySettings & ~( OPimContactAccess::IgnoreCase
220 | OPimContactAccess::DateDiff 220 | OPimContactAccess::DateDiff
221 | OPimContactAccess::DateYear 221 | OPimContactAccess::DateYear
222 | OPimContactAccess::DateMonth 222 | OPimContactAccess::DateMonth
223 | OPimContactAccess::DateDay 223 | OPimContactAccess::DateDay
224 ) 224 )
225 ){ 225 ){
226 case OPimContactAccess::RegExp: 226 case OPimContactAccess::RegExp:
227 return ( true ); 227 return ( true );
228 case OPimContactAccess::WildCards: 228 case OPimContactAccess::WildCards:
229 return ( true ); 229 return ( true );
230 case OPimContactAccess::ExactMatch: 230 case OPimContactAccess::ExactMatch:
231 return ( true ); 231 return ( true );
232 case 0: // one of the upper removed bits were set.. 232 case 0: // one of the upper removed bits were set..
233 return ( true ); 233 return ( true );
234 default: 234 default:
235 return ( false ); 235 return ( false );
236 } 236 }
237} 237}
238 238
239 239
240UIDArray OPimContactAccessBackend::sorted( const UIDArray& ar, bool asc, int sortOrder, 240UIDArray OPimContactAccessBackend::sorted( const UIDArray& ar, bool asc, int sortOrder,
241 int filter, const QArray<int>& categories )const { 241 int filter, const QArray<int>& categories )const {
242 odebug << "Using Unaccelerated OPimContactAccessBackend sorted Implementation" << oendl; 242 odebug << "Using Unaccelerated OPimContactAccessBackend sorted Implementation" << oendl;
243 243
244 Internal::OPimContactSortVector vector(ar.count(), asc, sortOrder ); 244 Internal::OPimContactSortVector vector(ar.count(), asc, sortOrder );
245 245
246 int item = 0; 246 int item = 0;
247 uint cat_count = categories.count(); 247 uint cat_count = categories.count();
248 uint eve_count = ar.count(); 248 uint eve_count = ar.count();
249 bool contactPassed = false; 249 bool contactPassed = false;
250 int cat; 250 int cat;
251 251
252 for ( uint i = 0; i < eve_count; ++i ) { 252 for ( uint i = 0; i < eve_count; ++i ) {
253 OPimContact contact = find( ar[i], ar, i, Frontend::Forward ); 253 OPimContact contact = find( ar[i], ar, i, Frontend::Forward );
254 if ( contact.isEmpty() ) 254 if ( contact.isEmpty() )
255 continue; 255 continue;
256 256
257 contactPassed = true; 257 contactPassed = true;
258 258
259 // Filter all Contacts which have any category
260 if ( (filter & OPimContactAccess::DoNotShowWithCategory) ? true : false ){ 259 if ( (filter & OPimContactAccess::DoNotShowWithCategory) ? true : false ){
261 if ( !contact.categories().isEmpty() ) 260 if ( !contact.categories().isEmpty() )
262 continue; 261 continue;
262 } else {
263
264 if ( (filter & OPimContactAccess::FilterCategory) ? true : false ){
265 /* show category */
266 /* -1 == unfiled */
267 for ( uint cat_nu = 0; cat_nu < cat_count; ++cat_nu ) {
268 cat = categories[cat_nu];
269
270 if ( cat == -1 ) {
271 // We should search unfiled contacts.
272 // Unfiled categories have no category set, thus continue if
273 // this contact has no empty category.
274 if( !contact.categories().isEmpty() )
275 contactPassed = false;
276 } else if ( cat != 0 )
277 if ( !contact.categories().contains( cat ) )
278 contactPassed = false;
279 }
280
281 }
263 } 282 }
264
265 /* show category */
266 /* -1 == unfiled */
267 for ( uint cat_nu = 0; cat_nu < cat_count; ++cat_nu ) {
268 cat = categories[cat_nu];
269
270 if ( (filter & OPimContactAccess::FilterCategory) ? true : false ){
271 if ( cat == -1 ) {
272 // We should search unfiled contacts.
273 // Unfiled categories have no category set, thus continue if
274 // this contact has no empty category.
275 if( !contact.categories().isEmpty() )
276 contactPassed = false;
277 } else if ( cat != 0 )
278 if ( !contact.categories().contains( cat ) )
279 contactPassed = false;
280 }
281
282 }
283
284 /* 283 /*
285 * If none of the Categories matched 284 * If none of the Categories matched
286 * continue 285 * continue
287 */ 286 */
288 if ( !contactPassed ) 287 if ( !contactPassed )
289 continue; 288 continue;
290 289
291 vector.insert(item++, contact ); 290 vector.insert(item++, contact );
292 } 291 }
293 292
294 vector.resize( item ); 293 vector.resize( item );
295 /* sort it now */ 294 /* sort it now */
296 vector.sort(); 295 vector.sort();
297 /* now get the uids */ 296 /* now get the uids */
298 UIDArray array( vector.count() ); 297 UIDArray array( vector.count() );
299 for (uint i= 0; i < vector.count(); i++ ) 298 for (uint i= 0; i < vector.count(); i++ )
300 array[i] = vector.uidAt( i ); 299 array[i] = vector.uidAt( i );
301 300
302 return array; 301 return array;
303} 302}
304 303
305OPimBackendOccurrence::List OPimContactAccessBackend::occurrences( const QDate& start, 304OPimBackendOccurrence::List OPimContactAccessBackend::occurrences( const QDate& start,
306 const QDate& end)const { 305 const QDate& end)const {
307 OPimBackendOccurrence::List lst; 306 OPimBackendOccurrence::List lst;
308 307
309 UIDArray records = allRecords(); 308 UIDArray records = allRecords();
310 const uint count = records.count(); 309 const uint count = records.count();
311 int uid; 310 int uid;
312 311
313 for ( uint i = 0; i < count; ++i ) { 312 for ( uint i = 0; i < count; ++i ) {
314 uid = records[i]; 313 uid = records[i];
315 OPimContact contact = find(uid, records, i, Frontend::Forward ); 314 OPimContact contact = find(uid, records, i, Frontend::Forward );
316 315
317 QDate date = contact.anniversary(); 316 QDate date = contact.anniversary();
318 date = QDate( start.year(), date.month(),date.day() ); 317 date = QDate( start.year(), date.month(),date.day() );
319 318
320// if ( date.isValid() && date.) { 319// if ( date.isValid() && date.) {
321// } 320// }
322 } 321 }
323 322
324 return lst; 323 return lst;
325} 324}
326} 325}