summaryrefslogtreecommitdiffabout
path: root/pwmanager/pwmanager/serializer.cpp
Side-by-side diff
Diffstat (limited to 'pwmanager/pwmanager/serializer.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--pwmanager/pwmanager/serializer.cpp109
1 files changed, 101 insertions, 8 deletions
diff --git a/pwmanager/pwmanager/serializer.cpp b/pwmanager/pwmanager/serializer.cpp
index a54ba8a..f615082 100644
--- a/pwmanager/pwmanager/serializer.cpp
+++ b/pwmanager/pwmanager/serializer.cpp
@@ -28,32 +28,36 @@
/* enable/disable serializer debugging (0/1) */
#define SERIALIZER_DEBUG 1
/* use the old xml tags for writing (0/1) */
#define USE_OLD_TAGS 0
/* write a CDATA section (0/1) */
#define WRITE_CDATA_SEC 0
#define META_CREATE_DATE "c"
#define META_VALID_DATE "v"
#define META_EXPIRE_DATE "e"
#define META_UPDATE_DATE "u"
#define META_UPDATE_INT "i"
//US ENH : uniqueid
#define META_UNIQUEID "n"
+#define SYNC_ROOT "s"
+#define SYNC_TARGET_PREFIX "t"
+#define SYNC_TARGET_NAME "n"
+
/* This is compatibility stuff.
* The names of the entries have changed and here are the
* new and old ones
*/
#define ROOT_MAGIC_OLD "PwM-xml-dat"
#define VER_STR_OLD "ver"
#define COMPAT_VER_OLD "0x02"
#define CAT_ROOT_OLD "categories"
#define CAT_PREFIX_OLD "cat_"
#define CAT_NAME_OLD "name"
#define ENTRY_PREFIX_OLD "entry_"
#define ENTRY_DESC_OLD "desc"
#define ENTRY_NAME_OLD "name"
#define ENTRY_PW_OLD "pw"
#define ENTRY_COMMENT_OLD "comment"
@@ -193,67 +197,79 @@ QCString Serializer::getXml()
#if defined(PWM_DEBUG) && SERIALIZER_DEBUG != 0
QCString tmp(" " + domDoc->toCString());
printDebug("<BEGIN Serializer::getXml() dump>\n");
qDebug(tmp);
cout << tmp << endl;
printDebug("<END Serializer::getXml() dump>");
#endif // DEBUG
QCString ret(domDoc->toCString());
ret.replace(QRegExp("\n"), "");
return ret;
#endif
}
-bool Serializer::serialize(const vector<PwMCategoryItem> &dta)
+bool Serializer::serialize(PwMItem &dta)
{
PWM_ASSERT(domDoc);
QDomElement root(genNewRoot());
QDomElement catNode(domDoc->createElement(CAT_ROOT_WR));
- root.appendChild(catNode);
- if (!addCategories(&catNode, dta))
+ QDomElement syncNode(domDoc->createElement(SYNC_ROOT));
+ if (!addSyncData(&syncNode, dta.syncDta))
return false;
+ root.appendChild(syncNode);
+ if (!addCategories(&catNode, dta.dta))
+ return false;
+ root.appendChild(catNode);
return true;
}
-bool Serializer::deSerialize(vector<PwMCategoryItem> *dta)
+bool Serializer::deSerialize(PwMItem *dta)
{
PWM_ASSERT(domDoc);
PWM_ASSERT(dta);
QDomElement root(domDoc->documentElement());
QDomNode n;
dta->clear();
for (n = root.firstChild(); !n.isNull(); n = n.nextSibling()) {
// find <categories> ... </categories>
// <c> ... </c>
if (n.nodeName() == CAT_ROOT_NEW ||
n.nodeName() == CAT_ROOT_OLD) {
- if (!readCategories(n, dta)) {
+ if (!readCategories(n, &(dta->dta))) {
return false;
}
+ continue;
+ }
+ else if (n.nodeName() == SYNC_ROOT) {
+ if (!readSyncData(n, &(dta->syncDta))) {
+ return false;
+ }
+ continue;
+ }
/* NOTE: We can stop processing here, as we
* don't have more nodes in root, yet.
*/
- return true;
- }
+ return false;
+
}
- return false;
+ return true;
}
bool Serializer::readCategories(const QDomNode &n,
vector<PwMCategoryItem> *dta)
{
QDomNodeList nl(n.childNodes());
QDomNode cur;
QString name;
unsigned int numCat = nl.count(), i;
PwMCategoryItem curCat;
vector<PwMDataItem> curEntr;
if (!numCat) {
printDebug("Serializer::readCategories(): empty");
return false;
}
@@ -648,16 +664,93 @@ QString Serializer::escapeEntryData(QString dta)
dta.replace(QRegExp("]]>"), "||>");
#endif
return dta;
}
QString Serializer::unescapeEntryData(QString dta)
{
#ifndef PWM_EMBEDDED
dta.replace("$>--endl--<$", "\n");
dta.replace("||>", "]]>");
#else
dta.replace(QRegExp("$>--endl--<$"), "\n");
dta.replace(QRegExp("||>"), "]]>");
#endif
return dta;
}
+
+
+//US ENH: the following methods are getting used to write/read sync entries
+/** read the syncentries in the node "n" */
+bool Serializer::readSyncData(const QDomNode &n, vector<PwMSyncItem> *dta)
+{
+ QDomNodeList nl(n.childNodes());
+ QDomNode cur;
+
+ QString devicename, val;
+ unsigned int numSync = nl.count(), i;
+ PwMSyncItem curSync;
+ bool ok = true;
+
+ if (!numSync) {
+ //no sync entries is a possible result
+ printDebug("Serializer::readSyncData(): empty");
+ return true;
+ }
+ for (i = 0; i < numSync; ++i) {
+ cur = nl.item(i);
+ if (cur.nodeName().left(1) == SYNC_TARGET_PREFIX) {
+ devicename = cur.toElement().attribute(SYNC_TARGET_NAME);
+ val = cur.toElement().text();
+
+ if ((val == "") || (devicename == QString::null)) {
+ printDebug("Serializer::readSyncData(): empty synctarget name or syncdate");
+ continue;
+ }
+
+ curSync.syncName = devicename;
+#ifndef PWM_EMBEDDED
+ curSync.lastSyncDate = QDateTime::fromString(val, Qt::ISODate);
+#else
+ curSync.lastSyncDate = KGlobal::locale()->readDateTime(val, KLocale::ISODate, &ok);
+ if (ok == false)
+ qDebug("Serializer::readSyncData(): could not parse syncdate:%s",val.latin1());
+
+#endif
+ dta->push_back(curSync);
+ }
+ }
+ return true;
+
+}
+
+
+
+bool Serializer::addSyncData(QDomElement *e,
+ const vector<PwMSyncItem> &dta)
+{
+ unsigned int numSync = dta.size(), i;
+ QString curId, curDeviceName;
+ QDomElement curSync, curSyncDate;
+ QDomText text;
+
+ for (i = 0; i < numSync; ++i) {
+ curId = SYNC_TARGET_PREFIX;
+ curId += tostr(i).c_str();
+ curDeviceName = dta[i].syncName.c_str();
+ curSync = domDoc->createElement(curId);
+ curSync.setAttribute(SYNC_TARGET_NAME, curDeviceName);
+
+#ifndef PWM_EMBEDDED
+ text = domDoc->createTextNode(dta[i].lastSyncDate.toString(Qt::ISODate));
+#else
+ text = domDoc->createTextNode(KGlobal::locale()->formatDateTime(dta[i].lastSyncDate, KLocale::ISODate));
+#endif
+ curSyncDate.appendChild(text);
+ curSync.appendChild(curSyncDate);
+
+ e->appendChild(curSync);
+
+ }
+ return true;
+}
+