-rw-r--r-- | pwmanager/pwmanager/pwmdoc.cpp | 10 | ||||
-rw-r--r-- | pwmanager/pwmanager/pwmdoc.h | 20 |
2 files changed, 24 insertions, 6 deletions
diff --git a/pwmanager/pwmanager/pwmdoc.cpp b/pwmanager/pwmanager/pwmdoc.cpp index fd17ce5..9043acc 100644 --- a/pwmanager/pwmanager/pwmdoc.cpp +++ b/pwmanager/pwmanager/pwmdoc.cpp @@ -3017,12 +3017,14 @@ PwMerror PwMDoc::syncronize(KSyncManager* manager, PwMDoc* syncLocal , PwMDoc* s PwMSyncItem* syncItemLocal; PwMSyncItem* syncItemRemote; QString mCurrentSyncName = manager->getCurrentSyncName(); QString mCurrentSyncDevice = manager->getCurrentSyncDevice(); + bool mSyncLauncher = true; + bool fullDateRange = false; int take; // local->resetTempSyncStat(); QDateTime mLastSync = QDateTime::currentDateTime(); QDateTime modifiedSync = mLastSync; @@ -3117,20 +3119,16 @@ PwMerror PwMDoc::syncronize(KSyncManager* manager, PwMDoc* syncLocal , PwMDoc* s if ( inLocal != 0 ) { // maybe conflict - same uid in both files if ( (take = takePwMDataItem( inLocal, inRemote, mLastSync, mode, fullDateRange) ) ) { qDebug("take %d %s ", take, inLocal->desc.c_str()); if ( take == 3 ) return e_syncError; if ( take == 1 ) {// take local - int oldlistpos = inRemote->listViewPos; - (*inRemote) = (*inLocal); - inRemote->listViewPos = oldlistpos; + inRemote->syncItem(*inLocal, mSyncLauncher); ++changedRemote; } else { // take == 2 take remote - int oldlistpos = inLocal->listViewPos; - (*inLocal) = (*inRemote); - inLocal->listViewPos = oldlistpos; + inLocal->syncItem(*inRemote, mSyncLauncher); ++changedLocal; } } } else { // no conflict if ( inRemote->meta.update > mLastSync || mode == 5 ) { inRemote->meta.update = modifiedSync; diff --git a/pwmanager/pwmanager/pwmdoc.h b/pwmanager/pwmanager/pwmdoc.h index e419c24..09923ab 100644 --- a/pwmanager/pwmanager/pwmdoc.h +++ b/pwmanager/pwmanager/pwmdoc.h @@ -221,12 +221,32 @@ struct PwMDataItem if ( comment != a.comment ) return false; if ( url != a.url ) return false; if ( launcher != a.launcher ) return false; //all other field will not be checked. return true; } + + //US ENH: this sync method actually copies all values from the parameter like the =operator + //does with two exceptions: listViewPos will not be changed, and the launcher only if required. + bool PwMDataItem::syncItem(const PwMDataItem &a, bool syncLauncher=true ) + { + desc = a.desc; + name = a.name; + pw = a.pw; + comment = a.comment; + url = a.url; + if (syncLauncher == true) + launcher = a.launcher; + meta = a.meta; + binary = a.binary; + lockStat = a.lockStat; + rev = a.rev; + + return true; + } + }; struct PwMCategoryItem { /** all PwMDataItems (all passwords) within this category */ vector<PwMDataItem> d; |