-rw-r--r-- | pwmanager/pwmanager/serializer.cpp | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/pwmanager/pwmanager/serializer.cpp b/pwmanager/pwmanager/serializer.cpp index 74b3354..203f82c 100644 --- a/pwmanager/pwmanager/serializer.cpp +++ b/pwmanager/pwmanager/serializer.cpp | |||
@@ -1,756 +1,756 @@ | |||
1 | /*************************************************************************** | 1 | /*************************************************************************** |
2 | * * | 2 | * * |
3 | * copyright (C) 2004 by Michael Buesch * | 3 | * copyright (C) 2004 by Michael Buesch * |
4 | * email: mbuesch@freenet.de * | 4 | * email: mbuesch@freenet.de * |
5 | * * | 5 | * * |
6 | * This program is free software; you can redistribute it and/or modify * | 6 | * This program is free software; you can redistribute it and/or modify * |
7 | * it under the terms of the GNU General Public License version 2 * | 7 | * it under the terms of the GNU General Public License version 2 * |
8 | * as published by the Free Software Foundation. * | 8 | * as published by the Free Software Foundation. * |
9 | * * | 9 | * * |
10 | ***************************************************************************/ | 10 | ***************************************************************************/ |
11 | 11 | ||
12 | 12 | ||
13 | /*************************************************************************** | 13 | /*************************************************************************** |
14 | * copyright (C) 2004 by Ulf Schenk | 14 | * copyright (C) 2004 by Ulf Schenk |
15 | * This file is originaly based on version 2.0 of pwmanager | 15 | * This file is originaly based on version 2.0 of pwmanager |
16 | * and was modified to run on embedded devices that run microkde | 16 | * and was modified to run on embedded devices that run microkde |
17 | * | 17 | * |
18 | * $Id$ | 18 | * $Id$ |
19 | **************************************************************************/ | 19 | **************************************************************************/ |
20 | 20 | ||
21 | #include "serializer.h" | 21 | #include "serializer.h" |
22 | #include "pwmexception.h" | 22 | #include "pwmexception.h" |
23 | 23 | ||
24 | #ifdef PWM_EMBEDDED | 24 | #ifdef PWM_EMBEDDED |
25 | #include <kglobal.h> | 25 | #include <kglobal.h> |
26 | #include <klocale.h> | 26 | #include <klocale.h> |
27 | #endif | 27 | #endif |
28 | 28 | ||
29 | /* enable/disable serializer debugging (0/1) */ | 29 | /* enable/disable serializer debugging (0/1) */ |
30 | #define SERIALIZER_DEBUG1 | 30 | #define SERIALIZER_DEBUG0 |
31 | /* use the old xml tags for writing (0/1) */ | 31 | /* use the old xml tags for writing (0/1) */ |
32 | #define USE_OLD_TAGS 0 | 32 | #define USE_OLD_TAGS 0 |
33 | /* write a CDATA section (0/1) */ | 33 | /* write a CDATA section (0/1) */ |
34 | #define WRITE_CDATA_SEC 0 | 34 | #define WRITE_CDATA_SEC 0 |
35 | 35 | ||
36 | 36 | ||
37 | #define META_CREATE_DATE"c" | 37 | #define META_CREATE_DATE"c" |
38 | #define META_VALID_DATE "v" | 38 | #define META_VALID_DATE "v" |
39 | #define META_EXPIRE_DATE"e" | 39 | #define META_EXPIRE_DATE"e" |
40 | #define META_UPDATE_DATE"u" | 40 | #define META_UPDATE_DATE"u" |
41 | #define META_UPDATE_INT "i" | 41 | #define META_UPDATE_INT "i" |
42 | //US ENH : uniqueid | 42 | //US ENH : uniqueid |
43 | #define META_UNIQUEID "n" | 43 | #define META_UNIQUEID "n" |
44 | #define SYNC_ROOT "s" | 44 | #define SYNC_ROOT "s" |
45 | #define SYNC_TARGET_PREFIX "t" | 45 | #define SYNC_TARGET_PREFIX "t" |
46 | #define SYNC_TARGET_NAME "n" | 46 | #define SYNC_TARGET_NAME "n" |
47 | 47 | ||
48 | 48 | ||
49 | /* This is compatibility stuff. | 49 | /* This is compatibility stuff. |
50 | * The names of the entries have changed and here are the | 50 | * The names of the entries have changed and here are the |
51 | * new and old ones | 51 | * new and old ones |
52 | */ | 52 | */ |
53 | #define ROOT_MAGIC_OLD "PwM-xml-dat" | 53 | #define ROOT_MAGIC_OLD "PwM-xml-dat" |
54 | #define VER_STR_OLD "ver" | 54 | #define VER_STR_OLD "ver" |
55 | #define COMPAT_VER_OLD "0x02" | 55 | #define COMPAT_VER_OLD "0x02" |
56 | #define CAT_ROOT_OLD "categories" | 56 | #define CAT_ROOT_OLD "categories" |
57 | #define CAT_PREFIX_OLD "cat_" | 57 | #define CAT_PREFIX_OLD "cat_" |
58 | #define CAT_NAME_OLD "name" | 58 | #define CAT_NAME_OLD "name" |
59 | #define ENTRY_PREFIX_OLD"entry_" | 59 | #define ENTRY_PREFIX_OLD"entry_" |
60 | #define ENTRY_DESC_OLD "desc" | 60 | #define ENTRY_DESC_OLD "desc" |
61 | #define ENTRY_NAME_OLD "name" | 61 | #define ENTRY_NAME_OLD "name" |
62 | #define ENTRY_PW_OLD "pw" | 62 | #define ENTRY_PW_OLD "pw" |
63 | #define ENTRY_COMMENT_OLD"comment" | 63 | #define ENTRY_COMMENT_OLD"comment" |
64 | #define ENTRY_URL_OLD "url" | 64 | #define ENTRY_URL_OLD "url" |
65 | #define ENTRY_LAUNCHER_OLD"launcher" | 65 | #define ENTRY_LAUNCHER_OLD"launcher" |
66 | #define ENTRY_LVP_OLD "listViewPos" | 66 | #define ENTRY_LVP_OLD "listViewPos" |
67 | #define ENTRY_BIN_OLD "b" | 67 | #define ENTRY_BIN_OLD "b" |
68 | #define ENTRY_META_OLD "m" | 68 | #define ENTRY_META_OLD "m" |
69 | 69 | ||
70 | #define ROOT_MAGIC_NEW "P" | 70 | #define ROOT_MAGIC_NEW "P" |
71 | #define VER_STR_NEW "v" | 71 | #define VER_STR_NEW "v" |
72 | #define COMPAT_VER_NEW "2" | 72 | #define COMPAT_VER_NEW "2" |
73 | #define CAT_ROOT_NEW "c" | 73 | #define CAT_ROOT_NEW "c" |
74 | #define CAT_PREFIX_NEW "c" | 74 | #define CAT_PREFIX_NEW "c" |
75 | #define CAT_NAME_NEW "n" | 75 | #define CAT_NAME_NEW "n" |
76 | #define ENTRY_PREFIX_NEW"e" | 76 | #define ENTRY_PREFIX_NEW"e" |
77 | #define ENTRY_DESC_NEW "d" | 77 | #define ENTRY_DESC_NEW "d" |
78 | #define ENTRY_NAME_NEW "n" | 78 | #define ENTRY_NAME_NEW "n" |
79 | #define ENTRY_PW_NEW "p" | 79 | #define ENTRY_PW_NEW "p" |
80 | #define ENTRY_COMMENT_NEW"c" | 80 | #define ENTRY_COMMENT_NEW"c" |
81 | #define ENTRY_URL_NEW "u" | 81 | #define ENTRY_URL_NEW "u" |
82 | #define ENTRY_LAUNCHER_NEW"l" | 82 | #define ENTRY_LAUNCHER_NEW"l" |
83 | #define ENTRY_LVP_NEW "v" | 83 | #define ENTRY_LVP_NEW "v" |
84 | #define ENTRY_BIN_NEW ENTRY_BIN_OLD | 84 | #define ENTRY_BIN_NEW ENTRY_BIN_OLD |
85 | #define ENTRY_META_NEW ENTRY_META_OLD | 85 | #define ENTRY_META_NEW ENTRY_META_OLD |
86 | 86 | ||
87 | #if USE_OLD_TAGS != 0 | 87 | #if USE_OLD_TAGS != 0 |
88 | # define ROOT_MAGIC_WR ROOT_MAGIC_OLD | 88 | # define ROOT_MAGIC_WR ROOT_MAGIC_OLD |
89 | # define VER_STR_WR VER_STR_OLD | 89 | # define VER_STR_WR VER_STR_OLD |
90 | # define COMPAT_VER_WR COMPAT_VER_OLD | 90 | # define COMPAT_VER_WR COMPAT_VER_OLD |
91 | # define CAT_ROOT_WR CAT_ROOT_OLD | 91 | # define CAT_ROOT_WR CAT_ROOT_OLD |
92 | # define CAT_PREFIX_WR CAT_PREFIX_OLD | 92 | # define CAT_PREFIX_WR CAT_PREFIX_OLD |
93 | # define CAT_NAME_WR CAT_NAME_OLD | 93 | # define CAT_NAME_WR CAT_NAME_OLD |
94 | # define ENTRY_PREFIX_WRENTRY_PREFIX_OLD | 94 | # define ENTRY_PREFIX_WRENTRY_PREFIX_OLD |
95 | # define ENTRY_DESC_WR ENTRY_DESC_OLD | 95 | # define ENTRY_DESC_WR ENTRY_DESC_OLD |
96 | # define ENTRY_NAME_WR ENTRY_NAME_OLD | 96 | # define ENTRY_NAME_WR ENTRY_NAME_OLD |
97 | # define ENTRY_PW_WR ENTRY_PW_OLD | 97 | # define ENTRY_PW_WR ENTRY_PW_OLD |
98 | # define ENTRY_COMMENT_WRENTRY_COMMENT_OLD | 98 | # define ENTRY_COMMENT_WRENTRY_COMMENT_OLD |
99 | # define ENTRY_URL_WR ENTRY_URL_OLD | 99 | # define ENTRY_URL_WR ENTRY_URL_OLD |
100 | # define ENTRY_LAUNCHER_WRENTRY_LAUNCHER_OLD | 100 | # define ENTRY_LAUNCHER_WRENTRY_LAUNCHER_OLD |
101 | # define ENTRY_LVP_WR ENTRY_LVP_OLD | 101 | # define ENTRY_LVP_WR ENTRY_LVP_OLD |
102 | # define ENTRY_BIN_WR ENTRY_BIN_OLD | 102 | # define ENTRY_BIN_WR ENTRY_BIN_OLD |
103 | # define ENTRY_META_WR ENTRY_META_OLD | 103 | # define ENTRY_META_WR ENTRY_META_OLD |
104 | #else | 104 | #else |
105 | # define ROOT_MAGIC_WR ROOT_MAGIC_NEW | 105 | # define ROOT_MAGIC_WR ROOT_MAGIC_NEW |
106 | # define VER_STR_WR VER_STR_NEW | 106 | # define VER_STR_WR VER_STR_NEW |
107 | # define COMPAT_VER_WR COMPAT_VER_NEW | 107 | # define COMPAT_VER_WR COMPAT_VER_NEW |
108 | # define CAT_ROOT_WR CAT_ROOT_NEW | 108 | # define CAT_ROOT_WR CAT_ROOT_NEW |
109 | # define CAT_PREFIX_WR CAT_PREFIX_NEW | 109 | # define CAT_PREFIX_WR CAT_PREFIX_NEW |
110 | # define CAT_NAME_WR CAT_NAME_NEW | 110 | # define CAT_NAME_WR CAT_NAME_NEW |
111 | # define ENTRY_PREFIX_WRENTRY_PREFIX_NEW | 111 | # define ENTRY_PREFIX_WRENTRY_PREFIX_NEW |
112 | # define ENTRY_DESC_WR ENTRY_DESC_NEW | 112 | # define ENTRY_DESC_WR ENTRY_DESC_NEW |
113 | # define ENTRY_NAME_WR ENTRY_NAME_NEW | 113 | # define ENTRY_NAME_WR ENTRY_NAME_NEW |
114 | # define ENTRY_PW_WR ENTRY_PW_NEW | 114 | # define ENTRY_PW_WR ENTRY_PW_NEW |
115 | # define ENTRY_COMMENT_WRENTRY_COMMENT_NEW | 115 | # define ENTRY_COMMENT_WRENTRY_COMMENT_NEW |
116 | # define ENTRY_URL_WR ENTRY_URL_NEW | 116 | # define ENTRY_URL_WR ENTRY_URL_NEW |
117 | # define ENTRY_LAUNCHER_WRENTRY_LAUNCHER_NEW | 117 | # define ENTRY_LAUNCHER_WRENTRY_LAUNCHER_NEW |
118 | # define ENTRY_LVP_WR ENTRY_LVP_NEW | 118 | # define ENTRY_LVP_WR ENTRY_LVP_NEW |
119 | # define ENTRY_BIN_WR ENTRY_BIN_NEW | 119 | # define ENTRY_BIN_WR ENTRY_BIN_NEW |
120 | # define ENTRY_META_WR ENTRY_META_NEW | 120 | # define ENTRY_META_WR ENTRY_META_NEW |
121 | #endif | 121 | #endif |
122 | 122 | ||
123 | 123 | ||
124 | Serializer::Serializer() | 124 | Serializer::Serializer() |
125 | { | 125 | { |
126 | defaultLockStat = true; | 126 | defaultLockStat = true; |
127 | //US BUG: I needed to specify a document name. Otherwise impl will not be created for serializing | 127 | //US BUG: I needed to specify a document name. Otherwise impl will not be created for serializing |
128 | #ifndef PWM_EMBEDDED | 128 | #ifndef PWM_EMBEDDED |
129 | domDoc = new QDomDocument; | 129 | domDoc = new QDomDocument; |
130 | #else | 130 | #else |
131 | domDoc = new QDomDocument("mydoc"); | 131 | domDoc = new QDomDocument("mydoc"); |
132 | #endif | 132 | #endif |
133 | } | 133 | } |
134 | 134 | ||
135 | Serializer::Serializer(const QCString &buffer) | 135 | Serializer::Serializer(const QCString &buffer) |
136 | { | 136 | { |
137 | defaultLockStat = true; | 137 | defaultLockStat = true; |
138 | //US BUG: I needed to specify a document name. Otherwise impl will not be created for serializing | 138 | //US BUG: I needed to specify a document name. Otherwise impl will not be created for serializing |
139 | #ifndef PWM_EMBEDDED | 139 | #ifndef PWM_EMBEDDED |
140 | domDoc = new QDomDocument; | 140 | domDoc = new QDomDocument; |
141 | #else | 141 | #else |
142 | domDoc = new QDomDocument("mydoc"); | 142 | domDoc = new QDomDocument("mydoc"); |
143 | #endif | 143 | #endif |
144 | 144 | ||
145 | if (!parseXml(buffer)) { | 145 | if (!parseXml(buffer)) { |
146 | delete domDoc; | 146 | delete domDoc; |
147 | #ifndef PWM_EMBEDDED | 147 | #ifndef PWM_EMBEDDED |
148 | throw PwMException(PwMException::EX_PARSE); | 148 | throw PwMException(PwMException::EX_PARSE); |
149 | #else | 149 | #else |
150 | qDebug("Serializer::Serializer : Parse Exception "); | 150 | qDebug("Serializer::Serializer : Parse Exception "); |
151 | #endif | 151 | #endif |
152 | } | 152 | } |
153 | } | 153 | } |
154 | 154 | ||
155 | Serializer::~Serializer() | 155 | Serializer::~Serializer() |
156 | { | 156 | { |
157 | delete_ifnot_null(domDoc); | 157 | delete_ifnot_null(domDoc); |
158 | } | 158 | } |
159 | 159 | ||
160 | void Serializer::clear() | 160 | void Serializer::clear() |
161 | { | 161 | { |
162 | delete_ifnot_null(domDoc); | 162 | delete_ifnot_null(domDoc); |
163 | domDoc = new QDomDocument; | 163 | domDoc = new QDomDocument; |
164 | } | 164 | } |
165 | 165 | ||
166 | bool Serializer::parseXml(const QCString &buffer) | 166 | bool Serializer::parseXml(const QCString &buffer) |
167 | { | 167 | { |
168 | PWM_ASSERT(domDoc); | 168 | PWM_ASSERT(domDoc); |
169 | #ifndef PWM_EMBEDDED | 169 | #ifndef PWM_EMBEDDED |
170 | if (!domDoc->setContent(buffer, true)) | 170 | if (!domDoc->setContent(buffer, true)) |
171 | return false; | 171 | return false; |
172 | #else | 172 | #else |
173 | if (!domDoc->setContent(buffer)) | 173 | if (!domDoc->setContent(buffer)) |
174 | return false; | 174 | return false; |
175 | #endif | 175 | #endif |
176 | if (!checkValid()) | 176 | if (!checkValid()) |
177 | return false; | 177 | return false; |
178 | return true; | 178 | return true; |
179 | } | 179 | } |
180 | 180 | ||
181 | QCString Serializer::getXml() | 181 | QCString Serializer::getXml() |
182 | { | 182 | { |
183 | PWM_ASSERT(domDoc); | 183 | PWM_ASSERT(domDoc); |
184 | 184 | ||
185 | #ifndef PWM_EMBEDDED | 185 | #ifndef PWM_EMBEDDED |
186 | #if defined(PWM_DEBUG) && SERIALIZER_DEBUG != 0 | 186 | #if defined(PWM_DEBUG) && SERIALIZER_DEBUG != 0 |
187 | QCString tmp(domDoc->toCString(8)); | 187 | QCString tmp(domDoc->toCString(8)); |
188 | printDebug("<BEGIN Serializer::getXml() dump>\n"); | 188 | printDebug("<BEGIN Serializer::getXml() dump>\n"); |
189 | cout << tmp << endl; | 189 | cout << tmp << endl; |
190 | printDebug("<END Serializer::getXml() dump>"); | 190 | printDebug("<END Serializer::getXml() dump>"); |
191 | #endif // DEBUG | 191 | #endif // DEBUG |
192 | 192 | ||
193 | QCString ret(domDoc->toCString(0)); | 193 | QCString ret(domDoc->toCString(0)); |
194 | ret.replace('\n', ""); | 194 | ret.replace('\n', ""); |
195 | return ret; | 195 | return ret; |
196 | #else | 196 | #else |
197 | 197 | ||
198 | #if defined(PWM_DEBUG) && SERIALIZER_DEBUG != 0 | 198 | #if defined(PWM_DEBUG) && SERIALIZER_DEBUG != 0 |
199 | QCString tmp(" " + domDoc->toCString()); | 199 | QCString tmp(" " + domDoc->toCString()); |
200 | printDebug("<BEGIN Serializer::getXml() dump>\n"); | 200 | printDebug("<BEGIN Serializer::getXml() dump>\n"); |
201 | qDebug(tmp); | 201 | qDebug(tmp); |
202 | cout << tmp << endl; | 202 | cout << tmp << endl; |
203 | printDebug("<END Serializer::getXml() dump>"); | 203 | printDebug("<END Serializer::getXml() dump>"); |
204 | #endif // DEBUG | 204 | #endif // DEBUG |
205 | 205 | ||
206 | QCString ret(domDoc->toCString()); | 206 | QCString ret(domDoc->toCString()); |
207 | ret.replace(QRegExp("\n"), ""); | 207 | ret.replace(QRegExp("\n"), ""); |
208 | return ret; | 208 | return ret; |
209 | 209 | ||
210 | #endif | 210 | #endif |
211 | } | 211 | } |
212 | 212 | ||
213 | bool Serializer::serialize(PwMItem &dta) | 213 | bool Serializer::serialize(PwMItem &dta) |
214 | { | 214 | { |
215 | PWM_ASSERT(domDoc); | 215 | PWM_ASSERT(domDoc); |
216 | QDomElement root(genNewRoot()); | 216 | QDomElement root(genNewRoot()); |
217 | QDomElement catNode(domDoc->createElement(CAT_ROOT_WR)); | 217 | QDomElement catNode(domDoc->createElement(CAT_ROOT_WR)); |
218 | QDomElement syncNode(domDoc->createElement(SYNC_ROOT)); | 218 | QDomElement syncNode(domDoc->createElement(SYNC_ROOT)); |
219 | if (!addSyncData(&syncNode, dta.syncDta)) | 219 | if (!addSyncData(&syncNode, dta.syncDta)) |
220 | return false; | 220 | return false; |
221 | root.appendChild(syncNode); | 221 | root.appendChild(syncNode); |
222 | if (!addCategories(&catNode, dta.dta)) | 222 | if (!addCategories(&catNode, dta.dta)) |
223 | return false; | 223 | return false; |
224 | root.appendChild(catNode); | 224 | root.appendChild(catNode); |
225 | return true; | 225 | return true; |
226 | } | 226 | } |
227 | 227 | ||
228 | bool Serializer::deSerialize(PwMItem *dta) | 228 | bool Serializer::deSerialize(PwMItem *dta) |
229 | { | 229 | { |
230 | PWM_ASSERT(domDoc); | 230 | PWM_ASSERT(domDoc); |
231 | PWM_ASSERT(dta); | 231 | PWM_ASSERT(dta); |
232 | QDomElement root(domDoc->documentElement()); | 232 | QDomElement root(domDoc->documentElement()); |
233 | QDomNode n; | 233 | QDomNode n; |
234 | 234 | ||
235 | dta->clear(); | 235 | dta->clear(); |
236 | for (n = root.firstChild(); !n.isNull(); n = n.nextSibling()) { | 236 | for (n = root.firstChild(); !n.isNull(); n = n.nextSibling()) { |
237 | // find <categories> ... </categories> | 237 | // find <categories> ... </categories> |
238 | // <c> ... </c> | 238 | // <c> ... </c> |
239 | if (n.nodeName() == CAT_ROOT_NEW || | 239 | if (n.nodeName() == CAT_ROOT_NEW || |
240 | n.nodeName() == CAT_ROOT_OLD) { | 240 | n.nodeName() == CAT_ROOT_OLD) { |
241 | if (!readCategories(n, &(dta->dta))) { | 241 | if (!readCategories(n, &(dta->dta))) { |
242 | return false; | 242 | return false; |
243 | } | 243 | } |
244 | continue; | 244 | continue; |
245 | } | 245 | } |
246 | else if (n.nodeName() == SYNC_ROOT) { | 246 | else if (n.nodeName() == SYNC_ROOT) { |
247 | if (!readSyncData(n, &(dta->syncDta))) { | 247 | if (!readSyncData(n, &(dta->syncDta))) { |
248 | return false; | 248 | return false; |
249 | } | 249 | } |
250 | continue; | 250 | continue; |
251 | } | 251 | } |
252 | 252 | ||
253 | /* NOTE: We can stop processing here, as we | 253 | /* NOTE: We can stop processing here, as we |
254 | * don't have more nodes in root, yet. | 254 | * don't have more nodes in root, yet. |
255 | */ | 255 | */ |
256 | return false; | 256 | return false; |
257 | 257 | ||
258 | } | 258 | } |
259 | return true; | 259 | return true; |
260 | } | 260 | } |
261 | 261 | ||
262 | bool Serializer::readCategories(const QDomNode &n, | 262 | bool Serializer::readCategories(const QDomNode &n, |
263 | vector<PwMCategoryItem> *dta) | 263 | vector<PwMCategoryItem> *dta) |
264 | { | 264 | { |
265 | QDomNodeList nl(n.childNodes()); | 265 | QDomNodeList nl(n.childNodes()); |
266 | QDomNode cur; | 266 | QDomNode cur; |
267 | QString name; | 267 | QString name; |
268 | unsigned int numCat = nl.count(), i; | 268 | unsigned int numCat = nl.count(), i; |
269 | PwMCategoryItem curCat; | 269 | PwMCategoryItem curCat; |
270 | vector<PwMDataItem> curEntr; | 270 | vector<PwMDataItem> curEntr; |
271 | 271 | ||
272 | if (!numCat) { | 272 | if (!numCat) { |
273 | printDebug("Serializer::readCategories(): empty"); | 273 | printDebug("Serializer::readCategories(): empty"); |
274 | return false; | 274 | return false; |
275 | } | 275 | } |
276 | for (i = 0; i < numCat; ++i) { | 276 | for (i = 0; i < numCat; ++i) { |
277 | cur = nl.item(i); | 277 | cur = nl.item(i); |
278 | if (cur.nodeName().left(1) == CAT_PREFIX_NEW || | 278 | if (cur.nodeName().left(1) == CAT_PREFIX_NEW || |
279 | cur.nodeName().left(4) == CAT_PREFIX_OLD) { | 279 | cur.nodeName().left(4) == CAT_PREFIX_OLD) { |
280 | name = cur.toElement().attribute(CAT_NAME_NEW); | 280 | name = cur.toElement().attribute(CAT_NAME_NEW); |
281 | if (name == QString::null) | 281 | if (name == QString::null) |
282 | name = cur.toElement().attribute(CAT_NAME_OLD); | 282 | name = cur.toElement().attribute(CAT_NAME_OLD); |
283 | PWM_ASSERT(name != QString::null); | 283 | PWM_ASSERT(name != QString::null); |
284 | PWM_ASSERT(name != ""); | 284 | PWM_ASSERT(name != ""); |
285 | curCat.clear(); | 285 | curCat.clear(); |
286 | curCat.name = name.latin1(); | 286 | curCat.name = name.latin1(); |
287 | if (!readEntries(cur, &curEntr)) { | 287 | if (!readEntries(cur, &curEntr)) { |
288 | dta->clear(); | 288 | dta->clear(); |
289 | return false; | 289 | return false; |
290 | } | 290 | } |
291 | curCat.d = curEntr; | 291 | curCat.d = curEntr; |
292 | dta->push_back(curCat); | 292 | dta->push_back(curCat); |
293 | } else { | 293 | } else { |
294 | printDebug("Serializer::readCategories(): uh? not a category?"); | 294 | printDebug("Serializer::readCategories(): uh? not a category?"); |
295 | } | 295 | } |
296 | } | 296 | } |
297 | return true; | 297 | return true; |
298 | } | 298 | } |
299 | 299 | ||
300 | bool Serializer::readEntries(const QDomNode &n, | 300 | bool Serializer::readEntries(const QDomNode &n, |
301 | vector<PwMDataItem> *dta) | 301 | vector<PwMDataItem> *dta) |
302 | { | 302 | { |
303 | QDomNodeList nl(n.childNodes()); | 303 | QDomNodeList nl(n.childNodes()); |
304 | QDomNode cur; | 304 | QDomNode cur; |
305 | unsigned int numEntr = nl.count(), i; | 305 | unsigned int numEntr = nl.count(), i; |
306 | PwMDataItem curEntr; | 306 | PwMDataItem curEntr; |
307 | 307 | ||
308 | dta->clear(); | 308 | dta->clear(); |
309 | for (i = 0; i < numEntr; ++i) { | 309 | for (i = 0; i < numEntr; ++i) { |
310 | cur = nl.item(i); | 310 | cur = nl.item(i); |
311 | if (cur.nodeName().left(1) == ENTRY_PREFIX_NEW || | 311 | if (cur.nodeName().left(1) == ENTRY_PREFIX_NEW || |
312 | cur.nodeName().left(6) == ENTRY_PREFIX_OLD) { | 312 | cur.nodeName().left(6) == ENTRY_PREFIX_OLD) { |
313 | if (!extractEntry(cur, &curEntr)) { | 313 | if (!extractEntry(cur, &curEntr)) { |
314 | return false; | 314 | return false; |
315 | } | 315 | } |
316 | dta->push_back(curEntr); | 316 | dta->push_back(curEntr); |
317 | } else { | 317 | } else { |
318 | printDebug("Serializer::readEntries(): hm? not an entry?"); | 318 | printDebug("Serializer::readEntries(): hm? not an entry?"); |
319 | } | 319 | } |
320 | } | 320 | } |
321 | return true; | 321 | return true; |
322 | } | 322 | } |
323 | 323 | ||
324 | bool Serializer::extractEntry(const QDomNode &n, | 324 | bool Serializer::extractEntry(const QDomNode &n, |
325 | PwMDataItem *dta) | 325 | PwMDataItem *dta) |
326 | { | 326 | { |
327 | QDomNodeList nl(n.childNodes()); | 327 | QDomNodeList nl(n.childNodes()); |
328 | QDomNode cur, cdata; | 328 | QDomNode cur, cdata; |
329 | unsigned int cnt = nl.count(), i; | 329 | unsigned int cnt = nl.count(), i; |
330 | QString name, text; | 330 | QString name, text; |
331 | 331 | ||
332 | if (!cnt) { | 332 | if (!cnt) { |
333 | printDebug("Serializer::extractEntry(): empty"); | 333 | printDebug("Serializer::extractEntry(): empty"); |
334 | return false; | 334 | return false; |
335 | } | 335 | } |
336 | dta->clear(); | 336 | dta->clear(); |
337 | for (i = 0; i < cnt; ++i) { | 337 | for (i = 0; i < cnt; ++i) { |
338 | cur = nl.item(i); | 338 | cur = nl.item(i); |
339 | name = cur.nodeName(); | 339 | name = cur.nodeName(); |
340 | cdata = cur.firstChild(); | 340 | cdata = cur.firstChild(); |
341 | if (unlikely(cdata.isCDATASection())) { | 341 | if (unlikely(cdata.isCDATASection())) { |
342 | text = cdata.toCDATASection().data(); | 342 | text = cdata.toCDATASection().data(); |
343 | } else if (likely(cur.isElement())) { | 343 | } else if (likely(cur.isElement())) { |
344 | text = cur.toElement().text(); | 344 | text = cur.toElement().text(); |
345 | } else { | 345 | } else { |
346 | printDebug("Serializer::extractEntry(): neither CDATA nor element."); | 346 | printDebug("Serializer::extractEntry(): neither CDATA nor element."); |
347 | return false; | 347 | return false; |
348 | } | 348 | } |
349 | if (text == " ") | 349 | if (text == " ") |
350 | text = ""; // for backward compatibility. | 350 | text = ""; // for backward compatibility. |
351 | if (name == ENTRY_DESC_NEW || | 351 | if (name == ENTRY_DESC_NEW || |
352 | name == ENTRY_DESC_OLD) { | 352 | name == ENTRY_DESC_OLD) { |
353 | dta->desc = unescapeEntryData(text).latin1(); | 353 | dta->desc = unescapeEntryData(text).latin1(); |
354 | } else if (name == ENTRY_NAME_NEW || | 354 | } else if (name == ENTRY_NAME_NEW || |
355 | name == ENTRY_NAME_OLD) { | 355 | name == ENTRY_NAME_OLD) { |
356 | dta->name = unescapeEntryData(text).latin1(); | 356 | dta->name = unescapeEntryData(text).latin1(); |
357 | } else if (name == ENTRY_PW_NEW || | 357 | } else if (name == ENTRY_PW_NEW || |
358 | name == ENTRY_PW_OLD) { | 358 | name == ENTRY_PW_OLD) { |
359 | dta->pw = unescapeEntryData(text).latin1(); | 359 | dta->pw = unescapeEntryData(text).latin1(); |
360 | } else if (name == ENTRY_COMMENT_NEW || | 360 | } else if (name == ENTRY_COMMENT_NEW || |
361 | name == ENTRY_COMMENT_OLD) { | 361 | name == ENTRY_COMMENT_OLD) { |
362 | dta->comment = unescapeEntryData(text).latin1(); | 362 | dta->comment = unescapeEntryData(text).latin1(); |
363 | } else if (name == ENTRY_URL_NEW || | 363 | } else if (name == ENTRY_URL_NEW || |
364 | name == ENTRY_URL_OLD) { | 364 | name == ENTRY_URL_OLD) { |
365 | dta->url = unescapeEntryData(text).latin1(); | 365 | dta->url = unescapeEntryData(text).latin1(); |
366 | } else if (name == ENTRY_LAUNCHER_NEW || | 366 | } else if (name == ENTRY_LAUNCHER_NEW || |
367 | name == ENTRY_LAUNCHER_OLD) { | 367 | name == ENTRY_LAUNCHER_OLD) { |
368 | dta->launcher = unescapeEntryData(text).latin1(); | 368 | dta->launcher = unescapeEntryData(text).latin1(); |
369 | } else if (name == ENTRY_LVP_NEW || | 369 | } else if (name == ENTRY_LVP_NEW || |
370 | name == ENTRY_LVP_OLD) { | 370 | name == ENTRY_LVP_OLD) { |
371 | dta->listViewPos = strtol(text.latin1(), 0, 10); | 371 | dta->listViewPos = strtol(text.latin1(), 0, 10); |
372 | } else if (name == ENTRY_BIN_NEW) { | 372 | } else if (name == ENTRY_BIN_NEW) { |
373 | // ENTRY_BIN_NEW == ENTRY_BIN_OLD | 373 | // ENTRY_BIN_NEW == ENTRY_BIN_OLD |
374 | if (text == "0") { | 374 | if (text == "0") { |
375 | dta->binary = false; | 375 | dta->binary = false; |
376 | } else { | 376 | } else { |
377 | dta->binary = true; | 377 | dta->binary = true; |
378 | } | 378 | } |
379 | } else if (name == ENTRY_META_NEW) { | 379 | } else if (name == ENTRY_META_NEW) { |
380 | // ENTRY_META_NEW == ENTRY_META_OLD | 380 | // ENTRY_META_NEW == ENTRY_META_OLD |
381 | if (!extractMeta(cur, &dta->meta)) | 381 | if (!extractMeta(cur, &dta->meta)) |
382 | return false; | 382 | return false; |
383 | } else { | 383 | } else { |
384 | printDebug(string("Serializer::extractEntry(): invalid: ") | 384 | printDebug(string("Serializer::extractEntry(): invalid: ") |
385 | + name.latin1()); | 385 | + name.latin1()); |
386 | } | 386 | } |
387 | } | 387 | } |
388 | dta->lockStat = defaultLockStat; | 388 | dta->lockStat = defaultLockStat; |
389 | return true; | 389 | return true; |
390 | } | 390 | } |
391 | 391 | ||
392 | bool Serializer::extractMeta(const QDomNode &n, | 392 | bool Serializer::extractMeta(const QDomNode &n, |
393 | PwMMetaData *dta) | 393 | PwMMetaData *dta) |
394 | { | 394 | { |
395 | QDomNode cur(n.firstChild()); | 395 | QDomNode cur(n.firstChild()); |
396 | QString name, val; | 396 | QString name, val; |
397 | while (!cur.isNull()) { | 397 | while (!cur.isNull()) { |
398 | name = cur.nodeName(); | 398 | name = cur.nodeName(); |
399 | val = cur.toElement().text(); | 399 | val = cur.toElement().text(); |
400 | if (val == "") { | 400 | if (val == "") { |
401 | cur = cur.nextSibling(); | 401 | cur = cur.nextSibling(); |
402 | continue; | 402 | continue; |
403 | } | 403 | } |
404 | #ifndef PWM_EMBEDDED | 404 | #ifndef PWM_EMBEDDED |
405 | if (name == META_CREATE_DATE) { | 405 | if (name == META_CREATE_DATE) { |
406 | dta->create = QDateTime::fromString(val, Qt::ISODate); | 406 | dta->create = QDateTime::fromString(val, Qt::ISODate); |
407 | } else if (name == META_VALID_DATE) { | 407 | } else if (name == META_VALID_DATE) { |
408 | dta->valid = QDateTime::fromString(val, Qt::ISODate); | 408 | dta->valid = QDateTime::fromString(val, Qt::ISODate); |
409 | } else if (name == META_EXPIRE_DATE) { | 409 | } else if (name == META_EXPIRE_DATE) { |
410 | dta->expire = QDateTime::fromString(val, Qt::ISODate); | 410 | dta->expire = QDateTime::fromString(val, Qt::ISODate); |
411 | } else if (name == META_UPDATE_DATE) { | 411 | } else if (name == META_UPDATE_DATE) { |
412 | dta->update = QDateTime::fromString(val, Qt::ISODate); | 412 | dta->update = QDateTime::fromString(val, Qt::ISODate); |
413 | } else if (name == META_UPDATE_INT) { | 413 | } else if (name == META_UPDATE_INT) { |
414 | dta->updateInt = strtoul(val.latin1(), 0, 10); | 414 | dta->updateInt = strtoul(val.latin1(), 0, 10); |
415 | } else if (name == META_UNIQUEID) { | 415 | } else if (name == META_UNIQUEID) { |
416 | dta->uniqueid = unescapeEntryData(val).latin1(); | 416 | dta->uniqueid = unescapeEntryData(val).latin1(); |
417 | } else { | 417 | } else { |
418 | printDebug(string("extractMeta(): invalid: ") | 418 | printDebug(string("extractMeta(): invalid: ") |
419 | + name.latin1()); | 419 | + name.latin1()); |
420 | } | 420 | } |
421 | #else | 421 | #else |
422 | 422 | ||
423 | 423 | ||
424 | bool ok = true; | 424 | bool ok = true; |
425 | 425 | ||
426 | if (name == META_CREATE_DATE) { | 426 | if (name == META_CREATE_DATE) { |
427 | dta->create = KGlobal::locale()->readDateTime(val, KLocale::ISODate, &ok); | 427 | dta->create = KGlobal::locale()->readDateTime(val, KLocale::ISODate, &ok); |
428 | } else if (name == META_VALID_DATE) { | 428 | } else if (name == META_VALID_DATE) { |
429 | dta->valid = KGlobal::locale()->readDateTime(val, KLocale::ISODate, &ok); | 429 | dta->valid = KGlobal::locale()->readDateTime(val, KLocale::ISODate, &ok); |
430 | } else if (name == META_EXPIRE_DATE) { | 430 | } else if (name == META_EXPIRE_DATE) { |
431 | dta->expire = KGlobal::locale()->readDateTime(val, KLocale::ISODate, &ok); | 431 | dta->expire = KGlobal::locale()->readDateTime(val, KLocale::ISODate, &ok); |
432 | } else if (name == META_UPDATE_DATE) { | 432 | } else if (name == META_UPDATE_DATE) { |
433 | dta->update = KGlobal::locale()->readDateTime(val, KLocale::ISODate, &ok); | 433 | dta->update = KGlobal::locale()->readDateTime(val, KLocale::ISODate, &ok); |
434 | } else if (name == META_UPDATE_INT) { | 434 | } else if (name == META_UPDATE_INT) { |
435 | dta->updateInt = strtoul(val.latin1(), 0, 10); | 435 | dta->updateInt = strtoul(val.latin1(), 0, 10); |
436 | } else if (name == META_UNIQUEID) { | 436 | } else if (name == META_UNIQUEID) { |
437 | dta->uniqueid = unescapeEntryData(val).latin1(); | 437 | dta->uniqueid = unescapeEntryData(val).latin1(); |
438 | } else { | 438 | } else { |
439 | printDebug(string("extractMeta(): invalid: ") | 439 | printDebug(string("extractMeta(): invalid: ") |
440 | + name.latin1()); | 440 | + name.latin1()); |
441 | } | 441 | } |
442 | 442 | ||
443 | if (ok == false) | 443 | if (ok == false) |
444 | qDebug("Serializer::extractMeta invalid date or time !!!!!!!!!!!!!"); | 444 | qDebug("Serializer::extractMeta invalid date or time !!!!!!!!!!!!!"); |
445 | 445 | ||
446 | 446 | ||
447 | #endif | 447 | #endif |
448 | cur = cur.nextSibling(); | 448 | cur = cur.nextSibling(); |
449 | } | 449 | } |
450 | return true; | 450 | return true; |
451 | } | 451 | } |
452 | 452 | ||
453 | bool Serializer::checkValid() | 453 | bool Serializer::checkValid() |
454 | { | 454 | { |
455 | PWM_ASSERT(domDoc); | 455 | PWM_ASSERT(domDoc); |
456 | QDomElement root(domDoc->documentElement()); | 456 | QDomElement root(domDoc->documentElement()); |
457 | if (root.nodeName() != ROOT_MAGIC_NEW && | 457 | if (root.nodeName() != ROOT_MAGIC_NEW && |
458 | root.nodeName() != ROOT_MAGIC_OLD) { | 458 | root.nodeName() != ROOT_MAGIC_OLD) { |
459 | printDebug("Serializer: wrong magic"); | 459 | printDebug("Serializer: wrong magic"); |
460 | return false; | 460 | return false; |
461 | } | 461 | } |
462 | if (root.attribute(VER_STR_NEW) != COMPAT_VER_NEW && | 462 | if (root.attribute(VER_STR_NEW) != COMPAT_VER_NEW && |
463 | root.attribute(VER_STR_OLD) != COMPAT_VER_OLD) { | 463 | root.attribute(VER_STR_OLD) != COMPAT_VER_OLD) { |
464 | printDebug("Serializer: wrong version"); | 464 | printDebug("Serializer: wrong version"); |
465 | return false; | 465 | return false; |
466 | } | 466 | } |
467 | return true; | 467 | return true; |
468 | } | 468 | } |
469 | 469 | ||
470 | QDomElement Serializer::genNewRoot() | 470 | QDomElement Serializer::genNewRoot() |
471 | { | 471 | { |
472 | PWM_ASSERT(domDoc); | 472 | PWM_ASSERT(domDoc); |
473 | QDomElement root(domDoc->createElement(ROOT_MAGIC_WR)); | 473 | QDomElement root(domDoc->createElement(ROOT_MAGIC_WR)); |
474 | root.setAttribute(VER_STR_WR, COMPAT_VER_WR); | 474 | root.setAttribute(VER_STR_WR, COMPAT_VER_WR); |
475 | domDoc->appendChild(root); | 475 | domDoc->appendChild(root); |
476 | return root; | 476 | return root; |
477 | } | 477 | } |
478 | 478 | ||
479 | bool Serializer::addCategories(QDomElement *e, | 479 | bool Serializer::addCategories(QDomElement *e, |
480 | const vector<PwMCategoryItem> &dta) | 480 | const vector<PwMCategoryItem> &dta) |
481 | { | 481 | { |
482 | unsigned int numCat = dta.size(), i; | 482 | unsigned int numCat = dta.size(), i; |
483 | QString curId, curName; | 483 | QString curId, curName; |
484 | QDomElement curCat; | 484 | QDomElement curCat; |
485 | 485 | ||
486 | for (i = 0; i < numCat; ++i) { | 486 | for (i = 0; i < numCat; ++i) { |
487 | curId = CAT_PREFIX_WR; | 487 | curId = CAT_PREFIX_WR; |
488 | curId += tostr(i).c_str(); | 488 | curId += tostr(i).c_str(); |
489 | curName = dta[i].name.c_str(); | 489 | curName = dta[i].name.c_str(); |
490 | curCat = domDoc->createElement(curId); | 490 | curCat = domDoc->createElement(curId); |
491 | curCat.setAttribute(CAT_NAME_WR, curName); | 491 | curCat.setAttribute(CAT_NAME_WR, curName); |
492 | if (!addEntries(&curCat, dta[i].d)) { | 492 | if (!addEntries(&curCat, dta[i].d)) { |
493 | return false; | 493 | return false; |
494 | } | 494 | } |
495 | e->appendChild(curCat); | 495 | e->appendChild(curCat); |
496 | } | 496 | } |
497 | return true; | 497 | return true; |
498 | } | 498 | } |
499 | 499 | ||
500 | bool Serializer::addEntries(QDomElement *e, | 500 | bool Serializer::addEntries(QDomElement *e, |
501 | const vector<PwMDataItem> &dta) | 501 | const vector<PwMDataItem> &dta) |
502 | { | 502 | { |
503 | unsigned int numEntr = dta.size(), i; | 503 | unsigned int numEntr = dta.size(), i; |
504 | QString curId; | 504 | QString curId; |
505 | QDomElement curEntr; | 505 | QDomElement curEntr; |
506 | 506 | ||
507 | for (i = 0; i < numEntr; ++i) { | 507 | for (i = 0; i < numEntr; ++i) { |
508 | curId = ENTRY_PREFIX_WR; | 508 | curId = ENTRY_PREFIX_WR; |
509 | curId += tostr(i).c_str(); | 509 | curId += tostr(i).c_str(); |
510 | curEntr = domDoc->createElement(curId); | 510 | curEntr = domDoc->createElement(curId); |
511 | if (!writeEntry(&curEntr, dta[i])) { | 511 | if (!writeEntry(&curEntr, dta[i])) { |
512 | return false; | 512 | return false; |
513 | } | 513 | } |
514 | e->appendChild(curEntr); | 514 | e->appendChild(curEntr); |
515 | } | 515 | } |
516 | return true; | 516 | return true; |
517 | } | 517 | } |
518 | 518 | ||
519 | bool Serializer::writeEntry(QDomElement *e, | 519 | bool Serializer::writeEntry(QDomElement *e, |
520 | const PwMDataItem &_dta) | 520 | const PwMDataItem &_dta) |
521 | { | 521 | { |
522 | #if WRITE_CDATA_SEC != 0 | 522 | #if WRITE_CDATA_SEC != 0 |
523 | # define new_text(x)domDoc->createCDATASection(x) | 523 | # define new_text(x)domDoc->createCDATASection(x) |
524 | QDomCDATASection curText; | 524 | QDomCDATASection curText; |
525 | #else | 525 | #else |
526 | # define new_text(x)domDoc->createTextNode(x) | 526 | # define new_text(x)domDoc->createTextNode(x) |
527 | QDomText curText; | 527 | QDomText curText; |
528 | #endif | 528 | #endif |
529 | 529 | ||
530 | QDomText plainText; | 530 | QDomText plainText; |
531 | QDomElement tag; | 531 | QDomElement tag; |
532 | 532 | ||
533 | // begin -- This is for compatibility with the old serializer | 533 | // begin -- This is for compatibility with the old serializer |
534 | PwMDataItem dta = _dta; | 534 | PwMDataItem dta = _dta; |
535 | if (!dta.desc.size()) | 535 | if (!dta.desc.size()) |
536 | dta.desc = " "; | 536 | dta.desc = " "; |
537 | if (!dta.name.size()) | 537 | if (!dta.name.size()) |
538 | dta.name = " "; | 538 | dta.name = " "; |
539 | if (!dta.pw.size()) | 539 | if (!dta.pw.size()) |
540 | dta.pw = " "; | 540 | dta.pw = " "; |
541 | if (!dta.comment.size()) | 541 | if (!dta.comment.size()) |
542 | dta.comment = " "; | 542 | dta.comment = " "; |
543 | if (!dta.url.size()) | 543 | if (!dta.url.size()) |
544 | dta.url = " "; | 544 | dta.url = " "; |
545 | if (!dta.launcher.size()) | 545 | if (!dta.launcher.size()) |
546 | dta.launcher = " "; | 546 | dta.launcher = " "; |
547 | // end -- This is for compatibility with the old serializer | 547 | // end -- This is for compatibility with the old serializer |
548 | 548 | ||
549 | tag = domDoc->createElement(ENTRY_DESC_WR); | 549 | tag = domDoc->createElement(ENTRY_DESC_WR); |
550 | curText = new_text(escapeEntryData(dta.desc.c_str())); | 550 | curText = new_text(escapeEntryData(dta.desc.c_str())); |
551 | tag.appendChild(curText); | 551 | tag.appendChild(curText); |
552 | e->appendChild(tag); | 552 | e->appendChild(tag); |
553 | 553 | ||
554 | tag = domDoc->createElement(ENTRY_NAME_WR); | 554 | tag = domDoc->createElement(ENTRY_NAME_WR); |
555 | curText = new_text(escapeEntryData(dta.name.c_str())); | 555 | curText = new_text(escapeEntryData(dta.name.c_str())); |
556 | tag.appendChild(curText); | 556 | tag.appendChild(curText); |
557 | e->appendChild(tag); | 557 | e->appendChild(tag); |
558 | 558 | ||
559 | tag = domDoc->createElement(ENTRY_PW_WR); | 559 | tag = domDoc->createElement(ENTRY_PW_WR); |
560 | curText = new_text(escapeEntryData(dta.pw.c_str())); | 560 | curText = new_text(escapeEntryData(dta.pw.c_str())); |
561 | tag.appendChild(curText); | 561 | tag.appendChild(curText); |
562 | e->appendChild(tag); | 562 | e->appendChild(tag); |
563 | 563 | ||
564 | tag = domDoc->createElement(ENTRY_COMMENT_WR); | 564 | tag = domDoc->createElement(ENTRY_COMMENT_WR); |
565 | curText = new_text(escapeEntryData(dta.comment.c_str())); | 565 | curText = new_text(escapeEntryData(dta.comment.c_str())); |
566 | tag.appendChild(curText); | 566 | tag.appendChild(curText); |
567 | e->appendChild(tag); | 567 | e->appendChild(tag); |
568 | 568 | ||
569 | tag = domDoc->createElement(ENTRY_URL_WR); | 569 | tag = domDoc->createElement(ENTRY_URL_WR); |
570 | curText = new_text(escapeEntryData(dta.url.c_str())); | 570 | curText = new_text(escapeEntryData(dta.url.c_str())); |
571 | tag.appendChild(curText); | 571 | tag.appendChild(curText); |
572 | e->appendChild(tag); | 572 | e->appendChild(tag); |
573 | 573 | ||
574 | tag = domDoc->createElement(ENTRY_LAUNCHER_WR); | 574 | tag = domDoc->createElement(ENTRY_LAUNCHER_WR); |
575 | curText = new_text(escapeEntryData(dta.launcher.c_str())); | 575 | curText = new_text(escapeEntryData(dta.launcher.c_str())); |
576 | tag.appendChild(curText); | 576 | tag.appendChild(curText); |
577 | e->appendChild(tag); | 577 | e->appendChild(tag); |
578 | 578 | ||
579 | tag = domDoc->createElement(ENTRY_LVP_WR); | 579 | tag = domDoc->createElement(ENTRY_LVP_WR); |
580 | plainText = domDoc->createTextNode(tostr(dta.listViewPos).c_str()); | 580 | plainText = domDoc->createTextNode(tostr(dta.listViewPos).c_str()); |
581 | tag.appendChild(plainText); | 581 | tag.appendChild(plainText); |
582 | e->appendChild(tag); | 582 | e->appendChild(tag); |
583 | 583 | ||
584 | tag = domDoc->createElement(ENTRY_BIN_WR); | 584 | tag = domDoc->createElement(ENTRY_BIN_WR); |
585 | if (dta.binary) | 585 | if (dta.binary) |
586 | plainText = domDoc->createTextNode("1"); | 586 | plainText = domDoc->createTextNode("1"); |
587 | else | 587 | else |
588 | plainText = domDoc->createTextNode("0"); | 588 | plainText = domDoc->createTextNode("0"); |
589 | tag.appendChild(plainText); | 589 | tag.appendChild(plainText); |
590 | e->appendChild(tag); | 590 | e->appendChild(tag); |
591 | 591 | ||
592 | tag = domDoc->createElement(ENTRY_META_WR); | 592 | tag = domDoc->createElement(ENTRY_META_WR); |
593 | if (!writeMeta(&tag, dta.meta)) | 593 | if (!writeMeta(&tag, dta.meta)) |
594 | return false; | 594 | return false; |
595 | e->appendChild(tag); | 595 | e->appendChild(tag); |
596 | 596 | ||
597 | #undef new_text | 597 | #undef new_text |
598 | return true; | 598 | return true; |
599 | } | 599 | } |
600 | 600 | ||
601 | bool Serializer::writeMeta(QDomElement *e, | 601 | bool Serializer::writeMeta(QDomElement *e, |
602 | const PwMMetaData &dta) | 602 | const PwMMetaData &dta) |
603 | { | 603 | { |
604 | QDomText text; | 604 | QDomText text; |
605 | QDomElement tag; | 605 | QDomElement tag; |
606 | 606 | ||
607 | tag = domDoc->createElement(META_CREATE_DATE); | 607 | tag = domDoc->createElement(META_CREATE_DATE); |
608 | #ifndef PWM_EMBEDDED | 608 | #ifndef PWM_EMBEDDED |
609 | text = domDoc->createTextNode(dta.create.toString(Qt::ISODate)); | 609 | text = domDoc->createTextNode(dta.create.toString(Qt::ISODate)); |
610 | #else | 610 | #else |
611 | text = domDoc->createTextNode(KGlobal::locale()->formatDateTime(dta.create, KLocale::ISODate)); | 611 | text = domDoc->createTextNode(KGlobal::locale()->formatDateTime(dta.create, KLocale::ISODate)); |
612 | #endif | 612 | #endif |
613 | tag.appendChild(text); | 613 | tag.appendChild(text); |
614 | e->appendChild(tag); | 614 | e->appendChild(tag); |
615 | 615 | ||
616 | tag = domDoc->createElement(META_VALID_DATE); | 616 | tag = domDoc->createElement(META_VALID_DATE); |
617 | #ifndef PWM_EMBEDDED | 617 | #ifndef PWM_EMBEDDED |
618 | text = domDoc->createTextNode(dta.valid.toString(Qt::ISODate)); | 618 | text = domDoc->createTextNode(dta.valid.toString(Qt::ISODate)); |
619 | #else | 619 | #else |
620 | text = domDoc->createTextNode(KGlobal::locale()->formatDateTime(dta.valid, KLocale::ISODate)); | 620 | text = domDoc->createTextNode(KGlobal::locale()->formatDateTime(dta.valid, KLocale::ISODate)); |
621 | #endif | 621 | #endif |
622 | tag.appendChild(text); | 622 | tag.appendChild(text); |
623 | e->appendChild(tag); | 623 | e->appendChild(tag); |
624 | 624 | ||
625 | tag = domDoc->createElement(META_EXPIRE_DATE); | 625 | tag = domDoc->createElement(META_EXPIRE_DATE); |
626 | #ifndef PWM_EMBEDDED | 626 | #ifndef PWM_EMBEDDED |
627 | text = domDoc->createTextNode(dta.expire.toString(Qt::ISODate)); | 627 | text = domDoc->createTextNode(dta.expire.toString(Qt::ISODate)); |
628 | #else | 628 | #else |
629 | text = domDoc->createTextNode(KGlobal::locale()->formatDateTime(dta.expire, KLocale::ISODate)); | 629 | text = domDoc->createTextNode(KGlobal::locale()->formatDateTime(dta.expire, KLocale::ISODate)); |
630 | #endif | 630 | #endif |
631 | tag.appendChild(text); | 631 | tag.appendChild(text); |
632 | e->appendChild(tag); | 632 | e->appendChild(tag); |
633 | 633 | ||
634 | tag = domDoc->createElement(META_UPDATE_DATE); | 634 | tag = domDoc->createElement(META_UPDATE_DATE); |
635 | #ifndef PWM_EMBEDDED | 635 | #ifndef PWM_EMBEDDED |
636 | text = domDoc->createTextNode(dta.update.toString(Qt::ISODate)); | 636 | text = domDoc->createTextNode(dta.update.toString(Qt::ISODate)); |
637 | #else | 637 | #else |
638 | text = domDoc->createTextNode(KGlobal::locale()->formatDateTime(dta.update, KLocale::ISODate)); | 638 | text = domDoc->createTextNode(KGlobal::locale()->formatDateTime(dta.update, KLocale::ISODate)); |
639 | #endif | 639 | #endif |
640 | tag.appendChild(text); | 640 | tag.appendChild(text); |
641 | e->appendChild(tag); | 641 | e->appendChild(tag); |
642 | 642 | ||
643 | tag = domDoc->createElement(META_UPDATE_INT); | 643 | tag = domDoc->createElement(META_UPDATE_INT); |
644 | text = domDoc->createTextNode(tostr(dta.updateInt).c_str()); | 644 | text = domDoc->createTextNode(tostr(dta.updateInt).c_str()); |
645 | tag.appendChild(text); | 645 | tag.appendChild(text); |
646 | e->appendChild(tag); | 646 | e->appendChild(tag); |
647 | 647 | ||
648 | tag = domDoc->createElement(META_UNIQUEID); | 648 | tag = domDoc->createElement(META_UNIQUEID); |
649 | text = domDoc->createTextNode(escapeEntryData(dta.uniqueid.c_str())); | 649 | text = domDoc->createTextNode(escapeEntryData(dta.uniqueid.c_str())); |
650 | tag.appendChild(text); | 650 | tag.appendChild(text); |
651 | e->appendChild(tag); | 651 | e->appendChild(tag); |
652 | 652 | ||
653 | #undef new_text | 653 | #undef new_text |
654 | return true; | 654 | return true; |
655 | } | 655 | } |
656 | 656 | ||
657 | QString Serializer::escapeEntryData(QString dta) | 657 | QString Serializer::escapeEntryData(QString dta) |
658 | { | 658 | { |
659 | #ifndef PWM_EMBEDDED | 659 | #ifndef PWM_EMBEDDED |
660 | dta.replace('\n', "$>--endl--<$"); | 660 | dta.replace('\n', "$>--endl--<$"); |
661 | dta.replace("]]>", "||>"); | 661 | dta.replace("]]>", "||>"); |
662 | #else | 662 | #else |
663 | dta.replace(QRegExp("\n"), "$>--endl--<$"); | 663 | dta.replace(QRegExp("\n"), "$>--endl--<$"); |
664 | dta.replace(QRegExp("]]>"), "||>"); | 664 | dta.replace(QRegExp("]]>"), "||>"); |
665 | #endif | 665 | #endif |
666 | return dta; | 666 | return dta; |
667 | } | 667 | } |
668 | 668 | ||
669 | QString Serializer::unescapeEntryData(QString dta) | 669 | QString Serializer::unescapeEntryData(QString dta) |
670 | { | 670 | { |
671 | #ifndef PWM_EMBEDDED | 671 | #ifndef PWM_EMBEDDED |
672 | dta.replace("$>--endl--<$", "\n"); | 672 | dta.replace("$>--endl--<$", "\n"); |
673 | dta.replace("||>", "]]>"); | 673 | dta.replace("||>", "]]>"); |
674 | #else | 674 | #else |
675 | dta.replace(QRegExp("$>--endl--<$"), "\n"); | 675 | dta.replace(QRegExp("$>--endl--<$"), "\n"); |
676 | dta.replace(QRegExp("||>"), "]]>"); | 676 | dta.replace(QRegExp("||>"), "]]>"); |
677 | #endif | 677 | #endif |
678 | return dta; | 678 | return dta; |
679 | } | 679 | } |
680 | 680 | ||
681 | 681 | ||
682 | //US ENH: the following methods are getting used to write/read sync entries | 682 | //US ENH: the following methods are getting used to write/read sync entries |
683 | /** read the syncentries in the node "n" */ | 683 | /** read the syncentries in the node "n" */ |
684 | bool Serializer::readSyncData(const QDomNode &n, vector<PwMSyncItem> *dta) | 684 | bool Serializer::readSyncData(const QDomNode &n, vector<PwMSyncItem> *dta) |
685 | { | 685 | { |
686 | QDomNodeList nl(n.childNodes()); | 686 | QDomNodeList nl(n.childNodes()); |
687 | QDomNode cur; | 687 | QDomNode cur; |
688 | 688 | ||
689 | QString devicename, val; | 689 | QString devicename, val; |
690 | unsigned int numSync = nl.count(), i; | 690 | unsigned int numSync = nl.count(), i; |
691 | PwMSyncItem curSync; | 691 | PwMSyncItem curSync; |
692 | bool ok = true; | 692 | bool ok = true; |
693 | 693 | ||
694 | if (!numSync) { | 694 | if (!numSync) { |
695 | //no sync entries is a possible result | 695 | //no sync entries is a possible result |
696 | printDebug("Serializer::readSyncData(): empty"); | 696 | printDebug("Serializer::readSyncData(): empty"); |
697 | return true; | 697 | return true; |
698 | } | 698 | } |
699 | for (i = 0; i < numSync; ++i) { | 699 | for (i = 0; i < numSync; ++i) { |
700 | cur = nl.item(i); | 700 | cur = nl.item(i); |
701 | if (cur.nodeName().left(1) == SYNC_TARGET_PREFIX) { | 701 | if (cur.nodeName().left(1) == SYNC_TARGET_PREFIX) { |
702 | devicename = cur.toElement().attribute(SYNC_TARGET_NAME); | 702 | devicename = cur.toElement().attribute(SYNC_TARGET_NAME); |
703 | val = cur.toElement().text(); | 703 | val = cur.toElement().text(); |
704 | 704 | ||
705 | if ((val == "") || (devicename == QString::null)) { | 705 | if ((val == "") || (devicename == QString::null)) { |
706 | printDebug("Serializer::readSyncData(): empty synctarget name or syncdate"); | 706 | printDebug("Serializer::readSyncData(): empty synctarget name or syncdate"); |
707 | continue; | 707 | continue; |
708 | } | 708 | } |
709 | 709 | ||
710 | curSync.syncName = devicename; | 710 | curSync.syncName = devicename; |
711 | #ifndef PWM_EMBEDDED | 711 | #ifndef PWM_EMBEDDED |
712 | curSync.lastSyncDate = QDateTime::fromString(val, Qt::ISODate); | 712 | curSync.lastSyncDate = QDateTime::fromString(val, Qt::ISODate); |
713 | #else | 713 | #else |
714 | curSync.lastSyncDate = KGlobal::locale()->readDateTime(val, KLocale::ISODate, &ok); | 714 | curSync.lastSyncDate = KGlobal::locale()->readDateTime(val, KLocale::ISODate, &ok); |
715 | if (ok == false) | 715 | if (ok == false) |
716 | qDebug("Serializer::readSyncData(): could not parse syncdate:%s",val.latin1()); | 716 | qDebug("Serializer::readSyncData(): could not parse syncdate:%s",val.latin1()); |
717 | 717 | ||
718 | #endif | 718 | #endif |
719 | dta->push_back(curSync); | 719 | dta->push_back(curSync); |
720 | } | 720 | } |
721 | } | 721 | } |
722 | return true; | 722 | return true; |
723 | 723 | ||
724 | } | 724 | } |
725 | 725 | ||
726 | 726 | ||
727 | 727 | ||
728 | bool Serializer::addSyncData(QDomElement *e, | 728 | bool Serializer::addSyncData(QDomElement *e, |
729 | const vector<PwMSyncItem> &dta) | 729 | const vector<PwMSyncItem> &dta) |
730 | { | 730 | { |
731 | unsigned int numSync = dta.size(), i; | 731 | unsigned int numSync = dta.size(), i; |
732 | QString curId, curDeviceName; | 732 | QString curId, curDeviceName; |
733 | QDomElement curSync, curSyncDate; | 733 | QDomElement curSync, curSyncDate; |
734 | QDomText text; | 734 | QDomText text; |
735 | 735 | ||
736 | for (i = 0; i < numSync; ++i) { | 736 | for (i = 0; i < numSync; ++i) { |
737 | curId = SYNC_TARGET_PREFIX; | 737 | curId = SYNC_TARGET_PREFIX; |
738 | curId += tostr(i).c_str(); | 738 | curId += tostr(i).c_str(); |
739 | curDeviceName = dta[i].syncName.c_str(); | 739 | curDeviceName = dta[i].syncName.c_str(); |
740 | curSync = domDoc->createElement(curId); | 740 | curSync = domDoc->createElement(curId); |
741 | curSync.setAttribute(SYNC_TARGET_NAME, curDeviceName); | 741 | curSync.setAttribute(SYNC_TARGET_NAME, curDeviceName); |
742 | 742 | ||
743 | #ifndef PWM_EMBEDDED | 743 | #ifndef PWM_EMBEDDED |
744 | text = domDoc->createTextNode(dta[i].lastSyncDate.toString(Qt::ISODate)); | 744 | text = domDoc->createTextNode(dta[i].lastSyncDate.toString(Qt::ISODate)); |
745 | #else | 745 | #else |
746 | text = domDoc->createTextNode(KGlobal::locale()->formatDateTime(dta[i].lastSyncDate, KLocale::ISODate)); | 746 | text = domDoc->createTextNode(KGlobal::locale()->formatDateTime(dta[i].lastSyncDate, KLocale::ISODate)); |
747 | #endif | 747 | #endif |
748 | curSyncDate.appendChild(text); | 748 | curSyncDate.appendChild(text); |
749 | curSync.appendChild(curSyncDate); | 749 | curSync.appendChild(curSyncDate); |
750 | 750 | ||
751 | e->appendChild(curSync); | 751 | e->appendChild(curSync); |
752 | 752 | ||
753 | } | 753 | } |
754 | return true; | 754 | return true; |
755 | } | 755 | } |
756 | 756 | ||