diff -r efda7c0771b9 -r 7b66bc3c6dc9 taskswitcher/client/s60/src/tstaskmonitor_p.cpp --- a/taskswitcher/client/s60/src/tstaskmonitor_p.cpp Wed Oct 13 12:59:22 2010 +0300 +++ b/taskswitcher/client/s60/src/tstaskmonitor_p.cpp Mon Oct 18 10:44:15 2010 +0300 @@ -25,7 +25,8 @@ #include "tstaskmonitorclient.h" #include "tstask.h" -#include "tstaskcontent.h" +#include "tsentrykey.h" +#include "tscliententry.h" #include "tstaskchangeinfo.h" #include "tsutils.h" #include "tstaskmonitorhistory.h" @@ -39,6 +40,7 @@ TsTaskMonitorPrivate::~TsTaskMonitorPrivate() { + mUpdateSet.ResetAndDestroy(); mClient->CancelSubscribe(); delete mClient; } @@ -47,97 +49,61 @@ QList TsTaskMonitorPrivate::changeList(bool fullList) { QList retVal; - - QT_TRAP_THROWING ( - - HBufC8 *data = mClient->TasksContentLC(); - if (data->Size() == 0) { - CleanupStack::PopAndDestroy(data); - return retVal; - } - TPtr8 dataPointer(data->Des()); - RDesReadStream dataStream(dataPointer); - CleanupClosePushL(dataStream); - - int count = dataStream.ReadInt32L(); - - QT_TRYCATCH_LEAVING( - QList< QSharedPointer > taskList; - QList newTaskHistory; - for (int iter(0); iter < count; iter++) { - QSharedPointer content(new TsTaskContent); - TsTaskMonitorHistory newHistoryItem = internalizeContentL(dataStream, content); - newHistoryItem.setOffset(iter); - newTaskHistory.append(newHistoryItem); - taskList.append(content); - } - if (fullList) { - mTaskHistory.clear(); - } - QList insertsList = findInserts(newTaskHistory); - QList deletesList = findDeletes(newTaskHistory); - QList newMinusInserts; - if (insertsList.count() > 0 ) { - newMinusInserts = substractInsertsFromNew(insertsList, newTaskHistory); - } else { - newMinusInserts = newTaskHistory; - } - QList interimList; - if (deletesList.count() > 0 ) { - retVal.append(getDeletesChangeset(deletesList)); - interimList = substractDeletesFromOld(deletesList); - } else { - interimList = mTaskHistory; - } - retVal.append(findMovesAndUpdates(newMinusInserts, taskList, interimList)); - if (mTaskHistory.isEmpty()) { - retVal.append(TsTaskChange(TsTaskChangeInfo(), QSharedPointer())); - } - retVal.append(getInsertsChangeset(insertsList, taskList)); - mTaskHistory = newTaskHistory; - )//QT_TRYCATCH_LEAVING - CleanupStack::PopAndDestroy(&dataStream); - CleanupStack::PopAndDestroy(data); - );//QT_TRAP_THROWING - + QT_TRAP_THROWING(changeListL()); + + QList< QSharedPointer > taskList; + QList newTaskHistory; + for (int offset(0); 0 < mUpdateSet.Count(); ++offset) { + QSharedPointer content(mUpdateSet[0]); + taskList.append(content); + newTaskHistory.append(TsTaskMonitorHistory(content, offset)); + mUpdateSet.Remove(0); + } + if (fullList) { + mTaskHistory.clear(); + } + QList insertsList = findInserts(newTaskHistory); + QList deletesList = findDeletes(newTaskHistory); + QList newMinusInserts; + if (insertsList.count() > 0 ) { + newMinusInserts = substractInsertsFromNew(insertsList, newTaskHistory); + } else { + newMinusInserts = newTaskHistory; + } + QList interimList; + if (deletesList.count() > 0 ) { + retVal.append(getDeletesChangeset(deletesList)); + interimList = substractDeletesFromOld(deletesList); + } else { + interimList = mTaskHistory; + } + retVal.append(findMovesAndUpdates(newMinusInserts, taskList, interimList)); + if (mTaskHistory.isEmpty()) { + retVal.append(TsTaskChange(TsTaskChangeInfo(), QSharedPointer())); + } + retVal.append(getInsertsChangeset(insertsList, taskList)); + mTaskHistory = newTaskHistory; return retVal; } -TsTaskMonitorHistory TsTaskMonitorPrivate::internalizeContentL(RDesReadStream & dataStream, - QSharedPointer &content) +void TsTaskMonitorPrivate::changeListL() { - // get name - TInt nameLength(dataStream.ReadInt32L()); - if (0 < nameLength) { - HBufC* name = HBufC::NewLC(dataStream, nameLength); - content->mName = XQConversions::s60DescToQString(*name); - CleanupStack::PopAndDestroy(name); + mUpdateSet.ResetAndDestroy(); + HBufC8 *data = mClient->TasksContentLC(); + if (data->Size() == 0) { + User::Leave(KErrCorrupt); } - TPckgBuf updateTime; - dataStream.ReadL(updateTime); - QDateTime historyTime = dateTimeFromS60(updateTime()); - - // get screenshot - TInt screenshotHandle = dataStream.ReadInt32L(); - CFbsBitmap *screenshot = new (ELeave) CFbsBitmap; - CleanupStack::PushL(screenshot); - if (KErrNone == screenshot->Duplicate(screenshotHandle)) { - content->mScreenshot = QPixmap::fromSymbianCFbsBitmap(screenshot); + RDesReadStream dataStream; + CleanupClosePushL(dataStream); + dataStream.Open(*data); + const int count(dataStream.ReadInt32L()); + for (int offset(0); offset < count; ++offset) { + CTsClientEntry* entry = CTsClientEntry::NewLC(dataStream); + mUpdateSet.AppendL(entry); + CleanupStack::Pop(entry); } - CleanupStack::PopAndDestroy(screenshot); - // get key - TInt keyLength(dataStream.ReadInt32L()); - if (0 < keyLength) { - HBufC8* key = HBufC8::NewLC(keyLength); - TPtr8 des(key->Des()); - dataStream.ReadL(des, keyLength); - content->mKey = XQConversions::s60Desc8ToQByteArray(*key); - CleanupStack::PopAndDestroy(key); - } - // get other values - content->mActive = dataStream.ReadInt32L(); - content->mClosable = dataStream.ReadInt32L(); - return TsTaskMonitorHistory(content->mKey, historyTime); + CleanupStack::PopAndDestroy(&dataStream); + CleanupStack::PopAndDestroy(data); } QDateTime TsTaskMonitorPrivate::dateTimeFromS60(const TTime &s60Time) @@ -157,7 +123,7 @@ const TsTaskMonitorHistory &item ) { for (int iter(0); iter < historyList.count(); iter++) { - if(historyList[iter].isEqual(item)) { + if(historyList[iter] == item) { return iter; } } @@ -202,7 +168,7 @@ } QList TsTaskMonitorPrivate::getInsertsChangeset(const QList &insertList, - const QList< QSharedPointer > &taskList) + const QList< QSharedPointer > &taskList) { QList retVal; foreach (int index, insertList) { @@ -238,7 +204,7 @@ QList TsTaskMonitorPrivate::findMovesAndUpdates( const QList &newMinusInserts, - const QList< QSharedPointer > &taskList, + const QList< QSharedPointer > &taskList, QList &workingList) { QList retVal; @@ -254,10 +220,9 @@ // case 2 item has changed if (newMinusInserts[newPos].isUpdated(workingList[newPos])) { TsTaskChangeInfo updateChange(newPos, newPos); - int taskListOffset = newMinusInserts[newPos].offset(); retVal.append( TsTaskChange( updateChange, - QSharedPointer(new TsTask(taskList[taskListOffset], *this)))); + QSharedPointer(new TsTask(taskList[newMinusInserts[newPos].offset()], *this)))); } } return retVal; @@ -268,15 +233,36 @@ emit q_ptr->taskListChanged(); } -void TsTaskMonitorPrivate::openTask(const QByteArray &key) +void TsTaskMonitorPrivate::openTask(const MTsEntry &entry) { - TPtrC8 desC(reinterpret_cast(key.constData()), key.length()); - mClient->OpenTask(desC); - + QT_TRAP_THROWING( + HBufC8 *dataPtr = keyLC(entry); + TPtr8 dataBuf(dataPtr->Des()); + mClient->OpenTask(dataBuf); + CleanupStack::PopAndDestroy(dataPtr); + ) } -void TsTaskMonitorPrivate::closeTask(const QByteArray &key) +void TsTaskMonitorPrivate::closeTask(const MTsEntry &entry) +{ + QT_TRAP_THROWING( + HBufC8 *dataPtr = keyLC(entry); + TPtr8 dataBuf(dataPtr->Des()); + mClient->CloseTask(dataBuf); + CleanupStack::PopAndDestroy(dataPtr); + ) +} + +HBufC8* TsTaskMonitorPrivate::keyLC(const MTsEntry &entry) { - TPtrC8 desC(reinterpret_cast(key.constData()), key.length()); - mClient->CloseTask(desC); + HBufC8 *dataPtr = HBufC8::NewLC(TTsEntryKey::Size()); + TPtr8 dataBuf(dataPtr->Des()); + + RDesWriteStream dataStream; + CleanupClosePushL(dataStream); + dataStream.Open(dataBuf); + dataStream << entry.Key(); + CleanupStack::PopAndDestroy(&dataStream); + + return dataPtr; }