-rw-r--r-- | pwmanager/pwmanager/pwmdoc.cpp | 36 | ||||
-rw-r--r-- | pwmanager/pwmanager/pwmdoc.h | 34 | ||||
-rw-r--r-- | pwmanager/pwmanager/serializer.cpp | 2 |
3 files changed, 56 insertions, 16 deletions
diff --git a/pwmanager/pwmanager/pwmdoc.cpp b/pwmanager/pwmanager/pwmdoc.cpp index 76a45f4..ab3238a 100644 --- a/pwmanager/pwmanager/pwmdoc.cpp +++ b/pwmanager/pwmanager/pwmdoc.cpp @@ -2796,14 +2796,14 @@ PwMerror PwMDoc::syncronize(KSyncManager* manager, PwMDoc* syncLocal , PwMDoc* s int addedPasswordsRemote = 0; int deletedPasswordsRemote = 0; int deletedPasswordsLocal = 0; int changedLocal = 0; int changedRemote = 0; - PwMSyncItem* syncItemLocal; - PwMSyncItem* syncItemRemote; + PwMSyncItem syncItemLocal; + PwMSyncItem syncItemRemote; QString mCurrentSyncName = manager->getCurrentSyncName(); QString mCurrentSyncDevice = manager->getCurrentSyncDevice(); bool fullDateRange = false; int take; @@ -2825,13 +2825,13 @@ PwMerror PwMDoc::syncronize(KSyncManager* manager, PwMDoc* syncLocal , PwMDoc* s qDebug("PwMDoc::syncronize : newly created local sync data could not be found"); return e_syncError; } } syncItemLocal = syncLocal->getSyncDataEntry(index); - qDebug("Last Sync %s ", syncItemLocal->lastSyncDate.toString().latin1()); + qDebug("Last Sync %s ", syncItemLocal.lastSyncDate.toString().latin1()); //Step 2. Find syncinfo in remote file and create if not existent. found = syncRemote->findSyncData(mCurrentSyncName, &index); if (found == false) { qDebug("FULLDATE 1"); @@ -2849,24 +2849,24 @@ PwMerror PwMDoc::syncronize(KSyncManager* manager, PwMDoc* syncLocal , PwMDoc* s syncItemRemote = syncRemote->getSyncDataEntry(index); //and remove the found entry here. We will reenter it later again. syncRemote->delSyncDataEntry(index, true); - if ( syncItemLocal->lastSyncDate == mLastSync ) { + if ( syncItemLocal.lastSyncDate == mLastSync ) { qDebug("FULLDATE 2"); fullDateRange = true; } if ( ! fullDateRange ) { - if ( syncItemLocal->lastSyncDate != syncItemRemote->lastSyncDate ) { + if ( syncItemLocal.lastSyncDate != syncItemRemote->lastSyncDate ) { // qDebug("set fulldate to true %s %s" ,addresseeLSync->dtStart().toString().latin1(), addresseeRSync->dtStart().toString().latin1() ); //qDebug("%d %d %d %d ", addresseeLSync->dtStart().time().second(), addresseeLSync->dtStart().time().msec() , addresseeRSync->dtStart().time().second(), addresseeRSync->dtStart().time().msec()); fullDateRange = true; - qDebug("FULLDATE 3 %s %s", syncItemLocal->lastSyncDate.toString().latin1() , syncItemRemote->lastSyncDate.toString().latin1() ); + qDebug("FULLDATE 3 %s %s", syncItemLocal.lastSyncDate.toString().latin1() , syncItemRemote.lastSyncDate.toString().latin1() ); } } // fullDateRange = true; // debug only! if ( fullDateRange ) mLastSync = QDateTime::currentDateTime().addDays( -100*365); else @@ -2917,15 +2917,18 @@ PwMerror PwMDoc::syncronize(KSyncManager* manager, PwMDoc* syncLocal , PwMDoc* s ++changedLocal; } } } else { // no conflict if ( inRemote->meta.update > mLastSync || mode == 5 ) { inRemote->meta.update = modifiedSync; + + //first check if we have a matching category in the local file + const string* remotecat = syncRemote->getCategory(catRemote); //US syncRemote->insertAddressee( inRemote, false ); //US syncLocal->insertAddressee( inRemote, false ); - syncLocal->addEntry("newcategory", inRemote, true, false); + syncLocal->addEntry(remotecat->c_str(), inRemote, true, false); ++addedPasswordsLocal; } else { // pending checkExternSyncAddressee(addresseeRSyncSharp, inR); syncRemote->delEntry(catRemote, indexRemote, true); //USsyncRemote->removeAddressee( inRemote ); @@ -2950,26 +2953,35 @@ PwMerror PwMDoc::syncronize(KSyncManager* manager, PwMDoc* syncLocal , PwMDoc* s if ( incCounter % modulo == 0 ) manager->showProgressBar(incCounter); uid = el[ incCounter ]; inLocal = syncLocal->findEntryByID( uid, &catLocal, &indexLocal ); inRemote = syncRemote->findEntryByID( uid, &catRemote, &indexRemote ); + PWM_ASSERT(inLocal); + if ( inRemote == 0 ) { if ( inLocal->meta.update < mLastSync && mode != 4 ) { // pending checkExternSyncAddressee(addresseeLSyncSharp, inL); syncLocal->delEntry(catLocal, indexLocal, true); //USsyncLocal->removeAddressee( inLocal ); ++deletedPasswordsLocal; } else { if ( ! manager->mWriteBackExistingOnly ) { ++addedPasswordsRemote; inLocal->meta.update = modifiedSync; + + //first check if we have a matching category in the remote file + const string* localcat = syncLocal->getCategory(catLocal); + //USsyncLocal->insertAddressee( inLocal, false ); - (*inRemote) = (*inLocal); + PwMDataItem newEntry; + newEntry = *inLocal; + inRemote = &newEntry; + //USsyncRemote->insertAddressee( inRemote, false ); - syncRemote->addEntry("newcategory", inRemote, true, false); + syncRemote->addEntry(localcat->c_str(), inRemote, true, false); } } } ++incCounter; @@ -2982,14 +2994,14 @@ PwMerror PwMDoc::syncronize(KSyncManager* manager, PwMDoc* syncLocal , PwMDoc* s mLastSync = QDateTime::currentDateTime().addSecs( 1 ); // get rid of micro seconds QTime t = mLastSync.time(); mLastSync.setTime( QTime (t.hour (), t.minute (), t.second () ) ); - syncItemLocal->lastSyncDate = mLastSync; - syncItemRemote->lastSyncDate = mLastSync; + syncItemLocal.lastSyncDate = mLastSync; + syncItemRemote.lastSyncDate = mLastSync; // addresseeRSync.setRole( i18n("!Remote from: ")+mCurrentSyncName ) ; // addresseeLSync.setRole(i18n("!Local from: ") + mCurrentSyncName ); syncRemote->addSyncDataEntry( syncItemRemote, false ); syncLocal->addSyncDataEntry( syncItemLocal, false ); @@ -3279,13 +3291,13 @@ QStringList PwMDoc::getIDEntryList() while (catcounter != catend) { entrBegin = catcounter->d.begin(); entrEnd = catcounter->d.end(); entrI = entrBegin; while (entrI != entrEnd) { - results.append( (*entrI).meta.uniqueid ); + results.append( (*entrI).meta.uniqueid.c_str() ); ++entrI; } ++catcounter; } return results; diff --git a/pwmanager/pwmanager/pwmdoc.h b/pwmanager/pwmanager/pwmdoc.h index 91277f6..ddab7f3 100644 --- a/pwmanager/pwmanager/pwmdoc.h +++ b/pwmanager/pwmanager/pwmdoc.h @@ -115,23 +115,34 @@ struct PwMMetaData * 0 disables. */ unsigned long updateInt; //US ENH: enhancements of the filestructure /* each entry gets a unique id assigned */ - QString uniqueid; + string uniqueid; void clear() { create = QDateTime(); expire = QDateTime(); update = QDateTime(); updateInt = 0; uniqueid = KApplication::randomString(8); } + + PwMMetaData& operator = (const PwMMetaData& x) + { + create = x.create; + expire = x.expire; + update = x.update; + updateInt = x.updateInt; + uniqueid = x.uniqueid; + return *this; + } + inline bool isValid() const { if (valid.isNull()) return true; return (valid < QDateTime::currentDateTime()); } @@ -204,12 +215,29 @@ struct PwMDataItem listViewPos = -1; binary = false; if (clearMeta) meta.clear(); } + PwMDataItem& operator = (const PwMDataItem& x) + { + qDebug("oper=%s", x.desc.c_str()); + desc = x.desc; + name = x.name; + pw = x.pw; + comment = x.comment; + url = x.url; + launcher = x.launcher; + lockStat = x.lockStat; + listViewPos = x.listViewPos; + binary = x.binary; + meta = x.meta; + rev = x.rev; + return *this; + } + }; struct PwMCategoryItem { /** all PwMDataItems (all passwords) within this category */ vector<PwMDataItem> d; @@ -760,14 +788,14 @@ protected: bool findSyncData(const QString &syncname, unsigned int *index); /** add new syncdataentry */ PwMerror addSyncDataEntry(PwMSyncItem *d, bool dontFlagDirty = false); /** returns a pointer to the syncdata */ - PwMSyncItem* getSyncDataEntry(unsigned int index) - { return &(dti.syncDta[index]); } + PwMSyncItem getSyncDataEntry(unsigned int index) + { return *(dti.syncDta[index]); } /** delete entry */ bool delSyncDataEntry(unsigned int index, bool dontFlagDirty = false); PwMDataItem* findEntryByID(const QString &uid, unsigned int *category, unsigned int *index); diff --git a/pwmanager/pwmanager/serializer.cpp b/pwmanager/pwmanager/serializer.cpp index f615082..74b3354 100644 --- a/pwmanager/pwmanager/serializer.cpp +++ b/pwmanager/pwmanager/serializer.cpp @@ -643,13 +643,13 @@ bool Serializer::writeMeta(QDomElement *e, tag = domDoc->createElement(META_UPDATE_INT); text = domDoc->createTextNode(tostr(dta.updateInt).c_str()); tag.appendChild(text); e->appendChild(tag); tag = domDoc->createElement(META_UNIQUEID); - text = domDoc->createTextNode(escapeEntryData(dta.uniqueid)); + text = domDoc->createTextNode(escapeEntryData(dta.uniqueid.c_str())); tag.appendChild(text); e->appendChild(tag); #undef new_text return true; } |