Diffstat (limited to 'libopie2/opiepim/backend/odatebookaccessbackend.cpp') (more/less context) (show whitespace changes)
-rw-r--r-- | libopie2/opiepim/backend/odatebookaccessbackend.cpp | 58 |
1 files changed, 55 insertions, 3 deletions
diff --git a/libopie2/opiepim/backend/odatebookaccessbackend.cpp b/libopie2/opiepim/backend/odatebookaccessbackend.cpp index e44912a..6da0170 100644 --- a/libopie2/opiepim/backend/odatebookaccessbackend.cpp +++ b/libopie2/opiepim/backend/odatebookaccessbackend.cpp | |||
@@ -1,81 +1,83 @@ | |||
1 | /* | 1 | /* |
2 | This file is part of the Opie Project | 2 | This file is part of the Opie Project |
3 | Copyright (C) Stefan Eilers (Eilers.Stefan@epost.de) | 3 | Copyright (C) Stefan Eilers (Eilers.Stefan@epost.de) |
4 | =. Copyright (C) The Opie Team <opie-devel@handhelds.org> | 4 | =. Copyright (C) The Opie Team <opie-devel@handhelds.org> |
5 | .=l. | 5 | .=l. |
6 | .>+-= | 6 | .>+-= |
7 | _;:, .> :=|. This program is free software; you can | 7 | _;:, .> :=|. This program is free software; you can |
8 | .> <`_, > . <= redistribute it and/or modify it under | 8 | .> <`_, > . <= redistribute it and/or modify it under |
9 | :`=1 )Y*s>-.-- : the terms of the GNU Library General Public | 9 | :`=1 )Y*s>-.-- : the terms of the GNU Library General Public |
10 | .="- .-=="i, .._ License as published by the Free Software | 10 | .="- .-=="i, .._ License as published by the Free Software |
11 | - . .-<_> .<> Foundation; either version 2 of the License, | 11 | - . .-<_> .<> Foundation; either version 2 of the License, |
12 | ._= =} : or (at your option) any later version. | 12 | ._= =} : or (at your option) any later version. |
13 | .%`+i> _;_. | 13 | .%`+i> _;_. |
14 | .i_,=:_. -<s. This program is distributed in the hope that | 14 | .i_,=:_. -<s. This program is distributed in the hope that |
15 | + . -:. = it will be useful, but WITHOUT ANY WARRANTY; | 15 | + . -:. = it will be useful, but WITHOUT ANY WARRANTY; |
16 | : .. .:, . . . without even the implied warranty of | 16 | : .. .:, . . . without even the implied warranty of |
17 | =_ + =;=|` MERCHANTABILITY or FITNESS FOR A | 17 | =_ + =;=|` MERCHANTABILITY or FITNESS FOR A |
18 | _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU | 18 | _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU |
19 | ..}^=.= = ; Library General Public License for more | 19 | ..}^=.= = ; Library General Public License for more |
20 | ++= -. .` .: details. | 20 | ++= -. .` .: details. |
21 | : = ...= . :.=- | 21 | : = ...= . :.=- |
22 | -. .:....=;==+<; You should have received a copy of the GNU | 22 | -. .:....=;==+<; You should have received a copy of the GNU |
23 | -_. . . )=. = Library General Public License along with | 23 | -_. . . )=. = Library General Public License along with |
24 | -- :-=` this library; see the file COPYING.LIB. | 24 | -- :-=` this library; see the file COPYING.LIB. |
25 | If not, write to the Free Software Foundation, | 25 | If not, write to the Free Software Foundation, |
26 | Inc., 59 Temple Place - Suite 330, | 26 | Inc., 59 Temple Place - Suite 330, |
27 | Boston, MA 02111-1307, USA. | 27 | Boston, MA 02111-1307, USA. |
28 | */ | 28 | */ |
29 | #include <qtl.h> | 29 | #include <qtl.h> |
30 | 30 | ||
31 | #include <opie2/odebug.h> | ||
31 | #include <opie2/opimrecurrence.h> | 32 | #include <opie2/opimrecurrence.h> |
32 | 33 | #include <opie2/odatebookaccess.h> | |
33 | #include <opie2/odatebookaccessbackend.h> | 34 | #include <opie2/odatebookaccessbackend.h> |
35 | #include <opie2/private/opimeventsortvector.h> | ||
34 | 36 | ||
35 | using namespace Opie; | 37 | using namespace Opie; |
36 | 38 | ||
37 | namespace { | 39 | namespace { |
38 | /* a small helper to get all NonRepeating events for a range of time */ | 40 | /* a small helper to get all NonRepeating events for a range of time */ |
39 | void events( OPimBackendOccurrence::List& tmpList, | 41 | void events( OPimBackendOccurrence::List& tmpList, |
40 | const OPimEvent::ValueList& events, | 42 | const OPimEvent::ValueList& events, |
41 | const QDate& from, const QDate& to ) { | 43 | const QDate& from, const QDate& to ) { |
42 | QDateTime dtStart, dtEnd; | 44 | QDateTime dtStart, dtEnd; |
43 | 45 | ||
44 | for ( OPimEvent::ValueList::ConstIterator it = events.begin(); it != events.end(); ++it ) { | 46 | for ( OPimEvent::ValueList::ConstIterator it = events.begin(); it != events.end(); ++it ) { |
45 | dtStart = (*it).startDateTime(); | 47 | dtStart = (*it).startDateTime(); |
46 | dtEnd = (*it).endDateTime(); | 48 | dtEnd = (*it).endDateTime(); |
47 | 49 | ||
48 | /* | 50 | /* |
49 | * If in range | 51 | * If in range |
50 | */ | 52 | */ |
51 | if (dtStart.date() >= from && dtEnd.date() <= to ) { | 53 | if (dtStart.date() >= from && dtEnd.date() <= to ) { |
52 | OPimBackendOccurrence eff( dtStart, dtEnd, (*it).uid() );; | 54 | OPimBackendOccurrence eff( dtStart, dtEnd, (*it).uid() );; |
53 | tmpList.append( eff ); | 55 | tmpList.append( eff ); |
54 | } | 56 | } |
55 | } | 57 | } |
56 | } | 58 | } |
57 | 59 | ||
58 | void repeat( OPimBackendOccurrence::List& tmpList, const OPimEvent::ValueList& list, | 60 | void repeat( OPimBackendOccurrence::List& tmpList, const OPimEvent::ValueList& list, |
59 | const QDate& from, const QDate& to ) { | 61 | const QDate& from, const QDate& to ) { |
60 | QDate repeat; | 62 | QDate repeat; |
61 | for ( OPimEvent::ValueList::ConstIterator it = list.begin(); it != list.end(); ++it ) { | 63 | for ( OPimEvent::ValueList::ConstIterator it = list.begin(); it != list.end(); ++it ) { |
62 | int dur = (*it).startDateTime().date().daysTo( (*it).endDateTime().date() ); | 64 | int dur = (*it).startDateTime().date().daysTo( (*it).endDateTime().date() ); |
63 | QDate itDate = from.addDays(-dur ); | 65 | QDate itDate = from.addDays(-dur ); |
64 | OPimRecurrence rec = (*it).recurrence(); | 66 | OPimRecurrence rec = (*it).recurrence(); |
65 | if ( !rec.hasEndDate() || rec.endDate() > to ) { | 67 | if ( !rec.hasEndDate() || rec.endDate() > to ) { |
66 | rec.setEndDate( to ); | 68 | rec.setEndDate( to ); |
67 | rec.setHasEndDate( true ); | 69 | rec.setHasEndDate( true ); |
68 | } | 70 | } |
69 | 71 | ||
70 | QDateTime start, end; | 72 | QDateTime start, end; |
71 | while (rec.nextOcurrence(itDate, repeat ) ) { | 73 | while (rec.nextOcurrence(itDate, repeat ) ) { |
72 | if (repeat > to ) break; | 74 | if (repeat > to ) break; |
73 | 75 | ||
74 | OPimEvent event = *it; | 76 | OPimEvent event = *it; |
75 | start = QDateTime( repeat, event.startDateTime().time() ); | 77 | start = QDateTime( repeat, event.startDateTime().time() ); |
76 | end = QDateTime( repeat.addDays(dur), event.endDateTime().time() ); | 78 | end = QDateTime( repeat.addDays(dur), event.endDateTime().time() ); |
77 | OPimBackendOccurrence eff(start, end, event.uid() ); | 79 | OPimBackendOccurrence eff(start, end, event.uid() ); |
78 | tmpList.append( eff ); | 80 | tmpList.append( eff ); |
79 | } | 81 | } |
80 | } | 82 | } |
81 | } | 83 | } |
@@ -99,83 +101,133 @@ OPimBackendOccurrence::List ODateBookAccessBackend::occurrences( const QDate& fr | |||
99 | repeat( tmpList, directRawRepeats(),from,to ); | 101 | repeat( tmpList, directRawRepeats(),from,to ); |
100 | 102 | ||
101 | return tmpList; | 103 | return tmpList; |
102 | } | 104 | } |
103 | 105 | ||
104 | OPimBackendOccurrence::List ODateBookAccessBackend::occurrences( const QDateTime& dt )const | 106 | OPimBackendOccurrence::List ODateBookAccessBackend::occurrences( const QDateTime& dt )const |
105 | { | 107 | { |
106 | OPimBackendOccurrence::List day = occurrences( dt.date(), dt.date() ); | 108 | OPimBackendOccurrence::List day = occurrences( dt.date(), dt.date() ); |
107 | 109 | ||
108 | return filterOccurrences( day, dt ); | 110 | return filterOccurrences( day, dt ); |
109 | } | 111 | } |
110 | 112 | ||
111 | OPimBackendOccurrence::List ODateBookAccessBackend::effectiveNonRepeatingEvents( const QDate& from, | 113 | OPimBackendOccurrence::List ODateBookAccessBackend::effectiveNonRepeatingEvents( const QDate& from, |
112 | const QDate& to )const | 114 | const QDate& to )const |
113 | { | 115 | { |
114 | OPimBackendOccurrence::List tmpList; | 116 | OPimBackendOccurrence::List tmpList; |
115 | OPimEvent::ValueList list = directNonRepeats(); | 117 | OPimEvent::ValueList list = directNonRepeats(); |
116 | 118 | ||
117 | events( tmpList, list, from, to ); | 119 | events( tmpList, list, from, to ); |
118 | 120 | ||
119 | return tmpList; | 121 | return tmpList; |
120 | } | 122 | } |
121 | 123 | ||
122 | OPimBackendOccurrence::List ODateBookAccessBackend::effectiveNonRepeatingEvents( const QDateTime& dt )const | 124 | OPimBackendOccurrence::List ODateBookAccessBackend::effectiveNonRepeatingEvents( const QDateTime& dt )const |
123 | { | 125 | { |
124 | OPimBackendOccurrence::List day = effectiveNonRepeatingEvents( dt.date(), dt.date() ); | 126 | OPimBackendOccurrence::List day = effectiveNonRepeatingEvents( dt.date(), dt.date() ); |
125 | return filterOccurrences( day,dt ); | 127 | return filterOccurrences( day,dt ); |
126 | } | 128 | } |
127 | 129 | ||
128 | const uint ODateBookAccessBackend::querySettings() const | 130 | const uint ODateBookAccessBackend::querySettings() const |
129 | { | 131 | { |
130 | return 0; | 132 | return 0; |
131 | } | 133 | } |
132 | 134 | ||
133 | bool ODateBookAccessBackend::hasQuerySettings (uint querySettings) const | 135 | bool ODateBookAccessBackend::hasQuerySettings (uint querySettings) const |
134 | { | 136 | { |
135 | return false; | 137 | return false; |
136 | } | 138 | } |
137 | 139 | ||
138 | 140 | ||
139 | 141 | ||
140 | UIDArray ODateBookAccessBackend::queryByExample( const UIDArray& uidlist, const OPimEvent&, int settings, | 142 | UIDArray ODateBookAccessBackend::queryByExample( const UIDArray& uidlist, const OPimEvent&, int settings, |
141 | const QDateTime& d )const | 143 | const QDateTime& d )const |
142 | { | 144 | { |
143 | qDebug( "Accessing ODateBookAccessBackend::queryByExample() which is not implemented!" ); | 145 | qDebug( "Accessing ODateBookAccessBackend::queryByExample() which is not implemented!" ); |
144 | return UIDArray(); | 146 | return UIDArray(); |
145 | } | 147 | } |
146 | 148 | ||
147 | UIDArray ODateBookAccessBackend::sorted( const UIDArray&, bool asc, int, int, const QArray<int>& )const { | 149 | UIDArray ODateBookAccessBackend::sorted( const UIDArray& ar, bool asc, int sortOrder, int filter, const QArray<int>& categories )const { |
148 | return UIDArray(); | 150 | odebug << "Using Unaccelerated ODateBookAccessBackend sorted Implementation" << oendl; |
151 | |||
152 | Internal::OPimEventSortVector vector( ar.count(), asc, sortOrder ); | ||
153 | int item = 0; | ||
154 | |||
155 | for ( uint i = 0; i < ar.count(); ++i ){ | ||
156 | OPimEvent event = find( ar[i], ar, i, Frontend::Forward ); | ||
157 | if ( event.isEmpty() ) | ||
158 | continue; | ||
159 | |||
160 | bool catPassed = true; | ||
161 | if ( filter & ODateBookAccess::FilterCategory ){ | ||
162 | catPassed = false; | ||
163 | // Filter Categories | ||
164 | for ( uint cat_idx = 0; cat_idx < categories.count(); ++cat_idx ){ | ||
165 | int cat = categories[cat_idx]; | ||
166 | if ( cat == -1 || cat == 0 ){ | ||
167 | // Unfiled. Check next category if list is not empty. | ||
168 | // Else: take it as we will not filter unfiled events.. | ||
169 | if ( !event.categories().isEmpty() ) | ||
170 | continue; | ||
171 | else | ||
172 | catPassed = true; | ||
173 | } else { | ||
174 | if ( !event.categories().contains( cat ) ) | ||
175 | continue; | ||
176 | else{ | ||
177 | catPassed = true; | ||
178 | break; | ||
179 | } | ||
180 | } | ||
181 | } | ||
182 | } | ||
183 | |||
184 | // Continue to next event if the category filter removed this item | ||
185 | if ( !catPassed ) | ||
186 | continue; | ||
187 | |||
188 | vector.insert( item++, event ); | ||
189 | } | ||
190 | |||
191 | // Now sort the vector and return the list of UID's | ||
192 | vector.resize( item ); | ||
193 | vector.sort(); | ||
194 | |||
195 | UIDArray array( vector.count() ); | ||
196 | for ( uint i= 0; i < vector.count(); i++ ) | ||
197 | array[i] = vector.uidAt( i ); | ||
198 | |||
199 | return array; | ||
200 | |||
149 | } | 201 | } |
150 | 202 | ||
151 | OPimBackendOccurrence::List ODateBookAccessBackend::filterOccurrences( const OPimBackendOccurrence::List dayList, | 203 | OPimBackendOccurrence::List ODateBookAccessBackend::filterOccurrences( const OPimBackendOccurrence::List dayList, |
152 | const QDateTime& dt ) { | 204 | const QDateTime& dt ) { |
153 | OPimBackendOccurrence::List tmpList; | 205 | OPimBackendOccurrence::List tmpList; |
154 | OPimBackendOccurrence::List::ConstIterator it; | 206 | OPimBackendOccurrence::List::ConstIterator it; |
155 | 207 | ||
156 | for ( it = dayList.begin(); it != dayList.end(); ++it ) { | 208 | for ( it = dayList.begin(); it != dayList.end(); ++it ) { |
157 | OPimBackendOccurrence occ = *it; | 209 | OPimBackendOccurrence occ = *it; |
158 | 210 | ||
159 | /* | 211 | /* |
160 | * Let us find occurrences that are 'now'! | 212 | * Let us find occurrences that are 'now'! |
161 | * If the dt.date() is on the same day as start or end of the Occurrence | 213 | * If the dt.date() is on the same day as start or end of the Occurrence |
162 | * check how near start/end are. | 214 | * check how near start/end are. |
163 | * If it is in the middle of a multiday occurrence list it. | 215 | * If it is in the middle of a multiday occurrence list it. |
164 | * | 216 | * |
165 | * We might want to 'lose' the sixty second offset and list | 217 | * We might want to 'lose' the sixty second offset and list |
166 | * all Events which are active at that time. | 218 | * all Events which are active at that time. |
167 | */ | 219 | */ |
168 | if ( dt.date() == occ.startDateTime().date() ) { | 220 | if ( dt.date() == occ.startDateTime().date() ) { |
169 | if ( QABS( dt.time().secsTo( occ.startDateTime().time() ) ) < 60 ) | 221 | if ( QABS( dt.time().secsTo( occ.startDateTime().time() ) ) < 60 ) |
170 | tmpList.append( occ ); | 222 | tmpList.append( occ ); |
171 | }else if ( dt.date() == occ.endDateTime().date() ) { | 223 | }else if ( dt.date() == occ.endDateTime().date() ) { |
172 | if ( QABS( dt.time().secsTo( occ.endDateTime().time() ) ) < 60 ) | 224 | if ( QABS( dt.time().secsTo( occ.endDateTime().time() ) ) < 60 ) |
173 | tmpList.append( occ ); | 225 | tmpList.append( occ ); |
174 | }else if ( dt.date() >= occ.startDateTime().date() && | 226 | }else if ( dt.date() >= occ.startDateTime().date() && |
175 | dt.date() >= occ.endDateTime().date() ) | 227 | dt.date() >= occ.endDateTime().date() ) |
176 | tmpList.append( occ ); | 228 | tmpList.append( occ ); |
177 | } | 229 | } |
178 | 230 | ||
179 | return tmpList; | 231 | return tmpList; |
180 | } | 232 | } |
181 | } | 233 | } |