-rw-r--r-- | pwmanager/pwmanager/pwmdoc.cpp | 46 |
1 files changed, 39 insertions, 7 deletions
diff --git a/pwmanager/pwmanager/pwmdoc.cpp b/pwmanager/pwmanager/pwmdoc.cpp index 4e8a603..6c1a9c0 100644 --- a/pwmanager/pwmanager/pwmdoc.cpp +++ b/pwmanager/pwmanager/pwmdoc.cpp @@ -2895,2 +2895,4 @@ PwMerror PwMDoc::syncronize(KSyncManager* manager, PwMDoc* syncLocal , PwMDoc* s uid = er[ incCounter ]; + qDebug("sync uid %s from remote file", uid.latin1()); + qApp->processEvents(); @@ -2899,2 +2901,3 @@ PwMerror PwMDoc::syncronize(KSyncManager* manager, PwMDoc* syncLocal , PwMDoc* s inRemote = syncRemote->findEntryByID( uid, &catRemote, &indexRemote ); + PWM_ASSERT(inRemote); if ( inLocal != 0 ) { // maybe conflict - same uid in both files @@ -3096,9 +3099,29 @@ bool PwMDoc::sync(KSyncManager* manager, QString filename, int mode) - // construct on the stack = automatic cleanup. + //1) unlock local file first if necessary (ask for password) + if (this->isDeepLocked()) { + PwMerror ret = this->deepLock(false); + if (ret != e_success) + return false; + } + + //2) construct and open a new doc on the stack(automatic cleanup) for remote file. PwMDoc syncTarget(this, "synctarget"); + PwMDoc* pSyncTarget = &syncTarget; - PwMerror err = syncTarget.openDoc(&filename, 2 /*== deeplocked*/); - if (err != e_success) + PwMerror err = pSyncTarget->openDoc(&filename, 1 /*== open with all entries locked*/); + + if (err == e_alreadyOpen) { + PwMDocList::listItem li; + if (getOpenDocList()->find(filename.latin1(), &li)) + pSyncTarget = li.doc; + else { + qDebug("PwmDoc::sync: sync failed. Error %i while opening file %s",err, filename.latin1()); + return false; + } + } + else if (err != e_success) { + qDebug("PwmDoc::sync: sync failed. Error %i while opening file %s",err, filename.latin1()); return false; + } @@ -3107,3 +3130,11 @@ bool PwMDoc::sync(KSyncManager* manager, QString filename, int mode) - err = syncronize(manager, this, &syncTarget, mode ); + //3) unlock remote file first if necessary (ask for password) + if (pSyncTarget->isDeepLocked()) { + PwMerror ret = pSyncTarget->deepLock(false); + if (ret != e_success) + return false; + } + + + err = syncronize(manager, this, pSyncTarget, mode ); @@ -3112,6 +3143,7 @@ bool PwMDoc::sync(KSyncManager* manager, QString filename, int mode) qDebug("Saving remote PWManager file"); - err = syncTarget.saveDoc(conf()->confGlobCompression()); - if (err != e_success) + err = pSyncTarget->saveDoc(conf()->confGlobCompression()); + if (err != e_success) { + qDebug("PwmDoc::sync: Sync failed. Error %i while storing file %s",err, filename.latin1()); return false; - + } } |