summaryrefslogtreecommitdiff
authoreilers <eilers>2004-05-04 18:48:35 (UTC)
committer eilers <eilers>2004-05-04 18:48:35 (UTC)
commit04a7f91591987c01d312fbcaf6554ec6d728554d (patch) (unidiff)
tree98e10bb02d2e6c663f9c632f5e67783085683954
parentaa7023b05a3355f5c3d81d6efcccd8c4e7f4348c (diff)
downloadopie-04a7f91591987c01d312fbcaf6554ec6d728554d.zip
opie-04a7f91591987c01d312fbcaf6554ec6d728554d.tar.gz
opie-04a7f91591987c01d312fbcaf6554ec6d728554d.tar.bz2
This is the reason, why I sometimes hate C++ ..
Fixed crash in find of OPimDateBookBackend_SQL
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opiepim/core/opimrecurrence.cpp2
1 files changed, 1 insertions, 1 deletions
diff --git a/libopie2/opiepim/core/opimrecurrence.cpp b/libopie2/opiepim/core/opimrecurrence.cpp
index 98bd647..4b1d886 100644
--- a/libopie2/opiepim/core/opimrecurrence.cpp
+++ b/libopie2/opiepim/core/opimrecurrence.cpp
@@ -1,202 +1,202 @@
1/* 1/*
2 This file is part of the Opie Project 2 This file is part of the Opie Project
3 Copyright (C) The Main Author <main-author@whereever.org> 3 Copyright (C) The Main Author <main-author@whereever.org>
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 29
30#include "opimrecurrence.h" 30#include "opimrecurrence.h"
31 31
32/* OPIE */ 32/* OPIE */
33#include <opie2/opimtimezone.h> 33#include <opie2/opimtimezone.h>
34#include <qpe/timeconversion.h> 34#include <qpe/timeconversion.h>
35 35
36/* QT */ 36/* QT */
37#include <qshared.h> 37#include <qshared.h>
38 38
39/* STD */ 39/* STD */
40#include <time.h> 40#include <time.h>
41 41
42namespace Opie { 42namespace Opie {
43 43
44struct OPimRecurrence::Data : public QShared { 44struct OPimRecurrence::Data : public QShared {
45 Data() : QShared() { 45 Data() : QShared() {
46 type = OPimRecurrence::NoRepeat; 46 type = OPimRecurrence::NoRepeat;
47 freq = -1; 47 freq = -1;
48 days = 0; 48 days = 0;
49 pos = 0; 49 pos = 0;
50 create = QDateTime::currentDateTime(); 50 create = QDateTime::currentDateTime();
51 hasEnd = FALSE; 51 hasEnd = FALSE;
52 end = QDate::currentDate(); 52 end = QDate::currentDate();
53 } 53 }
54 char days; // Q_UINT8 for 8 seven days;) 54 char days; // Q_UINT8 for 8 seven days;)
55 OPimRecurrence::RepeatType type; 55 OPimRecurrence::RepeatType type;
56 int freq; 56 int freq;
57 int pos; 57 int pos;
58 bool hasEnd : 1; 58 bool hasEnd : 1;
59 QDate end; 59 QDate end;
60 QDateTime create; 60 QDateTime create;
61 int rep; 61 int rep;
62 QString app; 62 QString app;
63 ExceptionList list; 63 ExceptionList list;
64 QDate start; 64 QDate start;
65}; 65};
66 66
67 67
68OPimRecurrence::OPimRecurrence() { 68OPimRecurrence::OPimRecurrence() {
69 data = new Data; 69 data = new Data;
70} 70}
71 71
72OPimRecurrence::OPimRecurrence( const QMap<int, QString>& map ) 72OPimRecurrence::OPimRecurrence( const QMap<int, QString>& map )
73{ 73{
74 OPimRecurrence(); 74 data = new Data;
75 fromMap( map ); 75 fromMap( map );
76} 76}
77 77
78 78
79OPimRecurrence::OPimRecurrence( const OPimRecurrence& rec) 79OPimRecurrence::OPimRecurrence( const OPimRecurrence& rec)
80 : data( rec.data ) 80 : data( rec.data )
81{ 81{
82 data->ref(); 82 data->ref();
83} 83}
84 84
85 85
86OPimRecurrence::~OPimRecurrence() { 86OPimRecurrence::~OPimRecurrence() {
87 if ( data->deref() ) { 87 if ( data->deref() ) {
88 delete data; 88 delete data;
89 data = 0l; 89 data = 0l;
90 } 90 }
91} 91}
92 92
93 93
94void OPimRecurrence::deref() { 94void OPimRecurrence::deref() {
95 if ( data->deref() ) { 95 if ( data->deref() ) {
96 delete data; 96 delete data;
97 data = 0l; 97 data = 0l;
98 } 98 }
99} 99}
100 100
101 101
102bool OPimRecurrence::operator==( const OPimRecurrence& )const { 102bool OPimRecurrence::operator==( const OPimRecurrence& )const {
103 return false; 103 return false;
104} 104}
105 105
106 106
107OPimRecurrence &OPimRecurrence::operator=( const OPimRecurrence& re) { 107OPimRecurrence &OPimRecurrence::operator=( const OPimRecurrence& re) {
108 if ( *this == re ) return *this; 108 if ( *this == re ) return *this;
109 109
110 re.data->ref(); 110 re.data->ref();
111 deref(); 111 deref();
112 data = re.data; 112 data = re.data;
113 113
114 return *this; 114 return *this;
115} 115}
116 116
117 117
118bool OPimRecurrence::doesRecur()const { 118bool OPimRecurrence::doesRecur()const {
119 return !( type() == NoRepeat ); 119 return !( type() == NoRepeat );
120} 120}
121 121
122 122
123/* 123/*
124 * we try to be smart here 124 * we try to be smart here
125 * 125 *
126 */ 126 */
127bool OPimRecurrence::doesRecur( const QDate& date ) { 127bool OPimRecurrence::doesRecur( const QDate& date ) {
128 /* the day before the recurrance */ 128 /* the day before the recurrance */
129 QDate da = date.addDays(-1); 129 QDate da = date.addDays(-1);
130 130
131 QDate recur; 131 QDate recur;
132 if (!nextOcurrence( da, recur ) ) 132 if (!nextOcurrence( da, recur ) )
133 return false; 133 return false;
134 134
135 return (recur == date); 135 return (recur == date);
136} 136}
137 137
138 138
139// FIXME unuglify! 139// FIXME unuglify!
140// GPL from Datebookdb.cpp 140// GPL from Datebookdb.cpp
141// FIXME exception list! 141// FIXME exception list!
142bool OPimRecurrence::nextOcurrence( const QDate& from, QDate& next ) { 142bool OPimRecurrence::nextOcurrence( const QDate& from, QDate& next ) {
143 bool stillLooking; 143 bool stillLooking;
144 stillLooking = p_nextOccurrence( from, next ); 144 stillLooking = p_nextOccurrence( from, next );
145 while ( stillLooking && data->list.contains(next) ) 145 while ( stillLooking && data->list.contains(next) )
146 stillLooking = p_nextOccurrence( next.addDays(1), next ); 146 stillLooking = p_nextOccurrence( next.addDays(1), next );
147 147
148 return stillLooking; 148 return stillLooking;
149} 149}
150 150
151 151
152bool OPimRecurrence::p_nextOccurrence( const QDate& from, QDate& next ) { 152bool OPimRecurrence::p_nextOccurrence( const QDate& from, QDate& next ) {
153 153
154 // easy checks, first are we too far in the future or too far in the past? 154 // easy checks, first are we too far in the future or too far in the past?
155 QDate tmpDate; 155 QDate tmpDate;
156 int freq = frequency(); 156 int freq = frequency();
157 int diff, diff2, a; 157 int diff, diff2, a;
158 int iday, imonth, iyear; 158 int iday, imonth, iyear;
159 int dayOfWeek = 0; 159 int dayOfWeek = 0;
160 int firstOfWeek = 0; 160 int firstOfWeek = 0;
161 int weekOfMonth; 161 int weekOfMonth;
162 162
163 163
164 if (hasEndDate() && endDate() < from) 164 if (hasEndDate() && endDate() < from)
165 return FALSE; 165 return FALSE;
166 166
167 if (start() >= from ) { 167 if (start() >= from ) {
168 next = start(); 168 next = start();
169 return TRUE; 169 return TRUE;
170 } 170 }
171 171
172 switch ( type() ) { 172 switch ( type() ) {
173 case Weekly: 173 case Weekly:
174 /* weekly is just daily by 7 */ 174 /* weekly is just daily by 7 */
175 /* first convert the repeatPattern.Days() mask to the next 175 /* first convert the repeatPattern.Days() mask to the next
176 day of week valid after from */ 176 day of week valid after from */
177 dayOfWeek = from.dayOfWeek(); 177 dayOfWeek = from.dayOfWeek();
178 dayOfWeek--; /* we want 0-6, doco for above specs 1-7 */ 178 dayOfWeek--; /* we want 0-6, doco for above specs 1-7 */
179 179
180 /* this is done in case freq > 1 and from in week not 180 /* this is done in case freq > 1 and from in week not
181 for this round */ 181 for this round */
182 // firstOfWeek = 0; this is already done at decl. 182 // firstOfWeek = 0; this is already done at decl.
183 while(!((1 << firstOfWeek) & days() )) 183 while(!((1 << firstOfWeek) & days() ))
184 firstOfWeek++; 184 firstOfWeek++;
185 185
186 /* there is at least one 'day', or there would be no event */ 186 /* there is at least one 'day', or there would be no event */
187 while(!((1 << (dayOfWeek % 7)) & days() )) 187 while(!((1 << (dayOfWeek % 7)) & days() ))
188 dayOfWeek++; 188 dayOfWeek++;
189 189
190 dayOfWeek = dayOfWeek % 7; /* the actual day of week */ 190 dayOfWeek = dayOfWeek % 7; /* the actual day of week */
191 dayOfWeek -= start().dayOfWeek() -1; 191 dayOfWeek -= start().dayOfWeek() -1;
192 192
193 firstOfWeek = firstOfWeek % 7; /* the actual first of week */ 193 firstOfWeek = firstOfWeek % 7; /* the actual first of week */
194 firstOfWeek -= start().dayOfWeek() -1; 194 firstOfWeek -= start().dayOfWeek() -1;
195 195
196 // dayOfWeek may be negitive now 196 // dayOfWeek may be negitive now
197 // day of week is number of days to add to start day 197 // day of week is number of days to add to start day
198 198
199 freq *= 7; 199 freq *= 7;
200 // FALL-THROUGH !!!!! 200 // FALL-THROUGH !!!!!
201 case Daily: 201 case Daily:
202 // the add is for the possible fall through from weekly */ 202 // the add is for the possible fall through from weekly */