summaryrefslogtreecommitdiffabout
authorzautrix <zautrix>2004-08-01 11:37:35 (UTC)
committer zautrix <zautrix>2004-08-01 11:37:35 (UTC)
commite954cc1e29b129982e4d07c4f490d7e881597374 (patch) (unidiff)
tree29e7bdcf20952b813637083596102f7e7b080567
parent8a394f316feb828954d69480553f85c9c0f4b353 (diff)
downloadkdepimpi-e954cc1e29b129982e4d07c4f490d7e881597374.zip
kdepimpi-e954cc1e29b129982e4d07c4f490d7e881597374.tar.gz
kdepimpi-e954cc1e29b129982e4d07c4f490d7e881597374.tar.bz2
Made sync code more readable by using defines
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--Makefile30
-rw-r--r--korganizer/calendarview.cpp47
-rw-r--r--libkcal/sharpformat.cpp15
-rw-r--r--libkcal/syncdefines.h22
-rw-r--r--libkdepim/ksyncprofile.h10
5 files changed, 62 insertions, 62 deletions
diff --git a/Makefile b/Makefile
index 826e70e..19c57e5 100644
--- a/Makefile
+++ b/Makefile
@@ -1,299 +1,279 @@
1DISTPATH = $(shell pwd) 1DISTPATH = $(shell pwd)
2DISTDIR = $(shell basename $(DISTPATH)) 2DISTDIR = $(shell basename $(DISTPATH))
3 3
4 4
5ifeq ($(PLATFORM) , zaurus) 5ifeq ($(PLATFORM) , zaurus)
6 BUILD_NO_LDAP_PLUGIN=1 6 BUILD_NO_LDAP_PLUGIN=1
7endif 7endif
8 8
9ifneq ($(PLATFORM) , zaurus) 9ifneq ($(PLATFORM) , zaurus)
10 BUILD_NO_SHARP_PLUGIN=1 10 BUILD_NO_SHARP_PLUGIN=1
11endif 11endif
12 12
13SUBDIRS_MICROKDE = \ 13SUBDIRS_MICROKDE = \
14 libical/src/libical \ 14 libical/src/libical \
15 libical/src/libicalss \ 15 libical/src/libicalss \
16 qtcompat \ 16 qtcompat \
17 microkde \ 17 microkde \
18 libkcal \ 18 libkcal \
19 libkdepim \ 19 libkdepim \
20 kabc \ 20 kabc \
21 kabc/formats/binary \ 21 kabc/formats/binary \
22 kabc/plugins/file \ 22 kabc/plugins/file \
23 kabc/plugins/dir \ 23 kabc/plugins/dir \
24 korganizer \ 24 korganizer \
25 kalarmd \ 25 kalarmd \
26 kaddressbook 26 kaddressbook
27 27
28SUBDIRS_QTOPIA_PLUGIN = \ 28SUBDIRS_QTOPIA_PLUGIN = \
29 kabc/converter/qtopia \ 29 kabc/plugins/qtopia
30 kabc/plugins/qtopia \
31 kaddressbook/xxport/qtopia
32 30
33SUBDIRS_OPIE_PLUGIN = \ 31SUBDIRS_OPIE_PLUGIN = \
34 kabc/converter/opie \ 32 kabc/plugins/opie
35 kabc/plugins/opie \
36 kaddressbook/xxport/opie
37 33
38SUBDIRS_SHARP_PLUGIN = \ 34SUBDIRS_SHARP_PLUGIN = \
39 kabc/converter/sharpdtm \ 35 kabc/plugins/sharpdtm
40 kabc/plugins/sharpdtm \
41 kaddressbook/xxport/sharpdtm
42 36
43SUBDIRS_LDAP_PLUGIN = \ 37SUBDIRS_LDAP_PLUGIN = \
44 kabc/plugins/ldap 38 kabc/plugins/ldap
45 39
46SUBDIRS_MICROMAIL = \ 40SUBDIRS_MICROMAIL = \
47 kmicromail/libetpan \ 41 kmicromail/libetpan \
48 kmicromail/libmailwrapper \ 42 kmicromail/libmailwrapper \
49 kmicromail 43 kmicromail
50 44
51SUBDIRS = \ 45SUBDIRS = \
52 $(SUBDIRS_MICROKDE) \ 46 $(SUBDIRS_MICROKDE) \
53 $(SUBDIRS_QTOPIA_PLUGIN) \ 47 $(SUBDIRS_QTOPIA_PLUGIN) \
54 $(SUBDIRS_OPIE_PLUGIN) \ 48 $(SUBDIRS_OPIE_PLUGIN) \
55 $(SUBDIRS_SHARP_PLUGIN) \ 49 $(SUBDIRS_SHARP_PLUGIN) \
56 $(SUBDIRS_LDAP_PLUGIN) \ 50 $(SUBDIRS_LDAP_PLUGIN) \
57 $(SUBDIRS_MICROMAIL) 51 $(SUBDIRS_MICROMAIL)
58 52
59 53
60all: build_microkde \ 54all: build_microkde \
61 build_qtopia_plugin \ 55 build_qtopia_plugin \
62 build_opie_plugin \ 56 build_opie_plugin \
63 build_sharp_plugin \ 57 build_sharp_plugin \
64 build_ldap_plugin \ 58 build_ldap_plugin \
65 build_micromail 59 build_micromail
66 60
67 61
68build_microkde: variable_test tmake 62build_microkde: variable_test tmake
69 for i in $(SUBDIRS_MICROKDE); do pushd $$i; \ 63 for i in $(SUBDIRS_MICROKDE); do pushd $$i; \
70 make -f Makefile$(PLATFORM) || exit 1; popd; \ 64 make -f Makefile$(PLATFORM) || exit 1; popd; \
71 done 65 done
72 66
73build_qtopia_plugin: build_microkde 67build_qtopia_plugin: build_microkde
74 for i in $(SUBDIRS_QTOPIA_PLUGIN); do pushd $$i; \ 68 for i in $(SUBDIRS_QTOPIA_PLUGIN); do pushd $$i; \
75 make -f Makefile$(PLATFORM) || exit 1; popd; \ 69 make -f Makefile$(PLATFORM) || exit 1; popd; \
76 done 70 done
77 71
78build_opie_plugin: build_microkde 72build_opie_plugin: build_microkde
79 ifdef BUILD_NO_OPIE_PLUGIN 73 ifdef BUILD_NO_OPIE_PLUGIN
80 @echo ---> opie plugin not build. 74 @echo ---> opie plugin not build.
81 else 75 else
82 for i in $(SUBDIRS_OPIE_PLUGIN); do pushd $$i; \ 76 for i in $(SUBDIRS_OPIE_PLUGIN); do pushd $$i; \
83 make -f Makefile$(PLATFORM) || exit 1; popd; \ 77 make -f Makefile$(PLATFORM) || exit 1; popd; \
84 done 78 done
85 endif 79 endif
86 80
87build_sharp_plugin: build_microkde 81build_sharp_plugin: build_microkde
88 ifdef BUILD_NO_SHARP_PLUGIN 82 ifdef BUILD_NO_SHARP_PLUGIN
89 @echo ---> ldap plugin not build. 83 @echo ---> ldap plugin not build.
90 else 84 else
91 for i in $(SUBDIRS_SHARP_PLUGIN); do pushd $$i; \ 85 for i in $(SUBDIRS_SHARP_PLUGIN); do pushd $$i; \
92 make -f Makefile$(PLATFORM) || exit 1; popd; \ 86 make -f Makefile$(PLATFORM) || exit 1; popd; \
93 done 87 done
94 endif 88 endif
95 89
96build_ldap_plugin: build_microkde 90build_ldap_plugin: build_microkde
97 ifdef BUILD_NO_LDAP_PLUGIN 91 ifdef BUILD_NO_LDAP_PLUGIN
98 @echo ---> ldap plugin not build. 92 @echo ---> ldap plugin not build.
99 else 93 else
100 for i in $(SUBDIRS_LDAP_PLUGIN); do pushd $$i; \ 94 for i in $(SUBDIRS_LDAP_PLUGIN); do pushd $$i; \
101 make -f Makefile$(PLATFORM) || exit 1; popd; \ 95 make -f Makefile$(PLATFORM) || exit 1; popd; \
102 done 96 done
103 endif 97 endif
104 98
105 99
106build_micromail: build_microkde 100build_micromail: build_microkde
107 ifdef BUILD_NO_MICROMAIL 101 ifdef BUILD_NO_MICROMAIL
108 @echo ---> micromail not build. 102 @echo ---> micromail not build.
109 else 103 else
110 for i in $(SUBDIRS_MICROMAIL); do pushd $$i; \ 104 for i in $(SUBDIRS_MICROMAIL); do pushd $$i; \
111 make -f Makefile$(PLATFORM) || exit 1; popd; \ 105 make -f Makefile$(PLATFORM) || exit 1; popd; \
112 done 106 done
113 endif 107 endif
114 108
115 109
116variable_info: 110variable_info:
117 @echo -------------------------------------- 111 @echo --------------------------------------
118 @echo KDEPIM buildsystem, variableinfo... 112 @echo KDEPIM buildsystem, variableinfo...
119 @echo QTDIR=$(QTDIR) 113 @echo QTDIR=$(QTDIR)
120 @echo QPEDIR=$(QPEDIR) 114 @echo QPEDIR=$(QPEDIR)
121 @echo OPIEDIR=$(OPIEDIR) 115 @echo OPIEDIR=$(OPIEDIR)
122 @echo PLATFORM=$(PLATFORM) 116 @echo PLATFORM=$(PLATFORM)
123 @echo RELEASE_DEBUG=$(RELEASE_DEBUG) 117 @echo RELEASE_DEBUG=$(RELEASE_DEBUG)
124 @echo BUILD_NO_MICROMAIL=$(BUILD_NO_MICROMAIL) 118 @echo BUILD_NO_MICROMAIL=$(BUILD_NO_MICROMAIL)
125 @echo BUILD_NO_LDAP_PLUGIN=$(BUILD_NO_LDAP_PLUGIN) 119 @echo BUILD_NO_LDAP_PLUGIN=$(BUILD_NO_LDAP_PLUGIN)
126 @echo BUILD_NO_OPIE_PLUGIN=$(BUILD_NO_OPIE_PLUGIN) 120 @echo BUILD_NO_OPIE_PLUGIN=$(BUILD_NO_OPIE_PLUGIN)
127 @echo BUILD_NO_SHARP_PLUGIN=$(BUILD_NO_SHARP_PLUGIN) 121 @echo BUILD_NO_SHARP_PLUGIN=$(BUILD_NO_SHARP_PLUGIN)
128 ifndef BUILD_NO_SHARP_PLUGIN 122 ifndef BUILD_NO_SHARP_PLUGIN
129 @echo SHARPDTMSDK=$(SHARPDTMSDK) 123 @echo SHARPDTMSDK=$(SHARPDTMSDK)
130 endif 124 endif
131 @echo -------------------------------------- 125 @echo --------------------------------------
132 126
133variable_test: variable_info 127variable_test: variable_info
134 @echo KDEPIM buildsystem, variablecheck... 128 @echo KDEPIM buildsystem, variablecheck...
135 ifndef PLATFORM 129 ifndef PLATFORM
136 @echo PLATFORM is not defined. 130 @echo PLATFORM is not defined.
137 $(error PLATFORM is not defined) 131 $(error PLATFORM is not defined)
138 endif 132 endif
139 ifdef BUILD_NO_LDAP_PLUGIN 133 ifdef BUILD_NO_LDAP_PLUGIN
140 @echo LDAP PLUGIN will not be build, because BUILD_NO_LDAP_PLUGIN is set to $(BUILD_NO_LDAP_PLUGIN) 134 @echo LDAP PLUGIN will not be build, because BUILD_NO_LDAP_PLUGIN is set to $(BUILD_NO_LDAP_PLUGIN)
141 endif 135 endif
142 ifdef BUILD_NO_OPIE_PLUGIN 136 ifdef BUILD_NO_OPIE_PLUGIN
143 @echo OPIE PLUGIN will not be build, because BUILD_NO_OPIE_PLUGIN is set to $(BUILD_NO_OPIE_PLUGIN) 137 @echo OPIE PLUGIN will not be build, because BUILD_NO_OPIE_PLUGIN is set to $(BUILD_NO_OPIE_PLUGIN)
144 endif 138 endif
145 ifdef BUILD_NO_MICROMAIL 139 ifdef BUILD_NO_MICROMAIL
146 @echo MICROMAIL will not be build, because BUILD_NO_MICROMAIL is set to $(BUILD_NO_MICROMAIL) 140 @echo MICROMAIL will not be build, because BUILD_NO_MICROMAIL is set to $(BUILD_NO_MICROMAIL)
147 endif 141 endif
148 ifdef BUILD_NO_SHARP_PLUGIN 142 ifdef BUILD_NO_SHARP_PLUGIN
149 @echo SHARP PLUGIN will not be build, because BUILD_NO_SHARP_PLUGIN is set to $(BUILD_NO_SHARP_PLUGIN) 143 @echo SHARP PLUGIN will not be build, because BUILD_NO_SHARP_PLUGIN is set to $(BUILD_NO_SHARP_PLUGIN)
150 else 144 else
151 ifndef SHARPDTMSDK 145 ifndef SHARPDTMSDK
152 @echo SHARP PLUGIN can not be build, because SHARPDTMSDK is set to $(SHARPDTMSDK) 146 @echo SHARP PLUGIN can not be build, because SHARPDTMSDK is set to $(SHARPDTMSDK)
153 $(error SHARPDTMSDK is not defined) 147 $(error SHARPDTMSDK is not defined)
154 endif 148 endif
155 endif 149 endif
156 @echo -------------------------------------- 150 @echo --------------------------------------
157 151
158 152
159objects: 153objects:
160 for i in $(SUBDIRS); do mkdir -p $$i/obj/$(PLATFORM); done 154 for i in $(SUBDIRS); do mkdir -p $$i/obj/$(PLATFORM); done
161 for i in $(SUBDIRS); do mkdir -p $$i/moc/$(PLATFORM); done 155 for i in $(SUBDIRS); do mkdir -p $$i/moc/$(PLATFORM); done
162 mkdir -p libical/lib/$(PLATFORM) 156 mkdir -p libical/lib/$(PLATFORM)
163 157
164clean: 158clean:
165 rm -f libical/lib/$(PLATFORM)/*; 159 rm -f libical/lib/$(PLATFORM)/*;
166 for i in $(SUBDIRS); do pushd $$i; make clean; rm -f *~;\ 160 for i in $(SUBDIRS); do pushd $$i; make clean; rm -f *~;\
167 rm -f obj/$(PLATFORM)/*; rm -f moc/$(PLATFORM)/*; rm Makefile$(PLATFORM); popd; \ 161 rm -f obj/$(PLATFORM)/*; rm -f moc/$(PLATFORM)/*; rm Makefile$(PLATFORM); popd; \
168 done 162 done
169install: 163install:
170 cd bin/kdepim; make install 164 cd bin/kdepim; make install
171 cp db2file/db2file $(QPEDIR)/bin/db2file 165 cp db2file/db2file $(QPEDIR)/bin/db2file
172 cp korganizer/korganizer.desktop $(QPEDIR)/apps/Pim/korganizer.desktop 166 cp korganizer/korganizer.desktop $(QPEDIR)/apps/Pim/korganizer.desktop
173 cp kaddressbook/kaddressbook.desktop $(QPEDIR)/apps/Pim/kaddressbook.desktop 167 cp kaddressbook/kaddressbook.desktop $(QPEDIR)/apps/Pim/kaddressbook.desktop
174 cp kmicromail/kmicromail.desktop $(QPEDIR)/apps/Pim/kmicromail.desktop 168 cp kmicromail/kmicromail.desktop $(QPEDIR)/apps/Pim/kmicromail.desktop
175 169
176dist: 170dist:
177 @echo Dont forget to do "make install" before "make dist" 171 @echo Dont forget to do "make install" before "make dist"
178 rm -f *arm.ipk 172 rm -f *arm.ipk
179 rm -f *~ 173 rm -f *~
180 cd ..; tar czf kdepim.src.tar.gz --exclude=obj --exclude=moc kdepim 174 cd ..; tar czf kdepim.src.tar.gz --exclude=obj --exclude=moc kdepim
181 ./mkipks kmicrokdelibs.control 175 ./mkipks kmicrokdelibs.control
182 ./mkipks korganizer.control 176 ./mkipks korganizer.control
183 ./mkipks kaddressbook.control 177 ./mkipks kaddressbook.control
184 ifndef BUILD_NO_MICROMAIL 178 ifndef BUILD_NO_MICROMAIL
185 ./mkipks kopiemail.control 179 ./mkipks kopiemail.control
186 endif 180 endif
187 ./mkipks korganizer-alarm.control 181 ./mkipks korganizer-alarm.control
188 182
189tmake: objects \ 183tmake: objects \
190 qtcompat/Makefile$(PLATFORM) \ 184 qtcompat/Makefile$(PLATFORM) \
191 microkde/Makefile$(PLATFORM) \ 185 microkde/Makefile$(PLATFORM) \
192 libkcal/Makefile$(PLATFORM) \ 186 libkcal/Makefile$(PLATFORM) \
193 libkdepim/Makefile$(PLATFORM) \ 187 libkdepim/Makefile$(PLATFORM) \
194 korganizer/Makefile$(PLATFORM) \ 188 korganizer/Makefile$(PLATFORM) \
195 kalarmd/Makefile$(PLATFORM) \ 189 kalarmd/Makefile$(PLATFORM) \
196 libical/src/libical/Makefile$(PLATFORM) \ 190 libical/src/libical/Makefile$(PLATFORM) \
197 libical/src/libicalss/Makefile$(PLATFORM) \ 191 libical/src/libicalss/Makefile$(PLATFORM) \
198 kabc/Makefile$(PLATFORM) \ 192 kabc/Makefile$(PLATFORM) \
199 kabc/converter/opie/Makefile$(PLATFORM) \
200 kabc/converter/qtopia/Makefile$(PLATFORM) \
201 kabc/converter/sharpdtm/Makefile$(PLATFORM) \
202 kabc/formats/binary/Makefile$(PLATFORM) \ 193 kabc/formats/binary/Makefile$(PLATFORM) \
203 kabc/plugins/file/Makefile$(PLATFORM) \ 194 kabc/plugins/file/Makefile$(PLATFORM) \
204 kabc/plugins/dir/Makefile$(PLATFORM) \ 195 kabc/plugins/dir/Makefile$(PLATFORM) \
205 kabc/plugins/ldap/Makefile$(PLATFORM) \ 196 kabc/plugins/ldap/Makefile$(PLATFORM) \
206 kabc/plugins/opie/Makefile$(PLATFORM) \ 197 kabc/plugins/opie/Makefile$(PLATFORM) \
207 kabc/plugins/qtopia/Makefile$(PLATFORM) \ 198 kabc/plugins/qtopia/Makefile$(PLATFORM) \
208 kabc/plugins/sharpdtm/Makefile$(PLATFORM) \ 199 kabc/plugins/sharpdtm/Makefile$(PLATFORM) \
209 kaddressbook/xxport/opie/Makefile$(PLATFORM) \ 200 kaddressbook/xxport/opie/Makefile$(PLATFORM) \
210 kaddressbook/xxport/qtopia/Makefile$(PLATFORM) \ 201 kaddressbook/xxport/qtopia/Makefile$(PLATFORM) \
211 kaddressbook/xxport/sharpdtm/Makefile$(PLATFORM) \ 202 kaddressbook/xxport/sharpdtm/Makefile$(PLATFORM) \
212 kaddressbook/Makefile$(PLATFORM) \ 203 kaddressbook/Makefile$(PLATFORM) \
213 kmicromail/Makefile$(PLATFORM) \ 204 kmicromail/Makefile$(PLATFORM) \
214 kmicromail/libetpan/Makefile$(PLATFORM) \ 205 kmicromail/libetpan/Makefile$(PLATFORM) \
215 kmicromail/libmailwrapper/Makefile$(PLATFORM) 206 kmicromail/libmailwrapper/Makefile$(PLATFORM)
216
217 207
218 208
219 209
220qtcompat/Makefile$(PLATFORM): qtcompat/qtcompat.pro 210qtcompat/Makefile$(PLATFORM): qtcompat/qtcompat.pro
221 cd qtcompat; tmake "CONFIG+=$(RELEASE_DEBUG)" qtcompat.pro -o Makefile$(PLATFORM) 211 cd qtcompat; tmake "CONFIG+=$(RELEASE_DEBUG)" qtcompat.pro -o Makefile$(PLATFORM)
222 212
223microkde/Makefile$(PLATFORM): microkde/microkdeE.pro 213microkde/Makefile$(PLATFORM): microkde/microkdeE.pro
224 cd microkde; tmake "CONFIG+=$(RELEASE_DEBUG)" microkdeE.pro -o Makefile$(PLATFORM) 214 cd microkde; tmake "CONFIG+=$(RELEASE_DEBUG)" microkdeE.pro -o Makefile$(PLATFORM)
225 215
226libkcal/Makefile$(PLATFORM): libkcal/libkcalE.pro 216libkcal/Makefile$(PLATFORM): libkcal/libkcalE.pro
227 cd libkcal; tmake "CONFIG+=$(RELEASE_DEBUG)" libkcalE.pro -o Makefile$(PLATFORM) 217 cd libkcal; tmake "CONFIG+=$(RELEASE_DEBUG)" libkcalE.pro -o Makefile$(PLATFORM)
228 218
229 219
230libkdepim/Makefile$(PLATFORM): libkdepim/libkdepimE.pro 220libkdepim/Makefile$(PLATFORM): libkdepim/libkdepimE.pro
231 cd libkdepim; tmake "CONFIG+=$(RELEASE_DEBUG)" libkdepimE.pro -o Makefile$(PLATFORM) 221 cd libkdepim; tmake "CONFIG+=$(RELEASE_DEBUG)" libkdepimE.pro -o Makefile$(PLATFORM)
232 222
233kalarmd/Makefile$(PLATFORM): kalarmd/kalarmdE.pro 223kalarmd/Makefile$(PLATFORM): kalarmd/kalarmdE.pro
234 cd kalarmd; tmake "CONFIG+=$(RELEASE_DEBUG)" kalarmdE.pro -o Makefile$(PLATFORM) 224 cd kalarmd; tmake "CONFIG+=$(RELEASE_DEBUG)" kalarmdE.pro -o Makefile$(PLATFORM)
235 225
236korganizer/Makefile$(PLATFORM): korganizer/korganizerE.pro 226korganizer/Makefile$(PLATFORM): korganizer/korganizerE.pro
237 cd korganizer; tmake "CONFIG+=$(RELEASE_DEBUG)" korganizerE.pro -o Makefile$(PLATFORM) 227 cd korganizer; tmake "CONFIG+=$(RELEASE_DEBUG)" korganizerE.pro -o Makefile$(PLATFORM)
238 228
239libical/src/libical/Makefile$(PLATFORM): libical/src/libical/libicalE.pro 229libical/src/libical/Makefile$(PLATFORM): libical/src/libical/libicalE.pro
240 cd libical/src/libical; tmake "CONFIG+=$(RELEASE_DEBUG)" libicalE.pro -o Makefile$(PLATFORM) 230 cd libical/src/libical; tmake "CONFIG+=$(RELEASE_DEBUG)" libicalE.pro -o Makefile$(PLATFORM)
241 231
242libical/src/libicalss/Makefile$(PLATFORM): libical/src/libicalss/libicalssE.pro 232libical/src/libicalss/Makefile$(PLATFORM): libical/src/libicalss/libicalssE.pro
243 cd libical/src/libicalss; tmake "CONFIG+=$(RELEASE_DEBUG)" libicalssE.pro -o Makefile$(PLATFORM) 233 cd libical/src/libicalss; tmake "CONFIG+=$(RELEASE_DEBUG)" libicalssE.pro -o Makefile$(PLATFORM)
244 234
245kabc/Makefile$(PLATFORM): kabc/kabcE.pro 235kabc/Makefile$(PLATFORM): kabc/kabcE.pro
246 cd kabc; tmake "CONFIG+=$(RELEASE_DEBUG)" kabcE.pro -o Makefile$(PLATFORM) 236 cd kabc; tmake "CONFIG+=$(RELEASE_DEBUG)" kabcE.pro -o Makefile$(PLATFORM)
247 237
248kabc/converter/opie/Makefile$(PLATFORM): kabc/converter/opie/opieE.pro
249 cd kabc/converter/opie; tmake "CONFIG+=$(RELEASE_DEBUG)" opieE.pro -o Makefile$(PLATFORM)
250
251kabc/converter/qtopia/Makefile$(PLATFORM): kabc/converter/qtopia/qtopiaE.pro
252 cd kabc/converter/qtopia; tmake "CONFIG+=$(RELEASE_DEBUG)" qtopiaE.pro -o Makefile$(PLATFORM)
253
254kabc/converter/sharpdtm/Makefile$(PLATFORM): kabc/converter/sharpdtm/sharpdtmE.pro
255 cd kabc/converter/sharpdtm; tmake "CONFIG+=$(RELEASE_DEBUG)" sharpdtmE.pro -o Makefile$(PLATFORM)
256
257
258kabc/formats/binary/Makefile$(PLATFORM): kabc/formats/binary/kabcformat_binaryE.pro 238kabc/formats/binary/Makefile$(PLATFORM): kabc/formats/binary/kabcformat_binaryE.pro
259 cd kabc/formats/binary; tmake "CONFIG+=$(RELEASE_DEBUG)" kabcformat_binaryE.pro -o Makefile$(PLATFORM) 239 cd kabc/formats/binary; tmake "CONFIG+=$(RELEASE_DEBUG)" kabcformat_binaryE.pro -o Makefile$(PLATFORM)
260 240
261kabc/plugins/file/Makefile$(PLATFORM): kabc/plugins/file/fileE.pro 241kabc/plugins/file/Makefile$(PLATFORM): kabc/plugins/file/fileE.pro
262 cd kabc/plugins/file; tmake "CONFIG+=$(RELEASE_DEBUG)" fileE.pro -o Makefile$(PLATFORM) 242 cd kabc/plugins/file; tmake "CONFIG+=$(RELEASE_DEBUG)" fileE.pro -o Makefile$(PLATFORM)
263 243
264kabc/plugins/dir/Makefile$(PLATFORM): kabc/plugins/dir/dirE.pro 244kabc/plugins/dir/Makefile$(PLATFORM): kabc/plugins/dir/dirE.pro
265 cd kabc/plugins/dir; tmake "CONFIG+=$(RELEASE_DEBUG)" dirE.pro -o Makefile$(PLATFORM) 245 cd kabc/plugins/dir; tmake "CONFIG+=$(RELEASE_DEBUG)" dirE.pro -o Makefile$(PLATFORM)
266 246
267kabc/plugins/ldap/Makefile$(PLATFORM): kabc/plugins/ldap/ldapE.pro 247kabc/plugins/ldap/Makefile$(PLATFORM): kabc/plugins/ldap/ldapE.pro
268 cd kabc/plugins/ldap; tmake "CONFIG+=$(RELEASE_DEBUG)" ldapE.pro -o Makefile$(PLATFORM) 248 cd kabc/plugins/ldap; tmake "CONFIG+=$(RELEASE_DEBUG)" ldapE.pro -o Makefile$(PLATFORM)
269 249
270kabc/plugins/opie/Makefile$(PLATFORM): kabc/plugins/opie/opieE.pro 250kabc/plugins/opie/Makefile$(PLATFORM): kabc/plugins/opie/opieE.pro
271 cd kabc/plugins/opie; tmake "CONFIG+=$(RELEASE_DEBUG)" opieE.pro -o Makefile$(PLATFORM) 251 cd kabc/plugins/opie; tmake "CONFIG+=$(RELEASE_DEBUG)" opieE.pro -o Makefile$(PLATFORM)
272 252
273kabc/plugins/qtopia/Makefile$(PLATFORM): kabc/plugins/qtopia/qtopiaE.pro 253kabc/plugins/qtopia/Makefile$(PLATFORM): kabc/plugins/qtopia/qtopiaE.pro
274 cd kabc/plugins/qtopia; tmake "CONFIG+=$(RELEASE_DEBUG)" qtopiaE.pro -o Makefile$(PLATFORM) 254 cd kabc/plugins/qtopia; tmake "CONFIG+=$(RELEASE_DEBUG)" qtopiaE.pro -o Makefile$(PLATFORM)
275 255
276kabc/plugins/sharpdtm/Makefile$(PLATFORM): kabc/plugins/sharpdtm/sharpdtmE.pro 256kabc/plugins/sharpdtm/Makefile$(PLATFORM): kabc/plugins/sharpdtm/sharpdtmE.pro
277 cd kabc/plugins/sharpdtm; tmake "CONFIG+=$(RELEASE_DEBUG)" sharpdtmE.pro -o Makefile$(PLATFORM) 257 cd kabc/plugins/sharpdtm; tmake "CONFIG+=$(RELEASE_DEBUG)" sharpdtmE.pro -o Makefile$(PLATFORM)
278 258
279kaddressbook/xxport/opie/Makefile$(PLATFORM): kaddressbook/xxport/opie/opieE.pro 259kaddressbook/xxport/opie/Makefile$(PLATFORM): kaddressbook/xxport/opie/opieE.pro
280 cd kaddressbook/xxport/opie; tmake "CONFIG+=$(RELEASE_DEBUG)" opieE.pro -o Makefile$(PLATFORM) 260 cd kaddressbook/xxport/opie; tmake "CONFIG+=$(RELEASE_DEBUG)" opieE.pro -o Makefile$(PLATFORM)
281 261
282kaddressbook/xxport/qtopia/Makefile$(PLATFORM): kaddressbook/xxport/qtopia/qtopiaE.pro 262kaddressbook/xxport/qtopia/Makefile$(PLATFORM): kaddressbook/xxport/qtopia/qtopiaE.pro
283 cd kaddressbook/xxport/qtopia; tmake "CONFIG+=$(RELEASE_DEBUG)" qtopiaE.pro -o Makefile$(PLATFORM) 263 cd kaddressbook/xxport/qtopia; tmake "CONFIG+=$(RELEASE_DEBUG)" qtopiaE.pro -o Makefile$(PLATFORM)
284 264
285kaddressbook/xxport/sharpdtm/Makefile$(PLATFORM): kaddressbook/xxport/sharpdtm/sharpdtmE.pro 265kaddressbook/xxport/sharpdtm/Makefile$(PLATFORM): kaddressbook/xxport/sharpdtm/sharpdtmE.pro
286 cd kaddressbook/xxport/sharpdtm; tmake "CONFIG+=$(RELEASE_DEBUG)" sharpdtmE.pro -o Makefile$(PLATFORM) 266 cd kaddressbook/xxport/sharpdtm; tmake "CONFIG+=$(RELEASE_DEBUG)" sharpdtmE.pro -o Makefile$(PLATFORM)
287 267
288 268
289kaddressbook/Makefile$(PLATFORM): kaddressbook/kaddressbookE.pro 269kaddressbook/Makefile$(PLATFORM): kaddressbook/kaddressbookE.pro
290 cd kaddressbook; tmake "CONFIG+=$(RELEASE_DEBUG)" kaddressbookE.pro -o Makefile$(PLATFORM) 270 cd kaddressbook; tmake "CONFIG+=$(RELEASE_DEBUG)" kaddressbookE.pro -o Makefile$(PLATFORM)
291 271
292kmicromail/Makefile$(PLATFORM): kmicromail/kmicromailE.pro 272kmicromail/Makefile$(PLATFORM): kmicromail/kmicromailE.pro
293 cd kmicromail; tmake "CONFIG+=$(RELEASE_DEBUG)" kmicromailE.pro -o Makefile$(PLATFORM) 273 cd kmicromail; tmake "CONFIG+=$(RELEASE_DEBUG)" kmicromailE.pro -o Makefile$(PLATFORM)
294 274
295kmicromail/libetpan/Makefile$(PLATFORM): kmicromail/libetpan/libetpanE.pro 275kmicromail/libetpan/Makefile$(PLATFORM): kmicromail/libetpan/libetpanE.pro
296 cd kmicromail/libetpan; tmake "CONFIG+=$(RELEASE_DEBUG)" libetpanE.pro -o Makefile$(PLATFORM) 276 cd kmicromail/libetpan; tmake "CONFIG+=$(RELEASE_DEBUG)" libetpanE.pro -o Makefile$(PLATFORM)
297 277
298kmicromail/libmailwrapper/Makefile$(PLATFORM): kmicromail/libmailwrapper/libmailwrapperE.pro 278kmicromail/libmailwrapper/Makefile$(PLATFORM): kmicromail/libmailwrapper/libmailwrapperE.pro
299 cd kmicromail/libmailwrapper; tmake "CONFIG+=$(RELEASE_DEBUG)" libmailwrapperE.pro -o Makefile$(PLATFORM) 279 cd kmicromail/libmailwrapper; tmake "CONFIG+=$(RELEASE_DEBUG)" libmailwrapperE.pro -o Makefile$(PLATFORM)
diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp
index 58b3d70..fd68dc4 100644
--- a/korganizer/calendarview.cpp
+++ b/korganizer/calendarview.cpp
@@ -1,1557 +1,1558 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 3
4 Requires the Qt and KDE widget libraries, available at no cost at 4 Requires the Qt and KDE widget libraries, available at no cost at
5 http://www.troll.no and http://www.kde.org respectively 5 http://www.troll.no and http://www.kde.org respectively
6 6
7 Copyright (c) 1997, 1998, 1999 7 Copyright (c) 1997, 1998, 1999
8 Preston Brown (preston.brown@yale.edu) 8 Preston Brown (preston.brown@yale.edu)
9 Fester Zigterman (F.J.F.ZigtermanRustenburg@student.utwente.nl) 9 Fester Zigterman (F.J.F.ZigtermanRustenburg@student.utwente.nl)
10 Ian Dawes (iadawes@globalserve.net) 10 Ian Dawes (iadawes@globalserve.net)
11 Laszlo Boloni (boloni@cs.purdue.edu) 11 Laszlo Boloni (boloni@cs.purdue.edu)
12 12
13 Copyright (c) 2000, 2001, 2002 13 Copyright (c) 2000, 2001, 2002
14 Cornelius Schumacher <schumacher@kde.org> 14 Cornelius Schumacher <schumacher@kde.org>
15 15
16 This program is free software; you can redistribute it and/or modify 16 This program is free software; you can redistribute it and/or modify
17 it under the terms of the GNU General Public License as published by 17 it under the terms of the GNU General Public License as published by
18 the Free Software Foundation; either version 2 of the License, or 18 the Free Software Foundation; either version 2 of the License, or
19 (at your option) any later version. 19 (at your option) any later version.
20 20
21 This program is distributed in the hope that it will be useful, 21 This program is distributed in the hope that it will be useful,
22 but WITHOUT ANY WARRANTY; without even the implied warranty of 22 but WITHOUT ANY WARRANTY; without even the implied warranty of
23 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the 23 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
24 GNU General Public License for more details. 24 GNU General Public License for more details.
25 25
26 You should have received a copy of the GNU General Public License 26 You should have received a copy of the GNU General Public License
27 along with this program; if not, write to the Free Software 27 along with this program; if not, write to the Free Software
28 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 28 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
29*/ 29*/
30 30
31#include <stdlib.h> 31#include <stdlib.h>
32 32
33#include <qapplication.h> 33#include <qapplication.h>
34#include <qradiobutton.h> 34#include <qradiobutton.h>
35#include <qbuttongroup.h> 35#include <qbuttongroup.h>
36#include <qlayout.h> 36#include <qlayout.h>
37#include <qclipboard.h> 37#include <qclipboard.h>
38#include <qcursor.h> 38#include <qcursor.h>
39#include <qmessagebox.h> 39#include <qmessagebox.h>
40#include <qprogressbar.h> 40#include <qprogressbar.h>
41#include <qmultilineedit.h> 41#include <qmultilineedit.h>
42#include <qtimer.h> 42#include <qtimer.h>
43#include <qwidgetstack.h> 43#include <qwidgetstack.h>
44#include <qptrlist.h> 44#include <qptrlist.h>
45#include <qregexp.h> 45#include <qregexp.h>
46#include <qgroupbox.h> 46#include <qgroupbox.h>
47#include <qfile.h> 47#include <qfile.h>
48#include <qdir.h> 48#include <qdir.h>
49#ifndef KORG_NOSPLITTER 49#ifndef KORG_NOSPLITTER
50#include <qsplitter.h> 50#include <qsplitter.h>
51#endif 51#endif
52 52
53#include <kglobal.h> 53#include <kglobal.h>
54#include <kdebug.h> 54#include <kdebug.h>
55#include <kstandarddirs.h> 55#include <kstandarddirs.h>
56#include <kfiledialog.h> 56#include <kfiledialog.h>
57#include <kmessagebox.h> 57#include <kmessagebox.h>
58#include <knotifyclient.h> 58#include <knotifyclient.h>
59#include <kconfig.h> 59#include <kconfig.h>
60 60
61#include "kosyncprefsdialog.h" 61#include "kosyncprefsdialog.h"
62#include <krun.h> 62#include <krun.h>
63#include <kdirwatch.h> 63#include <kdirwatch.h>
64#include <libkdepim/kdatepicker.h> 64#include <libkdepim/kdatepicker.h>
65#include <libkdepim/ksyncprofile.h> 65#include <libkdepim/ksyncprofile.h>
66 66
67#include <libkcal/vcaldrag.h> 67#include <libkcal/vcaldrag.h>
68#include <libkcal/icaldrag.h> 68#include <libkcal/icaldrag.h>
69#include <libkcal/icalformat.h> 69#include <libkcal/icalformat.h>
70#include <libkcal/vcalformat.h> 70#include <libkcal/vcalformat.h>
71#include <libkcal/scheduler.h> 71#include <libkcal/scheduler.h>
72#include <libkcal/calendarlocal.h> 72#include <libkcal/calendarlocal.h>
73#include <libkcal/journal.h> 73#include <libkcal/journal.h>
74#include <libkcal/calfilter.h> 74#include <libkcal/calfilter.h>
75#include <libkcal/attendee.h> 75#include <libkcal/attendee.h>
76#include <libkcal/dndfactory.h> 76#include <libkcal/dndfactory.h>
77#include <libkcal/freebusy.h> 77#include <libkcal/freebusy.h>
78#include <libkcal/filestorage.h> 78#include <libkcal/filestorage.h>
79#include <libkcal/calendarresources.h> 79#include <libkcal/calendarresources.h>
80#include <libkcal/qtopiaformat.h> 80#include <libkcal/qtopiaformat.h>
81#include "../kalarmd/alarmdialog.h" 81#include "../kalarmd/alarmdialog.h"
82 82
83#ifndef DESKTOP_VERSION 83#ifndef DESKTOP_VERSION
84#include <libkcal/sharpformat.h> 84#include <libkcal/sharpformat.h>
85#endif 85#endif
86#ifndef KORG_NOMAIL 86#ifndef KORG_NOMAIL
87#include "komailclient.h" 87#include "komailclient.h"
88#endif 88#endif
89#ifndef KORG_NOPRINTER 89#ifndef KORG_NOPRINTER
90#include "calprinter.h" 90#include "calprinter.h"
91#endif 91#endif
92#ifndef KORG_NOPLUGINS 92#ifndef KORG_NOPLUGINS
93#include "kocore.h" 93#include "kocore.h"
94#endif 94#endif
95#include "koeventeditor.h" 95#include "koeventeditor.h"
96#include "kotodoeditor.h" 96#include "kotodoeditor.h"
97#include "koprefs.h" 97#include "koprefs.h"
98#include "koeventviewerdialog.h" 98#include "koeventviewerdialog.h"
99#include "publishdialog.h" 99#include "publishdialog.h"
100#include "kofilterview.h" 100#include "kofilterview.h"
101#include "koglobals.h" 101#include "koglobals.h"
102#include "koviewmanager.h" 102#include "koviewmanager.h"
103#include "koagendaview.h" 103#include "koagendaview.h"
104#include "kodialogmanager.h" 104#include "kodialogmanager.h"
105#include "outgoingdialog.h" 105#include "outgoingdialog.h"
106#include "incomingdialog.h" 106#include "incomingdialog.h"
107#include "statusdialog.h" 107#include "statusdialog.h"
108#include "kdatenavigator.h" 108#include "kdatenavigator.h"
109#include "kotodoview.h" 109#include "kotodoview.h"
110#include "datenavigator.h" 110#include "datenavigator.h"
111#include "resourceview.h" 111#include "resourceview.h"
112#include "navigatorbar.h" 112#include "navigatorbar.h"
113#include "searchdialog.h" 113#include "searchdialog.h"
114#include "mainwindow.h" 114#include "mainwindow.h"
115 115
116#include "calendarview.h" 116#include "calendarview.h"
117#ifndef DESKTOP_VERSION 117#ifndef DESKTOP_VERSION
118#include <qtopia/alarmserver.h> 118#include <qtopia/alarmserver.h>
119#endif 119#endif
120#ifndef _WIN32_ 120#ifndef _WIN32_
121#include <stdlib.h> 121#include <stdlib.h>
122#include <stdio.h> 122#include <stdio.h>
123#include <unistd.h> 123#include <unistd.h>
124#else 124#else
125#include <qprocess.h> 125#include <qprocess.h>
126#endif 126#endif
127using namespace KOrg; 127using namespace KOrg;
128using namespace KCal; 128using namespace KCal;
129extern int globalFlagBlockAgenda; 129extern int globalFlagBlockAgenda;
130extern int globalFlagBlockStartup; 130extern int globalFlagBlockStartup;
131 131
132#define SYNC_MODE_NORMAL 0 132
133#define SYNC_MODE_SHARP 1
134#define SYNC_MODE_QTOPIA 2
135 133
136class KOBeamPrefs : public QDialog 134class KOBeamPrefs : public QDialog
137{ 135{
138 public: 136 public:
139 KOBeamPrefs( QWidget *parent=0, const char *name=0 ) : 137 KOBeamPrefs( QWidget *parent=0, const char *name=0 ) :
140 QDialog( parent, name, true ) 138 QDialog( parent, name, true )
141 { 139 {
142 setCaption( i18n("Beam Options") ); 140 setCaption( i18n("Beam Options") );
143 QVBoxLayout* lay = new QVBoxLayout( this ); 141 QVBoxLayout* lay = new QVBoxLayout( this );
144 lay->setSpacing( 3 ); 142 lay->setSpacing( 3 );
145 lay->setMargin( 3 ); 143 lay->setMargin( 3 );
146 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("File format"), this ); 144 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("File format"), this );
147 lay->addWidget( format ); 145 lay->addWidget( format );
148 format->setExclusive ( true ) ; 146 format->setExclusive ( true ) ;
149 QButtonGroup* time = new QButtonGroup(1, Horizontal, i18n("Time format"), this ); 147 QButtonGroup* time = new QButtonGroup(1, Horizontal, i18n("Time format"), this );
150 lay->addWidget( time ); time->setExclusive ( true ) ; 148 lay->addWidget( time ); time->setExclusive ( true ) ;
151 vcal = new QRadioButton(" vCalendar ", format ); 149 vcal = new QRadioButton(" vCalendar ", format );
152 ical = new QRadioButton(" iCalendar ", format ); 150 ical = new QRadioButton(" iCalendar ", format );
153 vcal->setChecked( true ); 151 vcal->setChecked( true );
154 tz = new QRadioButton(i18n(" With timezone "), time ); 152 tz = new QRadioButton(i18n(" With timezone "), time );
155 local = new QRadioButton(i18n(" Local time "), time ); 153 local = new QRadioButton(i18n(" Local time "), time );
156 tz->setChecked( true ); 154 tz->setChecked( true );
157 QPushButton * ok = new QPushButton( i18n("Beam via IR!"), this ); 155 QPushButton * ok = new QPushButton( i18n("Beam via IR!"), this );
158 lay->addWidget( ok ); 156 lay->addWidget( ok );
159 QPushButton * cancel = new QPushButton( i18n("Cancel"), this ); 157 QPushButton * cancel = new QPushButton( i18n("Cancel"), this );
160 lay->addWidget( cancel ); 158 lay->addWidget( cancel );
161 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) ); 159 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) );
162 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) ); 160 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) );
163 resize( 200, 200 ); 161 resize( 200, 200 );
164 } 162 }
165 163
166 bool beamVcal() { return vcal->isChecked(); } 164 bool beamVcal() { return vcal->isChecked(); }
167 bool beamLocal() { return local->isChecked(); } 165 bool beamLocal() { return local->isChecked(); }
168private: 166private:
169 QRadioButton* vcal, *ical, *local, *tz; 167 QRadioButton* vcal, *ical, *local, *tz;
170}; 168};
171class KOCatPrefs : public QDialog 169class KOCatPrefs : public QDialog
172{ 170{
173 public: 171 public:
174 KOCatPrefs( QWidget *parent=0, const char *name=0 ) : 172 KOCatPrefs( QWidget *parent=0, const char *name=0 ) :
175 QDialog( parent, name, true ) 173 QDialog( parent, name, true )
176 { 174 {
177 setCaption( i18n("Manage new Categories") ); 175 setCaption( i18n("Manage new Categories") );
178 QVBoxLayout* lay = new QVBoxLayout( this ); 176 QVBoxLayout* lay = new QVBoxLayout( this );
179 lay->setSpacing( 3 ); 177 lay->setSpacing( 3 );
180 lay->setMargin( 3 ); 178 lay->setMargin( 3 );
181 QLabel * lab = new QLabel( i18n("After importing/loading/syncing\nthere may be new categories in\nevents or todos\nwhich are not in the category list.\nPlease choose what to do:\n "), this ); 179 QLabel * lab = new QLabel( i18n("After importing/loading/syncing\nthere may be new categories in\nevents or todos\nwhich are not in the category list.\nPlease choose what to do:\n "), this );
182 lay->addWidget( lab ); 180 lay->addWidget( lab );
183 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("New categories not in list:"), this ); 181 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("New categories not in list:"), this );
184 lay->addWidget( format ); 182 lay->addWidget( format );
185 format->setExclusive ( true ) ; 183 format->setExclusive ( true ) ;
186 addCatBut = new QRadioButton(i18n("Add to category list"), format ); 184 addCatBut = new QRadioButton(i18n("Add to category list"), format );
187 new QRadioButton(i18n("Remove from Events/Todos"), format ); 185 new QRadioButton(i18n("Remove from Events/Todos"), format );
188 addCatBut->setChecked( true ); 186 addCatBut->setChecked( true );
189 QPushButton * ok = new QPushButton( i18n("OK"), this ); 187 QPushButton * ok = new QPushButton( i18n("OK"), this );
190 lay->addWidget( ok ); 188 lay->addWidget( ok );
191 QPushButton * cancel = new QPushButton( i18n("Cancel"), this ); 189 QPushButton * cancel = new QPushButton( i18n("Cancel"), this );
192 lay->addWidget( cancel ); 190 lay->addWidget( cancel );
193 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) ); 191 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) );
194 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) ); 192 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) );
195 resize( 200, 200 ); 193 resize( 200, 200 );
196 } 194 }
197 195
198 bool addCat() { return addCatBut->isChecked(); } 196 bool addCat() { return addCatBut->isChecked(); }
199private: 197private:
200 QRadioButton* addCatBut; 198 QRadioButton* addCatBut;
201}; 199};
202 200
203 201
204 202
205CalendarView::CalendarView( CalendarResources *calendar, 203CalendarView::CalendarView( CalendarResources *calendar,
206 QWidget *parent, const char *name ) 204 QWidget *parent, const char *name )
207 : CalendarViewBase( parent, name ), 205 : CalendarViewBase( parent, name ),
208 mCalendar( calendar ), 206 mCalendar( calendar ),
209 mResourceManager( calendar->resourceManager() ) 207 mResourceManager( calendar->resourceManager() )
210{ 208{
211 209
212 mEventEditor = 0; 210 mEventEditor = 0;
213 mTodoEditor = 0; 211 mTodoEditor = 0;
214 212
215 init(); 213 init();
216} 214}
217 215
218CalendarView::CalendarView( Calendar *calendar, 216CalendarView::CalendarView( Calendar *calendar,
219 QWidget *parent, const char *name ) 217 QWidget *parent, const char *name )
220 : CalendarViewBase( parent, name ), 218 : CalendarViewBase( parent, name ),
221 mCalendar( calendar ), 219 mCalendar( calendar ),
222 mResourceManager( 0 ) 220 mResourceManager( 0 )
223{ 221{
224 222
225 mEventEditor = 0; 223 mEventEditor = 0;
226 mTodoEditor = 0; 224 mTodoEditor = 0;
227 init();} 225 init();}
228 226
229void CalendarView::init() 227void CalendarView::init()
230{ 228{
231 beamDialog = new KOBeamPrefs(); 229 beamDialog = new KOBeamPrefs();
232 mDatePickerMode = 0; 230 mDatePickerMode = 0;
233 mCurrentSyncDevice = ""; 231 mCurrentSyncDevice = "";
234 writeLocale(); 232 writeLocale();
235 mViewManager = new KOViewManager( this ); 233 mViewManager = new KOViewManager( this );
236 mDialogManager = new KODialogManager( this ); 234 mDialogManager = new KODialogManager( this );
237 mEventViewerDialog = 0; 235 mEventViewerDialog = 0;
238 mModified = false; 236 mModified = false;
239 mReadOnly = false; 237 mReadOnly = false;
240 mSelectedIncidence = 0; 238 mSelectedIncidence = 0;
241 mSyncProfiles.setAutoDelete(true); 239 mSyncProfiles.setAutoDelete(true);
242 mCalPrinter = 0; 240 mCalPrinter = 0;
243 mFilters.setAutoDelete(true); 241 mFilters.setAutoDelete(true);
244 242
245 mCalendar->registerObserver( this ); 243 mCalendar->registerObserver( this );
246 // TODO: Make sure that view is updated, when calendar is changed. 244 // TODO: Make sure that view is updated, when calendar is changed.
247 245
248 mStorage = new FileStorage( mCalendar ); 246 mStorage = new FileStorage( mCalendar );
249 mNavigator = new DateNavigator( this, "datevav", mViewManager ); 247 mNavigator = new DateNavigator( this, "datevav", mViewManager );
250 248
251 QBoxLayout *topLayout = (QBoxLayout*)layout(); 249 QBoxLayout *topLayout = (QBoxLayout*)layout();
252#ifndef KORG_NOSPLITTER 250#ifndef KORG_NOSPLITTER
253 // create the main layout frames. 251 // create the main layout frames.
254 mPanner = new QSplitter(QSplitter::Horizontal,this,"CalendarView::Panner"); 252 mPanner = new QSplitter(QSplitter::Horizontal,this,"CalendarView::Panner");
255 topLayout->addWidget(mPanner); 253 topLayout->addWidget(mPanner);
256 254
257 mLeftSplitter = new QSplitter(QSplitter::Vertical,mPanner, 255 mLeftSplitter = new QSplitter(QSplitter::Vertical,mPanner,
258 "CalendarView::LeftFrame"); 256 "CalendarView::LeftFrame");
259 mPanner->setResizeMode(mLeftSplitter,QSplitter::KeepSize); 257 mPanner->setResizeMode(mLeftSplitter,QSplitter::KeepSize);
260 258
261 mDateNavigator = new KDateNavigator(mLeftSplitter, mCalendar, TRUE, 259 mDateNavigator = new KDateNavigator(mLeftSplitter, mCalendar, TRUE,
262 "CalendarView::DateNavigator", QDate::currentDate() ); 260 "CalendarView::DateNavigator", QDate::currentDate() );
263 mLeftSplitter->setResizeMode(mDateNavigator,QSplitter::KeepSize); 261 mLeftSplitter->setResizeMode(mDateNavigator,QSplitter::KeepSize);
264 mTodoList = new KOTodoView(mCalendar, mLeftSplitter, "todolist_small2"); 262 mTodoList = new KOTodoView(mCalendar, mLeftSplitter, "todolist_small2");
265 mFilterView = new KOFilterView(&mFilters,mLeftSplitter,"CalendarView::FilterView"); 263 mFilterView = new KOFilterView(&mFilters,mLeftSplitter,"CalendarView::FilterView");
266 264
267#ifdef KORG_NORESOURCEVIEW 265#ifdef KORG_NORESOURCEVIEW
268 mResourceView = 0; 266 mResourceView = 0;
269#else 267#else
270 if ( mResourceManager ) { 268 if ( mResourceManager ) {
271 mResourceView = new ResourceView( mResourceManager, mLeftSplitter ); 269 mResourceView = new ResourceView( mResourceManager, mLeftSplitter );
272 mResourceView->updateView(); 270 mResourceView->updateView();
273 connect( mResourceView, SIGNAL( resourcesChanged() ), 271 connect( mResourceView, SIGNAL( resourcesChanged() ),
274 SLOT( updateView() ) ); 272 SLOT( updateView() ) );
275 } else { 273 } else {
276 mResourceView = 0; 274 mResourceView = 0;
277 } 275 }
278#endif 276#endif
279 QWidget *rightBox = new QWidget( mPanner ); 277 QWidget *rightBox = new QWidget( mPanner );
280 QBoxLayout *rightLayout = new QVBoxLayout( rightBox ); 278 QBoxLayout *rightLayout = new QVBoxLayout( rightBox );
281 279
282 mNavigatorBar = new NavigatorBar( QDate::currentDate(), rightBox, "useBigPixmaps" ); 280 mNavigatorBar = new NavigatorBar( QDate::currentDate(), rightBox, "useBigPixmaps" );
283 rightLayout->addWidget( mNavigatorBar ); 281 rightLayout->addWidget( mNavigatorBar );
284 282
285 mRightFrame = new QWidgetStack( rightBox ); 283 mRightFrame = new QWidgetStack( rightBox );
286 rightLayout->addWidget( mRightFrame, 1 ); 284 rightLayout->addWidget( mRightFrame, 1 );
287 285
288 mLeftFrame = mLeftSplitter; 286 mLeftFrame = mLeftSplitter;
289#else 287#else
290 QWidget *mainBox = new QWidget( this ); 288 QWidget *mainBox = new QWidget( this );
291 QWidget *leftFrame = new QWidget( mainBox ); 289 QWidget *leftFrame = new QWidget( mainBox );
292 290
293 QBoxLayout * mainBoxLayout; 291 QBoxLayout * mainBoxLayout;
294 QBoxLayout * leftFrameLayout; 292 QBoxLayout * leftFrameLayout;
295 if ( KOPrefs::instance()->mVerticalScreen ) { 293 if ( KOPrefs::instance()->mVerticalScreen ) {
296 mainBoxLayout = new QVBoxLayout(mainBox); 294 mainBoxLayout = new QVBoxLayout(mainBox);
297 leftFrameLayout = new QHBoxLayout(leftFrame ); 295 leftFrameLayout = new QHBoxLayout(leftFrame );
298 } else { 296 } else {
299 mainBoxLayout = new QHBoxLayout(mainBox); 297 mainBoxLayout = new QHBoxLayout(mainBox);
300 leftFrameLayout = new QVBoxLayout(leftFrame ); 298 leftFrameLayout = new QVBoxLayout(leftFrame );
301 } 299 }
302 topLayout->addWidget( mainBox ); 300 topLayout->addWidget( mainBox );
303 mainBoxLayout->addWidget (leftFrame); 301 mainBoxLayout->addWidget (leftFrame);
304 mDateNavigator = new KDateNavigator(leftFrame, mCalendar, TRUE, 302 mDateNavigator = new KDateNavigator(leftFrame, mCalendar, TRUE,
305 "CalendarView::DateNavigator", QDate::currentDate()); 303 "CalendarView::DateNavigator", QDate::currentDate());
306 // mDateNavigator->blockSignals( true ); 304 // mDateNavigator->blockSignals( true );
307 leftFrameLayout->addWidget( mDateNavigator ); 305 leftFrameLayout->addWidget( mDateNavigator );
308 mFilterView = new KOFilterView(&mFilters,leftFrame,"CalendarView::FilterView"); 306 mFilterView = new KOFilterView(&mFilters,leftFrame,"CalendarView::FilterView");
309 mTodoList = new KOTodoView(mCalendar, leftFrame, "todolist"); 307 mTodoList = new KOTodoView(mCalendar, leftFrame, "todolist");
310 308
311 if ( QApplication::desktop()->width() < 480 ) { 309 if ( QApplication::desktop()->width() < 480 ) {
312 leftFrameLayout->addWidget(mFilterView); 310 leftFrameLayout->addWidget(mFilterView);
313 leftFrameLayout->addWidget(mTodoList, 2 ); 311 leftFrameLayout->addWidget(mTodoList, 2 );
314 312
315 } else { 313 } else {
316 leftFrameLayout->addWidget(mTodoList,2 ); 314 leftFrameLayout->addWidget(mTodoList,2 );
317 leftFrameLayout->addWidget(mFilterView ); 315 leftFrameLayout->addWidget(mFilterView );
318 } 316 }
319 mFilterView->hide(); 317 mFilterView->hide();
320 QWidget *rightBox = new QWidget( mainBox ); 318 QWidget *rightBox = new QWidget( mainBox );
321 mainBoxLayout->addWidget ( rightBox, 10 ); 319 mainBoxLayout->addWidget ( rightBox, 10 );
322 QBoxLayout *rightLayout = new QVBoxLayout( rightBox ); 320 QBoxLayout *rightLayout = new QVBoxLayout( rightBox );
323 mNavigatorBar = new NavigatorBar( QDate::currentDate(), rightBox, "useBigPixmaps" ); 321 mNavigatorBar = new NavigatorBar( QDate::currentDate(), rightBox, "useBigPixmaps" );
324 mRightFrame = new QWidgetStack( rightBox ); 322 mRightFrame = new QWidgetStack( rightBox );
325 rightLayout->addWidget( mNavigatorBar ); 323 rightLayout->addWidget( mNavigatorBar );
326 rightLayout->addWidget( mRightFrame, 10 ); 324 rightLayout->addWidget( mRightFrame, 10 );
327 325
328 mLeftFrame = leftFrame; 326 mLeftFrame = leftFrame;
329 if ( KOPrefs::instance()->mVerticalScreen ) { 327 if ( KOPrefs::instance()->mVerticalScreen ) {
330 mTodoList->setFixedHeight( mDateNavigator->sizeHint().height() ); 328 mTodoList->setFixedHeight( mDateNavigator->sizeHint().height() );
331 leftFrame->setFixedHeight( mDateNavigator->sizeHint().height() ); 329 leftFrame->setFixedHeight( mDateNavigator->sizeHint().height() );
332 } else { 330 } else {
333 mTodoList->setFixedWidth( mDateNavigator->sizeHint().width() ); 331 mTodoList->setFixedWidth( mDateNavigator->sizeHint().width() );
334 leftFrame->setFixedWidth( mDateNavigator->sizeHint().width() ); 332 leftFrame->setFixedWidth( mDateNavigator->sizeHint().width() );
335 } 333 }
336 334
337 //qDebug("Calendarview Size %d %d ", width(), height()); 335 //qDebug("Calendarview Size %d %d ", width(), height());
338#endif 336#endif
339 337
340 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 338 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
341 SLOT( showDates( const KCal::DateList & ) ) ); 339 SLOT( showDates( const KCal::DateList & ) ) );
342 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 340 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
343 mDateNavigator, SLOT( selectDates( const KCal::DateList & ) ) ); 341 mDateNavigator, SLOT( selectDates( const KCal::DateList & ) ) );
344 342
345 connect( mNavigatorBar, SIGNAL( goPrevYear() ), 343 connect( mNavigatorBar, SIGNAL( goPrevYear() ),
346 mNavigator, SLOT( selectPreviousYear() ) ); 344 mNavigator, SLOT( selectPreviousYear() ) );
347 connect( mNavigatorBar, SIGNAL( goNextYear() ), 345 connect( mNavigatorBar, SIGNAL( goNextYear() ),
348 mNavigator, SLOT( selectNextYear() ) ); 346 mNavigator, SLOT( selectNextYear() ) );
349 connect( mNavigatorBar, SIGNAL( goPrevMonth() ), 347 connect( mNavigatorBar, SIGNAL( goPrevMonth() ),
350 mNavigator, SLOT( selectPreviousMonth() ) ); 348 mNavigator, SLOT( selectPreviousMonth() ) );
351 connect( mNavigatorBar, SIGNAL( goNextMonth() ), 349 connect( mNavigatorBar, SIGNAL( goNextMonth() ),
352 mNavigator, SLOT( selectNextMonth() ) ); 350 mNavigator, SLOT( selectNextMonth() ) );
353 351
354 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 352 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
355 mNavigatorBar, SLOT( selectDates( const KCal::DateList & ) ) ); 353 mNavigatorBar, SLOT( selectDates( const KCal::DateList & ) ) );
356 354
357 connect( mDateNavigator, SIGNAL( weekClicked( const QDate & ) ), 355 connect( mDateNavigator, SIGNAL( weekClicked( const QDate & ) ),
358 mNavigator, SLOT( selectWeek( const QDate & ) ) ); 356 mNavigator, SLOT( selectWeek( const QDate & ) ) );
359 357
360 connect( mDateNavigator, SIGNAL( goPrevYear() ), 358 connect( mDateNavigator, SIGNAL( goPrevYear() ),
361 mNavigator, SLOT( selectPreviousYear() ) ); 359 mNavigator, SLOT( selectPreviousYear() ) );
362 connect( mDateNavigator, SIGNAL( goNextYear() ), 360 connect( mDateNavigator, SIGNAL( goNextYear() ),
363 mNavigator, SLOT( selectNextYear() ) ); 361 mNavigator, SLOT( selectNextYear() ) );
364 connect( mDateNavigator, SIGNAL( goPrevMonth() ), 362 connect( mDateNavigator, SIGNAL( goPrevMonth() ),
365 mNavigator, SLOT( selectPreviousMonth() ) ); 363 mNavigator, SLOT( selectPreviousMonth() ) );
366 connect( mDateNavigator, SIGNAL( goNextMonth() ), 364 connect( mDateNavigator, SIGNAL( goNextMonth() ),
367 mNavigator, SLOT( selectNextMonth() ) ); 365 mNavigator, SLOT( selectNextMonth() ) );
368 366
369 connect( mDateNavigator, SIGNAL( goPrevious() ), 367 connect( mDateNavigator, SIGNAL( goPrevious() ),
370 mNavigator, SLOT( selectPrevious() ) ); 368 mNavigator, SLOT( selectPrevious() ) );
371 connect( mDateNavigator, SIGNAL( goNext() ), 369 connect( mDateNavigator, SIGNAL( goNext() ),
372 mNavigator, SLOT( selectNext() ) ); 370 mNavigator, SLOT( selectNext() ) );
373 connect( mDateNavigator, SIGNAL( monthSelected ( int ) ), 371 connect( mDateNavigator, SIGNAL( monthSelected ( int ) ),
374 mNavigator, SLOT( slotMonthSelect( int ) ) ); 372 mNavigator, SLOT( slotMonthSelect( int ) ) );
375 connect( mNavigatorBar, SIGNAL( monthSelected ( int ) ), 373 connect( mNavigatorBar, SIGNAL( monthSelected ( int ) ),
376 mNavigator, SLOT( slotMonthSelect( int ) ) ); 374 mNavigator, SLOT( slotMonthSelect( int ) ) );
377 375
378 connect( mDateNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 376 connect( mDateNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
379 mNavigator, SLOT( selectDates( const KCal::DateList & ) ) ); 377 mNavigator, SLOT( selectDates( const KCal::DateList & ) ) );
380 378
381 connect( mDateNavigator, SIGNAL( eventDropped( Event * ) ), 379 connect( mDateNavigator, SIGNAL( eventDropped( Event * ) ),
382 SLOT( eventAdded( Event *) ) ); 380 SLOT( eventAdded( Event *) ) );
383 381
384 connect(mDateNavigator,SIGNAL(dayPassed(QDate)),SLOT(updateView())); 382 connect(mDateNavigator,SIGNAL(dayPassed(QDate)),SLOT(updateView()));
385 383
386 connect( this, SIGNAL( configChanged() ), 384 connect( this, SIGNAL( configChanged() ),
387 mDateNavigator, SLOT( updateConfig() ) ); 385 mDateNavigator, SLOT( updateConfig() ) );
388 386
389 connect( mTodoList, SIGNAL( newTodoSignal() ), 387 connect( mTodoList, SIGNAL( newTodoSignal() ),
390 SLOT( newTodo() ) ); 388 SLOT( newTodo() ) );
391 connect( mTodoList, SIGNAL( newSubTodoSignal( Todo *) ), 389 connect( mTodoList, SIGNAL( newSubTodoSignal( Todo *) ),
392 SLOT( newSubTodo( Todo * ) ) ); 390 SLOT( newSubTodo( Todo * ) ) );
393 connect( mTodoList, SIGNAL( editTodoSignal( Todo * ) ), 391 connect( mTodoList, SIGNAL( editTodoSignal( Todo * ) ),
394 SLOT( editTodo( Todo * ) ) ); 392 SLOT( editTodo( Todo * ) ) );
395 connect( mTodoList, SIGNAL( showTodoSignal( Todo * ) ), 393 connect( mTodoList, SIGNAL( showTodoSignal( Todo * ) ),
396 SLOT( showTodo( Todo *) ) ); 394 SLOT( showTodo( Todo *) ) );
397 connect( mTodoList, SIGNAL( deleteTodoSignal( Todo *) ), 395 connect( mTodoList, SIGNAL( deleteTodoSignal( Todo *) ),
398 SLOT( deleteTodo( Todo *) ) ); 396 SLOT( deleteTodo( Todo *) ) );
399 connect( this, SIGNAL( configChanged()), mTodoList, SLOT( updateConfig() ) ); 397 connect( this, SIGNAL( configChanged()), mTodoList, SLOT( updateConfig() ) );
400 connect( mTodoList, SIGNAL( purgeCompletedSignal() ), 398 connect( mTodoList, SIGNAL( purgeCompletedSignal() ),
401 SLOT( purgeCompleted() ) ); 399 SLOT( purgeCompleted() ) );
402 connect( mTodoList, SIGNAL( todoModifiedSignal( Todo *, int ) ), 400 connect( mTodoList, SIGNAL( todoModifiedSignal( Todo *, int ) ),
403 SIGNAL( todoModified( Todo *, int ) ) ); 401 SIGNAL( todoModified( Todo *, int ) ) );
404 402
405 connect( mTodoList, SIGNAL( cloneTodoSignal( Incidence * ) ), 403 connect( mTodoList, SIGNAL( cloneTodoSignal( Incidence * ) ),
406 this, SLOT ( cloneIncidence( Incidence * ) ) ); 404 this, SLOT ( cloneIncidence( Incidence * ) ) );
407 connect( mTodoList, SIGNAL( cancelTodoSignal( Incidence * ) ), 405 connect( mTodoList, SIGNAL( cancelTodoSignal( Incidence * ) ),
408 this, SLOT (cancelIncidence( Incidence * ) ) ); 406 this, SLOT (cancelIncidence( Incidence * ) ) );
409 407
410 connect( mTodoList, SIGNAL( moveTodoSignal( Incidence * ) ), 408 connect( mTodoList, SIGNAL( moveTodoSignal( Incidence * ) ),
411 this, SLOT ( moveIncidence( Incidence * ) ) ); 409 this, SLOT ( moveIncidence( Incidence * ) ) );
412 connect( mTodoList, SIGNAL( beamTodoSignal( Incidence * ) ), 410 connect( mTodoList, SIGNAL( beamTodoSignal( Incidence * ) ),
413 this, SLOT ( beamIncidence( Incidence * ) ) ); 411 this, SLOT ( beamIncidence( Incidence * ) ) );
414 412
415 connect( mTodoList, SIGNAL( unparentTodoSignal( Todo * ) ), 413 connect( mTodoList, SIGNAL( unparentTodoSignal( Todo * ) ),
416 this, SLOT ( todo_unsub( Todo * ) ) ); 414 this, SLOT ( todo_unsub( Todo * ) ) );
417 415
418 connect( this, SIGNAL( todoModified( Todo *, int )), mTodoList, 416 connect( this, SIGNAL( todoModified( Todo *, int )), mTodoList,
419 SLOT( updateTodo( Todo *, int ) ) ); 417 SLOT( updateTodo( Todo *, int ) ) );
420 connect( this, SIGNAL( todoModified( Todo *, int )), this, 418 connect( this, SIGNAL( todoModified( Todo *, int )), this,
421 SLOT( changeTodoDisplay( Todo *, int ) ) ); 419 SLOT( changeTodoDisplay( Todo *, int ) ) );
422 420
423 421
424 connect( mFilterView, SIGNAL( filterChanged() ), SLOT( updateFilter() ) ); 422 connect( mFilterView, SIGNAL( filterChanged() ), SLOT( updateFilter() ) );
425 connect( mFilterView, SIGNAL( editFilters() ), SLOT( editFilters() ) ); 423 connect( mFilterView, SIGNAL( editFilters() ), SLOT( editFilters() ) );
426 connect( mCalendar, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addAlarm(const QDateTime &, const QString & ) ) ); 424 connect( mCalendar, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addAlarm(const QDateTime &, const QString & ) ) );
427 connect( mCalendar, SIGNAL( removeAlarm(const QDateTime &, const QString & ) ), SLOT( removeAlarm(const QDateTime &, const QString & ) ) ); 425 connect( mCalendar, SIGNAL( removeAlarm(const QDateTime &, const QString & ) ), SLOT( removeAlarm(const QDateTime &, const QString & ) ) );
428 426
429 427
430 428
431 429
432 430
433 connect(QApplication::clipboard(),SIGNAL(dataChanged()), 431 connect(QApplication::clipboard(),SIGNAL(dataChanged()),
434 SLOT(checkClipboard())); 432 SLOT(checkClipboard()));
435 connect( mTodoList,SIGNAL( incidenceSelected( Incidence * ) ), 433 connect( mTodoList,SIGNAL( incidenceSelected( Incidence * ) ),
436 SLOT( processTodoListSelection( Incidence * ) ) ); 434 SLOT( processTodoListSelection( Incidence * ) ) );
437 connect(mTodoList,SIGNAL(isModified(bool)),SLOT(setModified(bool))); 435 connect(mTodoList,SIGNAL(isModified(bool)),SLOT(setModified(bool)));
438 436
439 // kdDebug() << "CalendarView::CalendarView() done" << endl; 437 // kdDebug() << "CalendarView::CalendarView() done" << endl;
440 438
441 mDateFrame = new QVBox(0,0,WType_Popup); 439 mDateFrame = new QVBox(0,0,WType_Popup);
442 //mDateFrame->setFrameStyle(QFrame::PopupPanel | QFrame::Raised); 440 //mDateFrame->setFrameStyle(QFrame::PopupPanel | QFrame::Raised);
443 mDateFrame->setFrameStyle( QFrame::WinPanel |QFrame::Raised ); 441 mDateFrame->setFrameStyle( QFrame::WinPanel |QFrame::Raised );
444 mDateFrame->setLineWidth(3); 442 mDateFrame->setLineWidth(3);
445 mDateFrame->hide(); 443 mDateFrame->hide();
446 mDateFrame->setCaption( i18n( "Pick a date to display")); 444 mDateFrame->setCaption( i18n( "Pick a date to display"));
447 mDatePicker = new KDatePicker ( mDateFrame , QDate::currentDate() ); 445 mDatePicker = new KDatePicker ( mDateFrame , QDate::currentDate() );
448 446
449 connect(mDatePicker,SIGNAL(dateSelected(QDate)),SLOT(slotSelectPickerDate(QDate))); 447 connect(mDatePicker,SIGNAL(dateSelected(QDate)),SLOT(slotSelectPickerDate(QDate)));
450 448
451 mEventEditor = mDialogManager->getEventEditor(); 449 mEventEditor = mDialogManager->getEventEditor();
452 mTodoEditor = mDialogManager->getTodoEditor(); 450 mTodoEditor = mDialogManager->getTodoEditor();
453 451
454 mFlagEditDescription = false; 452 mFlagEditDescription = false;
455 453
456 mSuspendTimer = new QTimer( this ); 454 mSuspendTimer = new QTimer( this );
457 mAlarmTimer = new QTimer( this ); 455 mAlarmTimer = new QTimer( this );
458 mRecheckAlarmTimer = new QTimer( this ); 456 mRecheckAlarmTimer = new QTimer( this );
459 connect( mRecheckAlarmTimer, SIGNAL( timeout () ), SLOT( recheckTimerAlarm() ) ); 457 connect( mRecheckAlarmTimer, SIGNAL( timeout () ), SLOT( recheckTimerAlarm() ) );
460 connect( mSuspendTimer, SIGNAL( timeout () ), SLOT( suspendAlarm() ) ); 458 connect( mSuspendTimer, SIGNAL( timeout () ), SLOT( suspendAlarm() ) );
461 connect( mAlarmTimer, SIGNAL( timeout () ), SLOT( timerAlarm() ) ); 459 connect( mAlarmTimer, SIGNAL( timeout () ), SLOT( timerAlarm() ) );
462 mAlarmDialog = new AlarmDialog( this ); 460 mAlarmDialog = new AlarmDialog( this );
463 connect( mAlarmDialog, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addSuspendAlarm(const QDateTime &, const QString & ) ) ); 461 connect( mAlarmDialog, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addSuspendAlarm(const QDateTime &, const QString & ) ) );
464 mAlarmDialog->setServerNotification( false ); 462 mAlarmDialog->setServerNotification( false );
465 mAlarmDialog->setSuspendTime( KOPrefs::instance()->mAlarmSuspendTime ); 463 mAlarmDialog->setSuspendTime( KOPrefs::instance()->mAlarmSuspendTime );
466} 464}
467 465
468 466
469CalendarView::~CalendarView() 467CalendarView::~CalendarView()
470{ 468{
471 // kdDebug() << "~CalendarView()" << endl; 469 // kdDebug() << "~CalendarView()" << endl;
472 //qDebug("CalendarView::~CalendarView() "); 470 //qDebug("CalendarView::~CalendarView() ");
473 delete mDialogManager; 471 delete mDialogManager;
474 delete mViewManager; 472 delete mViewManager;
475 delete mStorage; 473 delete mStorage;
476 delete mDateFrame ; 474 delete mDateFrame ;
477 delete beamDialog; 475 delete beamDialog;
478 //kdDebug() << "~CalendarView() done" << endl; 476 //kdDebug() << "~CalendarView() done" << endl;
479} 477}
480void CalendarView::timerAlarm() 478void CalendarView::timerAlarm()
481{ 479{
482 //qDebug("CalendarView::timerAlarm() "); 480 //qDebug("CalendarView::timerAlarm() ");
483 computeAlarm(mAlarmNotification ); 481 computeAlarm(mAlarmNotification );
484} 482}
485 483
486void CalendarView::suspendAlarm() 484void CalendarView::suspendAlarm()
487{ 485{
488 //qDebug(" CalendarView::suspendAlarm() "); 486 //qDebug(" CalendarView::suspendAlarm() ");
489 computeAlarm(mSuspendAlarmNotification ); 487 computeAlarm(mSuspendAlarmNotification );
490 488
491} 489}
492 490
493void CalendarView::startAlarm( QString mess , QString filename) 491void CalendarView::startAlarm( QString mess , QString filename)
494{ 492{
495 mAlarmDialog->eventNotification( mess, KOPrefs::instance()->mAlarmPlayBeeps, filename, true,KOPrefs::instance()->mAlarmBeepInterval ,KOPrefs::instance()->mAlarmSuspendCount ); 493 mAlarmDialog->eventNotification( mess, KOPrefs::instance()->mAlarmPlayBeeps, filename, true,KOPrefs::instance()->mAlarmBeepInterval ,KOPrefs::instance()->mAlarmSuspendCount );
496 QTimer::singleShot( 3000, this, SLOT( checkNextTimerAlarm() ) ); 494 QTimer::singleShot( 3000, this, SLOT( checkNextTimerAlarm() ) );
497 495
498} 496}
499 497
500void CalendarView::checkNextTimerAlarm() 498void CalendarView::checkNextTimerAlarm()
501{ 499{
502 mCalendar->checkAlarmForIncidence( 0, true ); 500 mCalendar->checkAlarmForIncidence( 0, true );
503} 501}
504 502
505void CalendarView::computeAlarm( QString msg ) 503void CalendarView::computeAlarm( QString msg )
506{ 504{
507 505
508 QString mess = msg; 506 QString mess = msg;
509 QString mAlarmMessage = mess.mid( 9 ); 507 QString mAlarmMessage = mess.mid( 9 );
510 QString filename = MainWindow::resourcePath(); 508 QString filename = MainWindow::resourcePath();
511 filename += "koalarm.wav"; 509 filename += "koalarm.wav";
512 QString tempfilename; 510 QString tempfilename;
513 if ( mess.left( 13 ) == "suspend_alarm") { 511 if ( mess.left( 13 ) == "suspend_alarm") {
514 bool error = false; 512 bool error = false;
515 int len = mess.mid( 13 ).find("+++"); 513 int len = mess.mid( 13 ).find("+++");
516 if ( len < 2 ) 514 if ( len < 2 )
517 error = true; 515 error = true;
518 else { 516 else {
519 tempfilename = mess.mid( 13, len ); 517 tempfilename = mess.mid( 13, len );
520 if ( !QFile::exists( tempfilename ) ) 518 if ( !QFile::exists( tempfilename ) )
521 error = true; 519 error = true;
522 } 520 }
523 if ( ! error ) { 521 if ( ! error ) {
524 filename = tempfilename; 522 filename = tempfilename;
525 } 523 }
526 mAlarmMessage = mess.mid( 13+len+3 ); 524 mAlarmMessage = mess.mid( 13+len+3 );
527 //qDebug("suspend file %s ",tempfilename.latin1() ); 525 //qDebug("suspend file %s ",tempfilename.latin1() );
528 startAlarm( mAlarmMessage, filename); 526 startAlarm( mAlarmMessage, filename);
529 return; 527 return;
530 } 528 }
531 if ( mess.left( 11 ) == "timer_alarm") { 529 if ( mess.left( 11 ) == "timer_alarm") {
532 //mTimerTime = 0; 530 //mTimerTime = 0;
533 startAlarm( mess.mid( 11 ), filename ); 531 startAlarm( mess.mid( 11 ), filename );
534 return; 532 return;
535 } 533 }
536 if ( mess.left( 10 ) == "proc_alarm") { 534 if ( mess.left( 10 ) == "proc_alarm") {
537 bool error = false; 535 bool error = false;
538 int len = mess.mid( 10 ).find("+++"); 536 int len = mess.mid( 10 ).find("+++");
539 if ( len < 2 ) 537 if ( len < 2 )
540 error = true; 538 error = true;
541 else { 539 else {
542 tempfilename = mess.mid( 10, len ); 540 tempfilename = mess.mid( 10, len );
543 if ( !QFile::exists( tempfilename ) ) 541 if ( !QFile::exists( tempfilename ) )
544 error = true; 542 error = true;
545 } 543 }
546 if ( error ) { 544 if ( error ) {
547 mAlarmMessage = "Procedure Alarm\nError - File not found\n"; 545 mAlarmMessage = "Procedure Alarm\nError - File not found\n";
548 mAlarmMessage += mess.mid( 10+len+3+9 ); 546 mAlarmMessage += mess.mid( 10+len+3+9 );
549 } else { 547 } else {
550 //QCopEnvelope e("QPE/Application/kopi", "-writeFileSilent"); 548 //QCopEnvelope e("QPE/Application/kopi", "-writeFileSilent");
551 //qDebug("-----system command %s ",tempfilename.latin1() ); 549 //qDebug("-----system command %s ",tempfilename.latin1() );
552#ifndef _WIN32_ 550#ifndef _WIN32_
553 if ( vfork () == 0 ) { 551 if ( vfork () == 0 ) {
554 execl ( tempfilename.latin1(), 0 ); 552 execl ( tempfilename.latin1(), 0 );
555 return; 553 return;
556 } 554 }
557#else 555#else
558 QProcess* p = new QProcess(); 556 QProcess* p = new QProcess();
559 p->addArgument( tempfilename.latin1() ); 557 p->addArgument( tempfilename.latin1() );
560 p->start(); 558 p->start();
561 return; 559 return;
562#endif 560#endif
563 561
564 return; 562 return;
565 } 563 }
566 564
567 //qDebug("+++++++system command %s ",tempfilename.latin1() ); 565 //qDebug("+++++++system command %s ",tempfilename.latin1() );
568 } 566 }
569 if ( mess.left( 11 ) == "audio_alarm") { 567 if ( mess.left( 11 ) == "audio_alarm") {
570 bool error = false; 568 bool error = false;
571 int len = mess.mid( 11 ).find("+++"); 569 int len = mess.mid( 11 ).find("+++");
572 if ( len < 2 ) 570 if ( len < 2 )
573 error = true; 571 error = true;
574 else { 572 else {
575 tempfilename = mess.mid( 11, len ); 573 tempfilename = mess.mid( 11, len );
576 if ( !QFile::exists( tempfilename ) ) 574 if ( !QFile::exists( tempfilename ) )
577 error = true; 575 error = true;
578 } 576 }
579 if ( ! error ) { 577 if ( ! error ) {
580 filename = tempfilename; 578 filename = tempfilename;
581 } 579 }
582 mAlarmMessage = mess.mid( 11+len+3+9 ); 580 mAlarmMessage = mess.mid( 11+len+3+9 );
583 //qDebug("audio file command %s ",tempfilename.latin1() ); 581 //qDebug("audio file command %s ",tempfilename.latin1() );
584 } 582 }
585 if ( mess.left( 9 ) == "cal_alarm") { 583 if ( mess.left( 9 ) == "cal_alarm") {
586 mAlarmMessage = mess.mid( 9 ) ; 584 mAlarmMessage = mess.mid( 9 ) ;
587 } 585 }
588 586
589 startAlarm( mAlarmMessage, filename ); 587 startAlarm( mAlarmMessage, filename );
590 588
591 589
592} 590}
593 591
594void CalendarView::addSuspendAlarm(const QDateTime &qdt, const QString &noti ) 592void CalendarView::addSuspendAlarm(const QDateTime &qdt, const QString &noti )
595{ 593{
596 //qDebug("+++++addSUSPENDAlarm %s %s ", qdt.toString().latin1() , noti.latin1() ); 594 //qDebug("+++++addSUSPENDAlarm %s %s ", qdt.toString().latin1() , noti.latin1() );
597 595
598 mSuspendAlarmNotification = noti; 596 mSuspendAlarmNotification = noti;
599 int ms = QDateTime::currentDateTime().secsTo( qdt )*1000; 597 int ms = QDateTime::currentDateTime().secsTo( qdt )*1000;
600 //qDebug("Suspend Alarm timer started with secs: %d ", ms/1000); 598 //qDebug("Suspend Alarm timer started with secs: %d ", ms/1000);
601 mSuspendTimer->start( ms , true ); 599 mSuspendTimer->start( ms , true );
602 600
603} 601}
604 602
605void CalendarView::addAlarm(const QDateTime &qdt, const QString &noti ) 603void CalendarView::addAlarm(const QDateTime &qdt, const QString &noti )
606{ 604{
607 //qDebug("+++++addAlarm %s %s ", qdt.toString().latin1() , noti.latin1() ); 605 //qDebug("+++++addAlarm %s %s ", qdt.toString().latin1() , noti.latin1() );
608 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) { 606 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) {
609#ifndef DESKTOP_VERSION 607#ifndef DESKTOP_VERSION
610 AlarmServer::addAlarm ( qdt,"koalarm", noti.latin1() ); 608 AlarmServer::addAlarm ( qdt,"koalarm", noti.latin1() );
611#endif 609#endif
612 return; 610 return;
613 } 611 }
614 int maxSec; 612 int maxSec;
615 //maxSec = 5; //testing only 613 //maxSec = 5; //testing only
616 maxSec = 86400+3600; // one day+1hour 614 maxSec = 86400+3600; // one day+1hour
617 mAlarmNotification = noti; 615 mAlarmNotification = noti;
618 int sec = QDateTime::currentDateTime().secsTo( qdt ); 616 int sec = QDateTime::currentDateTime().secsTo( qdt );
619 if ( sec > maxSec ) { 617 if ( sec > maxSec ) {
620 mRecheckAlarmTimer->start( maxSec * 1000 ); 618 mRecheckAlarmTimer->start( maxSec * 1000 );
621 // qDebug("recheck Alarm timer started with secs: %d next alarm in sec:%d", maxSec,sec ); 619 // qDebug("recheck Alarm timer started with secs: %d next alarm in sec:%d", maxSec,sec );
622 return; 620 return;
623 } else { 621 } else {
624 mRecheckAlarmTimer->stop(); 622 mRecheckAlarmTimer->stop();
625 } 623 }
626 //qDebug("Alarm timer started with secs: %d ", sec); 624 //qDebug("Alarm timer started with secs: %d ", sec);
627 mAlarmTimer->start( sec *1000 , true ); 625 mAlarmTimer->start( sec *1000 , true );
628 626
629} 627}
630// called by mRecheckAlarmTimer to get next alarm 628// called by mRecheckAlarmTimer to get next alarm
631// we need this, because a QTimer has only a max range of 25 days 629// we need this, because a QTimer has only a max range of 25 days
632void CalendarView::recheckTimerAlarm() 630void CalendarView::recheckTimerAlarm()
633{ 631{
634 mAlarmTimer->stop(); 632 mAlarmTimer->stop();
635 mRecheckAlarmTimer->stop(); 633 mRecheckAlarmTimer->stop();
636 mCalendar->checkAlarmForIncidence( 0, true ); 634 mCalendar->checkAlarmForIncidence( 0, true );
637} 635}
638void CalendarView::removeAlarm(const QDateTime &qdt, const QString &noti ) 636void CalendarView::removeAlarm(const QDateTime &qdt, const QString &noti )
639{ 637{
640 //qDebug("-----removeAlarm %s %s ", qdt.toString().latin1() , noti.latin1() ); 638 //qDebug("-----removeAlarm %s %s ", qdt.toString().latin1() , noti.latin1() );
641 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) { 639 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) {
642#ifndef DESKTOP_VERSION 640#ifndef DESKTOP_VERSION
643 AlarmServer::deleteAlarm (qdt ,"koalarm" ,noti.latin1() ); 641 AlarmServer::deleteAlarm (qdt ,"koalarm" ,noti.latin1() );
644#endif 642#endif
645 return; 643 return;
646 } 644 }
647 mAlarmTimer->stop(); 645 mAlarmTimer->stop();
648} 646}
649void CalendarView::selectWeekNum ( int num ) 647void CalendarView::selectWeekNum ( int num )
650{ 648{
651 dateNavigator()->selectWeek( num ); 649 dateNavigator()->selectWeek( num );
652 mViewManager->showWeekView(); 650 mViewManager->showWeekView();
653} 651}
654KOViewManager *CalendarView::viewManager() 652KOViewManager *CalendarView::viewManager()
655{ 653{
656 return mViewManager; 654 return mViewManager;
657} 655}
658 656
659KODialogManager *CalendarView::dialogManager() 657KODialogManager *CalendarView::dialogManager()
660{ 658{
661 return mDialogManager; 659 return mDialogManager;
662} 660}
663 661
664QDate CalendarView::startDate() 662QDate CalendarView::startDate()
665{ 663{
666 DateList dates = mNavigator->selectedDates(); 664 DateList dates = mNavigator->selectedDates();
667 665
668 return dates.first(); 666 return dates.first();
669} 667}
670 668
671QDate CalendarView::endDate() 669QDate CalendarView::endDate()
672{ 670{
673 DateList dates = mNavigator->selectedDates(); 671 DateList dates = mNavigator->selectedDates();
674 672
675 return dates.last(); 673 return dates.last();
676} 674}
677 675
678 676
679void CalendarView::createPrinter() 677void CalendarView::createPrinter()
680{ 678{
681#ifndef KORG_NOPRINTER 679#ifndef KORG_NOPRINTER
682 if (!mCalPrinter) { 680 if (!mCalPrinter) {
683 mCalPrinter = new CalPrinter(this, mCalendar); 681 mCalPrinter = new CalPrinter(this, mCalendar);
684 connect(this, SIGNAL(configChanged()), mCalPrinter, SLOT(updateConfig())); 682 connect(this, SIGNAL(configChanged()), mCalPrinter, SLOT(updateConfig()));
685 } 683 }
686#endif 684#endif
687} 685}
688 686
689void CalendarView::confSync() 687void CalendarView::confSync()
690{ 688{
691 static KOSyncPrefsDialog* sp = 0; 689 static KOSyncPrefsDialog* sp = 0;
692 if ( ! sp ) { 690 if ( ! sp ) {
693 sp = new KOSyncPrefsDialog( this, "syncprefs", true ); 691 sp = new KOSyncPrefsDialog( this, "syncprefs", true );
694 } 692 }
695 sp->usrReadConfig(); 693 sp->usrReadConfig();
696#ifndef DESKTOP_VERSION 694#ifndef DESKTOP_VERSION
697 sp->showMaximized(); 695 sp->showMaximized();
698#else 696#else
699 sp->show(); 697 sp->show();
700#endif 698#endif
701 sp->exec(); 699 sp->exec();
702 700
703} 701}
704 702
705 703
706//KOPrefs::instance()->mWriteBackFile 704//KOPrefs::instance()->mWriteBackFile
707//KOPrefs::instance()->mWriteBackExistingOnly 705//KOPrefs::instance()->mWriteBackExistingOnly
708 706
709// 0 syncPrefsGroup->addRadio(i18n("Take local entry on conflict")); 707// 0 syncPrefsGroup->addRadio(i18n("Take local entry on conflict"));
710// 1 syncPrefsGroup->addRadio(i18n("Take remote entry on conflict")); 708// 1 syncPrefsGroup->addRadio(i18n("Take remote entry on conflict"));
711// 2 syncPrefsGroup->addRadio(i18n("Take newest entry on conflict")); 709// 2 syncPrefsGroup->addRadio(i18n("Take newest entry on conflict"));
712// 3 syncPrefsGroup->addRadio(i18n("Ask for every entry on conflict")); 710// 3 syncPrefsGroup->addRadio(i18n("Ask for every entry on conflict"));
713// 4 syncPrefsGroup->addRadio(i18n("Force take local entry always")); 711// 4 syncPrefsGroup->addRadio(i18n("Force take local entry always"));
714// 5 syncPrefsGroup->addRadio(i18n("Force take remote entry always")); 712// 5 syncPrefsGroup->addRadio(i18n("Force take remote entry always"));
715 713
716int CalendarView::takeEvent( Incidence* local, Incidence* remote, int mode , bool full ) 714int CalendarView::takeEvent( Incidence* local, Incidence* remote, int mode , bool full )
717{ 715{
718 716
719 //void setZaurusId(int id); 717 //void setZaurusId(int id);
720 // int zaurusId() const; 718 // int zaurusId() const;
721 // void setZaurusUid(int id); 719 // void setZaurusUid(int id);
722 // int zaurusUid() const; 720 // int zaurusUid() const;
723 // void setZaurusStat(int id); 721 // void setZaurusStat(int id);
724 // int zaurusStat() const; 722 // int zaurusStat() const;
725 // 0 equal 723 // 0 equal
726 // 1 take local 724 // 1 take local
727 // 2 take remote 725 // 2 take remote
728 // 3 cancel 726 // 3 cancel
729 QDateTime lastSync = mLastCalendarSync; 727 QDateTime lastSync = mLastCalendarSync;
730 if ( mGlobalSyncMode == SYNC_MODE_SHARP ) { 728 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
731 bool remCh, locCh; 729 bool remCh, locCh;
732 remCh = ( remote->zaurusUid() != local->zaurusUid() ); 730 remCh = ( remote->zaurusUid() != local->zaurusUid() );
733 locCh = ( local->zaurusStat() != local->revision() ); 731 locCh = ( local->lastModified() > mLastCalendarSync );
734 //qDebug("locCh %d remCh %d locuid %d remuid %d", locCh, remCh,local->zaurusUid(), remote->zaurusUid() ); 732 //qDebug("locCh %d remCh %d locuid %d remuid %d", locCh, remCh,local->zaurusUid(), remote->zaurusUid() );
735 if ( !remCh && ! locCh ) { 733 if ( !remCh && ! locCh ) {
736 //qDebug("both not changed "); 734 //qDebug("both not changed ");
737 lastSync = local->lastModified().addDays(1); 735 lastSync = local->lastModified().addDays(1);
738 } else { 736 } else {
739 if ( locCh ) { 737 if ( locCh ) {
740 //qDebug("loc changed %d %d", local->zaurusStat(), local->revision() ); 738 //qDebug("loc changed %d %d", local->zaurusStat(), local->revision() );
741 lastSync = local->lastModified().addDays( -1 ); 739 lastSync = local->lastModified().addDays( -1 );
742 if ( !remCh ) 740 if ( !remCh )
743 remote->setLastModified( lastSync.addDays( -1 ) ); 741 remote->setLastModified( lastSync.addDays( -1 ) );
744 } else { 742 } else {
745 //qDebug(" not loc changed "); 743 //qDebug(" not loc changed ");
746 lastSync = local->lastModified().addDays( 1 ); 744 lastSync = local->lastModified().addDays( 1 );
747 if ( remCh ) 745 if ( remCh )
748 remote->setLastModified( lastSync.addDays( 1 ) ); 746 remote->setLastModified( lastSync.addDays( 1 ) );
749 747
750 } 748 }
751 } 749 }
752 full = true; 750 full = true;
753 if ( mode < 3 ) 751 if ( mode < SYNC_PREF_ASK )
754 mode = 3; 752 mode = SYNC_PREF_ASK;
755 } else { 753 } else {
756 if ( local->lastModified() == remote->lastModified() ) 754 if ( local->lastModified() == remote->lastModified() )
757 if ( local->revision() == remote->revision() ) 755 if ( local->revision() == remote->revision() )
758 return 0; 756 return 0;
759 757
760 } 758 }
761 // qDebug(" %d %d conflict on %s %s ", mode, full, local->summary().latin1(), remote->summary().latin1() ); 759 // qDebug(" %d %d conflict on %s %s ", mode, full, local->summary().latin1(), remote->summary().latin1() );
762 760
763 //qDebug("%s %d %s %d", local->lastModified().toString().latin1() , local->revision(), remote->lastModified().toString().latin1(), remote->revision()); 761 //qDebug("%s %d %s %d", local->lastModified().toString().latin1() , local->revision(), remote->lastModified().toString().latin1(), remote->revision());
764 //qDebug("%d %d %d %d ", local->lastModified().time().second(), local->lastModified().time().msec(), remote->lastModified().time().second(), remote->lastModified().time().msec() ); 762 //qDebug("%d %d %d %d ", local->lastModified().time().second(), local->lastModified().time().msec(), remote->lastModified().time().second(), remote->lastModified().time().msec() );
765 //full = true; //debug only 763 //full = true; //debug only
766 if ( full ) { 764 if ( full ) {
767 bool equ = false; 765 bool equ = false;
768 if ( local->type() == "Event" ) { 766 if ( local->type() == "Event" ) {
769 equ = (*((Event*) local) == *((Event*) remote)); 767 equ = (*((Event*) local) == *((Event*) remote));
770 } 768 }
771 else if ( local->type() =="Todo" ) 769 else if ( local->type() =="Todo" )
772 equ = (*((Todo*) local) == (*(Todo*) remote)); 770 equ = (*((Todo*) local) == (*(Todo*) remote));
773 else if ( local->type() =="Journal" ) 771 else if ( local->type() =="Journal" )
774 equ = (*((Journal*) local) == *((Journal*) remote)); 772 equ = (*((Journal*) local) == *((Journal*) remote));
775 if ( equ ) { 773 if ( equ ) {
776 //qDebug("equal "); 774 //qDebug("equal ");
777 if ( mGlobalSyncMode == SYNC_MODE_SHARP ) { 775 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
778 local->setZaurusUid( remote->zaurusUid() ); 776 local->setZaurusUid( remote->zaurusUid() );
779 } 777 }
780 if ( mode < 4 ) 778 if ( mode < SYNC_PREF_FORCE_LOCAL )
781 return 0; 779 return 0;
782 780
783 }//else //debug only 781 }//else //debug only
784 //qDebug("not equal %s %s ", local->summary().latin1(), remote->summary().latin1()); 782 //qDebug("not equal %s %s ", local->summary().latin1(), remote->summary().latin1());
785 } 783 }
786 int result; 784 int result;
787 bool localIsNew; 785 bool localIsNew;
788 if ( full && mode < 2 ) 786 if ( full && mode < SYNC_PREF_NEWEST )
789 mode = 3; 787 mode = SYNC_PREF_ASK;
790 788
791 switch( mode ) { 789 switch( mode ) {
792 case 0: 790 case SYNC_PREF_LOCAL:
793 if ( lastSync > remote->lastModified() ) 791 if ( lastSync > remote->lastModified() )
794 return 1; 792 return 1;
795 if ( lastSync > local->lastModified() ) 793 if ( lastSync > local->lastModified() )
796 return 2; 794 return 2;
797 return 1; 795 return 1;
798 break; 796 break;
799 case 1: 797 case SYNC_PREF_REMOTE:
800 if ( lastSync > remote->lastModified() ) 798 if ( lastSync > remote->lastModified() )
801 return 1; 799 return 1;
802 if ( lastSync > local->lastModified() ) 800 if ( lastSync > local->lastModified() )
803 return 2; 801 return 2;
804 return 2; 802 return 2;
805 break; 803 break;
806 case 2: 804 case SYNC_PREF_NEWEST:
807 if ( local->lastModified() > remote->lastModified() ) 805 if ( local->lastModified() > remote->lastModified() )
808 return 1; 806 return 1;
809 else 807 else
810 return 2; 808 return 2;
811 break; 809 break;
812 case 3: 810 case SYNC_PREF_ASK:
813 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), local->lastModified().toString().latin1(), remote->lastModified().toString().latin1() ); 811 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), local->lastModified().toString().latin1(), remote->lastModified().toString().latin1() );
814 if ( lastSync > remote->lastModified() ) 812 if ( lastSync > remote->lastModified() )
815 return 1; 813 return 1;
816 if ( lastSync > local->lastModified() ) 814 if ( lastSync > local->lastModified() )
817 return 2; 815 return 2;
818 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), local->lastModified().toString().latin1(), remote->lastModified().toString().latin1() ); 816 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), local->lastModified().toString().latin1(), remote->lastModified().toString().latin1() );
819 localIsNew = local->lastModified() > remote->lastModified(); 817 localIsNew = local->lastModified() > remote->lastModified();
820 if ( localIsNew ) 818 if ( localIsNew )
821 getEventViewerDialog()->setColorMode( 1 ); 819 getEventViewerDialog()->setColorMode( 1 );
822 else 820 else
823 getEventViewerDialog()->setColorMode( 2 ); 821 getEventViewerDialog()->setColorMode( 2 );
824 getEventViewerDialog()->setIncidence(local); 822 getEventViewerDialog()->setIncidence(local);
825 if ( localIsNew ) 823 if ( localIsNew )
826 getEventViewerDialog()->setColorMode( 2 ); 824 getEventViewerDialog()->setColorMode( 2 );
827 else 825 else
828 getEventViewerDialog()->setColorMode( 1 ); 826 getEventViewerDialog()->setColorMode( 1 );
829 getEventViewerDialog()->addIncidence(remote); 827 getEventViewerDialog()->addIncidence(remote);
830 getEventViewerDialog()->setColorMode( 0 ); 828 getEventViewerDialog()->setColorMode( 0 );
831 //qDebug("local %d remote %d ",local->relatedTo(),remote->relatedTo() ); 829 //qDebug("local %d remote %d ",local->relatedTo(),remote->relatedTo() );
832 getEventViewerDialog()->setCaption( mCurrentSyncDevice +i18n(" : Conflict! Please choose entry!")); 830 getEventViewerDialog()->setCaption( mCurrentSyncDevice +i18n(" : Conflict! Please choose entry!"));
833 getEventViewerDialog()->showMe(); 831 getEventViewerDialog()->showMe();
834 result = getEventViewerDialog()->executeS( localIsNew ); 832 result = getEventViewerDialog()->executeS( localIsNew );
835 return result; 833 return result;
836 834
837 break; 835 break;
838 case 4: 836 case SYNC_PREF_FORCE_LOCAL:
839 return 1; 837 return 1;
840 break; 838 break;
841 case 5: 839 case SYNC_PREF_FORCE_REMOTE:
842 return 2; 840 return 2;
843 break; 841 break;
844 842
845 default: 843 default:
844 // SYNC_PREF_TAKE_BOTH not implemented
846 break; 845 break;
847 } 846 }
848 return 0; 847 return 0;
849} 848}
850Event* CalendarView::getLastSyncEvent() 849Event* CalendarView::getLastSyncEvent()
851{ 850{
852 Event* lse; 851 Event* lse;
853 //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() ); 852 //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() );
854 lse = mCalendar->event( "last-syncEvent-device-"+mCurrentSyncDevice ); 853 lse = mCalendar->event( "last-syncEvent-device-"+mCurrentSyncDevice );
855 if (!lse) { 854 if (!lse) {
856 lse = new Event(); 855 lse = new Event();
857 lse->setUid( "last-syncEvent-device-"+mCurrentSyncDevice ); 856 lse->setUid( "last-syncEvent-device-"+mCurrentSyncDevice );
858 lse->setSummary(mCurrentSyncDevice + i18n(" - sync event")); 857 lse->setSummary(mCurrentSyncDevice + i18n(" - sync event"));
859 lse->setDtStart( mLastCalendarSync ); 858 lse->setDtStart( mLastCalendarSync );
860 lse->setDtEnd( mLastCalendarSync.addSecs( 7200 ) ); 859 lse->setDtEnd( mLastCalendarSync.addSecs( 7200 ) );
861 lse->setCategories( i18n("SyncEvent") ); 860 lse->setCategories( i18n("SyncEvent") );
862 lse->setReadOnly( true ); 861 lse->setReadOnly( true );
863 mCalendar->addEvent( lse ); 862 mCalendar->addEvent( lse );
864 } 863 }
865 864
866 return lse; 865 return lse;
867 866
868} 867}
869void CalendarView::checkSharpEvent( Event* lastSync, Incidence* toDelete ) 868void CalendarView::checkSharpEvent( Event* lastSync, Incidence* toDelete )
870{ 869{
871 if ( ! lastSync ) 870 if ( ! lastSync )
872 return; 871 return;
873 if ( toDelete->zaurusId() < 0 ) 872 if ( toDelete->zaurusId() < 0 )
874 return; 873 return;
875 if ( toDelete->type() == "Journal" ) 874 if ( toDelete->type() == "Journal" )
876 return; 875 return;
877 QString des = lastSync->description(); 876 QString des = lastSync->description();
878 QString pref = "e"; 877 QString pref = "e";
879 if ( toDelete->type() == "Todo" ) 878 if ( toDelete->type() == "Todo" )
880 pref = "t"; 879 pref = "t";
881 des += pref+ QString::number ( toDelete->zaurusId() ) + ","; 880 des += pref+ QString::number ( toDelete->zaurusId() ) + ",";
882 lastSync->setReadOnly( false ); 881 lastSync->setReadOnly( false );
883 lastSync->setDescription( des ); 882 lastSync->setDescription( des );
884 lastSync->setReadOnly( true ); 883 lastSync->setReadOnly( true );
885 884
886} 885}
887bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int mode ) 886bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int mode )
888{ 887{
889 bool syncOK = true; 888 bool syncOK = true;
890 int addedEvent = 0; 889 int addedEvent = 0;
891 int addedEventR = 0; 890 int addedEventR = 0;
892 int deletedEventR = 0; 891 int deletedEventR = 0;
893 int deletedEventL = 0; 892 int deletedEventL = 0;
894 int changedLocal = 0; 893 int changedLocal = 0;
895 int changedRemote = 0; 894 int changedRemote = 0;
896 //QPtrList<Event> el = local->rawEvents(); 895 //QPtrList<Event> el = local->rawEvents();
897 Event* eventR; 896 Event* eventR;
898 QString uid; 897 QString uid;
899 int take; 898 int take;
900 Event* eventL; 899 Event* eventL;
901 Event* eventRSync; 900 Event* eventRSync;
902 Event* eventLSync; 901 Event* eventLSync;
903 Event* eventRSyncSharp = remote->event( "last-syncEvent-device-Sharp-DTM"); 902 Event* eventRSyncSharp = remote->event( "last-syncEvent-device-Sharp-DTM");
904 Event* eventLSyncSharp = local->event( "last-syncEvent-device-Sharp-DTM"); 903 Event* eventLSyncSharp = local->event( "last-syncEvent-device-Sharp-DTM");
905 bool fullDateRange = false; 904 bool fullDateRange = false;
906 mLastCalendarSync = QDateTime::currentDateTime(); 905 mLastCalendarSync = QDateTime::currentDateTime();
907 QDateTime modifiedCalendar = mLastCalendarSync;; 906 QDateTime modifiedCalendar = mLastCalendarSync;;
908 eventR = remote->event("last-syncEvent-device-"+mCurrentSyncName ); 907 eventR = remote->event("last-syncEvent-device-"+mCurrentSyncName );
909 if ( eventR ) { 908 if ( eventR ) {
910 eventRSync = (Event*) eventR->clone(); 909 eventRSync = (Event*) eventR->clone();
911 remote->deleteEvent(eventR ); 910 remote->deleteEvent(eventR );
912 911
913 } else { 912 } else {
914 fullDateRange = true; 913 fullDateRange = true;
915 eventRSync = new Event(); 914 eventRSync = new Event();
916 eventRSync->setSummary(mCurrentSyncName + i18n(" - sync event")); 915 eventRSync->setSummary(mCurrentSyncName + i18n(" - sync event"));
917 eventRSync->setUid("last-syncEvent-device-"+mCurrentSyncName ); 916 eventRSync->setUid("last-syncEvent-device-"+mCurrentSyncName );
918 eventRSync->setDtStart( mLastCalendarSync ); 917 eventRSync->setDtStart( mLastCalendarSync );
919 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 7200 ) ); 918 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 7200 ) );
920 eventRSync->setCategories( i18n("SyncEvent") ); 919 eventRSync->setCategories( i18n("SyncEvent") );
921 } 920 }
922 eventLSync = getLastSyncEvent(); 921 eventLSync = getLastSyncEvent();
923 if ( eventLSync->dtStart() == mLastCalendarSync ) 922 if ( eventLSync->dtStart() == mLastCalendarSync )
924 fullDateRange = true; 923 fullDateRange = true;
925 924
926 if ( ! fullDateRange ) { 925 if ( ! fullDateRange ) {
927 if ( eventLSync->dtStart() != eventRSync->dtStart() ) { 926 if ( eventLSync->dtStart() != eventRSync->dtStart() ) {
928 927
929 // qDebug("set fulldate to true %s %s" ,eventLSync->dtStart().toString().latin1(), eventRSync->dtStart().toString().latin1() ); 928 // qDebug("set fulldate to true %s %s" ,eventLSync->dtStart().toString().latin1(), eventRSync->dtStart().toString().latin1() );
930 //qDebug("%d %d %d %d ", eventLSync->dtStart().time().second(), eventLSync->dtStart().time().msec() , eventRSync->dtStart().time().second(), eventRSync->dtStart().time().msec()); 929 //qDebug("%d %d %d %d ", eventLSync->dtStart().time().second(), eventLSync->dtStart().time().msec() , eventRSync->dtStart().time().second(), eventRSync->dtStart().time().msec());
931 fullDateRange = true; 930 fullDateRange = true;
932 } 931 }
933 } 932 }
934 if ( fullDateRange ) 933 if ( fullDateRange )
935 mLastCalendarSync = QDateTime::currentDateTime().addDays( -100*365); 934 mLastCalendarSync = QDateTime::currentDateTime().addDays( -100*365);
936 else 935 else
937 mLastCalendarSync = eventLSync->dtStart(); 936 mLastCalendarSync = eventLSync->dtStart();
938 // for resyncing if own file has changed 937 // for resyncing if own file has changed
939 if ( mCurrentSyncDevice == "deleteaftersync" ) { 938 if ( mCurrentSyncDevice == "deleteaftersync" ) {
940 mLastCalendarSync = loadedFileVersion; 939 mLastCalendarSync = loadedFileVersion;
941 qDebug("setting mLastCalendarSync "); 940 qDebug("setting mLastCalendarSync ");
942 } 941 }
943 //qDebug("*************************** "); 942 //qDebug("*************************** ");
944 qDebug("mLastCalendarSync %s ",mLastCalendarSync.toString().latin1() ); 943 qDebug("mLastCalendarSync %s ",mLastCalendarSync.toString().latin1() );
945 QPtrList<Incidence> er = remote->rawIncidences(); 944 QPtrList<Incidence> er = remote->rawIncidences();
946 Incidence* inR = er.first(); 945 Incidence* inR = er.first();
947 Incidence* inL; 946 Incidence* inL;
948 QProgressBar bar( er.count(),0 ); 947 QProgressBar bar( er.count(),0 );
949 bar.setCaption (i18n("Syncing - close to abort!") ); 948 bar.setCaption (i18n("Syncing - close to abort!") );
950 949
951 int w = 300; 950 int w = 300;
952 if ( QApplication::desktop()->width() < 320 ) 951 if ( QApplication::desktop()->width() < 320 )
953 w = 220; 952 w = 220;
954 int h = bar.sizeHint().height() ; 953 int h = bar.sizeHint().height() ;
955 int dw = QApplication::desktop()->width(); 954 int dw = QApplication::desktop()->width();
956 int dh = QApplication::desktop()->height(); 955 int dh = QApplication::desktop()->height();
957 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 956 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
958 bar.show(); 957 bar.show();
959 int modulo = (er.count()/10)+1; 958 int modulo = (er.count()/10)+1;
960 int incCounter = 0; 959 int incCounter = 0;
961 while ( inR ) { 960 while ( inR ) {
962 if ( ! bar.isVisible() ) 961 if ( ! bar.isVisible() )
963 return false; 962 return false;
964 if ( incCounter % modulo == 0 ) 963 if ( incCounter % modulo == 0 )
965 bar.setProgress( incCounter ); 964 bar.setProgress( incCounter );
966 ++incCounter; 965 ++incCounter;
967 uid = inR->uid(); 966 uid = inR->uid();
968 bool skipIncidence = false; 967 bool skipIncidence = false;
969 if ( uid.left(21) == QString("last-syncEvent-device") ) 968 if ( uid.left(21) == QString("last-syncEvent-device") )
970 skipIncidence = true; 969 skipIncidence = true;
971 970
972 qApp->processEvents(); 971 qApp->processEvents();
973 if ( !skipIncidence ) { 972 if ( !skipIncidence ) {
974 inL = local->incidence( uid ); 973 inL = local->incidence( uid );
975 if ( inL ) { // maybe conflict - same uid in both calendars 974 if ( inL ) { // maybe conflict - same uid in both calendars
976 int maxrev = inL->revision(); 975 int maxrev = inL->revision();
977 if ( maxrev < inR->revision() ) 976 if ( maxrev < inR->revision() )
978 maxrev = inR->revision(); 977 maxrev = inR->revision();
979 if ( (take = takeEvent( inL, inR, mode, fullDateRange )) > 0 ) { 978 if ( (take = takeEvent( inL, inR, mode, fullDateRange )) > 0 ) {
980 //qDebug("take %d %s ", take, inL->summary().latin1()); 979 //qDebug("take %d %s ", take, inL->summary().latin1());
981 if ( take == 3 ) 980 if ( take == 3 )
982 return false; 981 return false;
983 if ( take == 1 ) {// take local 982 if ( take == 1 ) {// take local
984 inL->setZaurusUid( inR->zaurusUid() ); 983 inL->setZaurusUid( inR->zaurusUid() );
985 remote->deleteIncidence( inR ); 984 remote->deleteIncidence( inR );
986 if ( inL->revision() < maxrev ) 985 if ( inL->revision() < maxrev )
987 inL->setRevision( maxrev ); 986 inL->setRevision( maxrev );
988 remote->addIncidence( inL->clone() ); 987 remote->addIncidence( inL->clone() );
989 ++changedRemote; 988 ++changedRemote;
990 } else { 989 } else {
991 if ( inR->revision() < maxrev ) 990 if ( inR->revision() < maxrev )
992 inR->setRevision( maxrev ); 991 inR->setRevision( maxrev );
993 local->deleteIncidence( inL ); 992 local->deleteIncidence( inL );
994 local->addIncidence( inR->clone() ); 993 local->addIncidence( inR->clone() );
995 ++changedLocal; 994 ++changedLocal;
996 } 995 }
997 } 996 }
998 } else { // no conflict 997 } else { // no conflict
999 if ( mGlobalSyncMode == SYNC_MODE_SHARP ) { 998 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1000 QString des = eventLSync->description(); 999 QString des = eventLSync->description();
1001 QString pref = "e"; 1000 QString pref = "e";
1002 if ( inR->type() == "Todo" ) 1001 if ( inR->type() == "Todo" )
1003 pref = "t"; 1002 pref = "t";
1004 if ( des.find(pref+QString::number( inR->zaurusId() ) +"," ) >= 0 && mode != 5) { // delete it 1003 if ( des.find(pref+QString::number( inR->zaurusId() ) +"," ) >= 0 && mode != 5) { // delete it
1005 inR->setZaurusStat( -3 ); 1004 inR->setZaurusStat( SYNC_TEMPSTATE_DELETE );
1006 //remote->deleteIncidence( inR ); 1005 //remote->deleteIncidence( inR );
1007 ++deletedEventR; 1006 ++deletedEventR;
1008 } else { 1007 } else {
1009 inR->setLastModified( modifiedCalendar ); 1008 inR->setLastModified( modifiedCalendar );
1010 local->addIncidence( inR->clone() ); 1009 local->addIncidence( inR->clone() );
1011 ++addedEvent; 1010 ++addedEvent;
1012 } 1011 }
1013 } else { 1012 } else {
1014 if ( inR->lastModified() > mLastCalendarSync || mode == 5 ) { 1013 if ( inR->lastModified() > mLastCalendarSync || mode == 5 ) {
1015 inR->setLastModified( modifiedCalendar ); 1014 inR->setLastModified( modifiedCalendar );
1016 local->addIncidence( inR->clone() ); 1015 local->addIncidence( inR->clone() );
1017 ++addedEvent; 1016 ++addedEvent;
1018 } else { 1017 } else {
1019 checkSharpEvent(eventRSyncSharp, inR); 1018 checkSharpEvent(eventRSyncSharp, inR);
1020 remote->deleteIncidence( inR ); 1019 remote->deleteIncidence( inR );
1021 ++deletedEventR; 1020 ++deletedEventR;
1022 } 1021 }
1023 } 1022 }
1024 } 1023 }
1025 } 1024 }
1026 inR = er.next(); 1025 inR = er.next();
1027 } 1026 }
1028 QPtrList<Incidence> el = local->rawIncidences(); 1027 QPtrList<Incidence> el = local->rawIncidences();
1029 inL = el.first(); 1028 inL = el.first();
1030 modulo = (el.count()/10)+1; 1029 modulo = (el.count()/10)+1;
1031 bar.setCaption (i18n("Add / remove events") ); 1030 bar.setCaption (i18n("Add / remove events") );
1032 bar.setTotalSteps ( el.count() ) ; 1031 bar.setTotalSteps ( el.count() ) ;
1033 bar.show(); 1032 bar.show();
1034 incCounter = 0; 1033 incCounter = 0;
1035 1034
1036 while ( inL ) { 1035 while ( inL ) {
1037 1036
1038 qApp->processEvents(); 1037 qApp->processEvents();
1039 if ( ! bar.isVisible() ) 1038 if ( ! bar.isVisible() )
1040 return false; 1039 return false;
1041 if ( incCounter % modulo == 0 ) 1040 if ( incCounter % modulo == 0 )
1042 bar.setProgress( incCounter ); 1041 bar.setProgress( incCounter );
1043 ++incCounter; 1042 ++incCounter;
1044 uid = inL->uid(); 1043 uid = inL->uid();
1045 bool skipIncidence = false; 1044 bool skipIncidence = false;
1046 if ( uid.left(21) == QString("last-syncEvent-device") ) 1045 if ( uid.left(21) == QString("last-syncEvent-device") )
1047 skipIncidence = true; 1046 skipIncidence = true;
1048 if ( mGlobalSyncMode == SYNC_MODE_SHARP && inL->type() == "Journal" ) 1047 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL && inL->type() == "Journal" )
1049 skipIncidence = true; 1048 skipIncidence = true;
1050 if ( !skipIncidence ) { 1049 if ( !skipIncidence ) {
1051 inR = remote->incidence( uid ); 1050 inR = remote->incidence( uid );
1052 if ( ! inR ) { 1051 if ( ! inR ) {
1053 if ( mGlobalSyncMode == SYNC_MODE_SHARP ) { 1052 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1054 if ( inL->zaurusId() >= 0 && mode != 4 ) { 1053 if ( inL->zaurusId() >= 0 && mode != 4 ) {
1055 local->deleteIncidence( inL ); 1054 local->deleteIncidence( inL );
1056 ++deletedEventL; 1055 ++deletedEventL;
1057 } else { 1056 } else {
1058 if ( ! KOPrefs::instance()->mWriteBackExistingOnly ) { 1057 if ( ! KOPrefs::instance()->mWriteBackExistingOnly ) {
1059 inL->setZaurusId( -1 ); 1058 inL->setZaurusId( -1 );
1060 ++addedEventR; 1059 ++addedEventR;
1061 inL->setLastModified( modifiedCalendar ); 1060 inL->setLastModified( modifiedCalendar );
1062 remote->addIncidence( inL->clone() ); 1061 remote->addIncidence( inL->clone() );
1063 } 1062 }
1064 } 1063 }
1065 } else { 1064 } else {
1066 if ( inL->lastModified() < mLastCalendarSync && mode != 4 ) { 1065 if ( inL->lastModified() < mLastCalendarSync && mode != 4 ) {
1067 checkSharpEvent(eventLSyncSharp, inL); 1066 checkSharpEvent(eventLSyncSharp, inL);
1068 local->deleteIncidence( inL ); 1067 local->deleteIncidence( inL );
1069 ++deletedEventL; 1068 ++deletedEventL;
1070 } else { 1069 } else {
1071 if ( ! KOPrefs::instance()->mWriteBackExistingOnly ) { 1070 if ( ! KOPrefs::instance()->mWriteBackExistingOnly ) {
1072 ++addedEventR; 1071 ++addedEventR;
1073 inL->setLastModified( modifiedCalendar ); 1072 inL->setLastModified( modifiedCalendar );
1074 remote->addIncidence( inL->clone() ); 1073 remote->addIncidence( inL->clone() );
1075 } 1074 }
1076 } 1075 }
1077 } 1076 }
1078 } 1077 }
1079 } 1078 }
1080 inL = el.next(); 1079 inL = el.next();
1081 } 1080 }
1082 1081
1083 bar.hide(); 1082 bar.hide();
1084 mLastCalendarSync = QDateTime::currentDateTime().addSecs( 1 ); 1083 mLastCalendarSync = QDateTime::currentDateTime().addSecs( 1 );
1085 eventLSync->setReadOnly( false ); 1084 eventLSync->setReadOnly( false );
1086 eventLSync->setDtStart( mLastCalendarSync ); 1085 eventLSync->setDtStart( mLastCalendarSync );
1087 eventRSync->setDtStart( mLastCalendarSync ); 1086 eventRSync->setDtStart( mLastCalendarSync );
1088 eventLSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) ); 1087 eventLSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) );
1089 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) ); 1088 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) );
1090 eventRSync->setLocation( i18n("Remote from: ")+mCurrentSyncName ) ; 1089 eventRSync->setLocation( i18n("Remote from: ")+mCurrentSyncName ) ;
1091 eventLSync->setLocation(i18n("Local from: ") + mCurrentSyncName ); 1090 eventLSync->setLocation(i18n("Local from: ") + mCurrentSyncName );
1092 eventLSync->setReadOnly( true ); 1091 eventLSync->setReadOnly( true );
1093 if ( mGlobalSyncMode == SYNC_MODE_NORMAL) 1092 if ( mGlobalSyncMode == SYNC_MODE_NORMAL)
1094 remote->addEvent( eventRSync ); 1093 remote->addEvent( eventRSync );
1095 QString mes; 1094 QString mes;
1096 mes .sprintf( i18n("Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n"),addedEvent, addedEventR, changedLocal, changedRemote, deletedEventL, deletedEventR ); 1095 mes .sprintf( i18n("Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n"),addedEvent, addedEventR, changedLocal, changedRemote, deletedEventL, deletedEventR );
1097 if ( KOPrefs::instance()->mShowSyncSummary ) { 1096 if ( KOPrefs::instance()->mShowSyncSummary ) {
1098 KMessageBox::information(this, mes, i18n("KO/Pi Synchronization") ); 1097 KMessageBox::information(this, mes, i18n("KO/Pi Synchronization") );
1099 } 1098 }
1100 qDebug( mes ); 1099 qDebug( mes );
1101 mCalendar->checkAlarmForIncidence( 0, true ); 1100 mCalendar->checkAlarmForIncidence( 0, true );
1102 return syncOK; 1101 return syncOK;
1103} 1102}
1104 1103
1105void CalendarView::setSyncDevice( QString s ) 1104void CalendarView::setSyncDevice( QString s )
1106{ 1105{
1107 mCurrentSyncDevice= s; 1106 mCurrentSyncDevice= s;
1108} 1107}
1109void CalendarView::setSyncName( QString s ) 1108void CalendarView::setSyncName( QString s )
1110{ 1109{
1111 mCurrentSyncName= s; 1110 mCurrentSyncName= s;
1112} 1111}
1113bool CalendarView::syncCalendar(QString filename, int mode) 1112bool CalendarView::syncCalendar(QString filename, int mode)
1114{ 1113{
1115 mGlobalSyncMode = SYNC_MODE_NORMAL; 1114 mGlobalSyncMode = SYNC_MODE_NORMAL;
1116 CalendarLocal* calendar = new CalendarLocal(); 1115 CalendarLocal* calendar = new CalendarLocal();
1117 calendar->setTimeZoneId(KOPrefs::instance()->mTimeZoneId); 1116 calendar->setTimeZoneId(KOPrefs::instance()->mTimeZoneId);
1118 FileStorage* storage = new FileStorage( calendar ); 1117 FileStorage* storage = new FileStorage( calendar );
1119 bool syncOK = false; 1118 bool syncOK = false;
1120 storage->setFileName( filename ); 1119 storage->setFileName( filename );
1121 // qDebug("loading ... "); 1120 // qDebug("loading ... ");
1122 if ( storage->load(KOPrefs::instance()->mUseQuicksave) ) { 1121 if ( storage->load(KOPrefs::instance()->mUseQuicksave) ) {
1123 getEventViewerDialog()->setSyncMode( true ); 1122 getEventViewerDialog()->setSyncMode( true );
1124 syncOK = synchronizeCalendar( mCalendar, calendar, mode ); 1123 syncOK = synchronizeCalendar( mCalendar, calendar, mode );
1125 getEventViewerDialog()->setSyncMode( false ); 1124 getEventViewerDialog()->setSyncMode( false );
1126 if ( syncOK ) { 1125 if ( syncOK ) {
1127 if ( KOPrefs::instance()->mWriteBackFile ) 1126 if ( KOPrefs::instance()->mWriteBackFile )
1128 { 1127 {
1129 storage->setSaveFormat( new ICalFormat( KOPrefs::instance()->mUseQuicksave) ); 1128 storage->setSaveFormat( new ICalFormat( KOPrefs::instance()->mUseQuicksave) );
1130 storage->save(); 1129 storage->save();
1131 } 1130 }
1132 } 1131 }
1133 setModified( true ); 1132 setModified( true );
1134 } 1133 }
1135 delete storage; 1134 delete storage;
1136 delete calendar; 1135 delete calendar;
1137 if ( syncOK ) 1136 if ( syncOK )
1138 updateView(); 1137 updateView();
1139 return syncOK; 1138 return syncOK;
1140} 1139}
1141void CalendarView::syncSharp() 1140void CalendarView::syncSharp()
1142{ 1141{
1143#ifndef DESKTOP_VERSION 1142#ifndef DESKTOP_VERSION
1144 mGlobalSyncMode = SYNC_MODE_SHARP; 1143 mGlobalSyncMode = SYNC_MODE_EXTERNAL;
1145 //mCurrentSyncDevice = "sharp-DTM"; 1144 //mCurrentSyncDevice = "sharp-DTM";
1146 if ( KOPrefs::instance()->mAskForPreferences ) 1145 if ( KOPrefs::instance()->mAskForPreferences )
1147 edit_sync_options(); 1146 edit_sync_options();
1148 qApp->processEvents(); 1147 qApp->processEvents();
1149 CalendarLocal* calendar = new CalendarLocal(); 1148 CalendarLocal* calendar = new CalendarLocal();
1150 calendar->setTimeZoneId(KOPrefs::instance()->mTimeZoneId); 1149 calendar->setTimeZoneId(KOPrefs::instance()->mTimeZoneId);
1151 bool syncOK = false; 1150 bool syncOK = false;
1152 SharpFormat sharpFormat; 1151 SharpFormat sharpFormat;
1153 if ( sharpFormat.load( calendar, mCalendar ) ) { 1152 if ( sharpFormat.load( calendar, mCalendar ) ) {
1154 getEventViewerDialog()->setSyncMode( true ); 1153 getEventViewerDialog()->setSyncMode( true );
1155 syncOK = synchronizeCalendar( mCalendar, calendar, KOPrefs::instance()->mSyncAlgoPrefs ); 1154 syncOK = synchronizeCalendar( mCalendar, calendar, KOPrefs::instance()->mSyncAlgoPrefs );
1156 getEventViewerDialog()->setSyncMode( false ); 1155 getEventViewerDialog()->setSyncMode( false );
1157 qApp->processEvents(); 1156 qApp->processEvents();
1158 if ( syncOK ) { 1157 if ( syncOK ) {
1159 if ( KOPrefs::instance()->mWriteBackFile ) 1158 if ( KOPrefs::instance()->mWriteBackFile )
1160 { 1159 {
1161 QPtrList<Incidence> iL = mCalendar->rawIncidences(); 1160 QPtrList<Incidence> iL = mCalendar->rawIncidences();
1162 Incidence* inc = iL.first(); 1161 Incidence* inc = iL.first();
1162 /* obsolete
1163 while ( inc ) { 1163 while ( inc ) {
1164 inc->setZaurusStat( inc->revision () ); 1164 inc->setZaurusStat( inc->revision () );
1165 inc = iL.next(); 1165 inc = iL.next();
1166 } 1166 }
1167 */
1167 // pending: clean last sync event description 1168 // pending: clean last sync event description
1168 sharpFormat.save(calendar); 1169 sharpFormat.save(calendar);
1169 iL = calendar->rawIncidences(); 1170 iL = calendar->rawIncidences();
1170 inc = iL.first(); 1171 inc = iL.first();
1171 Incidence* loc; 1172 Incidence* loc;
1172 while ( inc ) { 1173 while ( inc ) {
1173 if ( inc->zaurusStat() == -4 ) { 1174 if ( inc->zaurusStat() == SYNC_TEMPSTATE_NEW_ID ) {
1174 loc = mCalendar->incidence(inc->uid() ); 1175 loc = mCalendar->incidence(inc->uid() );
1175 if ( loc ) { 1176 if ( loc ) {
1176 loc->setZaurusId( inc->zaurusId() ); 1177 loc->setZaurusId( inc->zaurusId() );
1177 loc->setZaurusUid( inc->zaurusUid() ); 1178 loc->setZaurusUid( inc->zaurusUid() );
1178 } 1179 }
1179 } 1180 }
1180 inc = iL.next(); 1181 inc = iL.next();
1181 } 1182 }
1182 Incidence* lse = getLastSyncEvent(); 1183 Incidence* lse = getLastSyncEvent();
1183 if ( lse ) { 1184 if ( lse ) {
1184 lse->setReadOnly( false ); 1185 lse->setReadOnly( false );
1185 lse->setDescription( "" ); 1186 lse->setDescription( "" );
1186 lse->setReadOnly( true ); 1187 lse->setReadOnly( true );
1187 } 1188 }
1188 } 1189 }
1189 } 1190 }
1190 setModified( true ); 1191 setModified( true );
1191 } else { 1192 } else {
1192 QString question = i18n("Sorry, the database access\ncommand failed!\n\nNothing synced!\n") ; 1193 QString question = i18n("Sorry, the database access\ncommand failed!\n\nNothing synced!\n") ;
1193 QMessageBox::information( 0, i18n("KO/Pi Import - ERROR"), 1194 QMessageBox::information( 0, i18n("KO/Pi Import - ERROR"),
1194 question, i18n("Ok")) ; 1195 question, i18n("Ok")) ;
1195 1196
1196 } 1197 }
1197 delete calendar; 1198 delete calendar;
1198 updateView(); 1199 updateView();
1199 return ;//syncOK; 1200 return ;//syncOK;
1200#endif 1201#endif
1201} 1202}
1202 1203
1203 1204
1204#include <kabc/stdaddressbook.h> 1205#include <kabc/stdaddressbook.h>
1205bool CalendarView::importBday() 1206bool CalendarView::importBday()
1206{ 1207{
1207 KABC::StdAddressBook* AddressBook = KABC::StdAddressBook::self( true ); 1208 KABC::StdAddressBook* AddressBook = KABC::StdAddressBook::self( true );
1208 KABC::AddressBook::Iterator it; 1209 KABC::AddressBook::Iterator it;
1209 int count = 0; 1210 int count = 0;
1210 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) { 1211 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) {
1211 ++count; 1212 ++count;
1212 } 1213 }
1213 QProgressBar bar(count,0 ); 1214 QProgressBar bar(count,0 );
1214 int w = 300; 1215 int w = 300;
1215 if ( QApplication::desktop()->width() < 320 ) 1216 if ( QApplication::desktop()->width() < 320 )
1216 w = 220; 1217 w = 220;
1217 int h = bar.sizeHint().height() ; 1218 int h = bar.sizeHint().height() ;
1218 int dw = QApplication::desktop()->width(); 1219 int dw = QApplication::desktop()->width();
1219 int dh = QApplication::desktop()->height(); 1220 int dh = QApplication::desktop()->height();
1220 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 1221 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
1221 bar.show(); 1222 bar.show();
1222 bar.setCaption (i18n("Reading addressbook - close to abort!") ); 1223 bar.setCaption (i18n("Reading addressbook - close to abort!") );
1223 qApp->processEvents(); 1224 qApp->processEvents();
1224 count = 0; 1225 count = 0;
1225 int addCount = 0; 1226 int addCount = 0;
1226 KCal::Attendee* a = 0; 1227 KCal::Attendee* a = 0;
1227 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) { 1228 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) {
1228 if ( ! bar.isVisible() ) 1229 if ( ! bar.isVisible() )
1229 return false; 1230 return false;
1230 bar.setProgress( count++ ); 1231 bar.setProgress( count++ );
1231 qApp->processEvents(); 1232 qApp->processEvents();
1232 //qDebug("add BDay %s %s", (*it).realName().latin1(),(*it).birthday().date().toString().latin1() ); 1233 //qDebug("add BDay %s %s", (*it).realName().latin1(),(*it).birthday().date().toString().latin1() );
1233 if ( (*it).birthday().date().isValid() ){ 1234 if ( (*it).birthday().date().isValid() ){
1234 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ; 1235 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ;
1235 if ( addAnniversary( (*it).birthday().date(), (*it).assembledName(), a, true ) ) 1236 if ( addAnniversary( (*it).birthday().date(), (*it).assembledName(), a, true ) )
1236 ++addCount; 1237 ++addCount;
1237 } 1238 }
1238 QDate anni = KGlobal::locale()->readDate( (*it).custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d"); 1239 QDate anni = KGlobal::locale()->readDate( (*it).custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d");
1239 if ( anni.isValid() ){ 1240 if ( anni.isValid() ){
1240 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ; 1241 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ;
1241 if ( addAnniversary( anni, (*it).assembledName(), a, false ) ) 1242 if ( addAnniversary( anni, (*it).assembledName(), a, false ) )
1242 ++addCount; 1243 ++addCount;
1243 } 1244 }
1244 } 1245 }
1245 updateView(); 1246 updateView();
1246 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!")); 1247 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!"));
1247 return true; 1248 return true;
1248} 1249}
1249 1250
1250bool CalendarView::addAnniversary( QDate date, QString name, KCal::Attendee* a, bool birthday) 1251bool CalendarView::addAnniversary( QDate date, QString name, KCal::Attendee* a, bool birthday)
1251{ 1252{
1252 //qDebug("addAnni "); 1253 //qDebug("addAnni ");
1253 Event * ev = new Event(); 1254 Event * ev = new Event();
1254 if ( a ) { 1255 if ( a ) {
1255 ev->addAttendee( a ); 1256 ev->addAttendee( a );
1256 } 1257 }
1257 QString kind; 1258 QString kind;
1258 if ( birthday ) 1259 if ( birthday )
1259 kind = i18n( "Birthday" ); 1260 kind = i18n( "Birthday" );
1260 else 1261 else
1261 kind = i18n( "Anniversary" ); 1262 kind = i18n( "Anniversary" );
1262 ev->setSummary( name + " - " + kind ); 1263 ev->setSummary( name + " - " + kind );
1263 ev->setOrganizer( "nobody@nowhere" ); 1264 ev->setOrganizer( "nobody@nowhere" );
1264 ev->setCategories( kind ); 1265 ev->setCategories( kind );
1265 ev->setDtStart( QDateTime(date) ); 1266 ev->setDtStart( QDateTime(date) );
1266 ev->setDtEnd( QDateTime(date) ); 1267 ev->setDtEnd( QDateTime(date) );
1267 ev->setFloats( true ); 1268 ev->setFloats( true );
1268 Recurrence * rec = ev->recurrence(); 1269 Recurrence * rec = ev->recurrence();
1269 rec->setYearly(Recurrence::rYearlyMonth,1,-1); 1270 rec->setYearly(Recurrence::rYearlyMonth,1,-1);
1270 rec->addYearlyNum( date.month() ); 1271 rec->addYearlyNum( date.month() );
1271 if ( !mCalendar->addAnniversaryNoDup( ev ) ) { 1272 if ( !mCalendar->addAnniversaryNoDup( ev ) ) {
1272 delete ev; 1273 delete ev;
1273 return false; 1274 return false;
1274 } 1275 }
1275 return true; 1276 return true;
1276 1277
1277} 1278}
1278bool CalendarView::importQtopia( const QString &categories, 1279bool CalendarView::importQtopia( const QString &categories,
1279 const QString &datebook, 1280 const QString &datebook,
1280 const QString &todolist ) 1281 const QString &todolist )
1281{ 1282{
1282 1283
1283 QtopiaFormat qtopiaFormat; 1284 QtopiaFormat qtopiaFormat;
1284 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories)); 1285 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories));
1285 if ( !categories.isEmpty() ) qtopiaFormat.load( mCalendar, categories ); 1286 if ( !categories.isEmpty() ) qtopiaFormat.load( mCalendar, categories );
1286 if ( !datebook.isEmpty() ) qtopiaFormat.load( mCalendar, datebook ); 1287 if ( !datebook.isEmpty() ) qtopiaFormat.load( mCalendar, datebook );
1287 if ( !todolist.isEmpty() ) qtopiaFormat.load( mCalendar, todolist ); 1288 if ( !todolist.isEmpty() ) qtopiaFormat.load( mCalendar, todolist );
1288 1289
1289 updateView(); 1290 updateView();
1290 return true; 1291 return true;
1291 1292
1292#if 0 1293#if 0
1293 mGlobalSyncMode = SYNC_MODE_QTOPIA; 1294 mGlobalSyncMode = SYNC_MODE_QTOPIA;
1294 mCurrentSyncDevice = "qtopia-XML"; 1295 mCurrentSyncDevice = "qtopia-XML";
1295 if ( KOPrefs::instance()->mAskForPreferences ) 1296 if ( KOPrefs::instance()->mAskForPreferences )
1296 edit_sync_options(); 1297 edit_sync_options();
1297 qApp->processEvents(); 1298 qApp->processEvents();
1298 CalendarLocal* calendar = new CalendarLocal(); 1299 CalendarLocal* calendar = new CalendarLocal();
1299 calendar->setTimeZoneId(KOPrefs::instance()->mTimeZoneId); 1300 calendar->setTimeZoneId(KOPrefs::instance()->mTimeZoneId);
1300 bool syncOK = false; 1301 bool syncOK = false;
1301 QtopiaFormat qtopiaFormat; 1302 QtopiaFormat qtopiaFormat;
1302 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories)); 1303 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories));
1303 bool loadOk = true; 1304 bool loadOk = true;
1304 if ( !categories.isEmpty() ) 1305 if ( !categories.isEmpty() )
1305 loadOk = qtopiaFormat.load( calendar, categories ); 1306 loadOk = qtopiaFormat.load( calendar, categories );
1306 if ( loadOk && !datebook.isEmpty() ) 1307 if ( loadOk && !datebook.isEmpty() )
1307 loadOk = qtopiaFormat.load( calendar, datebook ); 1308 loadOk = qtopiaFormat.load( calendar, datebook );
1308 if ( loadOk && !todolist.isEmpty() ) 1309 if ( loadOk && !todolist.isEmpty() )
1309 loadOk = qtopiaFormat.load( calendar, todolist ); 1310 loadOk = qtopiaFormat.load( calendar, todolist );
1310 1311
1311 if ( loadOk ) { 1312 if ( loadOk ) {
1312 getEventViewerDialog()->setSyncMode( true ); 1313 getEventViewerDialog()->setSyncMode( true );
1313 syncOK = synchronizeCalendar( mCalendar, calendar, KOPrefs::instance()->mSyncAlgoPrefs ); 1314 syncOK = synchronizeCalendar( mCalendar, calendar, KOPrefs::instance()->mSyncAlgoPrefs );
1314 getEventViewerDialog()->setSyncMode( false ); 1315 getEventViewerDialog()->setSyncMode( false );
1315 qApp->processEvents(); 1316 qApp->processEvents();
1316 if ( syncOK ) { 1317 if ( syncOK ) {
1317 if ( KOPrefs::instance()->mWriteBackFile ) 1318 if ( KOPrefs::instance()->mWriteBackFile )
1318 { 1319 {
1319 // write back XML file 1320 // write back XML file
1320 1321
1321 } 1322 }
1322 setModified( true ); 1323 setModified( true );
1323 } 1324 }
1324 } else { 1325 } else {
1325 QString question = i18n("Sorry, the file loading\ncommand failed!\n\nNothing synced!\n") ; 1326 QString question = i18n("Sorry, the file loading\ncommand failed!\n\nNothing synced!\n") ;
1326 QMessageBox::information( 0, i18n("KO/Pi Sync - ERROR"), 1327 QMessageBox::information( 0, i18n("KO/Pi Sync - ERROR"),
1327 question, i18n("Ok")) ; 1328 question, i18n("Ok")) ;
1328 } 1329 }
1329 delete calendar; 1330 delete calendar;
1330 updateView(); 1331 updateView();
1331 return syncOK; 1332 return syncOK;
1332 1333
1333 1334
1334#endif 1335#endif
1335 1336
1336} 1337}
1337 1338
1338void CalendarView::setSyncEventsReadOnly() 1339void CalendarView::setSyncEventsReadOnly()
1339{ 1340{
1340 Event * ev; 1341 Event * ev;
1341 QPtrList<Event> eL = mCalendar->rawEvents(); 1342 QPtrList<Event> eL = mCalendar->rawEvents();
1342 ev = eL.first(); 1343 ev = eL.first();
1343 while ( ev ) { 1344 while ( ev ) {
1344 if ( ev->uid().left(21) == QString("last-syncEvent-device") ) 1345 if ( ev->uid().left(21) == QString("last-syncEvent-device") )
1345 ev->setReadOnly( true ); 1346 ev->setReadOnly( true );
1346 ev = eL.next(); 1347 ev = eL.next();
1347 } 1348 }
1348} 1349}
1349bool CalendarView::openCalendar(QString filename, bool merge) 1350bool CalendarView::openCalendar(QString filename, bool merge)
1350{ 1351{
1351 1352
1352 if (filename.isEmpty()) { 1353 if (filename.isEmpty()) {
1353 return false; 1354 return false;
1354 } 1355 }
1355 1356
1356 if (!QFile::exists(filename)) { 1357 if (!QFile::exists(filename)) {
1357 KMessageBox::error(this,i18n("File does not exist:\n '%1'.").arg(filename)); 1358 KMessageBox::error(this,i18n("File does not exist:\n '%1'.").arg(filename));
1358 return false; 1359 return false;
1359 } 1360 }
1360 1361
1361 globalFlagBlockAgenda = 1; 1362 globalFlagBlockAgenda = 1;
1362 if (!merge) mCalendar->close(); 1363 if (!merge) mCalendar->close();
1363 1364
1364 mStorage->setFileName( filename ); 1365 mStorage->setFileName( filename );
1365 1366
1366 if ( mStorage->load(KOPrefs::instance()->mUseQuicksave) ) { 1367 if ( mStorage->load(KOPrefs::instance()->mUseQuicksave) ) {
1367 if ( merge ) ;//setModified( true ); 1368 if ( merge ) ;//setModified( true );
1368 else { 1369 else {
1369 //setModified( true ); 1370 //setModified( true );
1370 mViewManager->setDocumentId( filename ); 1371 mViewManager->setDocumentId( filename );
1371 mDialogManager->setDocumentId( filename ); 1372 mDialogManager->setDocumentId( filename );
1372 mTodoList->setDocumentId( filename ); 1373 mTodoList->setDocumentId( filename );
1373 } 1374 }
1374 globalFlagBlockAgenda = 2; 1375 globalFlagBlockAgenda = 2;
1375 // if ( getLastSyncEvent() ) 1376 // if ( getLastSyncEvent() )
1376 // getLastSyncEvent()->setReadOnly( true ); 1377 // getLastSyncEvent()->setReadOnly( true );
1377 mCalendar->reInitAlarmSettings(); 1378 mCalendar->reInitAlarmSettings();
1378 setSyncEventsReadOnly(); 1379 setSyncEventsReadOnly();
1379 updateUnmanagedViews(); 1380 updateUnmanagedViews();
1380 updateView(); 1381 updateView();
1381 if ( filename != MainWindow::defaultFileName() ) 1382 if ( filename != MainWindow::defaultFileName() )
1382 saveCalendar( MainWindow::defaultFileName() ); 1383 saveCalendar( MainWindow::defaultFileName() );
1383 loadedFileVersion = QDateTime::currentDateTime(); 1384 loadedFileVersion = QDateTime::currentDateTime();
1384 return true; 1385 return true;
1385 } else { 1386 } else {
1386 // while failing to load, the calendar object could 1387 // while failing to load, the calendar object could
1387 // have become partially populated. Clear it out. 1388 // have become partially populated. Clear it out.
1388 if ( !merge ) mCalendar->close(); 1389 if ( !merge ) mCalendar->close();
1389 1390
1390 KMessageBox::error(this,i18n("Couldn't load calendar\n '%1'.").arg(filename)); 1391 KMessageBox::error(this,i18n("Couldn't load calendar\n '%1'.").arg(filename));
1391 1392
1392 globalFlagBlockAgenda = 2; 1393 globalFlagBlockAgenda = 2;
1393 updateView(); 1394 updateView();
1394 } 1395 }
1395 return false; 1396 return false;
1396} 1397}
1397void CalendarView::setLoadedFileVersion(QDateTime dt) 1398void CalendarView::setLoadedFileVersion(QDateTime dt)
1398{ 1399{
1399 loadedFileVersion = dt; 1400 loadedFileVersion = dt;
1400} 1401}
1401bool CalendarView::checkFileChanged(QString fn) 1402bool CalendarView::checkFileChanged(QString fn)
1402{ 1403{
1403 QFileInfo finf ( fn ); 1404 QFileInfo finf ( fn );
1404 if ( !finf.exists() ) 1405 if ( !finf.exists() )
1405 return true; 1406 return true;
1406 QDateTime dt = finf.lastModified (); 1407 QDateTime dt = finf.lastModified ();
1407 if ( dt <= loadedFileVersion ) 1408 if ( dt <= loadedFileVersion )
1408 return false; 1409 return false;
1409 return true; 1410 return true;
1410 1411
1411} 1412}
1412bool CalendarView::checkFileVersion(QString fn) 1413bool CalendarView::checkFileVersion(QString fn)
1413{ 1414{
1414 QFileInfo finf ( fn ); 1415 QFileInfo finf ( fn );
1415 if ( !finf.exists() ) 1416 if ( !finf.exists() )
1416 return true; 1417 return true;
1417 QDateTime dt = finf.lastModified (); 1418 QDateTime dt = finf.lastModified ();
1418 //qDebug("loaded file version %s",loadedFileVersion.toString().latin1()); 1419 //qDebug("loaded file version %s",loadedFileVersion.toString().latin1());
1419 //qDebug("file on disk version %s",dt.toString().latin1()); 1420 //qDebug("file on disk version %s",dt.toString().latin1());
1420 if ( dt <= loadedFileVersion ) 1421 if ( dt <= loadedFileVersion )
1421 return true; 1422 return true;
1422 int km = KMessageBox::warningYesNoCancel(this, i18n("\nThe file on disk has changed!\nFile size: %1 bytes.\nLast modified: %2\nDo you want to:\n\n - Save and overwrite file?\n - Sync with file, then save?\n - Cancel without saving? \n").arg( QString::number( finf.size())).arg( KGlobal::locale()->formatDateTime(finf.lastModified (), true, false)) , 1423 int km = KMessageBox::warningYesNoCancel(this, i18n("\nThe file on disk has changed!\nFile size: %1 bytes.\nLast modified: %2\nDo you want to:\n\n - Save and overwrite file?\n - Sync with file, then save?\n - Cancel without saving? \n").arg( QString::number( finf.size())).arg( KGlobal::locale()->formatDateTime(finf.lastModified (), true, false)) ,
1423 i18n("KO/Pi Warning"),i18n("Overwrite"), 1424 i18n("KO/Pi Warning"),i18n("Overwrite"),
1424 i18n("Sync+save")); 1425 i18n("Sync+save"));
1425 1426
1426 if ( km == KMessageBox::Cancel ) 1427 if ( km == KMessageBox::Cancel )
1427 return false; 1428 return false;
1428 if ( km == KMessageBox::Yes ) 1429 if ( km == KMessageBox::Yes )
1429 return true; 1430 return true;
1430 1431
1431 setSyncDevice("deleteaftersync" ); 1432 setSyncDevice("deleteaftersync" );
1432 KOPrefs::instance()->mAskForPreferences = true; 1433 KOPrefs::instance()->mAskForPreferences = true;
1433 KOPrefs::instance()->mSyncAlgoPrefs = 3; 1434 KOPrefs::instance()->mSyncAlgoPrefs = 3;
1434 KOPrefs::instance()->mWriteBackFile = false; 1435 KOPrefs::instance()->mWriteBackFile = false;
1435 KOPrefs::instance()->mWriteBackExistingOnly = false; 1436 KOPrefs::instance()->mWriteBackExistingOnly = false;
1436 KOPrefs::instance()->mShowSyncSummary = false; 1437 KOPrefs::instance()->mShowSyncSummary = false;
1437 syncCalendar( fn, 3 ); 1438 syncCalendar( fn, 3 );
1438 Event * e = getLastSyncEvent(); 1439 Event * e = getLastSyncEvent();
1439 mCalendar->deleteEvent ( e ); 1440 mCalendar->deleteEvent ( e );
1440 updateView(); 1441 updateView();
1441 return true; 1442 return true;
1442} 1443}
1443 1444
1444bool CalendarView::saveCalendar( QString filename ) 1445bool CalendarView::saveCalendar( QString filename )
1445{ 1446{
1446 1447
1447 // Store back all unsaved data into calendar object 1448 // Store back all unsaved data into calendar object
1448 // qDebug("file %s %d ", filename.latin1() , mViewManager->currentView() ); 1449 // qDebug("file %s %d ", filename.latin1() , mViewManager->currentView() );
1449 if ( mViewManager->currentView() ) 1450 if ( mViewManager->currentView() )
1450 mViewManager->currentView()->flushView(); 1451 mViewManager->currentView()->flushView();
1451 1452
1452 //mStorage->setFileName( filename ); 1453 //mStorage->setFileName( filename );
1453 1454
1454 mStorage->setSaveFormat( new ICalFormat( KOPrefs::instance()->mUseQuicksave) ); 1455 mStorage->setSaveFormat( new ICalFormat( KOPrefs::instance()->mUseQuicksave) );
1455 mStorage->setFileName( filename ); 1456 mStorage->setFileName( filename );
1456 bool success; 1457 bool success;
1457 success = mStorage->save(); 1458 success = mStorage->save();
1458 if ( !success ) { 1459 if ( !success ) {
1459 return false; 1460 return false;
1460 } 1461 }
1461 1462
1462 return true; 1463 return true;
1463} 1464}
1464 1465
1465void CalendarView::closeCalendar() 1466void CalendarView::closeCalendar()
1466{ 1467{
1467 1468
1468 // child windows no longer valid 1469 // child windows no longer valid
1469 emit closingDown(); 1470 emit closingDown();
1470 1471
1471 mCalendar->close(); 1472 mCalendar->close();
1472 setModified(false); 1473 setModified(false);
1473 updateView(); 1474 updateView();
1474} 1475}
1475 1476
1476void CalendarView::archiveCalendar() 1477void CalendarView::archiveCalendar()
1477{ 1478{
1478 mDialogManager->showArchiveDialog(); 1479 mDialogManager->showArchiveDialog();
1479} 1480}
1480 1481
1481 1482
1482void CalendarView::readSettings() 1483void CalendarView::readSettings()
1483{ 1484{
1484 1485
1485 1486
1486 // mViewManager->showAgendaView(); 1487 // mViewManager->showAgendaView();
1487 QString str; 1488 QString str;
1488 //qDebug("CalendarView::readSettings() "); 1489 //qDebug("CalendarView::readSettings() ");
1489 // read settings from the KConfig, supplying reasonable 1490 // read settings from the KConfig, supplying reasonable
1490 // defaults where none are to be found 1491 // defaults where none are to be found
1491 KConfig *config = KOGlobals::config(); 1492 KConfig *config = KOGlobals::config();
1492#ifndef KORG_NOSPLITTER 1493#ifndef KORG_NOSPLITTER
1493 config->setGroup("KOrganizer Geometry"); 1494 config->setGroup("KOrganizer Geometry");
1494 1495
1495 QValueList<int> sizes = config->readIntListEntry("Separator1"); 1496 QValueList<int> sizes = config->readIntListEntry("Separator1");
1496 if (sizes.count() != 2) { 1497 if (sizes.count() != 2) {
1497 sizes << mDateNavigator->minimumSizeHint().width(); 1498 sizes << mDateNavigator->minimumSizeHint().width();
1498 sizes << 300; 1499 sizes << 300;
1499 } 1500 }
1500 mPanner->setSizes(sizes); 1501 mPanner->setSizes(sizes);
1501 1502
1502 sizes = config->readIntListEntry("Separator2"); 1503 sizes = config->readIntListEntry("Separator2");
1503 if ( ( mResourceView && sizes.count() == 4 ) || 1504 if ( ( mResourceView && sizes.count() == 4 ) ||
1504 ( !mResourceView && sizes.count() == 3 ) ) { 1505 ( !mResourceView && sizes.count() == 3 ) ) {
1505 mLeftSplitter->setSizes(sizes); 1506 mLeftSplitter->setSizes(sizes);
1506 } 1507 }
1507#endif 1508#endif
1508 globalFlagBlockAgenda = 1; 1509 globalFlagBlockAgenda = 1;
1509 mViewManager->showAgendaView(); 1510 mViewManager->showAgendaView();
1510 //mViewManager->readSettings( config ); 1511 //mViewManager->readSettings( config );
1511 mTodoList->restoreLayout(config,QString("Todo Layout")); 1512 mTodoList->restoreLayout(config,QString("Todo Layout"));
1512 readFilterSettings(config); 1513 readFilterSettings(config);
1513 config->setGroup( "Views" ); 1514 config->setGroup( "Views" );
1514 int dateCount = config->readNumEntry( "ShownDatesCount", 7 ); 1515 int dateCount = config->readNumEntry( "ShownDatesCount", 7 );
1515 if ( dateCount == 5 ) mNavigator->selectWorkWeek(); 1516 if ( dateCount == 5 ) mNavigator->selectWorkWeek();
1516 else if ( dateCount == 7 ) mNavigator->selectWeek(); 1517 else if ( dateCount == 7 ) mNavigator->selectWeek();
1517 else mNavigator->selectDates( dateCount ); 1518 else mNavigator->selectDates( dateCount );
1518 // mViewManager->readSettings( config ); 1519 // mViewManager->readSettings( config );
1519 updateConfig(); 1520 updateConfig();
1520 globalFlagBlockAgenda = 2; 1521 globalFlagBlockAgenda = 2;
1521 mViewManager->readSettings( config ); 1522 mViewManager->readSettings( config );
1522#ifdef DESKTOP_VERSION 1523#ifdef DESKTOP_VERSION
1523 config->setGroup("WidgetLayout"); 1524 config->setGroup("WidgetLayout");
1524 QStringList list; 1525 QStringList list;
1525 list = config->readListEntry("MainLayout"); 1526 list = config->readListEntry("MainLayout");
1526 int x,y,w,h; 1527 int x,y,w,h;
1527 if ( ! list.isEmpty() ) { 1528 if ( ! list.isEmpty() ) {
1528 x = list[0].toInt(); 1529 x = list[0].toInt();
1529 y = list[1].toInt(); 1530 y = list[1].toInt();
1530 w = list[2].toInt(); 1531 w = list[2].toInt();
1531 h = list[3].toInt(); 1532 h = list[3].toInt();
1532 topLevelWidget()->setGeometry(x,y,w,h); 1533 topLevelWidget()->setGeometry(x,y,w,h);
1533 1534
1534 } else { 1535 } else {
1535 topLevelWidget()->setGeometry( 40 ,40 , 640, 440); 1536 topLevelWidget()->setGeometry( 40 ,40 , 640, 440);
1536 } 1537 }
1537 list = config->readListEntry("EditEventLayout"); 1538 list = config->readListEntry("EditEventLayout");
1538 if ( ! list.isEmpty() ) { 1539 if ( ! list.isEmpty() ) {
1539 x = list[0].toInt(); 1540 x = list[0].toInt();
1540 y = list[1].toInt(); 1541 y = list[1].toInt();
1541 w = list[2].toInt(); 1542 w = list[2].toInt();
1542 h = list[3].toInt(); 1543 h = list[3].toInt();
1543 mEventEditor->setGeometry(x,y,w,h); 1544 mEventEditor->setGeometry(x,y,w,h);
1544 1545
1545 } 1546 }
1546 list = config->readListEntry("EditTodoLayout"); 1547 list = config->readListEntry("EditTodoLayout");
1547 if ( ! list.isEmpty() ) { 1548 if ( ! list.isEmpty() ) {
1548 x = list[0].toInt(); 1549 x = list[0].toInt();
1549 y = list[1].toInt(); 1550 y = list[1].toInt();
1550 w = list[2].toInt(); 1551 w = list[2].toInt();
1551 h = list[3].toInt(); 1552 h = list[3].toInt();
1552 mTodoEditor->setGeometry(x,y,w,h); 1553 mTodoEditor->setGeometry(x,y,w,h);
1553 1554
1554 } 1555 }
1555 list = config->readListEntry("ViewerLayout"); 1556 list = config->readListEntry("ViewerLayout");
1556 if ( ! list.isEmpty() ) { 1557 if ( ! list.isEmpty() ) {
1557 x = list[0].toInt(); 1558 x = list[0].toInt();
diff --git a/libkcal/sharpformat.cpp b/libkcal/sharpformat.cpp
index f83f72e..973f19d 100644
--- a/libkcal/sharpformat.cpp
+++ b/libkcal/sharpformat.cpp
@@ -1,983 +1,984 @@
1/* 1/*
2 This file is part of libkcal. 2 This file is part of libkcal.
3 3
4 Copyright (c) 2003 Cornelius Schumacher <schumacher@kde.org> 4 Copyright (c) 2003 Cornelius Schumacher <schumacher@kde.org>
5 5
6 This library is free software; you can redistribute it and/or 6 This library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Library General Public 7 modify it under the terms of the GNU Library General Public
8 License as published by the Free Software Foundation; either 8 License as published by the Free Software Foundation; either
9 version 2 of the License, or (at your option) any later version. 9 version 2 of the License, or (at your option) any later version.
10 10
11 This library is distributed in the hope that it will be useful, 11 This library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Library General Public License for more details. 14 Library General Public License for more details.
15 15
16 You should have received a copy of the GNU Library General Public License 16 You should have received a copy of the GNU Library General Public License
17 along with this library; see the file COPYING.LIB. If not, write to 17 along with this library; see the file COPYING.LIB. If not, write to
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA. 19 Boston, MA 02111-1307, USA.
20*/ 20*/
21 21
22#include <qdatetime.h> 22#include <qdatetime.h>
23#include <qstring.h> 23#include <qstring.h>
24#include <qapplication.h> 24#include <qapplication.h>
25#include <qptrlist.h> 25#include <qptrlist.h>
26#include <qregexp.h> 26#include <qregexp.h>
27#include <qmessagebox.h> 27#include <qmessagebox.h>
28#include <qclipboard.h> 28#include <qclipboard.h>
29#include <qfile.h> 29#include <qfile.h>
30#include <qtextstream.h> 30#include <qtextstream.h>
31#include <qtextcodec.h> 31#include <qtextcodec.h>
32#include <qxml.h> 32#include <qxml.h>
33#include <qlabel.h> 33#include <qlabel.h>
34 34
35#include <kdebug.h> 35#include <kdebug.h>
36#include <klocale.h> 36#include <klocale.h>
37#include <kglobal.h> 37#include <kglobal.h>
38 38
39#include "calendar.h" 39#include "calendar.h"
40#include "alarm.h" 40#include "alarm.h"
41#include "recurrence.h" 41#include "recurrence.h"
42#include "calendarlocal.h" 42#include "calendarlocal.h"
43 43
44#include "sharpformat.h" 44#include "sharpformat.h"
45#include "syncdefines.h"
45 46
46using namespace KCal; 47using namespace KCal;
47 48
48//CARDID,CATEGORY,DSRP,PLCE,MEM1,TIM1,TIM2,ADAY,ARON,ARMN,ARSD,RTYP,RFRQ,RPOS,RDYS,REND,REDT,ALSD,ALED,MDAY 49//CARDID,CATEGORY,DSRP,PLCE,MEM1,TIM1,TIM2,ADAY,ARON,ARMN,ARSD,RTYP,RFRQ,RPOS,RDYS,REND,REDT,ALSD,ALED,MDAY
49// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 50// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
50 51
51//ARSD silentalarm = 0 52//ARSD silentalarm = 0
52// 11 RTYP 225 no /0 dialy/ 1 weekly/ 3 month by date/ 2 month by day(pos)/ yearly 53// 11 RTYP 225 no /0 dialy/ 1 weekly/ 3 month by date/ 2 month by day(pos)/ yearly
53// 12 RFRQ 54// 12 RFRQ
54// 13 RPOS pos = 4. monday in month 55// 13 RPOS pos = 4. monday in month
55// 14 RDYS days: 1 mon/ 2 tue .. 64 sun 56// 14 RDYS days: 1 mon/ 2 tue .. 64 sun
56// 15 REND 0 = no end/ 1 = end 57// 15 REND 0 = no end/ 1 = end
57// 16 REDT rec end dt 58// 16 REDT rec end dt
58//ALSD 59//ALSD
59//ALED 60//ALED
60//MDAY 61//MDAY
61 62
62class SharpParser : public QObject 63class SharpParser : public QObject
63{ 64{
64 public: 65 public:
65 SharpParser( Calendar *calendar ) : mCalendar( calendar ) { 66 SharpParser( Calendar *calendar ) : mCalendar( calendar ) {
66 oldCategories = 0; 67 oldCategories = 0;
67 } 68 }
68 69
69 bool startElement( Calendar *existingCalendar, const QStringList & attList, QString qName ) 70 bool startElement( Calendar *existingCalendar, const QStringList & attList, QString qName )
70 { 71 {
71 int i = 1; 72 int i = 1;
72 bool skip = true; 73 bool skip = true;
73 int max = attList.count() -2; 74 int max = attList.count() -2;
74 while ( i < max ) { 75 while ( i < max ) {
75 if ( !attList[i].isEmpty() ) { 76 if ( !attList[i].isEmpty() ) {
76 skip = false; 77 skip = false;
77 break; 78 break;
78 } 79 }
79 ++i ; 80 ++i ;
80 } 81 }
81 if ( skip ) 82 if ( skip )
82 return false; 83 return false;
83 ulong cSum = SharpFormat::getCsum(attList ); 84 ulong cSum = SharpFormat::getCsum(attList );
84 85
85 if ( qName == "Event" ) { 86 if ( qName == "Event" ) {
86 Event *event; 87 Event *event;
87 event = existingCalendar->event( attList[0].toInt() ); 88 event = existingCalendar->event( attList[0].toInt() );
88 if ( event ) 89 if ( event )
89 event = (Event*)event->clone(); 90 event = (Event*)event->clone();
90 else 91 else
91 event = new Event; 92 event = new Event;
92 event->setZaurusId( attList[0].toInt() ); 93 event->setZaurusId( attList[0].toInt() );
93 event->setZaurusUid( cSum ); 94 event->setZaurusUid( cSum );
94 event->setZaurusStat( -2 ); 95 event->setZaurusStat(SYNC_TEMPSTATE_NEW_EXTERNAL );
95 96
96 event->setSummary( attList[2] ); 97 event->setSummary( attList[2] );
97 event->setLocation( attList[3] ); 98 event->setLocation( attList[3] );
98 event->setDescription( attList[4] ); 99 event->setDescription( attList[4] );
99 if ( attList[7] == "1" ) { 100 if ( attList[7] == "1" ) {
100 event->setDtStart( QDateTime(fromString( attList[17]+"000000", false ).date(),QTime(0,0,0 ) )); 101 event->setDtStart( QDateTime(fromString( attList[17]+"000000", false ).date(),QTime(0,0,0 ) ));
101 event->setDtEnd( QDateTime(fromString( attList[18]+"000000", false ).date(),QTime(0,0,0 ))); 102 event->setDtEnd( QDateTime(fromString( attList[18]+"000000", false ).date(),QTime(0,0,0 )));
102 event->setFloats( true ); 103 event->setFloats( true );
103 } else { 104 } else {
104 event->setFloats( false ); 105 event->setFloats( false );
105 event->setDtStart( fromString( attList[5] ) ); 106 event->setDtStart( fromString( attList[5] ) );
106 event->setDtEnd( fromString( attList[6] )); 107 event->setDtEnd( fromString( attList[6] ));
107 } 108 }
108 109
109 QString rtype = attList[11]; 110 QString rtype = attList[11];
110 if ( rtype != "255" ) { 111 if ( rtype != "255" ) {
111 // qDebug("recurs "); 112 // qDebug("recurs ");
112 QDate startDate = event->dtStart().date(); 113 QDate startDate = event->dtStart().date();
113 114
114 QString freqStr = attList[12]; 115 QString freqStr = attList[12];
115 int freq = freqStr.toInt(); 116 int freq = freqStr.toInt();
116 117
117 QString hasEndDateStr = attList[15] ; 118 QString hasEndDateStr = attList[15] ;
118 bool hasEndDate = hasEndDateStr == "1"; 119 bool hasEndDate = hasEndDateStr == "1";
119 120
120 QString endDateStr = attList[16]; 121 QString endDateStr = attList[16];
121 QDate endDate = fromString( endDateStr ).date(); 122 QDate endDate = fromString( endDateStr ).date();
122 123
123 QString weekDaysStr = attList[14]; 124 QString weekDaysStr = attList[14];
124 uint weekDaysNum = weekDaysStr.toInt(); 125 uint weekDaysNum = weekDaysStr.toInt();
125 126
126 QBitArray weekDays( 7 ); 127 QBitArray weekDays( 7 );
127 int i; 128 int i;
128 int bb = 1; 129 int bb = 1;
129 for( i = 1; i <= 7; ++i ) { 130 for( i = 1; i <= 7; ++i ) {
130 weekDays.setBit( i - 1, ( bb & weekDaysNum )); 131 weekDays.setBit( i - 1, ( bb & weekDaysNum ));
131 bb = 2 << (i-1); 132 bb = 2 << (i-1);
132 //qDebug(" %d bit %d ",i-1,weekDays.at(i-1) ); 133 //qDebug(" %d bit %d ",i-1,weekDays.at(i-1) );
133 } 134 }
134 // qDebug("next "); 135 // qDebug("next ");
135 QString posStr = attList[13]; 136 QString posStr = attList[13];
136 int pos = posStr.toInt(); 137 int pos = posStr.toInt();
137 Recurrence *r = event->recurrence(); 138 Recurrence *r = event->recurrence();
138 139
139 if ( rtype == "0" ) { 140 if ( rtype == "0" ) {
140 if ( hasEndDate ) r->setDaily( freq, endDate ); 141 if ( hasEndDate ) r->setDaily( freq, endDate );
141 else r->setDaily( freq, -1 ); 142 else r->setDaily( freq, -1 );
142 } else if ( rtype == "1" ) { 143 } else if ( rtype == "1" ) {
143 if ( hasEndDate ) r->setWeekly( freq, weekDays, endDate ); 144 if ( hasEndDate ) r->setWeekly( freq, weekDays, endDate );
144 else r->setWeekly( freq, weekDays, -1 ); 145 else r->setWeekly( freq, weekDays, -1 );
145 } else if ( rtype == "3" ) { 146 } else if ( rtype == "3" ) {
146 if ( hasEndDate ) 147 if ( hasEndDate )
147 r->setMonthly( Recurrence::rMonthlyDay, freq, endDate ); 148 r->setMonthly( Recurrence::rMonthlyDay, freq, endDate );
148 else 149 else
149 r->setMonthly( Recurrence::rMonthlyDay, freq, -1 ); 150 r->setMonthly( Recurrence::rMonthlyDay, freq, -1 );
150 r->addMonthlyDay( startDate.day() ); 151 r->addMonthlyDay( startDate.day() );
151 } else if ( rtype == "2" ) { 152 } else if ( rtype == "2" ) {
152 if ( hasEndDate ) 153 if ( hasEndDate )
153 r->setMonthly( Recurrence::rMonthlyPos, freq, endDate ); 154 r->setMonthly( Recurrence::rMonthlyPos, freq, endDate );
154 else 155 else
155 r->setMonthly( Recurrence::rMonthlyPos, freq, -1 ); 156 r->setMonthly( Recurrence::rMonthlyPos, freq, -1 );
156 QBitArray days( 7 ); 157 QBitArray days( 7 );
157 days.fill( false ); 158 days.fill( false );
158 days.setBit( startDate.dayOfWeek() - 1 ); 159 days.setBit( startDate.dayOfWeek() - 1 );
159 r->addMonthlyPos( pos, days ); 160 r->addMonthlyPos( pos, days );
160 } else if ( rtype == "4" ) { 161 } else if ( rtype == "4" ) {
161 if ( hasEndDate ) 162 if ( hasEndDate )
162 r->setYearly( Recurrence::rYearlyMonth, freq, endDate ); 163 r->setYearly( Recurrence::rYearlyMonth, freq, endDate );
163 else 164 else
164 r->setYearly( Recurrence::rYearlyMonth, freq, -1 ); 165 r->setYearly( Recurrence::rYearlyMonth, freq, -1 );
165 r->addYearlyNum( startDate.month() ); 166 r->addYearlyNum( startDate.month() );
166 } 167 }
167 } 168 }
168 169
169 QString categoryList = attList[1] ; 170 QString categoryList = attList[1] ;
170 event->setCategories( lookupCategories( categoryList ) ); 171 event->setCategories( lookupCategories( categoryList ) );
171 172
172 // strange 0 semms to mean: alarm enabled 173 // strange 0 semms to mean: alarm enabled
173 if ( attList[8] == "0" ) { 174 if ( attList[8] == "0" ) {
174 Alarm *alarm; 175 Alarm *alarm;
175 if ( event->alarms().count() > 0 ) 176 if ( event->alarms().count() > 0 )
176 alarm = event->alarms().first(); 177 alarm = event->alarms().first();
177 else { 178 else {
178 alarm = new Alarm( event ); 179 alarm = new Alarm( event );
179 event->addAlarm( alarm ); 180 event->addAlarm( alarm );
180 } 181 }
181 alarm->setType( Alarm::Audio ); 182 alarm->setType( Alarm::Audio );
182 alarm->setEnabled( true ); 183 alarm->setEnabled( true );
183 int alarmOffset = attList[9].toInt(); 184 int alarmOffset = attList[9].toInt();
184 alarm->setStartOffset( alarmOffset * -60 ); 185 alarm->setStartOffset( alarmOffset * -60 );
185 } 186 }
186 187
187 mCalendar->addEvent( event); 188 mCalendar->addEvent( event);
188 } else if ( qName == "Todo" ) { 189 } else if ( qName == "Todo" ) {
189 Todo *todo; 190 Todo *todo;
190 191
191 todo = existingCalendar->todo( attList[0].toInt() ); 192 todo = existingCalendar->todo( attList[0].toInt() );
192 if (todo ) 193 if (todo )
193 todo = (Todo*)todo->clone(); 194 todo = (Todo*)todo->clone();
194 else 195 else
195 todo = new Todo; 196 todo = new Todo;
196 197
197//CARDID,CATEGORY,ETDY,LTDY,FNDY,MARK,PRTY,TITL,MEM1 198//CARDID,CATEGORY,ETDY,LTDY,FNDY,MARK,PRTY,TITL,MEM1
198// 0 1 2 3 4 5 6 7 8 199// 0 1 2 3 4 5 6 7 8
199//1,,,,,1,4,Loch zumachen,"" 200//1,,,,,1,4,Loch zumachen,""
200//3,Privat,20040317T000000,20040318T000000,20040319T000000,0,5,Call bbb,"notes123 bbb gggg ""bb "" " 201//3,Privat,20040317T000000,20040318T000000,20040319T000000,0,5,Call bbb,"notes123 bbb gggg ""bb "" "
201//2,"Familie,Freunde,Holiday",20040318T000000,20040324T000000,20040317T000000,1,2,tod2,notes 202//2,"Familie,Freunde,Holiday",20040318T000000,20040324T000000,20040317T000000,1,2,tod2,notes
202 203
203 todo->setZaurusId( attList[0].toInt() ); 204 todo->setZaurusId( attList[0].toInt() );
204 todo->setZaurusUid( cSum ); 205 todo->setZaurusUid( cSum );
205 todo->setZaurusStat( -2 ); 206 todo->setZaurusStat( SYNC_TEMPSTATE_NEW_EXTERNAL );
206 207
207 todo->setSummary( attList[7] ); 208 todo->setSummary( attList[7] );
208 todo->setDescription( attList[8]); 209 todo->setDescription( attList[8]);
209 210
210 int priority = attList[6].toInt(); 211 int priority = attList[6].toInt();
211 if ( priority == 0 ) priority = 3; 212 if ( priority == 0 ) priority = 3;
212 todo->setPriority( priority ); 213 todo->setPriority( priority );
213 214
214 QString categoryList = attList[1]; 215 QString categoryList = attList[1];
215 todo->setCategories( lookupCategories( categoryList ) ); 216 todo->setCategories( lookupCategories( categoryList ) );
216 217
217 218
218 219
219 QString hasDateStr = attList[3]; // due 220 QString hasDateStr = attList[3]; // due
220 if ( !hasDateStr.isEmpty() ) { 221 if ( !hasDateStr.isEmpty() ) {
221 if ( hasDateStr.right(6) == "000000" ) { 222 if ( hasDateStr.right(6) == "000000" ) {
222 todo->setDtDue( QDateTime(fromString( hasDateStr, false ).date(), QTime(0,0,0 )) ); 223 todo->setDtDue( QDateTime(fromString( hasDateStr, false ).date(), QTime(0,0,0 )) );
223 todo->setFloats( true ); 224 todo->setFloats( true );
224 } 225 }
225 else { 226 else {
226 todo->setDtDue( fromString( hasDateStr ) ); 227 todo->setDtDue( fromString( hasDateStr ) );
227 todo->setFloats( false ); 228 todo->setFloats( false );
228 } 229 }
229 230
230 todo->setHasDueDate( true ); 231 todo->setHasDueDate( true );
231 } 232 }
232 hasDateStr = attList[2];//start 233 hasDateStr = attList[2];//start
233 if ( !hasDateStr.isEmpty() ) { 234 if ( !hasDateStr.isEmpty() ) {
234 235
235 todo->setDtStart( fromString( hasDateStr ) ); 236 todo->setDtStart( fromString( hasDateStr ) );
236 todo->setHasStartDate( true); 237 todo->setHasStartDate( true);
237 } else 238 } else
238 todo->setHasStartDate( false ); 239 todo->setHasStartDate( false );
239 hasDateStr = attList[4];//completed 240 hasDateStr = attList[4];//completed
240 if ( !hasDateStr.isEmpty() ) { 241 if ( !hasDateStr.isEmpty() ) {
241 todo->setCompleted(fromString( hasDateStr ) ); 242 todo->setCompleted(fromString( hasDateStr ) );
242 } 243 }
243 QString completedStr = attList[5]; 244 QString completedStr = attList[5];
244 if ( completedStr == "0" ) 245 if ( completedStr == "0" )
245 todo->setCompleted( true ); 246 todo->setCompleted( true );
246 else 247 else
247 todo->setCompleted( false ); 248 todo->setCompleted( false );
248 mCalendar->addTodo( todo ); 249 mCalendar->addTodo( todo );
249 250
250 } else if ( qName == "Category" ) { 251 } else if ( qName == "Category" ) {
251 /* 252 /*
252 QString id = attributes.value( "id" ); 253 QString id = attributes.value( "id" );
253 QString name = attributes.value( "name" ); 254 QString name = attributes.value( "name" );
254 setCategory( id, name ); 255 setCategory( id, name );
255 */ 256 */
256 } 257 }
257 //qDebug("end "); 258 //qDebug("end ");
258 return true; 259 return true;
259 } 260 }
260 261
261 262
262 void setCategoriesList ( QStringList * c ) 263 void setCategoriesList ( QStringList * c )
263 { 264 {
264 oldCategories = c; 265 oldCategories = c;
265 } 266 }
266 267
267 QDateTime fromString ( QString s, bool useTz = true ) { 268 QDateTime fromString ( QString s, bool useTz = true ) {
268 QDateTime dt; 269 QDateTime dt;
269 int y,m,t,h,min,sec; 270 int y,m,t,h,min,sec;
270 y = s.mid(0,4).toInt(); 271 y = s.mid(0,4).toInt();
271 m = s.mid(4,2).toInt(); 272 m = s.mid(4,2).toInt();
272 t = s.mid(6,2).toInt(); 273 t = s.mid(6,2).toInt();
273 h = s.mid(9,2).toInt(); 274 h = s.mid(9,2).toInt();
274 min = s.mid(11,2).toInt(); 275 min = s.mid(11,2).toInt();
275 sec = s.mid(13,2).toInt(); 276 sec = s.mid(13,2).toInt();
276 dt = QDateTime(QDate(y,m,t), QTime(h,min,sec)); 277 dt = QDateTime(QDate(y,m,t), QTime(h,min,sec));
277 int offset = KGlobal::locale()->localTimeOffset( dt ); 278 int offset = KGlobal::locale()->localTimeOffset( dt );
278 if ( useTz ) 279 if ( useTz )
279 dt = dt.addSecs ( offset*60); 280 dt = dt.addSecs ( offset*60);
280 return dt; 281 return dt;
281 282
282 } 283 }
283 protected: 284 protected:
284 QDateTime toDateTime( const QString &value ) 285 QDateTime toDateTime( const QString &value )
285 { 286 {
286 QDateTime dt; 287 QDateTime dt;
287 dt.setTime_t( value.toUInt() ); 288 dt.setTime_t( value.toUInt() );
288 289
289 return dt; 290 return dt;
290 } 291 }
291 292
292 QStringList lookupCategories( const QString &categoryList ) 293 QStringList lookupCategories( const QString &categoryList )
293 { 294 {
294 QStringList categoryIds = QStringList::split( ";", categoryList ); 295 QStringList categoryIds = QStringList::split( ";", categoryList );
295 QStringList categories; 296 QStringList categories;
296 QStringList::ConstIterator it; 297 QStringList::ConstIterator it;
297 for( it = categoryIds.begin(); it != categoryIds.end(); ++it ) { 298 for( it = categoryIds.begin(); it != categoryIds.end(); ++it ) {
298 QString cate = category( *it ); 299 QString cate = category( *it );
299 if ( oldCategories ) { 300 if ( oldCategories ) {
300 if ( ! oldCategories->contains( cate ) ) 301 if ( ! oldCategories->contains( cate ) )
301 oldCategories->append( cate ); 302 oldCategories->append( cate );
302 } 303 }
303 categories.append(cate ); 304 categories.append(cate );
304 } 305 }
305 return categories; 306 return categories;
306 } 307 }
307 308
308 private: 309 private:
309 Calendar *mCalendar; 310 Calendar *mCalendar;
310 QStringList * oldCategories; 311 QStringList * oldCategories;
311 static QString category( const QString &id ) 312 static QString category( const QString &id )
312 { 313 {
313 QMap<QString,QString>::ConstIterator it = mCategoriesMap.find( id ); 314 QMap<QString,QString>::ConstIterator it = mCategoriesMap.find( id );
314 if ( it == mCategoriesMap.end() ) return id; 315 if ( it == mCategoriesMap.end() ) return id;
315 else return *it; 316 else return *it;
316 } 317 }
317 318
318 static void setCategory( const QString &id, const QString &name ) 319 static void setCategory( const QString &id, const QString &name )
319 { 320 {
320 mCategoriesMap.insert( id, name ); 321 mCategoriesMap.insert( id, name );
321 } 322 }
322 323
323 static QMap<QString,QString> mCategoriesMap; 324 static QMap<QString,QString> mCategoriesMap;
324}; 325};
325 326
326QMap<QString,QString> SharpParser::mCategoriesMap; 327QMap<QString,QString> SharpParser::mCategoriesMap;
327 328
328SharpFormat::SharpFormat() 329SharpFormat::SharpFormat()
329{ 330{
330 mCategories = 0; 331 mCategories = 0;
331} 332}
332 333
333SharpFormat::~SharpFormat() 334SharpFormat::~SharpFormat()
334{ 335{
335} 336}
336ulong SharpFormat::getCsum( const QStringList & attList) 337ulong SharpFormat::getCsum( const QStringList & attList)
337{ 338{
338 int max = attList.count() -1; 339 int max = attList.count() -1;
339 ulong cSum = 0; 340 ulong cSum = 0;
340 int j,k,i; 341 int j,k,i;
341 int add; 342 int add;
342 for ( i = 1; i < max ; ++i ) { 343 for ( i = 1; i < max ; ++i ) {
343 QString s = attList[i]; 344 QString s = attList[i];
344 if ( ! s.isEmpty() ){ 345 if ( ! s.isEmpty() ){
345 j = s.length(); 346 j = s.length();
346 for ( k = 0; k < j; ++k ) { 347 for ( k = 0; k < j; ++k ) {
347 int mul = k +1; 348 int mul = k +1;
348 add = s[k].unicode (); 349 add = s[k].unicode ();
349 if ( k < 16 ) 350 if ( k < 16 )
350 mul = mul * mul; 351 mul = mul * mul;
351 add = add * mul *i*i*i; 352 add = add * mul *i*i*i;
352 cSum += add; 353 cSum += add;
353 } 354 }
354 } 355 }
355 } 356 }
356 return cSum; 357 return cSum;
357 358
358} 359}
359#include <stdlib.h> 360#include <stdlib.h>
360#define DEBUGMODE false 361#define DEBUGMODE false
361bool SharpFormat::load( Calendar *calendar, Calendar *existngCal ) 362bool SharpFormat::load( Calendar *calendar, Calendar *existngCal )
362{ 363{
363 364
364 365
365 bool debug = DEBUGMODE; 366 bool debug = DEBUGMODE;
366 //debug = true; 367 //debug = true;
367 QString text; 368 QString text;
368 QString codec = "utf8"; 369 QString codec = "utf8";
369 QLabel status ( i18n("Reading events ..."), 0 ); 370 QLabel status ( i18n("Reading events ..."), 0 );
370 371
371 int w = status.sizeHint().width()+20 ; 372 int w = status.sizeHint().width()+20 ;
372 if ( w < 200 ) w = 200; 373 if ( w < 200 ) w = 200;
373 int h = status.sizeHint().height()+20 ; 374 int h = status.sizeHint().height()+20 ;
374 int dw = QApplication::desktop()->width(); 375 int dw = QApplication::desktop()->width();
375 int dh = QApplication::desktop()->height(); 376 int dh = QApplication::desktop()->height();
376 status.setCaption(i18n("Reading DTM Data") ); 377 status.setCaption(i18n("Reading DTM Data") );
377 status.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 378 status.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
378 status.show(); 379 status.show();
379 status.raise(); 380 status.raise();
380 qApp->processEvents(); 381 qApp->processEvents();
381 QString fileName; 382 QString fileName;
382 if ( ! debug ) { 383 if ( ! debug ) {
383 fileName = "/tmp/kopitempout"; 384 fileName = "/tmp/kopitempout";
384 QString command ="db2file datebook -r -c "+ codec + " > " + fileName; 385 QString command ="db2file datebook -r -c "+ codec + " > " + fileName;
385 system ( command.latin1() ); 386 system ( command.latin1() );
386 } else { 387 } else {
387 fileName = "/tmp/events.txt"; 388 fileName = "/tmp/events.txt";
388 389
389 } 390 }
390 QFile file( fileName ); 391 QFile file( fileName );
391 if (!file.open( IO_ReadOnly ) ) { 392 if (!file.open( IO_ReadOnly ) ) {
392 return false; 393 return false;
393 394
394 } 395 }
395 QTextStream ts( &file ); 396 QTextStream ts( &file );
396 ts.setCodec( QTextCodec::codecForName("utf8") ); 397 ts.setCodec( QTextCodec::codecForName("utf8") );
397 text = ts.read(); 398 text = ts.read();
398 file.close(); 399 file.close();
399 status.setText( i18n("Processing events ...") ); 400 status.setText( i18n("Processing events ...") );
400 status.raise(); 401 status.raise();
401 qApp->processEvents(); 402 qApp->processEvents();
402 fromString2Cal( calendar, existngCal, text, "Event" ); 403 fromString2Cal( calendar, existngCal, text, "Event" );
403 status.setText( i18n("Reading todos ...") ); 404 status.setText( i18n("Reading todos ...") );
404 qApp->processEvents(); 405 qApp->processEvents();
405 if ( ! debug ) { 406 if ( ! debug ) {
406 fileName = "/tmp/kopitempout"; 407 fileName = "/tmp/kopitempout";
407 QString command = "db2file todo -r -c " + codec+ " > " + fileName; 408 QString command = "db2file todo -r -c " + codec+ " > " + fileName;
408 system ( command.latin1() ); 409 system ( command.latin1() );
409 } else { 410 } else {
410 fileName = "/tmp/todo.txt"; 411 fileName = "/tmp/todo.txt";
411 } 412 }
412 file.setName( fileName ); 413 file.setName( fileName );
413 if (!file.open( IO_ReadOnly ) ) { 414 if (!file.open( IO_ReadOnly ) ) {
414 return false; 415 return false;
415 416
416 } 417 }
417 ts.setDevice( &file ); 418 ts.setDevice( &file );
418 text = ts.read(); 419 text = ts.read();
419 file.close(); 420 file.close();
420 421
421 status.setText( i18n("Processing todos ...") ); 422 status.setText( i18n("Processing todos ...") );
422 status.raise(); 423 status.raise();
423 qApp->processEvents(); 424 qApp->processEvents();
424 fromString2Cal( calendar, existngCal, text, "Todo" ); 425 fromString2Cal( calendar, existngCal, text, "Todo" );
425 return true; 426 return true;
426} 427}
427int SharpFormat::getNumFromRecord( QString answer, Incidence* inc ) 428int SharpFormat::getNumFromRecord( QString answer, Incidence* inc )
428{ 429{
429 int retval = -1; 430 int retval = -1;
430 QStringList templist; 431 QStringList templist;
431 QString tempString; 432 QString tempString;
432 int start = 0; 433 int start = 0;
433 int len = answer.length(); 434 int len = answer.length();
434 int end = answer.find ("\n",start)+1; 435 int end = answer.find ("\n",start)+1;
435 bool ok = true; 436 bool ok = true;
436 start = end; 437 start = end;
437 int ccc = 0; 438 int ccc = 0;
438 while ( start > 0 ) { 439 while ( start > 0 ) {
439 templist.clear(); 440 templist.clear();
440 ok = true; 441 ok = true;
441 int loopCount = 0; 442 int loopCount = 0;
442 while ( ok ) { 443 while ( ok ) {
443 ++loopCount; 444 ++loopCount;
444 if ( loopCount > 25 ) { 445 if ( loopCount > 25 ) {
445 qDebug("KO: Error in while loop"); 446 qDebug("KO: Error in while loop");
446 ok = false; 447 ok = false;
447 start = 0; 448 start = 0;
448 break; 449 break;
449 } 450 }
450 if ( ok ) 451 if ( ok )
451 tempString = getPart( answer, ok, start ); 452 tempString = getPart( answer, ok, start );
452 if ( start >= len || start == 0 ) { 453 if ( start >= len || start == 0 ) {
453 start = 0; 454 start = 0;
454 ok = false; 455 ok = false;
455 } 456 }
456 if ( tempString.right(1) =="\n" ) 457 if ( tempString.right(1) =="\n" )
457 tempString = tempString.left( tempString.length()-1); 458 tempString = tempString.left( tempString.length()-1);
458 459
459 templist.append( tempString ); 460 templist.append( tempString );
460 } 461 }
461 ++ccc; 462 ++ccc;
462 if ( ccc == 2 && loopCount < 25 ) { 463 if ( ccc == 2 && loopCount < 25 ) {
463 start = 0; 464 start = 0;
464 bool ok; 465 bool ok;
465 int newnum = templist[0].toInt( &ok ); 466 int newnum = templist[0].toInt( &ok );
466 if ( ok && newnum > 0) { 467 if ( ok && newnum > 0) {
467 retval = newnum; 468 retval = newnum;
468 inc->setZaurusId( newnum ); 469 inc->setZaurusId( newnum );
469 inc->setZaurusUid( getCsum( templist ) ); 470 inc->setZaurusUid( getCsum( templist ) );
470 inc->setZaurusStat( -4 ); 471 inc->setZaurusStat( SYNC_TEMPSTATE_NEW_ID );
471 } 472 }
472 } 473 }
473 } 474 }
474 //qDebug("getNumFromRecord returning : %d ", retval); 475 //qDebug("getNumFromRecord returning : %d ", retval);
475 return retval; 476 return retval;
476} 477}
477bool SharpFormat::save( Calendar *calendar) 478bool SharpFormat::save( Calendar *calendar)
478{ 479{
479 480
480 QLabel status ( i18n("Processing/adding events ..."), 0 ); 481 QLabel status ( i18n("Processing/adding events ..."), 0 );
481 int w = status.sizeHint().width()+20 ; 482 int w = status.sizeHint().width()+20 ;
482 if ( w < 200 ) w = 200; 483 if ( w < 200 ) w = 200;
483 int h = status.sizeHint().height()+20 ; 484 int h = status.sizeHint().height()+20 ;
484 int dw = QApplication::desktop()->width(); 485 int dw = QApplication::desktop()->width();
485 int dh = QApplication::desktop()->height(); 486 int dh = QApplication::desktop()->height();
486 status.setCaption(i18n("Writing DTM Data") ); 487 status.setCaption(i18n("Writing DTM Data") );
487 status.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 488 status.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
488 status.show(); 489 status.show();
489 status.raise(); 490 status.raise();
490 qApp->processEvents(); 491 qApp->processEvents();
491 bool debug = DEBUGMODE; 492 bool debug = DEBUGMODE;
492 QString codec = "utf8"; 493 QString codec = "utf8";
493 QString answer; 494 QString answer;
494 QString ePrefix = "CARDID,CATEGORY,DSRP,PLCE,MEM1,TIM1,TIM2,ADAY,ARON,ARMN,ARSD,RTYP,RFRQ,RPOS,RDYS,REND,REDT,ALSD,ALED,MDAY\n"; 495 QString ePrefix = "CARDID,CATEGORY,DSRP,PLCE,MEM1,TIM1,TIM2,ADAY,ARON,ARMN,ARSD,RTYP,RFRQ,RPOS,RDYS,REND,REDT,ALSD,ALED,MDAY\n";
495 QString tPrefix = "CARDID,CATEGORY,ETDY,LTDY,FNDY,MARK,PRTY,TITL,MEM1\n"; 496 QString tPrefix = "CARDID,CATEGORY,ETDY,LTDY,FNDY,MARK,PRTY,TITL,MEM1\n";
496 QString command; 497 QString command;
497 QPtrList<Event> er = calendar->rawEvents(); 498 QPtrList<Event> er = calendar->rawEvents();
498 Event* ev = er.first(); 499 Event* ev = er.first();
499 QString fileName = "/tmp/kopitempout"; 500 QString fileName = "/tmp/kopitempout";
500 int i = 0; 501 int i = 0;
501 QString changeString = ePrefix; 502 QString changeString = ePrefix;
502 QString deleteString = ePrefix; 503 QString deleteString = ePrefix;
503 bool deleteEnt = false; 504 bool deleteEnt = false;
504 bool changeEnt = false; 505 bool changeEnt = false;
505 QString message = i18n("Processing event # "); 506 QString message = i18n("Processing event # ");
506 int procCount = 0; 507 int procCount = 0;
507 while ( ev ) { 508 while ( ev ) {
508 //qDebug("i %d ", ++i); 509 //qDebug("i %d ", ++i);
509 if ( ev->zaurusStat() != -2 ) { 510 if ( ev->zaurusStat() != SYNC_TEMPSTATE_NEW_EXTERNAL ) {
510 status.setText ( message + QString::number ( ++procCount ) ); 511 status.setText ( message + QString::number ( ++procCount ) );
511 qApp->processEvents(); 512 qApp->processEvents();
512 QString eString = getEventString( ev ); 513 QString eString = getEventString( ev );
513 if ( ev->zaurusStat() == -3 ) { // delete 514 if ( ev->zaurusStat() == SYNC_TEMPSTATE_DELETE ) { // delete
514 // deleting empty strings does not work. 515 // deleting empty strings does not work.
515 // we write first and x and then delete the record with the x 516 // we write first and x and then delete the record with the x
516 eString = eString.replace( QRegExp(",\"\""),",\"x\"" ); 517 eString = eString.replace( QRegExp(",\"\""),",\"x\"" );
517 changeString += eString + "\n"; 518 changeString += eString + "\n";
518 deleteString += eString + "\n"; 519 deleteString += eString + "\n";
519 deleteEnt = true; 520 deleteEnt = true;
520 changeEnt = true; 521 changeEnt = true;
521 } 522 }
522 else if ( ev->zaurusId() == -1 ) { // add new 523 else if ( ev->zaurusId() == -1 ) { // add new
523 command = "(echo \"" + ePrefix + eString + "\" ) | db2file datebook -w -g -c " + codec+ " > "+ fileName; 524 command = "(echo \"" + ePrefix + eString + "\" ) | db2file datebook -w -g -c " + codec+ " > "+ fileName;
524 system ( command.utf8() ); 525 system ( command.utf8() );
525 QFile file( fileName ); 526 QFile file( fileName );
526 if (!file.open( IO_ReadOnly ) ) { 527 if (!file.open( IO_ReadOnly ) ) {
527 return false; 528 return false;
528 529
529 } 530 }
530 QTextStream ts( &file ); 531 QTextStream ts( &file );
531 ts.setCodec( QTextCodec::codecForName("utf8") ); 532 ts.setCodec( QTextCodec::codecForName("utf8") );
532 answer = ts.read(); 533 answer = ts.read();
533 file.close(); 534 file.close();
534 //qDebug("answer \n%s ", answer.latin1()); 535 //qDebug("answer \n%s ", answer.latin1());
535 getNumFromRecord( answer, ev ) ; 536 getNumFromRecord( answer, ev ) ;
536 537
537 } 538 }
538 else { // change existing 539 else { // change existing
539 //qDebug("canging %d %d",ev->zaurusStat() ,ev->zaurusId() ); 540 //qDebug("canging %d %d",ev->zaurusStat() ,ev->zaurusId() );
540 //command = "(echo \"" + ePrefix + eString + "\" ) | db2file datebook -w -g -c " + codec+ " > "+ fileName; 541 //command = "(echo \"" + ePrefix + eString + "\" ) | db2file datebook -w -g -c " + codec+ " > "+ fileName;
541 changeString += eString + "\n"; 542 changeString += eString + "\n";
542 changeEnt = true; 543 changeEnt = true;
543 544
544 } 545 }
545 } 546 }
546 ev = er.next(); 547 ev = er.next();
547 } 548 }
548 status.setText ( i18n("Changing events ...") ); 549 status.setText ( i18n("Changing events ...") );
549 qApp->processEvents(); 550 qApp->processEvents();
550 //qDebug("changing... "); 551 //qDebug("changing... ");
551 if ( changeEnt ) { 552 if ( changeEnt ) {
552 QFile file( fileName ); 553 QFile file( fileName );
553 if (!file.open( IO_WriteOnly ) ) { 554 if (!file.open( IO_WriteOnly ) ) {
554 return false; 555 return false;
555 556
556 } 557 }
557 QTextStream ts( &file ); 558 QTextStream ts( &file );
558 ts.setCodec( QTextCodec::codecForName("utf8") ); 559 ts.setCodec( QTextCodec::codecForName("utf8") );
559 ts << changeString ; 560 ts << changeString ;
560 file.close(); 561 file.close();
561 command = "db2file datebook -w -g -c " + codec+ " < "+ fileName; 562 command = "db2file datebook -w -g -c " + codec+ " < "+ fileName;
562 system ( command.latin1() ); 563 system ( command.latin1() );
563 //qDebug("command %s file :\n%s ", command.latin1(), changeString.latin1()); 564 //qDebug("command %s file :\n%s ", command.latin1(), changeString.latin1());
564 565
565 } 566 }
566 status.setText ( i18n("Deleting events ...") ); 567 status.setText ( i18n("Deleting events ...") );
567 qApp->processEvents(); 568 qApp->processEvents();
568 //qDebug("deleting... "); 569 //qDebug("deleting... ");
569 if ( deleteEnt ) { 570 if ( deleteEnt ) {
570 QFile file( fileName ); 571 QFile file( fileName );
571 if (!file.open( IO_WriteOnly ) ) { 572 if (!file.open( IO_WriteOnly ) ) {
572 return false; 573 return false;
573 574
574 } 575 }
575 QTextStream ts( &file ); 576 QTextStream ts( &file );
576 ts.setCodec( QTextCodec::codecForName("utf8") ); 577 ts.setCodec( QTextCodec::codecForName("utf8") );
577 ts << deleteString; 578 ts << deleteString;
578 file.close(); 579 file.close();
579 command = "db2file datebook -d -c " + codec+ " < "+ fileName; 580 command = "db2file datebook -d -c " + codec+ " < "+ fileName;
580 system ( command.latin1() ); 581 system ( command.latin1() );
581 // qDebug("command %s file :\n%s ", command.latin1(), deleteString.latin1()); 582 // qDebug("command %s file :\n%s ", command.latin1(), deleteString.latin1());
582 } 583 }
583 584
584 585
585 changeString = tPrefix; 586 changeString = tPrefix;
586 deleteString = tPrefix; 587 deleteString = tPrefix;
587 status.setText ( i18n("Processing todos ...") ); 588 status.setText ( i18n("Processing todos ...") );
588 qApp->processEvents(); 589 qApp->processEvents();
589 QPtrList<Todo> tl = calendar->rawTodos(); 590 QPtrList<Todo> tl = calendar->rawTodos();
590 Todo* to = tl.first(); 591 Todo* to = tl.first();
591 i = 0; 592 i = 0;
592 message = i18n("Processing todo # "); 593 message = i18n("Processing todo # ");
593 procCount = 0; 594 procCount = 0;
594 while ( to ) { 595 while ( to ) {
595 if ( to->zaurusStat() != -2 ) { 596 if ( to->zaurusStat() != SYNC_TEMPSTATE_NEW_EXTERNAL ) {
596 status.setText ( message + QString::number ( ++procCount ) ); 597 status.setText ( message + QString::number ( ++procCount ) );
597 qApp->processEvents(); 598 qApp->processEvents();
598 QString eString = getTodoString( to ); 599 QString eString = getTodoString( to );
599 if ( to->zaurusStat() == -3 ) { // delete 600 if ( to->zaurusStat() == SYNC_TEMPSTATE_DELETE ) { // delete
600 // deleting empty strings does not work. 601 // deleting empty strings does not work.
601 // we write first and x and then delete the record with the x 602 // we write first and x and then delete the record with the x
602 eString = eString.replace( QRegExp(",\"\""),",\"x\"" ); 603 eString = eString.replace( QRegExp(",\"\""),",\"x\"" );
603 changeString += eString + "\n"; 604 changeString += eString + "\n";
604 deleteString += eString + "\n"; 605 deleteString += eString + "\n";
605 deleteEnt = true; 606 deleteEnt = true;
606 changeEnt = true; 607 changeEnt = true;
607 } 608 }
608 else if ( to->zaurusId() == -1 ) { // add new 609 else if ( to->zaurusId() == -1 ) { // add new
609 command = "(echo \"" + tPrefix + eString + "\" ) | db2file todo -w -g -c " + codec+ " > "+ fileName; 610 command = "(echo \"" + tPrefix + eString + "\" ) | db2file todo -w -g -c " + codec+ " > "+ fileName;
610 system ( command.utf8() ); 611 system ( command.utf8() );
611 QFile file( fileName ); 612 QFile file( fileName );
612 if (!file.open( IO_ReadOnly ) ) { 613 if (!file.open( IO_ReadOnly ) ) {
613 return false; 614 return false;
614 615
615 } 616 }
616 QTextStream ts( &file ); 617 QTextStream ts( &file );
617 ts.setCodec( QTextCodec::codecForName("utf8") ); 618 ts.setCodec( QTextCodec::codecForName("utf8") );
618 answer = ts.read(); 619 answer = ts.read();
619 file.close(); 620 file.close();
620 //qDebug("answer \n%s ", answer.latin1()); 621 //qDebug("answer \n%s ", answer.latin1());
621 getNumFromRecord( answer, to ) ; 622 getNumFromRecord( answer, to ) ;
622 623
623 } 624 }
624 else { // change existing 625 else { // change existing
625 //qDebug("canging %d %d",to->zaurusStat() ,to->zaurusId() ); 626 //qDebug("canging %d %d",to->zaurusStat() ,to->zaurusId() );
626 //command = "(echo \"" + ePrefix + eString + "\" ) | db2file datebook -w -g -c " + codec+ " > "+ fileName; 627 //command = "(echo \"" + ePrefix + eString + "\" ) | db2file datebook -w -g -c " + codec+ " > "+ fileName;
627 changeString += eString + "\n"; 628 changeString += eString + "\n";
628 changeEnt = true; 629 changeEnt = true;
629 630
630 } 631 }
631 } 632 }
632 633
633 to = tl.next(); 634 to = tl.next();
634 } 635 }
635 status.setText ( i18n("Changing todos ...") ); 636 status.setText ( i18n("Changing todos ...") );
636 qApp->processEvents(); 637 qApp->processEvents();
637 //qDebug("changing... "); 638 //qDebug("changing... ");
638 if ( changeEnt ) { 639 if ( changeEnt ) {
639 QFile file( fileName ); 640 QFile file( fileName );
640 if (!file.open( IO_WriteOnly ) ) { 641 if (!file.open( IO_WriteOnly ) ) {
641 return false; 642 return false;
642 643
643 } 644 }
644 QTextStream ts( &file ); 645 QTextStream ts( &file );
645 ts.setCodec( QTextCodec::codecForName("utf8") ); 646 ts.setCodec( QTextCodec::codecForName("utf8") );
646 ts << changeString ; 647 ts << changeString ;
647 file.close(); 648 file.close();
648 command = "db2file todo -w -g -c " + codec+ " < "+ fileName; 649 command = "db2file todo -w -g -c " + codec+ " < "+ fileName;
649 system ( command.latin1() ); 650 system ( command.latin1() );
650 //qDebug("command %s file :\n%s ", command.latin1(), changeString.latin1()); 651 //qDebug("command %s file :\n%s ", command.latin1(), changeString.latin1());
651 652
652 } 653 }
653 status.setText ( i18n("Deleting todos ...") ); 654 status.setText ( i18n("Deleting todos ...") );
654 qApp->processEvents(); 655 qApp->processEvents();
655 //qDebug("deleting... "); 656 //qDebug("deleting... ");
656 if ( deleteEnt ) { 657 if ( deleteEnt ) {
657 QFile file( fileName ); 658 QFile file( fileName );
658 if (!file.open( IO_WriteOnly ) ) { 659 if (!file.open( IO_WriteOnly ) ) {
659 return false; 660 return false;
660 661
661 } 662 }
662 QTextStream ts( &file ); 663 QTextStream ts( &file );
663 ts.setCodec( QTextCodec::codecForName("utf8") ); 664 ts.setCodec( QTextCodec::codecForName("utf8") );
664 ts << deleteString; 665 ts << deleteString;
665 file.close(); 666 file.close();
666 command = "db2file todo -d -c " + codec+ " < "+ fileName; 667 command = "db2file todo -d -c " + codec+ " < "+ fileName;
667 system ( command.latin1() ); 668 system ( command.latin1() );
668 // qDebug("command %s file :\n%s ", command.latin1(), deleteString.latin1()); 669 // qDebug("command %s file :\n%s ", command.latin1(), deleteString.latin1());
669 } 670 }
670 671
671 return true; 672 return true;
672} 673}
673QString SharpFormat::dtToString( const QDateTime& dti, bool useTZ ) 674QString SharpFormat::dtToString( const QDateTime& dti, bool useTZ )
674{ 675{
675 QString datestr; 676 QString datestr;
676 QString timestr; 677 QString timestr;
677 int offset = KGlobal::locale()->localTimeOffset( dti ); 678 int offset = KGlobal::locale()->localTimeOffset( dti );
678 QDateTime dt; 679 QDateTime dt;
679 if (useTZ) 680 if (useTZ)
680 dt = dti.addSecs ( -(offset*60)); 681 dt = dti.addSecs ( -(offset*60));
681 else 682 else
682 dt = dti; 683 dt = dti;
683 if(dt.date().isValid()){ 684 if(dt.date().isValid()){
684 const QDate& date = dt.date(); 685 const QDate& date = dt.date();
685 datestr.sprintf("%04d%02d%02d", 686 datestr.sprintf("%04d%02d%02d",
686 date.year(), date.month(), date.day()); 687 date.year(), date.month(), date.day());
687 } 688 }
688 if(dt.time().isValid()){ 689 if(dt.time().isValid()){
689 const QTime& time = dt.time(); 690 const QTime& time = dt.time();
690 timestr.sprintf("T%02d%02d%02d", 691 timestr.sprintf("T%02d%02d%02d",
691 time.hour(), time.minute(), time.second()); 692 time.hour(), time.minute(), time.second());
692 } 693 }
693 return datestr + timestr; 694 return datestr + timestr;
694} 695}
695QString SharpFormat::getEventString( Event* event ) 696QString SharpFormat::getEventString( Event* event )
696{ 697{
697 QStringList list; 698 QStringList list;
698 list.append( QString::number(event->zaurusId() ) ); 699 list.append( QString::number(event->zaurusId() ) );
699 list.append( event->categories().join(",") ); 700 list.append( event->categories().join(",") );
700 if ( !event->summary().isEmpty() ) 701 if ( !event->summary().isEmpty() )
701 list.append( event->summary() ); 702 list.append( event->summary() );
702 else 703 else
703 list.append("" ); 704 list.append("" );
704 if ( !event->location().isEmpty() ) 705 if ( !event->location().isEmpty() )
705 list.append( event->location() ); 706 list.append( event->location() );
706 else 707 else
707 list.append("" ); 708 list.append("" );
708 if ( !event->description().isEmpty() ) 709 if ( !event->description().isEmpty() )
709 list.append( event->description() ); 710 list.append( event->description() );
710 else 711 else
711 list.append( "" ); 712 list.append( "" );
712 if ( event->doesFloat () ) { 713 if ( event->doesFloat () ) {
713 list.append( dtToString( QDateTime(event->dtStart().date(), QTime(0,0,0)), false )); 714 list.append( dtToString( QDateTime(event->dtStart().date(), QTime(0,0,0)), false ));
714 list.append( dtToString( QDateTime(event->dtEnd().date(),QTime(23,59,59)), false )); //6 715 list.append( dtToString( QDateTime(event->dtEnd().date(),QTime(23,59,59)), false )); //6
715 list.append( "1" ); 716 list.append( "1" );
716 717
717 } 718 }
718 else { 719 else {
719 list.append( dtToString( event->dtStart()) ); 720 list.append( dtToString( event->dtStart()) );
720 list.append( dtToString( event->dtEnd()) ); //6 721 list.append( dtToString( event->dtEnd()) ); //6
721 list.append( "0" ); 722 list.append( "0" );
722 } 723 }
723 bool noAlarm = true; 724 bool noAlarm = true;
724 if ( event->alarms().count() > 0 ) { 725 if ( event->alarms().count() > 0 ) {
725 Alarm * al = event->alarms().first(); 726 Alarm * al = event->alarms().first();
726 if ( al->enabled() ) { 727 if ( al->enabled() ) {
727 noAlarm = false; 728 noAlarm = false;
728 list.append( "0" ); // yes, 0 == alarm 729 list.append( "0" ); // yes, 0 == alarm
729 list.append( QString::number( al->startOffset().asSeconds()/(-60) ) ); 730 list.append( QString::number( al->startOffset().asSeconds()/(-60) ) );
730 if ( al->type() == Alarm::Audio ) 731 if ( al->type() == Alarm::Audio )
731 list.append( "1" ); // type audio 732 list.append( "1" ); // type audio
732 else 733 else
733 list.append( "0" ); // type silent 734 list.append( "0" ); // type silent
734 } 735 }
735 } 736 }
736 if ( noAlarm ) { 737 if ( noAlarm ) {
737 list.append( "1" ); // yes, 1 == no alarm 738 list.append( "1" ); // yes, 1 == no alarm
738 list.append( "0" ); // no alarm offset 739 list.append( "0" ); // no alarm offset
739 list.append( "1" ); // type 740 list.append( "1" ); // type
740 } 741 }
741 // next is: 11 742 // next is: 11
742 // next is: 11-16 are recurrence 743 // next is: 11-16 are recurrence
743 Recurrence* rec = event->recurrence(); 744 Recurrence* rec = event->recurrence();
744 745
745 bool writeEndDate = false; 746 bool writeEndDate = false;
746 switch ( rec->doesRecur() ) 747 switch ( rec->doesRecur() )
747 { 748 {
748 case Recurrence::rDaily: // 0 749 case Recurrence::rDaily: // 0
749 list.append( "0" ); 750 list.append( "0" );
750 list.append( QString::number( rec->frequency() ));//12 751 list.append( QString::number( rec->frequency() ));//12
751 list.append( "0" ); 752 list.append( "0" );
752 list.append( "0" ); 753 list.append( "0" );
753 writeEndDate = true; 754 writeEndDate = true;
754 break; 755 break;
755 case Recurrence::rWeekly:// 1 756 case Recurrence::rWeekly:// 1
756 list.append( "1" ); 757 list.append( "1" );
757 list.append( QString::number( rec->frequency()) );//12 758 list.append( QString::number( rec->frequency()) );//12
758 list.append( "0" ); 759 list.append( "0" );
759 { 760 {
760 int days = 0; 761 int days = 0;
761 QBitArray weekDays = rec->days(); 762 QBitArray weekDays = rec->days();
762 int i; 763 int i;
763 for( i = 1; i <= 7; ++i ) { 764 for( i = 1; i <= 7; ++i ) {
764 if ( weekDays[i-1] ) { 765 if ( weekDays[i-1] ) {
765 days += 1 << (i-1); 766 days += 1 << (i-1);
766 } 767 }
767 } 768 }
768 list.append( QString::number( days ) ); 769 list.append( QString::number( days ) );
769 } 770 }
770 //pending weekdays 771 //pending weekdays
771 writeEndDate = true; 772 writeEndDate = true;
772 773
773 break; 774 break;
774 case Recurrence::rMonthlyPos:// 2 775 case Recurrence::rMonthlyPos:// 2
775 list.append( "2" ); 776 list.append( "2" );
776 list.append( QString::number( rec->frequency()) );//12 777 list.append( QString::number( rec->frequency()) );//12
777 778
778 writeEndDate = true; 779 writeEndDate = true;
779 { 780 {
780 int count = 1; 781 int count = 1;
781 QPtrList<Recurrence::rMonthPos> rmp; 782 QPtrList<Recurrence::rMonthPos> rmp;
782 rmp = rec->monthPositions(); 783 rmp = rec->monthPositions();
783 if ( rmp.first()->negative ) 784 if ( rmp.first()->negative )
784 count = 5 - rmp.first()->rPos - 1; 785 count = 5 - rmp.first()->rPos - 1;
785 else 786 else
786 count = rmp.first()->rPos - 1; 787 count = rmp.first()->rPos - 1;
787 list.append( QString::number( count ) ); 788 list.append( QString::number( count ) );
788 789
789 } 790 }
790 791
791 list.append( "0" ); 792 list.append( "0" );
792 break; 793 break;
793 case Recurrence::rMonthlyDay:// 3 794 case Recurrence::rMonthlyDay:// 3
794 list.append( "3" ); 795 list.append( "3" );
795 list.append( QString::number( rec->frequency()) );//12 796 list.append( QString::number( rec->frequency()) );//12
796 list.append( "0" ); 797 list.append( "0" );
797 list.append( "0" ); 798 list.append( "0" );
798 writeEndDate = true; 799 writeEndDate = true;
799 break; 800 break;
800 case Recurrence::rYearlyMonth://4 801 case Recurrence::rYearlyMonth://4
801 list.append( "4" ); 802 list.append( "4" );
802 list.append( QString::number( rec->frequency()) );//12 803 list.append( QString::number( rec->frequency()) );//12
803 list.append( "0" ); 804 list.append( "0" );
804 list.append( "0" ); 805 list.append( "0" );
805 writeEndDate = true; 806 writeEndDate = true;
806 break; 807 break;
807 808
808 default: 809 default:
809 list.append( "255" ); 810 list.append( "255" );
810 list.append( QString() ); 811 list.append( QString() );
811 list.append( "0" ); 812 list.append( "0" );
812 list.append( QString() ); 813 list.append( QString() );
813 list.append( "0" ); 814 list.append( "0" );
814 list.append( "20991231T000000" ); 815 list.append( "20991231T000000" );
815 break; 816 break;
816 } 817 }
817 if ( writeEndDate ) { 818 if ( writeEndDate ) {
818 819
819 if ( rec->endDate().isValid() ) { // 15 + 16 820 if ( rec->endDate().isValid() ) { // 15 + 16
820 list.append( "1" ); 821 list.append( "1" );
821 list.append( dtToString( rec->endDate()) ); 822 list.append( dtToString( rec->endDate()) );
822 } else { 823 } else {
823 list.append( "0" ); 824 list.append( "0" );
824 list.append( "20991231T000000" ); 825 list.append( "20991231T000000" );
825 } 826 }
826 827
827 } 828 }
828 if ( event->doesFloat () ) { 829 if ( event->doesFloat () ) {
829 list.append( dtToString( event->dtStart(), false ).left( 8 )); 830 list.append( dtToString( event->dtStart(), false ).left( 8 ));
830 list.append( dtToString( event->dtEnd(), false ).left( 8 )); //6 831 list.append( dtToString( event->dtEnd(), false ).left( 8 )); //6
831 832
832 } 833 }
833 else { 834 else {
834 list.append( QString() ); 835 list.append( QString() );
835 list.append( QString() ); 836 list.append( QString() );
836 837
837 } 838 }
838 if (event->dtStart().date() == event->dtEnd().date() ) 839 if (event->dtStart().date() == event->dtEnd().date() )
839 list.append( "0" ); 840 list.append( "0" );
840 else 841 else
841 list.append( "1" ); 842 list.append( "1" );
842 843
843 844
844 for(QStringList::Iterator it=list.begin(); 845 for(QStringList::Iterator it=list.begin();
845 it!=list.end(); ++it){ 846 it!=list.end(); ++it){
846 QString& s = (*it); 847 QString& s = (*it);
847 s.replace(QRegExp("\""), "\"\""); 848 s.replace(QRegExp("\""), "\"\"");
848 if(s.contains(QRegExp("[,\"\r\n]")) || s.stripWhiteSpace() != s){ 849 if(s.contains(QRegExp("[,\"\r\n]")) || s.stripWhiteSpace() != s){
849 s.prepend('\"'); 850 s.prepend('\"');
850 s.append('\"'); 851 s.append('\"');
851 } else if(s.isEmpty() && !s.isNull()){ 852 } else if(s.isEmpty() && !s.isNull()){
852 s = "\"\""; 853 s = "\"\"";
853 } 854 }
854 } 855 }
855 return list.join(","); 856 return list.join(",");
856 857
857 858
858} 859}
859QString SharpFormat::getTodoString( Todo* todo ) 860QString SharpFormat::getTodoString( Todo* todo )
860{ 861{
861 QStringList list; 862 QStringList list;
862 list.append( QString::number( todo->zaurusId() ) ); 863 list.append( QString::number( todo->zaurusId() ) );
863 list.append( todo->categories().join(",") ); 864 list.append( todo->categories().join(",") );
864 865
865 if ( todo->hasStartDate() ) { 866 if ( todo->hasStartDate() ) {
866 list.append( dtToString( todo->dtStart()) ); 867 list.append( dtToString( todo->dtStart()) );
867 } else 868 } else
868 list.append( QString() ); 869 list.append( QString() );
869 870
870 if ( todo->hasDueDate() ) { 871 if ( todo->hasDueDate() ) {
871 QTime tim; 872 QTime tim;
872 if ( todo->doesFloat()) { 873 if ( todo->doesFloat()) {
873 list.append( dtToString( QDateTime(todo->dtDue().date(),QTime( 0,0,0 )), false)) ; 874 list.append( dtToString( QDateTime(todo->dtDue().date(),QTime( 0,0,0 )), false)) ;
874 } else { 875 } else {
875 list.append( dtToString(todo->dtDue() ) ); 876 list.append( dtToString(todo->dtDue() ) );
876 } 877 }
877 } else 878 } else
878 list.append( QString() ); 879 list.append( QString() );
879 880
880 if ( todo->isCompleted() ) { 881 if ( todo->isCompleted() ) {
881 list.append( dtToString( todo->completed()) ); 882 list.append( dtToString( todo->completed()) );
882 list.append( "0" ); // yes 0 == completed 883 list.append( "0" ); // yes 0 == completed
883 } else { 884 } else {
884 list.append( dtToString( todo->completed()) ); 885 list.append( dtToString( todo->completed()) );
885 list.append( "1" ); 886 list.append( "1" );
886 } 887 }
887 list.append( QString::number( todo->priority() )); 888 list.append( QString::number( todo->priority() ));
888 if( ! todo->summary().isEmpty() ) 889 if( ! todo->summary().isEmpty() )
889 list.append( todo->summary() ); 890 list.append( todo->summary() );
890 else 891 else
891 list.append( "" ); 892 list.append( "" );
892 if (! todo->description().isEmpty() ) 893 if (! todo->description().isEmpty() )
893 list.append( todo->description() ); 894 list.append( todo->description() );
894 else 895 else
895 list.append( "" ); 896 list.append( "" );
896 for(QStringList::Iterator it=list.begin(); 897 for(QStringList::Iterator it=list.begin();
897 it!=list.end(); ++it){ 898 it!=list.end(); ++it){
898 QString& s = (*it); 899 QString& s = (*it);
899 s.replace(QRegExp("\""), "\"\""); 900 s.replace(QRegExp("\""), "\"\"");
900 if(s.contains(QRegExp("[,\"\r\n]")) || s.stripWhiteSpace() != s){ 901 if(s.contains(QRegExp("[,\"\r\n]")) || s.stripWhiteSpace() != s){
901 s.prepend('\"'); 902 s.prepend('\"');
902 s.append('\"'); 903 s.append('\"');
903 } else if(s.isEmpty() && !s.isNull()){ 904 } else if(s.isEmpty() && !s.isNull()){
904 s = "\"\""; 905 s = "\"\"";
905 } 906 }
906 } 907 }
907 return list.join(","); 908 return list.join(",");
908} 909}
909QString SharpFormat::getPart( const QString & text, bool &ok, int &start ) 910QString SharpFormat::getPart( const QString & text, bool &ok, int &start )
910{ 911{
911 //qDebug("start %d ", start); 912 //qDebug("start %d ", start);
912 913
913 QString retval =""; 914 QString retval ="";
914 if ( text.at(start) == '"' ) { 915 if ( text.at(start) == '"' ) {
915 if ( text.mid( start,2) == "\"\"" && !( text.mid( start+2,1) == "\"")) { 916 if ( text.mid( start,2) == "\"\"" && !( text.mid( start+2,1) == "\"")) {
916 start = start +2; 917 start = start +2;
917 if ( text.mid( start,1) == "," ) { 918 if ( text.mid( start,1) == "," ) {
918 start += 1; 919 start += 1;
919 } 920 }
920 retval = ""; 921 retval = "";
921 if ( text.mid( start,1) == "\n" ) { 922 if ( text.mid( start,1) == "\n" ) {
922 start += 1; 923 start += 1;
923 ok = false; 924 ok = false;
924 } 925 }
925 return retval; 926 return retval;
926 } 927 }
927 int hk = start+1; 928 int hk = start+1;
928 hk = text.find ('"',hk); 929 hk = text.find ('"',hk);
929 while ( text.at(hk+1) == '"' ) 930 while ( text.at(hk+1) == '"' )
930 hk = text.find ('"',hk+2); 931 hk = text.find ('"',hk+2);
931 retval = text.mid( start+1, hk-start-1); 932 retval = text.mid( start+1, hk-start-1);
932 start = hk+1; 933 start = hk+1;
933 retval.replace( QRegExp("\"\""), "\""); 934 retval.replace( QRegExp("\"\""), "\"");
934 if ( text.mid( start,1) == "," ) { 935 if ( text.mid( start,1) == "," ) {
935 start += 1; 936 start += 1;
936 } 937 }
937 if ( text.mid( start,1) == "\n" ) { 938 if ( text.mid( start,1) == "\n" ) {
938 start += 1; 939 start += 1;
939 ok = false; 940 ok = false;
940 } 941 }
941 //qDebug("retval***%s*** ",retval.latin1() ); 942 //qDebug("retval***%s*** ",retval.latin1() );
942 return retval; 943 return retval;
943 944
944 } else { 945 } else {
945 int nl = text.find ("\n",start); 946 int nl = text.find ("\n",start);
946 int kom = text.find (',',start); 947 int kom = text.find (',',start);
947 if ( kom < nl ) { 948 if ( kom < nl ) {
948 // qDebug("kom < nl %d ", kom); 949 // qDebug("kom < nl %d ", kom);
949 retval = text.mid(start, kom-start); 950 retval = text.mid(start, kom-start);
950 start = kom+1; 951 start = kom+1;
951 return retval; 952 return retval;
952 } else { 953 } else {
953 if ( nl == kom ) { 954 if ( nl == kom ) {
954 // qDebug(" nl == kom "); 955 // qDebug(" nl == kom ");
955 start = 0; 956 start = 0;
956 ok = false; 957 ok = false;
957 return "0"; 958 return "0";
958 } 959 }
959 // qDebug(" nl < kom ", nl); 960 // qDebug(" nl < kom ", nl);
960 retval = text.mid( start, nl-start); 961 retval = text.mid( start, nl-start);
961 ok = false; 962 ok = false;
962 start = nl+1; 963 start = nl+1;
963 return retval; 964 return retval;
964 } 965 }
965 } 966 }
966} 967}
967bool SharpFormat::fromString( Calendar *calendar, const QString & text) 968bool SharpFormat::fromString( Calendar *calendar, const QString & text)
968{ 969{
969 return false; 970 return false;
970} 971}
971bool SharpFormat::fromString2Cal( Calendar *calendar,Calendar *existingCalendar, const QString & text, const QString & type) 972bool SharpFormat::fromString2Cal( Calendar *calendar,Calendar *existingCalendar, const QString & text, const QString & type)
972{ 973{
973 // qDebug("test %s ", text.latin1()); 974 // qDebug("test %s ", text.latin1());
974 QStringList templist; 975 QStringList templist;
975 QString tempString; 976 QString tempString;
976 int start = 0; 977 int start = 0;
977 int len = text.length(); 978 int len = text.length();
978 int end = text.find ("\n",start)+1; 979 int end = text.find ("\n",start)+1;
979 bool ok = true; 980 bool ok = true;
980 start = end; 981 start = end;
981 SharpParser handler( calendar ); 982 SharpParser handler( calendar );
982 handler.setCategoriesList( mCategories ); 983 handler.setCategoriesList( mCategories );
983 while ( start > 0 ) { 984 while ( start > 0 ) {
diff --git a/libkcal/syncdefines.h b/libkcal/syncdefines.h
new file mode 100644
index 0000000..57642ec
--- a/dev/null
+++ b/libkcal/syncdefines.h
@@ -0,0 +1,22 @@
1
2#ifndef _KSYNC_DEFINES_H_
3#define _KSYNC_DEFINES_H_
4
5#define SYNC_PREF_LOCAL 0
6#define SYNC_PREF_REMOTE 1
7#define SYNC_PREF_NEWEST 2
8#define SYNC_PREF_ASK 3
9#define SYNC_PREF_FORCE_LOCAL 4
10#define SYNC_PREF_FORCE_REMOTE 5
11#define SYNC_PREF_TAKE_BOTH 6
12
13#define SYNC_MODE_NORMAL 0
14#define SYNC_MODE_EXTERNAL 1
15
16#define SYNC_TEMPSTATE_INITIAL 0
17#define SYNC_TEMPSTATE_NEW_EXTERNAL -2
18#define SYNC_TEMPSTATE_DELETE -3
19#define SYNC_TEMPSTATE_NEW_ID -4
20
21
22#endif
diff --git a/libkdepim/ksyncprofile.h b/libkdepim/ksyncprofile.h
index 238ffad..3f7f1ac 100644
--- a/libkdepim/ksyncprofile.h
+++ b/libkdepim/ksyncprofile.h
@@ -1,106 +1,102 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 2004 Lutz Rogowski <rogowski@kde.org> 3 Copyright (c) 2004 Lutz Rogowski <rogowski@kde.org>
4 4
5 This library is free software; you can redistribute it and/or 5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public 6 modify it under the terms of the GNU Library General Public
7 License as published by the Free Software Foundation; either 7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version. 8 version 2 of the License, or (at your option) any later version.
9 9
10 This library is distributed in the hope that it will be useful, 10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details. 13 Library General Public License for more details.
14 14
15 You should have received a copy of the GNU Library General Public License 15 You should have received a copy of the GNU Library General Public License
16 along with this library; see the file COPYING.LIB. If not, write to 16 along with this library; see the file COPYING.LIB. If not, write to
17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA. 18 Boston, MA 02111-1307, USA.
19*/ 19*/
20#ifndef _KSYNCPROFILE_H 20#ifndef _KSYNCPROFILE_H
21#define _KSYNCPROFILE_H 21#define _KSYNCPROFILE_H
22 22
23#include <qptrlist.h> 23#include <qptrlist.h>
24#include <qcolor.h> 24#include <qcolor.h>
25#include <qfont.h> 25#include <qfont.h>
26#include <qstringlist.h> 26#include <qstringlist.h>
27#include <qobject.h> 27#include <qobject.h>
28#include <qstring.h> 28#include <qstring.h>
29 29
30#define SYNC_PREF_LOCAL 0 30#include <libkcal/syncdefines.h>
31#define SYNC_PREF_REMOTE 1 31
32#define SYNC_PREF_NEWEST 2 32
33#define SYNC_PREF_ASK 3
34#define SYNC_PREF_FORCE_LOCAL 4
35#define SYNC_PREF_FORCE_REMOTE 5
36#define SYNC_PREF_TAKE_BOTH 6
37 33
38class KConfig; 34class KConfig;
39 35
40/** 36/**
41 @short Class for storing a preferences setting 37 @short Class for storing a preferences setting
42 @author Cornelius Schumacher 38 @author Cornelius Schumacher
43 @see KPref 39 @see KPref
44 40
45 This class represents one preferences setting as used by @ref KPrefs. 41 This class represents one preferences setting as used by @ref KPrefs.
46 Subclasses of KPrefsItem implement storage functions for a certain type of 42 Subclasses of KPrefsItem implement storage functions for a certain type of
47 setting. Normally you don't have to use this class directly. Use the special 43 setting. Normally you don't have to use this class directly. Use the special
48 addItem() functions of KPrefs instead. If you subclass this class you will 44 addItem() functions of KPrefs instead. If you subclass this class you will
49 have to register instances with the function KPrefs::addItem(). 45 have to register instances with the function KPrefs::addItem().
50*/ 46*/
51class KSyncProfile : public QObject { 47class KSyncProfile : public QObject {
52 public: 48 public:
53 KSyncProfile( const char * name = 0); 49 KSyncProfile( const char * name = 0);
54 ~KSyncProfile() ; 50 ~KSyncProfile() ;
55 51
56 KSyncProfile* clone(); 52 KSyncProfile* clone();
57 void setDefault(); 53 void setDefault();
58 void readConfig(KConfig *); 54 void readConfig(KConfig *);
59 void writeConfig(KConfig *); 55 void writeConfig(KConfig *);
60 void setName( const QString& n ) {mName = n;} 56 void setName( const QString& n ) {mName = n;}
61 QString getName( ) { return mName;} 57 QString getName( ) { return mName;}
62 void setPreSyncCommand( const QString& n ) {mPreSyncCommand = n;} 58 void setPreSyncCommand( const QString& n ) {mPreSyncCommand = n;}
63 QString getPreSyncCommand( ) { return mPreSyncCommand; } 59 QString getPreSyncCommand( ) { return mPreSyncCommand; }
64 void setPostSyncCommand( const QString& n ) {mPostSyncCommand = n;} 60 void setPostSyncCommand( const QString& n ) {mPostSyncCommand = n;}
65 QString getPostSyncCommand( ) { return mPostSyncCommand;} 61 QString getPostSyncCommand( ) { return mPostSyncCommand;}
66 62
67 void setLocalTempFile( const QString& n ) { mLocalTempFile= n;} 63 void setLocalTempFile( const QString& n ) { mLocalTempFile= n;}
68 QString getLocalTempFile( ) { return mLocalTempFile;} 64 QString getLocalTempFile( ) { return mLocalTempFile;}
69 void setRemoteFileName( const QString& n ) { mRemoteFileName = n;} 65 void setRemoteFileName( const QString& n ) { mRemoteFileName = n;}
70 QString getRemoteFileName( ) { return mRemoteFileName;} 66 QString getRemoteFileName( ) { return mRemoteFileName;}
71 /* 67 /*
72 void set( const QString& n ) { = n;} 68 void set( const QString& n ) { = n;}
73 QString get( ) { return ;} 69 QString get( ) { return ;}
74 */ 70 */
75 71
76 void setShowSummaryAfterSync( bool b ) { mShowSummaryAfterSync = b;} 72 void setShowSummaryAfterSync( bool b ) { mShowSummaryAfterSync = b;}
77 bool getShowSummaryAfterSync( ) { return mShowSummaryAfterSync ;} 73 bool getShowSummaryAfterSync( ) { return mShowSummaryAfterSync ;}
78 void setAskForPreferences( bool b ) { mAskForPreferences= b;} 74 void setAskForPreferences( bool b ) { mAskForPreferences= b;}
79 bool getAskForPreferences( ) { return mAskForPreferences;} 75 bool getAskForPreferences( ) { return mAskForPreferences;}
80 void setWriteBackExisting( bool b ) { mWriteBackExisting = b;} 76 void setWriteBackExisting( bool b ) { mWriteBackExisting = b;}
81 bool getWriteBackExisting( ) { return mWriteBackExisting;} 77 bool getWriteBackExisting( ) { return mWriteBackExisting;}
82 void setWriteBackFile( bool b ) { mWriteBackFile= b;} 78 void setWriteBackFile( bool b ) { mWriteBackFile= b;}
83 bool getWriteBackFile( ) { return mWriteBackFile;} 79 bool getWriteBackFile( ) { return mWriteBackFile;}
84 void setIncludeInRingSync( bool b ) {mIncludeInRingSync = b;} 80 void setIncludeInRingSync( bool b ) {mIncludeInRingSync = b;}
85 bool getIncludeInRingSync( ) { return mIncludeInRingSync;} 81 bool getIncludeInRingSync( ) { return mIncludeInRingSync;}
86 void setSyncPrefs( int n ) { mSyncPrefs= n;} 82 void setSyncPrefs( int n ) { mSyncPrefs= n;}
87 int getSyncPrefs( ) { return mSyncPrefs;} 83 int getSyncPrefs( ) { return mSyncPrefs;}
88 void setIsLocalFileSync( bool b ) { mIsLocalFileSync= b;} 84 void setIsLocalFileSync( bool b ) { mIsLocalFileSync= b;}
89 bool getIsLocalFileSync( ) { return mIsLocalFileSync;} 85 bool getIsLocalFileSync( ) { return mIsLocalFileSync;}
90 86
91 private: 87 private:
92 QString mName; 88 QString mName;
93 QString mPreSyncCommand; 89 QString mPreSyncCommand;
94 QString mPostSyncCommand; 90 QString mPostSyncCommand;
95 QString mLocalTempFile; 91 QString mLocalTempFile;
96 QString mRemoteFileName; 92 QString mRemoteFileName;
97 bool mIncludeInRingSync; 93 bool mIncludeInRingSync;
98 int mSyncPrefs; 94 int mSyncPrefs;
99 bool mWriteBackFile; 95 bool mWriteBackFile;
100 bool mWriteBackExisting; 96 bool mWriteBackExisting;
101 bool mAskForPreferences; 97 bool mAskForPreferences;
102 bool mShowSummaryAfterSync; 98 bool mShowSummaryAfterSync;
103 bool mIsLocalFileSync; 99 bool mIsLocalFileSync;
104}; 100};
105 101
106#endif 102#endif