author | eilers <eilers> | 2005-03-18 16:03:58 (UTC) |
---|---|---|
committer | eilers <eilers> | 2005-03-18 16:03:58 (UTC) |
commit | b37f4395889351829e295d6fd1b4535ad3a67728 (patch) (unidiff) | |
tree | 4d3d4f518d66df4c837f0496ce59a0a8808ebce2 | |
parent | 0a81bea077a7142d3133fadcb5eba75dceadf444 (diff) | |
download | opie-b37f4395889351829e295d6fd1b4535ad3a67728.zip opie-b37f4395889351829e295d6fd1b4535ad3a67728.tar.gz opie-b37f4395889351829e295d6fd1b4535ad3a67728.tar.bz2 |
Reworte generic sorted() and added filter for "DoNotShowWithCategory" needed
by addressbook
-rw-r--r-- | libopie2/opiepim/ChangeLog | 2 | ||||
-rw-r--r-- | libopie2/opiepim/backend/ocontactaccessbackend.cpp | 35 |
2 files changed, 25 insertions, 12 deletions
diff --git a/libopie2/opiepim/ChangeLog b/libopie2/opiepim/ChangeLog index e94fa59..52b3f6b 100644 --- a/libopie2/opiepim/ChangeLog +++ b/libopie2/opiepim/ChangeLog | |||
@@ -1,29 +1,31 @@ | |||
1 | 2005-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!) | ||
1 | 2005-01-16 Stefan Eilers <stefan@eilers-online.net> | 3 | 2005-01-16 Stefan Eilers <stefan@eilers-online.net> |
2 | * Added new OPimEventSortVector class, improved OPimSortVector | 4 | * Added new OPimEventSortVector class, improved OPimSortVector |
3 | * OPimAccessBackend now supports generic sorting. | 5 | * OPimAccessBackend now supports generic sorting. |
4 | 2005-01-03 Stefan Eilers <stefan@eilers-online.net> | 6 | 2005-01-03 Stefan Eilers <stefan@eilers-online.net> |
5 | * Fixing bug in API documentation | 7 | * Fixing bug in API documentation |
6 | * Moving hasQuerySettings() and querySettings() to OPimAccessTemplate to be available for all frontends | 8 | * Moving hasQuerySettings() and querySettings() to OPimAccessTemplate to be available for all frontends |
7 | 2004-12-28 Stefan Eilers <stefan@eilers-online.net> | 9 | 2004-12-28 Stefan Eilers <stefan@eilers-online.net> |
8 | * Make improved query by example accessable via frontend | 10 | * Make improved query by example accessable via frontend |
9 | * Some API documentation improvement | 11 | * Some API documentation improvement |
10 | * Cleanup of backend api.. | 12 | * Cleanup of backend api.. |
11 | * Fixing bug #1501 | 13 | * Fixing bug #1501 |
12 | 2004-11-23 Stefan Eilers <stefan@eilers-online.net> | 14 | 2004-11-23 Stefan Eilers <stefan@eilers-online.net> |
13 | * Implement fast and full featured version of sorted() for addressbook | 15 | * Implement fast and full featured version of sorted() for addressbook |
14 | * Implement generic queryByExample for all Addressboook backends. It allows incremental search. | 16 | * Implement generic queryByExample for all Addressboook backends. It allows incremental search. |
15 | * Update of API Documentation | 17 | * Update of API Documentation |
16 | 2004-11-18 Holger Freyther <freyther@handhelds.org> | 18 | 2004-11-18 Holger Freyther <freyther@handhelds.org> |
17 | * Every Access can give a set of Occurrences for a period or a datetime | 19 | * Every Access can give a set of Occurrences for a period or a datetime |
18 | * QueryByExample, Find, Sort can be generically accessed by OPimBase | 20 | * QueryByExample, Find, Sort can be generically accessed by OPimBase |
19 | pointer interface | 21 | pointer interface |
20 | * OPimBackendOccurrence gets split up to OPimOccurrences by | 22 | * OPimBackendOccurrence gets split up to OPimOccurrences by |
21 | OPimTemplateBase | 23 | OPimTemplateBase |
22 | * Add safeCast to various OPimRecords | 24 | * Add safeCast to various OPimRecords |
23 | * Kill memleak in OPimTodo | 25 | * Kill memleak in OPimTodo |
24 | * Add SortVector implementations for OPimTodo and OPimContact | 26 | * Add SortVector implementations for OPimTodo and OPimContact |
25 | 27 | ||
26 | 2004-??-??The Opie Team <opie@handhelds.org> | 28 | 2004-??-??The Opie Team <opie@handhelds.org> |
27 | * Implemented some important modifications to allow to use OPimRecords as it is, without | 29 | * Implemented some important modifications to allow to use OPimRecords as it is, without |
28 | have to cast them. This makes it possible to write applications which handling pim | 30 | have to cast them. This makes it possible to write applications which handling pim |
29 | data in a generic manner (see opimconvertion tool) (eilers) \ No newline at end of file | 31 | 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 c09427c..6ac9934 100644 --- a/libopie2/opiepim/backend/ocontactaccessbackend.cpp +++ b/libopie2/opiepim/backend/ocontactaccessbackend.cpp | |||
@@ -1,315 +1,326 @@ | |||
1 | /* | 1 | /* |
2 | This file is part of the Opie Project | 2 | This file is part of the Opie Project |
3 | Copyright (C) Holger Freyther <freyther@handhelds.org> | 3 | Copyright (C) Holger Freyther <freyther@handhelds.org> |
4 | Copyright (C) Stefan Eilers <stefan@eilers-online.net> | 4 | Copyright (C) Stefan Eilers <stefan@eilers-online.net> |
5 | =. Copyright (C) The Opie Team <opie-devel@handhelds.org> | 5 | =. Copyright (C) The Opie Team <opie-devel@handhelds.org> |
6 | .=l. | 6 | .=l. |
7 | .>+-= | 7 | .>+-= |
8 | _;:, .> :=|. This program is free software; you can | 8 | _;:, .> :=|. This program is free software; you can |
9 | .> <`_, > . <= redistribute it and/or modify it under | 9 | .> <`_, > . <= redistribute it and/or modify it under |
10 | :`=1 )Y*s>-.-- : the terms of the GNU Library General Public | 10 | :`=1 )Y*s>-.-- : the terms of the GNU Library General Public |
11 | .="- .-=="i, .._ License as published by the Free Software | 11 | .="- .-=="i, .._ License as published by the Free Software |
12 | - . .-<_> .<> Foundation; either version 2 of the License, | 12 | - . .-<_> .<> Foundation; either version 2 of the License, |
13 | ._= =} : or (at your option) any later version. | 13 | ._= =} : or (at your option) any later version. |
14 | .%`+i> _;_. | 14 | .%`+i> _;_. |
15 | .i_,=:_. -<s. This program is distributed in the hope that | 15 | .i_,=:_. -<s. This program is distributed in the hope that |
16 | + . -:. = it will be useful, but WITHOUT ANY WARRANTY; | 16 | + . -:. = it will be useful, but WITHOUT ANY WARRANTY; |
17 | : .. .:, . . . without even the implied warranty of | 17 | : .. .:, . . . without even the implied warranty of |
18 | =_ + =;=|` MERCHANTABILITY or FITNESS FOR A | 18 | =_ + =;=|` MERCHANTABILITY or FITNESS FOR A |
19 | _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU | 19 | _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU |
20 | ..}^=.= = ; Library General Public License for more | 20 | ..}^=.= = ; Library General Public License for more |
21 | ++= -. .` .: details. | 21 | ++= -. .` .: details. |
22 | : = ...= . :.=- | 22 | : = ...= . :.=- |
23 | -. .:....=;==+<; You should have received a copy of the GNU | 23 | -. .:....=;==+<; You should have received a copy of the GNU |
24 | -_. . . )=. = Library General Public License along with | 24 | -_. . . )=. = Library General Public License along with |
25 | -- :-=` this library; see the file COPYING.LIB. | 25 | -- :-=` this library; see the file COPYING.LIB. |
26 | If not, write to the Free Software Foundation, | 26 | If not, write to the Free Software Foundation, |
27 | Inc., 59 Temple Place - Suite 330, | 27 | Inc., 59 Temple Place - Suite 330, |
28 | Boston, MA 02111-1307, USA. | 28 | Boston, MA 02111-1307, USA. |
29 | */ | 29 | */ |
30 | 30 | ||
31 | #include "ocontactaccessbackend.h" | 31 | #include "ocontactaccessbackend.h" |
32 | #include <opie2/private/opimcontactsortvector.h> | 32 | #include <opie2/private/opimcontactsortvector.h> |
33 | #include <opie2/ocontactaccess.h> | 33 | #include <opie2/ocontactaccess.h> |
34 | 34 | ||
35 | #include <opie2/odebug.h> | 35 | #include <opie2/odebug.h> |
36 | 36 | ||
37 | #include <qdatetime.h> | 37 | #include <qdatetime.h> |
38 | 38 | ||
39 | namespace Opie { | 39 | namespace Opie { |
40 | OPimContactAccessBackend::OPimContactAccessBackend() {} | 40 | OPimContactAccessBackend::OPimContactAccessBackend() {} |
41 | 41 | ||
42 | UIDArray OPimContactAccessBackend::queryByExample( const UIDArray& uid_array, const OPimContact& query, int settings, | 42 | UIDArray OPimContactAccessBackend::queryByExample( const UIDArray& uid_array, const OPimContact& query, int settings, |
43 | const QDateTime& d )const { | 43 | const QDateTime& d )const { |
44 | odebug << "Using Unaccelerated OPimContactAccessBackend implementation of queryByExample!" << oendl; | 44 | odebug << "Using Unaccelerated OPimContactAccessBackend implementation of queryByExample!" << oendl; |
45 | 45 | ||
46 | UIDArray m_currentQuery( uid_array.count() ); | 46 | UIDArray m_currentQuery( uid_array.count() ); |
47 | uint arraycounter = 0; | 47 | uint arraycounter = 0; |
48 | 48 | ||
49 | for( uint it = 0; it < uid_array.count(); ++it ){ | 49 | for( uint it = 0; it < uid_array.count(); ++it ){ |
50 | /* Search all fields and compare them with query object. Store them into list | 50 | /* Search all fields and compare them with query object. Store them into list |
51 | * if all fields matches. | 51 | * if all fields matches. |
52 | */ | 52 | */ |
53 | QDate* queryDate = 0l; | 53 | QDate* queryDate = 0l; |
54 | QDate* checkDate = 0l; | 54 | QDate* checkDate = 0l; |
55 | bool allcorrect = true; | 55 | bool allcorrect = true; |
56 | for ( int i = 0; i < Qtopia::Groups; i++ ) { | 56 | for ( int i = 0; i < Qtopia::Groups; i++ ) { |
57 | // Birthday and anniversary are special nonstring fields and should | 57 | // Birthday and anniversary are special nonstring fields and should |
58 | // be handled specially | 58 | // be handled specially |
59 | switch ( i ){ | 59 | switch ( i ){ |
60 | case Qtopia::Birthday: | 60 | case Qtopia::Birthday: |
61 | queryDate = new QDate( query.birthday() ); | 61 | queryDate = new QDate( query.birthday() ); |
62 | checkDate = new QDate( find( uid_array[it] ).birthday() ); | 62 | checkDate = new QDate( find( uid_array[it] ).birthday() ); |
63 | // fall through | 63 | // fall through |
64 | case Qtopia::Anniversary: | 64 | case Qtopia::Anniversary: |
65 | if ( queryDate == 0l ){ | 65 | if ( queryDate == 0l ){ |
66 | queryDate = new QDate( query.anniversary() ); | 66 | queryDate = new QDate( query.anniversary() ); |
67 | checkDate = new QDate( find( uid_array[it] ).anniversary() ); | 67 | checkDate = new QDate( find( uid_array[it] ).anniversary() ); |
68 | } | 68 | } |
69 | 69 | ||
70 | if ( queryDate->isValid() ){ | 70 | if ( queryDate->isValid() ){ |
71 | if( checkDate->isValid() ){ | 71 | if( checkDate->isValid() ){ |
72 | if ( settings & OPimContactAccess::DateYear ){ | 72 | if ( settings & OPimContactAccess::DateYear ){ |
73 | if ( queryDate->year() != checkDate->year() ) | 73 | if ( queryDate->year() != checkDate->year() ) |
74 | allcorrect = false; | 74 | allcorrect = false; |
75 | } | 75 | } |
76 | if ( settings & OPimContactAccess::DateMonth ){ | 76 | if ( settings & OPimContactAccess::DateMonth ){ |
77 | if ( queryDate->month() != checkDate->month() ) | 77 | if ( queryDate->month() != checkDate->month() ) |
78 | allcorrect = false; | 78 | allcorrect = false; |
79 | } | 79 | } |
80 | if ( settings & OPimContactAccess::DateDay ){ | 80 | if ( settings & OPimContactAccess::DateDay ){ |
81 | if ( queryDate->day() != checkDate->day() ) | 81 | if ( queryDate->day() != checkDate->day() ) |
82 | allcorrect = false; | 82 | allcorrect = false; |
83 | } | 83 | } |
84 | if ( settings & OPimContactAccess::DateDiff ) { | 84 | if ( settings & OPimContactAccess::DateDiff ) { |
85 | QDate current; | 85 | QDate current; |
86 | // If we get an additional date, we | 86 | // If we get an additional date, we |
87 | // will take this date instead of | 87 | // will take this date instead of |
88 | // the current one.. | 88 | // the current one.. |
89 | if ( !d.date().isValid() ) | 89 | if ( !d.date().isValid() ) |
90 | current = QDate::currentDate(); | 90 | current = QDate::currentDate(); |
91 | else | 91 | else |
92 | current = d.date(); | 92 | current = d.date(); |
93 | 93 | ||
94 | // We have to equalize the year, otherwise | 94 | // We have to equalize the year, otherwise |
95 | // the search will fail.. | 95 | // the search will fail.. |
96 | checkDate->setYMD( current.year(), | 96 | checkDate->setYMD( current.year(), |
97 | checkDate->month(), | 97 | checkDate->month(), |
98 | checkDate->day() ); | 98 | checkDate->day() ); |
99 | if ( *checkDate < current ) | 99 | if ( *checkDate < current ) |
100 | checkDate->setYMD( current.year()+1, | 100 | checkDate->setYMD( current.year()+1, |
101 | checkDate->month(), | 101 | checkDate->month(), |
102 | checkDate->day() ); | 102 | checkDate->day() ); |
103 | 103 | ||
104 | // Check whether the birthday/anniversary date is between | 104 | // Check whether the birthday/anniversary date is between |
105 | // the current/given date and the maximum date | 105 | // the current/given date and the maximum date |
106 | // ( maximum time range ) ! | 106 | // ( maximum time range ) ! |
107 | if ( current.daysTo( *queryDate ) >= 0 ){ | 107 | if ( current.daysTo( *queryDate ) >= 0 ){ |
108 | if ( !( ( *checkDate >= current ) && | 108 | if ( !( ( *checkDate >= current ) && |
109 | ( *checkDate <= *queryDate ) ) ){ | 109 | ( *checkDate <= *queryDate ) ) ){ |
110 | allcorrect = false; | 110 | allcorrect = false; |
111 | } | 111 | } |
112 | } | 112 | } |
113 | } | 113 | } |
114 | } else{ | 114 | } else{ |
115 | // checkDate is invalid. Therefore this entry is always rejected | 115 | // checkDate is invalid. Therefore this entry is always rejected |
116 | allcorrect = false; | 116 | allcorrect = false; |
117 | } | 117 | } |
118 | } | 118 | } |
119 | 119 | ||
120 | delete queryDate; | 120 | delete queryDate; |
121 | queryDate = 0l; | 121 | queryDate = 0l; |
122 | delete checkDate; | 122 | delete checkDate; |
123 | checkDate = 0l; | 123 | checkDate = 0l; |
124 | break; | 124 | break; |
125 | default: | 125 | default: |
126 | /* Just compare fields which are not empty in the query object */ | 126 | /* Just compare fields which are not empty in the query object */ |
127 | if ( !query.field(i).isEmpty() ){ | 127 | if ( !query.field(i).isEmpty() ){ |
128 | switch ( settings & ~( OPimContactAccess::IgnoreCase | 128 | switch ( settings & ~( OPimContactAccess::IgnoreCase |
129 | | OPimContactAccess::DateDiff | 129 | | OPimContactAccess::DateDiff |
130 | | OPimContactAccess::DateYear | 130 | | OPimContactAccess::DateYear |
131 | | OPimContactAccess::DateMonth | 131 | | OPimContactAccess::DateMonth |
132 | | OPimContactAccess::DateDay | 132 | | OPimContactAccess::DateDay |
133 | | OPimContactAccess::MatchOne | 133 | | OPimContactAccess::MatchOne |
134 | ) ){ | 134 | ) ){ |
135 | 135 | ||
136 | case OPimContactAccess::RegExp:{ | 136 | case OPimContactAccess::RegExp:{ |
137 | QRegExp expr ( query.field(i), | 137 | QRegExp expr ( query.field(i), |
138 | !(settings & OPimContactAccess::IgnoreCase), | 138 | !(settings & OPimContactAccess::IgnoreCase), |
139 | false ); | 139 | false ); |
140 | if ( expr.find ( find( uid_array[it] ).field(i), 0 ) == -1 ) | 140 | if ( expr.find ( find( uid_array[it] ).field(i), 0 ) == -1 ) |
141 | allcorrect = false; | 141 | allcorrect = false; |
142 | } | 142 | } |
143 | break; | 143 | break; |
144 | case OPimContactAccess::WildCards:{ | 144 | case OPimContactAccess::WildCards:{ |
145 | QRegExp expr ( query.field(i), | 145 | QRegExp expr ( query.field(i), |
146 | !(settings & OPimContactAccess::IgnoreCase), | 146 | !(settings & OPimContactAccess::IgnoreCase), |
147 | true ); | 147 | true ); |
148 | if ( expr.find ( find( uid_array[it] ).field(i), 0 ) == -1 ) | 148 | if ( expr.find ( find( uid_array[it] ).field(i), 0 ) == -1 ) |
149 | allcorrect = false; | 149 | allcorrect = false; |
150 | } | 150 | } |
151 | break; | 151 | break; |
152 | case OPimContactAccess::ExactMatch:{ | 152 | case OPimContactAccess::ExactMatch:{ |
153 | if (settings & OPimContactAccess::IgnoreCase){ | 153 | if (settings & OPimContactAccess::IgnoreCase){ |
154 | if ( query.field(i).upper() != | 154 | if ( query.field(i).upper() != |
155 | find( uid_array[it] ).field(i).upper() ) | 155 | find( uid_array[it] ).field(i).upper() ) |
156 | allcorrect = false; | 156 | allcorrect = false; |
157 | }else{ | 157 | }else{ |
158 | if ( query.field(i) != find( uid_array[it] ).field(i) ) | 158 | if ( query.field(i) != find( uid_array[it] ).field(i) ) |
159 | allcorrect = false; | 159 | allcorrect = false; |
160 | } | 160 | } |
161 | } | 161 | } |
162 | break; | 162 | break; |
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 | ||
179 | const uint OPimContactAccessBackend::querySettings() const | 179 | const 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 | ||
192 | bool OPimContactAccessBackend::hasQuerySettings (uint querySettings) const | 192 | bool 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 | ||
240 | UIDArray OPimContactAccessBackend::sorted( const UIDArray& ar, bool asc, int sortOrder, | 240 | UIDArray 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 bCat = filter & OPimContactAccess::FilterCategory ? true : false; | 249 | bool contactPassed = false; |
250 | bool catPassed = false; | ||
251 | int cat; | 250 | int cat; |
252 | 251 | ||
253 | for ( uint i = 0; i < eve_count; ++i ) { | 252 | for ( uint i = 0; i < eve_count; ++i ) { |
254 | OPimContact contact = find( ar[i], ar, i, Frontend::Forward ); | 253 | OPimContact contact = find( ar[i], ar, i, Frontend::Forward ); |
255 | if ( contact.isEmpty() ) | 254 | if ( contact.isEmpty() ) |
256 | continue; | 255 | continue; |
257 | 256 | ||
257 | contactPassed = true; | ||
258 | |||
259 | // Filter all Contacts which have any category | ||
260 | if ( (filter & OPimContactAccess::DoNotShowWithCategory) ? true : false ){ | ||
261 | if ( !contact.categories().isEmpty() ) | ||
262 | continue; | ||
263 | } | ||
264 | |||
258 | /* show category */ | 265 | /* show category */ |
259 | /* -1 == unfiled */ | 266 | /* -1 == unfiled */ |
260 | catPassed = false; | ||
261 | for ( uint cat_nu = 0; cat_nu < cat_count; ++cat_nu ) { | 267 | for ( uint cat_nu = 0; cat_nu < cat_count; ++cat_nu ) { |
262 | cat = categories[cat_nu]; | 268 | cat = categories[cat_nu]; |
263 | if ( bCat && cat == -1 ) { | 269 | |
264 | if(!contact.categories().isEmpty() ) | 270 | if ( (filter & OPimContactAccess::FilterCategory) ? true : false ){ |
265 | continue; | 271 | if ( cat == -1 ) { |
266 | } else if ( bCat && cat != 0) | 272 | // We should search unfiled contacts. |
267 | if (!contact.categories().contains( cat ) ) | 273 | // Unfiled categories have no category set, thus continue if |
268 | continue; | 274 | // this contact has no empty category. |
269 | catPassed = true; | 275 | if( !contact.categories().isEmpty() ) |
270 | break; | 276 | contactPassed = false; |
277 | } else if ( cat != 0 ) | ||
278 | if ( !contact.categories().contains( cat ) ) | ||
279 | contactPassed = false; | ||
280 | } | ||
281 | |||
271 | } | 282 | } |
272 | 283 | ||
273 | /* | 284 | /* |
274 | * If none of the Categories matched | 285 | * If none of the Categories matched |
275 | * continue | 286 | * continue |
276 | */ | 287 | */ |
277 | if ( !catPassed ) | 288 | if ( !contactPassed ) |
278 | continue; | 289 | continue; |
279 | 290 | ||
280 | vector.insert(item++, contact ); | 291 | vector.insert(item++, contact ); |
281 | } | 292 | } |
282 | 293 | ||
283 | vector.resize( item ); | 294 | vector.resize( item ); |
284 | /* sort it now */ | 295 | /* sort it now */ |
285 | vector.sort(); | 296 | vector.sort(); |
286 | /* now get the uids */ | 297 | /* now get the uids */ |
287 | UIDArray array( vector.count() ); | 298 | UIDArray array( vector.count() ); |
288 | for (uint i= 0; i < vector.count(); i++ ) | 299 | for (uint i= 0; i < vector.count(); i++ ) |
289 | array[i] = vector.uidAt( i ); | 300 | array[i] = vector.uidAt( i ); |
290 | 301 | ||
291 | return array; | 302 | return array; |
292 | } | 303 | } |
293 | 304 | ||
294 | OPimBackendOccurrence::List OPimContactAccessBackend::occurrences( const QDate& start, | 305 | OPimBackendOccurrence::List OPimContactAccessBackend::occurrences( const QDate& start, |
295 | const QDate& end)const { | 306 | const QDate& end)const { |
296 | OPimBackendOccurrence::List lst; | 307 | OPimBackendOccurrence::List lst; |
297 | 308 | ||
298 | UIDArray records = allRecords(); | 309 | UIDArray records = allRecords(); |
299 | const uint count = records.count(); | 310 | const uint count = records.count(); |
300 | int uid; | 311 | int uid; |
301 | 312 | ||
302 | for ( uint i = 0; i < count; ++i ) { | 313 | for ( uint i = 0; i < count; ++i ) { |
303 | uid = records[i]; | 314 | uid = records[i]; |
304 | OPimContact contact = find(uid, records, i, Frontend::Forward ); | 315 | OPimContact contact = find(uid, records, i, Frontend::Forward ); |
305 | 316 | ||
306 | QDate date = contact.anniversary(); | 317 | QDate date = contact.anniversary(); |
307 | date = QDate( start.year(), date.month(),date.day() ); | 318 | date = QDate( start.year(), date.month(),date.day() ); |
308 | 319 | ||
309 | // if ( date.isValid() && date.) { | 320 | // if ( date.isValid() && date.) { |
310 | // } | 321 | // } |
311 | } | 322 | } |
312 | 323 | ||
313 | return lst; | 324 | return lst; |
314 | } | 325 | } |
315 | } | 326 | } |