summaryrefslogtreecommitdiffabout
authorulf69 <ulf69>2004-09-24 22:21:25 (UTC)
committer ulf69 <ulf69>2004-09-24 22:21:25 (UTC)
commite695903cc49b33e63505b651b13d830e318fc29a (patch) (unidiff)
treefd210e2defbdcb3f3d9d739d0b00e6853705af29
parenta884dac6f756b3702a10ae97aa8782e4d2a84b20 (diff)
downloadkdepimpi-e695903cc49b33e63505b651b13d830e318fc29a.zip
kdepimpi-e695903cc49b33e63505b651b13d830e318fc29a.tar.gz
kdepimpi-e695903cc49b33e63505b651b13d830e318fc29a.tar.bz2
fixed bug with QDomDocument handling, plus some GUI enhancements
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--pwmanager/pwmanager/pwmdocui.cpp8
-rw-r--r--pwmanager/pwmanager/pwmexception.cpp7
-rw-r--r--pwmanager/pwmanager/serializer.cpp12
3 files changed, 23 insertions, 4 deletions
diff --git a/pwmanager/pwmanager/pwmdocui.cpp b/pwmanager/pwmanager/pwmdocui.cpp
index e42dd9d..5e675fc 100644
--- a/pwmanager/pwmanager/pwmdocui.cpp
+++ b/pwmanager/pwmanager/pwmdocui.cpp
@@ -251,207 +251,207 @@ bool PwMDocUi::saveDocUi(PwMDoc *doc)
251 KMessageBox::information(currentView, 251 KMessageBox::information(currentView,
252 i18n 252 i18n
253 ("Sorry, there's nothing to save.\n" 253 ("Sorry, there's nothing to save.\n"
254 "Please first add some passwords."), 254 "Please first add some passwords."),
255 i18n("nothing to do")); 255 i18n("nothing to do"));
256 doc->timer()->putLock(DocTimer::id_autoLockTimer); 256 doc->timer()->putLock(DocTimer::id_autoLockTimer);
257 return true; 257 return true;
258 } 258 }
259 PwMerror ret = doc->saveDoc(conf()->confGlobCompression()); 259 PwMerror ret = doc->saveDoc(conf()->confGlobCompression());
260 if (ret == e_filename) { 260 if (ret == e_filename) {
261 doc->timer()->putLock(DocTimer::id_autoLockTimer); 261 doc->timer()->putLock(DocTimer::id_autoLockTimer);
262 return saveAsDocUi(doc); 262 return saveAsDocUi(doc);
263 } else if (ret == e_weakPw) { 263 } else if (ret == e_weakPw) {
264 KMessageBox::error(currentView, 264 KMessageBox::error(currentView,
265 i18n("Error: This is a weak password.\n" 265 i18n("Error: This is a weak password.\n"
266 "Please select another password."), 266 "Please select another password."),
267 i18n("weak password")); 267 i18n("weak password"));
268 doc->timer()->putLock(DocTimer::id_autoLockTimer); 268 doc->timer()->putLock(DocTimer::id_autoLockTimer);
269 return false; 269 return false;
270 } else if (ret == e_fileBackup) { 270 } else if (ret == e_fileBackup) {
271 KMessageBox::error(currentView, 271 KMessageBox::error(currentView,
272 i18n("Error: Couldn't make backup-file!"), 272 i18n("Error: Couldn't make backup-file!"),
273 i18n("backup failed")); 273 i18n("backup failed"));
274 doc->timer()->putLock(DocTimer::id_autoLockTimer); 274 doc->timer()->putLock(DocTimer::id_autoLockTimer);
275 return false; 275 return false;
276 } else if (ret != e_success) { 276 } else if (ret != e_success) {
277 KMessageBox::error(currentView, 277 KMessageBox::error(currentView,
278 i18n("Error: Couldn't write to file.\n" 278 i18n("Error: Couldn't write to file.\n"
279 "Please check if you have permission to " 279 "Please check if you have permission to "
280 "write to the file in that directory."), 280 "write to the file in that directory."),
281 i18n("error while writing")); 281 i18n("error while writing"));
282 doc->timer()->putLock(DocTimer::id_autoLockTimer); 282 doc->timer()->putLock(DocTimer::id_autoLockTimer);
283 return false; 283 return false;
284 } 284 }
285 doc->timer()->putLock(DocTimer::id_autoLockTimer); 285 doc->timer()->putLock(DocTimer::id_autoLockTimer);
286 return true; 286 return true;
287} 287}
288 288
289bool PwMDocUi::saveAsDocUi(PwMDoc *doc) 289bool PwMDocUi::saveAsDocUi(PwMDoc *doc)
290{ 290{
291 PWM_ASSERT(doc); 291 PWM_ASSERT(doc);
292 doc->timer()->getLock(DocTimer::id_autoLockTimer); 292 doc->timer()->getLock(DocTimer::id_autoLockTimer);
293 if (doc->isDocEmpty()) { 293 if (doc->isDocEmpty()) {
294 KMessageBox::information(currentView, 294 KMessageBox::information(currentView,
295 i18n 295 i18n
296 ("Sorry, there's nothing to save.\n" 296 ("Sorry, there's nothing to save.\n"
297 "Please first add some passwords."), 297 "Please first add some passwords."),
298 i18n("nothing to do")); 298 i18n("nothing to do"));
299 doc->timer()->putLock(DocTimer::id_autoLockTimer); 299 doc->timer()->putLock(DocTimer::id_autoLockTimer);
300 return true; 300 return true;
301 } 301 }
302#ifndef PWM_EMBEDDED 302#ifndef PWM_EMBEDDED
303 QString fn(KFileDialog::getSaveFileName(QString::null, 303 QString fn(KFileDialog::getSaveFileName(QString::null,
304 i18n("*.pwm|PwManager Password file"), 304 i18n("*.pwm|PwManager Password file"),
305 currentView)); 305 currentView));
306#else 306#else
307 QString fn = locateLocal( "data", KGlobal::getAppName() + "/*.pwm" ); 307 QString fn = locateLocal( "data", KGlobal::getAppName() + "/*.pwm" );
308 fn = KFileDialog::getSaveFileName(fn, 308 fn = KFileDialog::getSaveFileName(fn,
309 i18n("password filename(*.pwm)"), 309 i18n("password filename(*.pwm)"),
310 currentView); 310 currentView);
311 311
312#endif 312#endif
313 if (fn == "") { 313 if (fn == "") {
314 doc->timer()->putLock(DocTimer::id_autoLockTimer); 314 doc->timer()->putLock(DocTimer::id_autoLockTimer);
315 return false; 315 return false;
316 } 316 }
317 if (fn.right(4) != ".pwm") 317 if (fn.right(4) != ".pwm")
318 fn += ".pwm"; 318 fn += ".pwm";
319 319
320 PwMerror ret = doc->saveDoc(conf()->confGlobCompression(), &fn); 320 PwMerror ret = doc->saveDoc(conf()->confGlobCompression(), &fn);
321 if (ret != e_success) { 321 if (ret != e_success) {
322 KMessageBox::error(currentView, 322 KMessageBox::error(currentView,
323 i18n("Error: Couldn't write to file.\n" 323 i18n("Error: Couldn't write to file.\n"
324 "Please check if you have permission to " 324 "Please check if you have permission to "
325 "write to the file in that directory."), 325 "write to the file in that directory."),
326 i18n("error while writing")); 326 i18n("error while writing"));
327 doc->timer()->putLock(DocTimer::id_autoLockTimer); 327 doc->timer()->putLock(DocTimer::id_autoLockTimer);
328 return false; 328 return false;
329 } 329 }
330 doc->timer()->putLock(DocTimer::id_autoLockTimer); 330 doc->timer()->putLock(DocTimer::id_autoLockTimer);
331 return true; 331 return true;
332} 332}
333 333
334bool PwMDocUi::openDocUi(PwMDoc *doc, 334bool PwMDocUi::openDocUi(PwMDoc *doc,
335 QString filename, 335 QString filename,
336 bool openDeepLocked) 336 bool openDeepLocked)
337{ 337{
338 if (filename.isEmpty()) 338 if (filename.isEmpty())
339 { 339 {
340#ifndef PWM_EMBEDDED 340#ifndef PWM_EMBEDDED
341 filename = KFileDialog::getOpenFileName(QString::null, 341 filename = KFileDialog::getOpenFileName(QString::null,
342 i18n("*.pwm|PwManager Password file\n" 342 i18n("*.pwm|PwManager Password file\n"
343 "*|All files"), getCurrentView()); 343 "*|All files"), getCurrentView());
344#else 344#else
345 filename = locateLocal( "data", KGlobal::getAppName() + "/*.pwm"); 345 filename = locateLocal( "data", KGlobal::getAppName() + "/*.pwm");
346 filename = KFileDialog::getOpenFileName(filename, 346 filename = KFileDialog::getOpenFileName(filename,
347 i18n("password filename(*.pwm)"), getCurrentView()); 347 i18n("password filename(*.pwm)"), getCurrentView());
348#endif 348#endif
349 } 349 }
350 if (filename.isEmpty()) 350 if (filename.isEmpty())
351 goto cancelOpen; 351 goto cancelOpen;
352 PwMerror ret; 352 PwMerror ret;
353 while (true) { 353 while (true) {
354 int lockStat = -1; 354 int lockStat = -1;
355 if (openDeepLocked) { 355 if (openDeepLocked) {
356 lockStat = 2; 356 lockStat = 2;
357 } else { 357 } else {
358 if (conf()->confGlobUnlockOnOpen()) { 358 if (conf()->confGlobUnlockOnOpen()) {
359 lockStat = 0; 359 lockStat = 0;
360 } else { 360 } else {
361 lockStat = 1; 361 lockStat = 1;
362 } 362 }
363 } 363 }
364 ret = doc->openDoc(&filename, lockStat); 364 ret = doc->openDoc(&filename, lockStat);
365 qDebug("pwmdocui::OpenDocui %i", ret); 365 qDebug("pwmdocui::OpenDocui %i", ret);
366 if (ret != e_success) { 366 if (ret != e_success) {
367 if (ret == e_readFile || ret == e_openFile) { 367 if (ret == e_readFile || ret == e_openFile) {
368 KMessageBox::error(getCurrentView(), 368 KMessageBox::error(getCurrentView(),
369 i18n("Could not read file!") 369 i18n("Could not read file!")
370 + "\n" 370 + "\n"
371 + filename, 371 + filename,
372 i18n("file error")); 372 i18n("file error"));
373 goto cancelOpen; 373 goto cancelOpen;
374 } 374 }
375 if (ret == e_alreadyOpen) { 375 if (ret == e_alreadyOpen) {
376 KMessageBox::error(getCurrentView(), 376 KMessageBox::error(getCurrentView(),
377 i18n("This file is already open."), 377 i18n("This file is already open."),
378 i18n("already open")); 378 i18n("already open"));
379 goto cancelOpen; 379 goto cancelOpen;
380 } 380 }
381 if (ret == e_fileVer) { 381 if (ret == e_fileVer) {
382 KMessageBox::error(getCurrentView(), 382 KMessageBox::error(getCurrentView(),
383 i18n 383 i18n
384 ("File-version is not supported!\n" 384 ("File-version is not supported!\n"
385 "Did you create this file with an older or newer version of PwM?"), 385 "Did you create this file with an older or newer version of PwM?"),
386 i18n 386 i18n
387 ("incompatible version")); 387 ("incompatible version"));
388 goto cancelOpen; 388 goto cancelOpen;
389 } 389 }
390 if (ret == e_wrongPw) { 390 if (ret == e_wrongPw) {
391 continue; 391 continue;
392 } 392 }
393 if (ret == e_noPw) { 393 if (ret == e_noPw) {
394 goto cancelOpen; 394 goto cancelOpen;
395 } 395 }
396 if (ret == e_fileFormat) { 396 if (ret == e_fileFormat) {
397 KMessageBox::error(getCurrentView(), 397 KMessageBox::error(getCurrentView(),
398 i18n 398 i18n
399 ("Sorry, this file has not been recognized " 399 ("Sorry, this file has not been recognized "
400 "as a PwM Password file.\n" 400 "as a PwM Password file.\n"
401 "Probably you have selected the wrong file."), 401 "Probably you have selected the wrong file."),
402 i18n 402 i18n
403 ("no PwM password-file")); 403 ("no PwM password-file"));
404 goto cancelOpen; 404 goto cancelOpen;
405 } 405 }
406 if (ret == e_fileCorrupt) { 406 if (ret == e_fileCorrupt) {
407 KMessageBox::error(getCurrentView(), 407 KMessageBox::error(getCurrentView(),
408 i18n 408 i18n
409 ("File corrupt!\n" 409 ("File corrupt!\n"
410 "Maybe the media, you stored this file on, " 410 "Maybe the media, you stored this file on, "
411 "had bad sectors?"), 411 "had bad sectors?"),
412 i18n 412 i18n
413 ("checksum error")); 413 ("checksum error"));
414 goto cancelOpen; 414 goto cancelOpen;
415 } 415 }
416 } 416 }
417 break; 417 break;
418 } 418 }
419 return true; 419 return true;
420 420
421 cancelOpen: 421 cancelOpen:
422 return false; 422 return false;
423} 423}
424 424
425QString PwMDocUi::string_defaultCategory() 425QString PwMDocUi::string_defaultCategory()
426{ 426{
427 return i18n("Default"); 427 return i18n("Default");
428} 428}
429 429
430QString PwMDocUi::string_locked() 430QString PwMDocUi::string_locked()
431{ 431{
432 return i18n("<LOCKED>"); 432 return i18n("<LOCKED>");
433} 433}
434 434
435QString PwMDocUi::string_deepLockedShort() 435QString PwMDocUi::string_deepLockedShort()
436{ 436{
437 return i18n("DEEP-LOCKED"); 437 return i18n("DEEP-LOCKED");
438} 438}
439 439
440QString PwMDocUi::string_deepLockedLong() 440QString PwMDocUi::string_deepLockedLong()
441{ 441{
442 return i18n("This file is DEEP-LOCKED!\n" 442 return i18n("This file is DEEP-LOCKED!\n"
443 "That means all data has been encrypted " 443 "That means all data has been encrypted\n"
444 "and written out to the file. If you want " 444 "and written out to the file. If you want\n"
445 "to see the entries, please UNLOCK the file. " 445 "to see the entries, please UNLOCK the file.\n"
446 "While unlocking, you will be prompted for the " 446 "While unlocking, you will be prompted for the\n"
447 "master-password or the key-card."); 447 "master-password or the key-card.");
448} 448}
449 449
450QString PwMDocUi::string_defaultTitle() 450QString PwMDocUi::string_defaultTitle()
451{ 451{
452 return i18n("Untitled"); 452 return i18n("Untitled");
453} 453}
454 454
455#ifndef PWM_EMBEDDED 455#ifndef PWM_EMBEDDED
456#include "pwmdocui.moc" 456#include "pwmdocui.moc"
457#endif 457#endif
diff --git a/pwmanager/pwmanager/pwmexception.cpp b/pwmanager/pwmanager/pwmexception.cpp
index 4c00b04..c0dbb39 100644
--- a/pwmanager/pwmanager/pwmexception.cpp
+++ b/pwmanager/pwmanager/pwmexception.cpp
@@ -1,58 +1,65 @@
1/*************************************************************************** 1/***************************************************************************
2 * * 2 * *
3 * copyright (C) 2003, 2004 by Michael Buesch * 3 * copyright (C) 2003, 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 * copyright (C) 2004 by Ulf Schenk 13 * copyright (C) 2004 by Ulf Schenk
14 * This file is originaly based on version 1.0.1 of pwmanager 14 * This file is originaly based on version 1.0.1 of pwmanager
15 * and was modified to run on embedded devices that run microkde 15 * and was modified to run on embedded devices that run microkde
16 * 16 *
17 * $Id$ 17 * $Id$
18 **************************************************************************/ 18 **************************************************************************/
19 19
20 20
21#include "pwmexception.h" 21#include "pwmexception.h"
22 22
23#include <kmessagebox.h> 23#include <kmessagebox.h>
24 24
25 25
26void pwmFatal(const char *id, 26void pwmFatal(const char *id,
27 const char *file, 27 const char *file,
28 int line) 28 int line)
29{ 29{
30 cerr << PROG_NAME " " << id << " at " 30 cerr << PROG_NAME " " << id << " at "
31 << file << ":" << line 31 << file << ":" << line
32 << endl; 32 << endl;
33} 33}
34 34
35void __printError(const string &msg) 35void __printError(const string &msg)
36{ 36{
37 QString __msg(PROG_NAME " generated a fatal fault:\n"); 37 QString __msg(PROG_NAME " generated a fatal fault:\n");
38 __msg += msg.c_str(); 38 __msg += msg.c_str();
39 cerr << "\n\n" << __msg.latin1() << endl; 39 cerr << "\n\n" << __msg.latin1() << endl;
40 KMessageBox::error(0, __msg, PROG_NAME " fatal ERROR!"); 40 KMessageBox::error(0, __msg, PROG_NAME " fatal ERROR!");
41} 41}
42 42
43void __printInfo(const string &msg) 43void __printInfo(const string &msg)
44{ 44{
45 cout << PROG_NAME " INFO: " << msg << endl; 45 cout << PROG_NAME " INFO: " << msg << endl;
46#ifdef PWM_DEBUG
47 qDebug("%s INFO: %s", PROG_NAME, msg.c_str()) ;
48#endif
46} 49}
47 50
48void __printWarn(const string &msg) 51void __printWarn(const string &msg)
49{ 52{
50 cerr << PROG_NAME " WARNING: " << msg << endl; 53 cerr << PROG_NAME " WARNING: " << msg << endl;
54#ifdef PWM_DEBUG
55 qDebug("%s WARNING: %s", PROG_NAME, msg.c_str()) ;
56#endif
51} 57}
52 58
53#ifdef PWM_DEBUG 59#ifdef PWM_DEBUG
54void __printDebug(const string &msg) 60void __printDebug(const string &msg)
55{ 61{
56 cout << PROG_NAME " DEBUG: " << msg << endl; 62 cout << PROG_NAME " DEBUG: " << msg << endl;
63 qDebug("%s DEBUG: %s", PROG_NAME, msg.c_str()) ;
57} 64}
58#endif // PWM_DEBUG 65#endif // PWM_DEBUG
diff --git a/pwmanager/pwmanager/serializer.cpp b/pwmanager/pwmanager/serializer.cpp
index 2810b48..fcdcec3 100644
--- a/pwmanager/pwmanager/serializer.cpp
+++ b/pwmanager/pwmanager/serializer.cpp
@@ -1,377 +1,389 @@
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_DEBUG1
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 44
45/* This is compatibility stuff. 45/* This is compatibility stuff.
46 * The names of the entries have changed and here are the 46 * The names of the entries have changed and here are the
47 * new and old ones 47 * new and old ones
48 */ 48 */
49 #define ROOT_MAGIC_OLD "PwM-xml-dat" 49 #define ROOT_MAGIC_OLD "PwM-xml-dat"
50 #define VER_STR_OLD "ver" 50 #define VER_STR_OLD "ver"
51 #define COMPAT_VER_OLD "0x02" 51 #define COMPAT_VER_OLD "0x02"
52 #define CAT_ROOT_OLD "categories" 52 #define CAT_ROOT_OLD "categories"
53 #define CAT_PREFIX_OLD "cat_" 53 #define CAT_PREFIX_OLD "cat_"
54 #define CAT_NAME_OLD "name" 54 #define CAT_NAME_OLD "name"
55 #define ENTRY_PREFIX_OLD"entry_" 55 #define ENTRY_PREFIX_OLD"entry_"
56 #define ENTRY_DESC_OLD "desc" 56 #define ENTRY_DESC_OLD "desc"
57 #define ENTRY_NAME_OLD "name" 57 #define ENTRY_NAME_OLD "name"
58 #define ENTRY_PW_OLD "pw" 58 #define ENTRY_PW_OLD "pw"
59 #define ENTRY_COMMENT_OLD"comment" 59 #define ENTRY_COMMENT_OLD"comment"
60 #define ENTRY_URL_OLD "url" 60 #define ENTRY_URL_OLD "url"
61 #define ENTRY_LAUNCHER_OLD"launcher" 61 #define ENTRY_LAUNCHER_OLD"launcher"
62 #define ENTRY_LVP_OLD "listViewPos" 62 #define ENTRY_LVP_OLD "listViewPos"
63 #define ENTRY_BIN_OLD "b" 63 #define ENTRY_BIN_OLD "b"
64 #define ENTRY_META_OLD "m" 64 #define ENTRY_META_OLD "m"
65 65
66 #define ROOT_MAGIC_NEW "P" 66 #define ROOT_MAGIC_NEW "P"
67 #define VER_STR_NEW "v" 67 #define VER_STR_NEW "v"
68 #define COMPAT_VER_NEW "2" 68 #define COMPAT_VER_NEW "2"
69 #define CAT_ROOT_NEW "c" 69 #define CAT_ROOT_NEW "c"
70 #define CAT_PREFIX_NEW "c" 70 #define CAT_PREFIX_NEW "c"
71 #define CAT_NAME_NEW "n" 71 #define CAT_NAME_NEW "n"
72 #define ENTRY_PREFIX_NEW"e" 72 #define ENTRY_PREFIX_NEW"e"
73 #define ENTRY_DESC_NEW "d" 73 #define ENTRY_DESC_NEW "d"
74 #define ENTRY_NAME_NEW "n" 74 #define ENTRY_NAME_NEW "n"
75 #define ENTRY_PW_NEW "p" 75 #define ENTRY_PW_NEW "p"
76 #define ENTRY_COMMENT_NEW"c" 76 #define ENTRY_COMMENT_NEW"c"
77 #define ENTRY_URL_NEW "u" 77 #define ENTRY_URL_NEW "u"
78 #define ENTRY_LAUNCHER_NEW"l" 78 #define ENTRY_LAUNCHER_NEW"l"
79 #define ENTRY_LVP_NEW "v" 79 #define ENTRY_LVP_NEW "v"
80 #define ENTRY_BIN_NEW ENTRY_BIN_OLD 80 #define ENTRY_BIN_NEW ENTRY_BIN_OLD
81 #define ENTRY_META_NEW ENTRY_META_OLD 81 #define ENTRY_META_NEW ENTRY_META_OLD
82 82
83#if USE_OLD_TAGS != 0 83#if USE_OLD_TAGS != 0
84 # define ROOT_MAGIC_WR ROOT_MAGIC_OLD 84 # define ROOT_MAGIC_WR ROOT_MAGIC_OLD
85 # define VER_STR_WR VER_STR_OLD 85 # define VER_STR_WR VER_STR_OLD
86 # define COMPAT_VER_WR COMPAT_VER_OLD 86 # define COMPAT_VER_WR COMPAT_VER_OLD
87 # define CAT_ROOT_WR CAT_ROOT_OLD 87 # define CAT_ROOT_WR CAT_ROOT_OLD
88 # define CAT_PREFIX_WR CAT_PREFIX_OLD 88 # define CAT_PREFIX_WR CAT_PREFIX_OLD
89 # define CAT_NAME_WR CAT_NAME_OLD 89 # define CAT_NAME_WR CAT_NAME_OLD
90 # define ENTRY_PREFIX_WRENTRY_PREFIX_OLD 90 # define ENTRY_PREFIX_WRENTRY_PREFIX_OLD
91 # define ENTRY_DESC_WR ENTRY_DESC_OLD 91 # define ENTRY_DESC_WR ENTRY_DESC_OLD
92 # define ENTRY_NAME_WR ENTRY_NAME_OLD 92 # define ENTRY_NAME_WR ENTRY_NAME_OLD
93 # define ENTRY_PW_WR ENTRY_PW_OLD 93 # define ENTRY_PW_WR ENTRY_PW_OLD
94 # define ENTRY_COMMENT_WRENTRY_COMMENT_OLD 94 # define ENTRY_COMMENT_WRENTRY_COMMENT_OLD
95 # define ENTRY_URL_WR ENTRY_URL_OLD 95 # define ENTRY_URL_WR ENTRY_URL_OLD
96 # define ENTRY_LAUNCHER_WRENTRY_LAUNCHER_OLD 96 # define ENTRY_LAUNCHER_WRENTRY_LAUNCHER_OLD
97 # define ENTRY_LVP_WR ENTRY_LVP_OLD 97 # define ENTRY_LVP_WR ENTRY_LVP_OLD
98 # define ENTRY_BIN_WR ENTRY_BIN_OLD 98 # define ENTRY_BIN_WR ENTRY_BIN_OLD
99 # define ENTRY_META_WR ENTRY_META_OLD 99 # define ENTRY_META_WR ENTRY_META_OLD
100#else 100#else
101 # define ROOT_MAGIC_WR ROOT_MAGIC_NEW 101 # define ROOT_MAGIC_WR ROOT_MAGIC_NEW
102 # define VER_STR_WR VER_STR_NEW 102 # define VER_STR_WR VER_STR_NEW
103 # define COMPAT_VER_WR COMPAT_VER_NEW 103 # define COMPAT_VER_WR COMPAT_VER_NEW
104 # define CAT_ROOT_WR CAT_ROOT_NEW 104 # define CAT_ROOT_WR CAT_ROOT_NEW
105 # define CAT_PREFIX_WR CAT_PREFIX_NEW 105 # define CAT_PREFIX_WR CAT_PREFIX_NEW
106 # define CAT_NAME_WR CAT_NAME_NEW 106 # define CAT_NAME_WR CAT_NAME_NEW
107 # define ENTRY_PREFIX_WRENTRY_PREFIX_NEW 107 # define ENTRY_PREFIX_WRENTRY_PREFIX_NEW
108 # define ENTRY_DESC_WR ENTRY_DESC_NEW 108 # define ENTRY_DESC_WR ENTRY_DESC_NEW
109 # define ENTRY_NAME_WR ENTRY_NAME_NEW 109 # define ENTRY_NAME_WR ENTRY_NAME_NEW
110 # define ENTRY_PW_WR ENTRY_PW_NEW 110 # define ENTRY_PW_WR ENTRY_PW_NEW
111 # define ENTRY_COMMENT_WRENTRY_COMMENT_NEW 111 # define ENTRY_COMMENT_WRENTRY_COMMENT_NEW
112 # define ENTRY_URL_WR ENTRY_URL_NEW 112 # define ENTRY_URL_WR ENTRY_URL_NEW
113 # define ENTRY_LAUNCHER_WRENTRY_LAUNCHER_NEW 113 # define ENTRY_LAUNCHER_WRENTRY_LAUNCHER_NEW
114 # define ENTRY_LVP_WR ENTRY_LVP_NEW 114 # define ENTRY_LVP_WR ENTRY_LVP_NEW
115 # define ENTRY_BIN_WR ENTRY_BIN_NEW 115 # define ENTRY_BIN_WR ENTRY_BIN_NEW
116 # define ENTRY_META_WR ENTRY_META_NEW 116 # define ENTRY_META_WR ENTRY_META_NEW
117#endif 117#endif
118 118
119 119
120Serializer::Serializer() 120Serializer::Serializer()
121{ 121{
122 defaultLockStat = true; 122 defaultLockStat = true;
123//US BUG: I needed to specify a document name. Otherwise impl will not be created for serializing
124#ifndef PWM_EMBEDDED
123 domDoc = new QDomDocument; 125 domDoc = new QDomDocument;
126#else
127 domDoc = new QDomDocument("mydoc");
128#endif
124} 129}
125 130
126Serializer::Serializer(const QCString &buffer) 131Serializer::Serializer(const QCString &buffer)
127{ 132{
128 defaultLockStat = true; 133 defaultLockStat = true;
134//US BUG: I needed to specify a document name. Otherwise impl will not be created for serializing
135#ifndef PWM_EMBEDDED
129 domDoc = new QDomDocument; 136 domDoc = new QDomDocument;
137#else
138 domDoc = new QDomDocument("mydoc");
139#endif
140
130 if (!parseXml(buffer)) { 141 if (!parseXml(buffer)) {
131 delete domDoc; 142 delete domDoc;
132#ifndef PWM_EMBEDDED 143#ifndef PWM_EMBEDDED
133 throw PwMException(PwMException::EX_PARSE); 144 throw PwMException(PwMException::EX_PARSE);
134#else 145#else
135 qDebug("Serializer::Serializer : Parse Exception "); 146 qDebug("Serializer::Serializer : Parse Exception ");
136#endif 147#endif
137 } 148 }
138} 149}
139 150
140Serializer::~Serializer() 151Serializer::~Serializer()
141{ 152{
142 delete_ifnot_null(domDoc); 153 delete_ifnot_null(domDoc);
143} 154}
144 155
145void Serializer::clear() 156void Serializer::clear()
146{ 157{
147 delete_ifnot_null(domDoc); 158 delete_ifnot_null(domDoc);
148 domDoc = new QDomDocument; 159 domDoc = new QDomDocument;
149} 160}
150 161
151bool Serializer::parseXml(const QCString &buffer) 162bool Serializer::parseXml(const QCString &buffer)
152{ 163{
153 PWM_ASSERT(domDoc); 164 PWM_ASSERT(domDoc);
154#ifndef PWM_EMBEDDED 165#ifndef PWM_EMBEDDED
155 if (!domDoc->setContent(buffer, true)) 166 if (!domDoc->setContent(buffer, true))
156 return false; 167 return false;
157#else 168#else
158 if (!domDoc->setContent(buffer)) 169 if (!domDoc->setContent(buffer))
159 return false; 170 return false;
160#endif 171#endif
161 if (!checkValid()) 172 if (!checkValid())
162 return false; 173 return false;
163 return true; 174 return true;
164} 175}
165 176
166QCString Serializer::getXml() 177QCString Serializer::getXml()
167{ 178{
168 PWM_ASSERT(domDoc); 179 PWM_ASSERT(domDoc);
169 180
170#ifndef PWM_EMBEDDED 181#ifndef PWM_EMBEDDED
171#if defined(PWM_DEBUG) && SERIALIZER_DEBUG != 0 182#if defined(PWM_DEBUG) && SERIALIZER_DEBUG != 0
172 QCString tmp(domDoc->toCString(8)); 183 QCString tmp(domDoc->toCString(8));
173 printDebug("<BEGIN Serializer::getXml() dump>\n"); 184 printDebug("<BEGIN Serializer::getXml() dump>\n");
174 cout << tmp << endl; 185 cout << tmp << endl;
175 printDebug("<END Serializer::getXml() dump>"); 186 printDebug("<END Serializer::getXml() dump>");
176#endif // DEBUG 187#endif // DEBUG
177 188
178 QCString ret(domDoc->toCString(0)); 189 QCString ret(domDoc->toCString(0));
179 ret.replace('\n', ""); 190 ret.replace('\n', "");
180 return ret; 191 return ret;
181#else 192#else
182 193
183#if defined(PWM_DEBUG) && SERIALIZER_DEBUG != 0 194#if defined(PWM_DEBUG) && SERIALIZER_DEBUG != 0
184 QCString tmp(" " + domDoc->toCString()); 195 QCString tmp(" " + domDoc->toCString());
185 printDebug("<BEGIN Serializer::getXml() dump>\n"); 196 printDebug("<BEGIN Serializer::getXml() dump>\n");
197 qDebug(tmp);
186 cout << tmp << endl; 198 cout << tmp << endl;
187 printDebug("<END Serializer::getXml() dump>"); 199 printDebug("<END Serializer::getXml() dump>");
188#endif // DEBUG 200#endif // DEBUG
189 201
190 QCString ret(domDoc->toCString()); 202 QCString ret(domDoc->toCString());
191 ret.replace(QRegExp("\n"), ""); 203 ret.replace(QRegExp("\n"), "");
192 return ret; 204 return ret;
193 205
194#endif 206#endif
195} 207}
196 208
197bool Serializer::serialize(const vector<PwMCategoryItem> &dta) 209bool Serializer::serialize(const vector<PwMCategoryItem> &dta)
198{ 210{
199 PWM_ASSERT(domDoc); 211 PWM_ASSERT(domDoc);
200 QDomElement root(genNewRoot()); 212 QDomElement root(genNewRoot());
201 QDomElement catNode(domDoc->createElement(CAT_ROOT_WR)); 213 QDomElement catNode(domDoc->createElement(CAT_ROOT_WR));
202 root.appendChild(catNode); 214 root.appendChild(catNode);
203 if (!addCategories(&catNode, dta)) 215 if (!addCategories(&catNode, dta))
204 return false; 216 return false;
205 return true; 217 return true;
206} 218}
207 219
208bool Serializer::deSerialize(vector<PwMCategoryItem> *dta) 220bool Serializer::deSerialize(vector<PwMCategoryItem> *dta)
209{ 221{
210 PWM_ASSERT(domDoc); 222 PWM_ASSERT(domDoc);
211 PWM_ASSERT(dta); 223 PWM_ASSERT(dta);
212 QDomElement root(domDoc->documentElement()); 224 QDomElement root(domDoc->documentElement());
213 QDomNode n; 225 QDomNode n;
214 226
215 dta->clear(); 227 dta->clear();
216 for (n = root.firstChild(); !n.isNull(); n = n.nextSibling()) { 228 for (n = root.firstChild(); !n.isNull(); n = n.nextSibling()) {
217 // find <categories> ... </categories> 229 // find <categories> ... </categories>
218 // <c> ... </c> 230 // <c> ... </c>
219 if (n.nodeName() == CAT_ROOT_NEW || 231 if (n.nodeName() == CAT_ROOT_NEW ||
220 n.nodeName() == CAT_ROOT_OLD) { 232 n.nodeName() == CAT_ROOT_OLD) {
221 if (!readCategories(n, dta)) { 233 if (!readCategories(n, dta)) {
222 return false; 234 return false;
223 } 235 }
224 236
225 /* NOTE: We can stop processing here, as we 237 /* NOTE: We can stop processing here, as we
226 * don't have more nodes in root, yet. 238 * don't have more nodes in root, yet.
227 */ 239 */
228 return true; 240 return true;
229 } 241 }
230 } 242 }
231 return false; 243 return false;
232} 244}
233 245
234bool Serializer::readCategories(const QDomNode &n, 246bool Serializer::readCategories(const QDomNode &n,
235 vector<PwMCategoryItem> *dta) 247 vector<PwMCategoryItem> *dta)
236{ 248{
237 QDomNodeList nl(n.childNodes()); 249 QDomNodeList nl(n.childNodes());
238 QDomNode cur; 250 QDomNode cur;
239 QString name; 251 QString name;
240 unsigned int numCat = nl.count(), i; 252 unsigned int numCat = nl.count(), i;
241 PwMCategoryItem curCat; 253 PwMCategoryItem curCat;
242 vector<PwMDataItem> curEntr; 254 vector<PwMDataItem> curEntr;
243 255
244 if (!numCat) { 256 if (!numCat) {
245 printDebug("Serializer::readCategories(): empty"); 257 printDebug("Serializer::readCategories(): empty");
246 return false; 258 return false;
247 } 259 }
248 for (i = 0; i < numCat; ++i) { 260 for (i = 0; i < numCat; ++i) {
249 cur = nl.item(i); 261 cur = nl.item(i);
250 if (cur.nodeName().left(1) == CAT_PREFIX_NEW || 262 if (cur.nodeName().left(1) == CAT_PREFIX_NEW ||
251 cur.nodeName().left(4) == CAT_PREFIX_OLD) { 263 cur.nodeName().left(4) == CAT_PREFIX_OLD) {
252 name = cur.toElement().attribute(CAT_NAME_NEW); 264 name = cur.toElement().attribute(CAT_NAME_NEW);
253 if (name == QString::null) 265 if (name == QString::null)
254 name = cur.toElement().attribute(CAT_NAME_OLD); 266 name = cur.toElement().attribute(CAT_NAME_OLD);
255 PWM_ASSERT(name != QString::null); 267 PWM_ASSERT(name != QString::null);
256 PWM_ASSERT(name != ""); 268 PWM_ASSERT(name != "");
257 curCat.clear(); 269 curCat.clear();
258 curCat.name = name.latin1(); 270 curCat.name = name.latin1();
259 if (!readEntries(cur, &curEntr)) { 271 if (!readEntries(cur, &curEntr)) {
260 dta->clear(); 272 dta->clear();
261 return false; 273 return false;
262 } 274 }
263 curCat.d = curEntr; 275 curCat.d = curEntr;
264 dta->push_back(curCat); 276 dta->push_back(curCat);
265 } else { 277 } else {
266 printDebug("Serializer::readCategories(): uh? not a category?"); 278 printDebug("Serializer::readCategories(): uh? not a category?");
267 } 279 }
268 } 280 }
269 return true; 281 return true;
270} 282}
271 283
272bool Serializer::readEntries(const QDomNode &n, 284bool Serializer::readEntries(const QDomNode &n,
273 vector<PwMDataItem> *dta) 285 vector<PwMDataItem> *dta)
274{ 286{
275 QDomNodeList nl(n.childNodes()); 287 QDomNodeList nl(n.childNodes());
276 QDomNode cur; 288 QDomNode cur;
277 unsigned int numEntr = nl.count(), i; 289 unsigned int numEntr = nl.count(), i;
278 PwMDataItem curEntr; 290 PwMDataItem curEntr;
279 291
280 dta->clear(); 292 dta->clear();
281 for (i = 0; i < numEntr; ++i) { 293 for (i = 0; i < numEntr; ++i) {
282 cur = nl.item(i); 294 cur = nl.item(i);
283 if (cur.nodeName().left(1) == ENTRY_PREFIX_NEW || 295 if (cur.nodeName().left(1) == ENTRY_PREFIX_NEW ||
284 cur.nodeName().left(6) == ENTRY_PREFIX_OLD) { 296 cur.nodeName().left(6) == ENTRY_PREFIX_OLD) {
285 if (!extractEntry(cur, &curEntr)) { 297 if (!extractEntry(cur, &curEntr)) {
286 return false; 298 return false;
287 } 299 }
288 dta->push_back(curEntr); 300 dta->push_back(curEntr);
289 } else { 301 } else {
290 printDebug("Serializer::readEntries(): hm? not an entry?"); 302 printDebug("Serializer::readEntries(): hm? not an entry?");
291 } 303 }
292 } 304 }
293 return true; 305 return true;
294} 306}
295 307
296bool Serializer::extractEntry(const QDomNode &n, 308bool Serializer::extractEntry(const QDomNode &n,
297 PwMDataItem *dta) 309 PwMDataItem *dta)
298{ 310{
299 QDomNodeList nl(n.childNodes()); 311 QDomNodeList nl(n.childNodes());
300 QDomNode cur, cdata; 312 QDomNode cur, cdata;
301 unsigned int cnt = nl.count(), i; 313 unsigned int cnt = nl.count(), i;
302 QString name, text; 314 QString name, text;
303 315
304 if (!cnt) { 316 if (!cnt) {
305 printDebug("Serializer::extractEntry(): empty"); 317 printDebug("Serializer::extractEntry(): empty");
306 return false; 318 return false;
307 } 319 }
308 dta->clear(); 320 dta->clear();
309 for (i = 0; i < cnt; ++i) { 321 for (i = 0; i < cnt; ++i) {
310 cur = nl.item(i); 322 cur = nl.item(i);
311 name = cur.nodeName(); 323 name = cur.nodeName();
312 cdata = cur.firstChild(); 324 cdata = cur.firstChild();
313 if (unlikely(cdata.isCDATASection())) { 325 if (unlikely(cdata.isCDATASection())) {
314 text = cdata.toCDATASection().data(); 326 text = cdata.toCDATASection().data();
315 } else if (likely(cur.isElement())) { 327 } else if (likely(cur.isElement())) {
316 text = cur.toElement().text(); 328 text = cur.toElement().text();
317 } else { 329 } else {
318 printDebug("Serializer::extractEntry(): neither CDATA nor element."); 330 printDebug("Serializer::extractEntry(): neither CDATA nor element.");
319 return false; 331 return false;
320 } 332 }
321 if (text == " ") 333 if (text == " ")
322 text = ""; // for backward compatibility. 334 text = ""; // for backward compatibility.
323 if (name == ENTRY_DESC_NEW || 335 if (name == ENTRY_DESC_NEW ||
324 name == ENTRY_DESC_OLD) { 336 name == ENTRY_DESC_OLD) {
325 dta->desc = unescapeEntryData(text).latin1(); 337 dta->desc = unescapeEntryData(text).latin1();
326 } else if (name == ENTRY_NAME_NEW || 338 } else if (name == ENTRY_NAME_NEW ||
327 name == ENTRY_NAME_OLD) { 339 name == ENTRY_NAME_OLD) {
328 dta->name = unescapeEntryData(text).latin1(); 340 dta->name = unescapeEntryData(text).latin1();
329 } else if (name == ENTRY_PW_NEW || 341 } else if (name == ENTRY_PW_NEW ||
330 name == ENTRY_PW_OLD) { 342 name == ENTRY_PW_OLD) {
331 dta->pw = unescapeEntryData(text).latin1(); 343 dta->pw = unescapeEntryData(text).latin1();
332 } else if (name == ENTRY_COMMENT_NEW || 344 } else if (name == ENTRY_COMMENT_NEW ||
333 name == ENTRY_COMMENT_OLD) { 345 name == ENTRY_COMMENT_OLD) {
334 dta->comment = unescapeEntryData(text).latin1(); 346 dta->comment = unescapeEntryData(text).latin1();
335 } else if (name == ENTRY_URL_NEW || 347 } else if (name == ENTRY_URL_NEW ||
336 name == ENTRY_URL_OLD) { 348 name == ENTRY_URL_OLD) {
337 dta->url = unescapeEntryData(text).latin1(); 349 dta->url = unescapeEntryData(text).latin1();
338 } else if (name == ENTRY_LAUNCHER_NEW || 350 } else if (name == ENTRY_LAUNCHER_NEW ||
339 name == ENTRY_LAUNCHER_OLD) { 351 name == ENTRY_LAUNCHER_OLD) {
340 dta->launcher = unescapeEntryData(text).latin1(); 352 dta->launcher = unescapeEntryData(text).latin1();
341 } else if (name == ENTRY_LVP_NEW || 353 } else if (name == ENTRY_LVP_NEW ||
342 name == ENTRY_LVP_OLD) { 354 name == ENTRY_LVP_OLD) {
343 dta->listViewPos = strtol(text.latin1(), 0, 10); 355 dta->listViewPos = strtol(text.latin1(), 0, 10);
344 } else if (name == ENTRY_BIN_NEW) { 356 } else if (name == ENTRY_BIN_NEW) {
345 // ENTRY_BIN_NEW == ENTRY_BIN_OLD 357 // ENTRY_BIN_NEW == ENTRY_BIN_OLD
346 if (text == "0") { 358 if (text == "0") {
347 dta->binary = false; 359 dta->binary = false;
348 } else { 360 } else {
349 dta->binary = true; 361 dta->binary = true;
350 } 362 }
351 } else if (name == ENTRY_META_NEW) { 363 } else if (name == ENTRY_META_NEW) {
352 // ENTRY_META_NEW == ENTRY_META_OLD 364 // ENTRY_META_NEW == ENTRY_META_OLD
353 if (!extractMeta(cur, &dta->meta)) 365 if (!extractMeta(cur, &dta->meta))
354 return false; 366 return false;
355 } else { 367 } else {
356 printDebug(string("Serializer::extractEntry(): invalid: ") 368 printDebug(string("Serializer::extractEntry(): invalid: ")
357 + name.latin1()); 369 + name.latin1());
358 } 370 }
359 } 371 }
360 dta->lockStat = defaultLockStat; 372 dta->lockStat = defaultLockStat;
361 return true; 373 return true;
362} 374}
363 375
364bool Serializer::extractMeta(const QDomNode &n, 376bool Serializer::extractMeta(const QDomNode &n,
365 PwMMetaData *dta) 377 PwMMetaData *dta)
366{ 378{
367 QDomNode cur(n.firstChild()); 379 QDomNode cur(n.firstChild());
368 QString name, val; 380 QString name, val;
369 while (!cur.isNull()) { 381 while (!cur.isNull()) {
370 name = cur.nodeName(); 382 name = cur.nodeName();
371 val = cur.toElement().text(); 383 val = cur.toElement().text();
372 if (val == "") { 384 if (val == "") {
373 cur = cur.nextSibling(); 385 cur = cur.nextSibling();
374 continue; 386 continue;
375 } 387 }
376#ifndef PWM_EMBEDDED 388#ifndef PWM_EMBEDDED
377 if (name == META_CREATE_DATE) { 389 if (name == META_CREATE_DATE) {