-rw-r--r-- | pwmanager/pwmanager/pwmdoc.cpp | 92 | ||||
-rw-r--r-- | pwmanager/pwmanager/pwmdoc.h | 23 |
2 files changed, 55 insertions, 60 deletions
diff --git a/pwmanager/pwmanager/pwmdoc.cpp b/pwmanager/pwmanager/pwmdoc.cpp index 2a7b11d..e9906a4 100644 --- a/pwmanager/pwmanager/pwmdoc.cpp +++ b/pwmanager/pwmanager/pwmdoc.cpp @@ -2804,2 +2804,17 @@ PwMerror PwMDoc::importFromGpasman(const QString *file) + +//US: we use the stl sort algorythm to sort all elements in the order +//of its listViewPos (in the order 1,2,3,5,...,x,-1, -1, -1 +struct PwMDataItemListViewPosSort +{ + bool operator()(PwMDataItem* rpStart, PwMDataItem* rpEnd) + { + //qDebug("pwMDoc::PwMDataItemListViewPosSort()"); + if ((rpEnd)->listViewPos < 0) + return false; + else + return (rpStart)->listViewPos < (rpEnd)->listViewPos; + } +}; + void PwMDoc::ensureLvp() @@ -2811,11 +2826,7 @@ void PwMDoc::ensureLvp() //is not sufficient, because there might be empty spaces - // at the beginning. But this algorythm only can add elements + // at the beginning. But the old algorythm only can add elements //to the end.The result are crashes because of listoverflows //we need something to fill all gaps. - vector< vector<PwMDataItem>::iterator > undefined; - vector< vector<PwMDataItem>::iterator > sorted; - vector< vector<PwMDataItem>::iterator >::iterator undefBegin, - undefEnd, - undefI; - vector< vector<PwMDataItem>::iterator >::iterator sortedBegin, + vector<PwMDataItem*> sorted; + vector< PwMDataItem*>::iterator sortedBegin, sortedEnd, @@ -2828,5 +2839,7 @@ void PwMDoc::ensureLvp() + //qDebug("collect:"); + while (catI != catEnd) { lvpTop = -1; - undefined.clear(); + sorted.clear(); @@ -2836,10 +2849,7 @@ void PwMDoc::ensureLvp() + //US: we use the stl sort algorythm to sort all elements in the order + //of its listViewPos (in the order 1,2,2,3,5,...,x,-1, -1, -1 while (entrI != entrEnd) { - tmpLvp = entrI->listViewPos; - if (tmpLvp == -1) - undefined.push_back(entrI); - else - sorted[tmpLvp] = entrI; - //US else if (tmpLvp > lvpTop) - //US lvpTop = tmpLvp; + //qDebug("found: %s, pos=%i", (*entrI).desc.c_str(), (*entrI).listViewPos); + sorted.push_back((PwMDataItem*)&(*entrI)); ++entrI; @@ -2847,3 +2857,10 @@ void PwMDoc::ensureLvp() - //now we have all undefied in the collection. Now insert the existing + sortedBegin = sorted.begin(); + sortedEnd = sorted.end(); + + sort(sortedBegin, sortedEnd, PwMDataItemListViewPosSort()); + + // qDebug("resort:"); + //now we have all sorted in a collection + //Now start with the sorted and reset listviewpos. sortedBegin = sorted.begin(); @@ -2853,4 +2870,4 @@ void PwMDoc::ensureLvp() while (sortedI != sortedEnd) { - tmpLvp = (*sortedI)->listViewPos; - undefined[tmpLvp] = *sortedI; + // qDebug("reset defined: %s, from pos=%i to pos=%i", (*sortedI)->desc.c_str(), (*sortedI)->listViewPos, lvpTop+1); + (*sortedI)->listViewPos = ++lvpTop; ++sortedI; @@ -2858,9 +2875,13 @@ void PwMDoc::ensureLvp() - undefBegin = undefined.begin(); - undefEnd = undefined.end(); - undefI = undefBegin; - while (undefI != undefEnd) { - (*undefI)->listViewPos = ++lvpTop; - ++undefI; + /*/debug + entrBegin = catI->d.begin(); + entrEnd = catI->d.end(); + entrI = entrBegin; + + while (entrI != entrEnd) { + qDebug("check: %s, pos=%i", (*entrI).desc.c_str(), (*entrI).listViewPos); + ++entrI; } + */ + ++catI; @@ -2998,4 +3019,2 @@ PwMerror PwMDoc::syncronize(KSyncManager* manager, PwMDoc* syncLocal , PwMDoc* s - // qDebug("set fulldate to true %s %s" ,syncItemLocal->lastSyncDate.toString().latin1(), syncItemRemote->lastSyncDate.toString().latin1() ); - // qDebug("%d %d %d %d ", syncItemLocal->lastSyncDate.time().second(), addresseeLSync->dtStart().time().msec() , addresseeRSync->dtStart().time().second(), addresseeRSync->dtStart().time().msec()); fullDateRange = true; @@ -3044,10 +3063,10 @@ PwMerror PwMDoc::syncronize(KSyncManager* manager, PwMDoc* syncLocal , PwMDoc* s if ( take == 1 ) {// take local - //US syncRemote->removeAddressee( inRemote ); + int oldlistpos = inRemote->listViewPos; (*inRemote) = (*inLocal); - //US syncRemote->insertAddressee( inRemote , false); + inRemote->listViewPos = oldlistpos; ++changedRemote; } else { // take == 2 take remote - //US syncLocal->removeAddressee( inLocal ); + int oldlistpos = inLocal->listViewPos; (*inLocal) = (*inRemote); - //US syncLocal->insertAddressee( inLocal , false ); + inLocal->listViewPos = oldlistpos; ++changedLocal; @@ -3139,7 +3158,2 @@ PwMerror PwMDoc::syncronize(KSyncManager* manager, PwMDoc* syncLocal , PwMDoc* s - // addresseeRSync.setRole( i18n("!Remote from: ")+mCurrentSyncName ) ; - // addresseeLSync.setRole(i18n("!Local from: ") + mCurrentSyncName ); - - //US syncRemote->addSyncDataEntry( syncItemRemote, false ); - //US syncLocal->addSyncDataEntry( syncItemLocal, false ); QString mes; @@ -3172,3 +3186,3 @@ int PwMDoc::takePwMDataItem( PwMDataItem* local, PwMDataItem* remote, QDateTime //qDebug("%d %d %d %d ", local->lastModified().time().second(), local->lastModified().time().msec(), remote->lastModified().time().second(), remote->lastModified().time().msec() ); - full = true; //debug only + //full = true; //debug only if ( full ) { @@ -3176,3 +3190,3 @@ int PwMDoc::takePwMDataItem( PwMDataItem* local, PwMDataItem* remote, QDateTime if ( equ ) { - qDebug("equal "); + //qDebug("equal "); if ( mode < SYNC_PREF_FORCE_LOCAL ) @@ -3180,4 +3194,4 @@ int PwMDoc::takePwMDataItem( PwMDataItem* local, PwMDataItem* remote, QDateTime - }else //debug only - qDebug("not equal %s %s ", local->desc.c_str(), remote->desc.c_str()); + }//else //debug only + //qDebug("not equal %s %s ", local->desc.c_str(), remote->desc.c_str()); } diff --git a/pwmanager/pwmanager/pwmdoc.h b/pwmanager/pwmanager/pwmdoc.h index 6a1dd30..535fb92 100644 --- a/pwmanager/pwmanager/pwmdoc.h +++ b/pwmanager/pwmanager/pwmdoc.h @@ -211,5 +211,6 @@ struct PwMDataItem //available. Generaly this happens before the first sync + bool PwMDataItem::operator==( const PwMDataItem &a ) const { - qDebug("oper==%s", a.desc.c_str()); + //qDebug("oper==%s", a.desc.c_str()); if ( desc != a.desc ) return false; @@ -223,22 +224,2 @@ struct PwMDataItem } - - //US ENH:this operator is used to copy an elements data during syncronization - //Attention: listViewPos will not be copied. So the position will stay the same. - 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; - //Do not copy listViewPos!!! listViewPos = x.listViewPos; - binary = x.binary; - meta = x.meta; - rev = x.rev; - return *this; - } - }; |