diff -r 000000000000 -r dd21522fd290 browserutilities/feedsengine/FeedsServer/Common/src/PackedFolder.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/browserutilities/feedsengine/FeedsServer/Common/src/PackedFolder.cpp Mon Mar 30 12:54:55 2009 +0300 @@ -0,0 +1,306 @@ +/* +* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Is a serialized version of CFolderItem suitable for transfer between +* client and server. +* +*/ + +#include "PackedAttributes.h" +#include "FeedAttributes.h" +#include "FolderAttributes.h" +#include "PackedFolder.h" +#include "Logger.h" + + +const TInt KTokenArrayIncrementSize = 100; +const TInt KStringTableIncrementSize = 1024; + + +// ----------------------------------------------------------------------------- +// CPackedFolder::NewL +// +// Two-phased constructor. Used on both the client and server. +// ----------------------------------------------------------------------------- +// +CPackedFolder* CPackedFolder::NewL() + { + CPackedFolder* self = new (ELeave) CPackedFolder(KTokenArrayIncrementSize, + KStringTableIncrementSize); + + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(); + + return self; + } + + +// ----------------------------------------------------------------------------- +// CPackedFolder::CPackedFolder +// +// C++ default constructor can NOT contain any code, that +// might leave. Used on both the client and server. +// ----------------------------------------------------------------------------- +// +CPackedFolder::CPackedFolder(TInt aTokenArrayInc, TInt aStringTableInc): + CPacked(aTokenArrayInc, aStringTableInc), iLeakTracker(CLeakTracker::EPackedFolder) + { + } + + +// ----------------------------------------------------------------------------- +// CPackedFolder::ConstructL +// +// Symbian 2nd phase constructor can leave. Used on both the client and server. +// ----------------------------------------------------------------------------- +// +void CPackedFolder::ConstructL() + { + BaseConstructL(); + } + + +// ----------------------------------------------------------------------------- +// CPackedFolder::~CPackedFolder +// +// Deconstructor. Used on both the client and server. +// ----------------------------------------------------------------------------- +// +CPackedFolder::~CPackedFolder() + { + } + + +// ----------------------------------------------------------------------------- +// CPackedFolder::FolderBeginsL +// +// Insert the begining of a folder. Used only on the server. +// ----------------------------------------------------------------------------- +// +void CPackedFolder::FolderBeginsL(const TDesC& aTitle, TInt aEntryId, TInt aStatus) + { + TBuf16<25> buf; + + InsertTokenL(EFolderTokenFolderBegin); + AddAttributeL(EFolderAttributeTitle, aTitle); + + buf.AppendNum(aEntryId); + AddAttributeL(EFolderAttributeEntryId, buf); + + buf.Zero(); + buf.AppendNum(aStatus); + AddAttributeL(EFolderAttributeStatus, buf); + + InsertTokenL(EFolderAttributeEnd); + } + + +// ----------------------------------------------------------------------------- +// CPackedFolder::FolderEndsL +// +// Insert the ending of a folder. Used only on the server. +// ----------------------------------------------------------------------------- +// +void CPackedFolder::FolderEndsL() + { + InsertTokenL(EFolderTokenFolderEnd); + } + + +// ----------------------------------------------------------------------------- +// CPackedFolder::AddFeedL +// +// Insert a feed. Used only on the server. +// ----------------------------------------------------------------------------- +// +void CPackedFolder::AddFeedL( const TDesC& aTitle, const TDesC& aFeedUrl, + const TTime& aLastUpdate, TInt aFreq, TInt aStatus,TInt aUnreadCount, TInt aEntryId, TInt aFeedId) + { + TBuf16<25> buf; + + InsertTokenL(EFolderTokenFeed); + AddAttributeL(EFolderAttributeTitle, aTitle); + AddAttributeL(EFolderAttributeUrl, aFeedUrl); + + buf.Zero(); + buf.Format(_L("%Ld"), aLastUpdate.Int64()); + AddAttributeL(EFolderAttributeTimestamp, buf); + + buf.Zero(); + buf.AppendNum(aUnreadCount); + AddAttributeL(EFolderAttributeUnreadCount, buf); + + buf.Zero(); + buf.AppendNum(aEntryId); + AddAttributeL(EFolderAttributeEntryId, buf); + + buf.Zero(); + buf.AppendNum(aFeedId); + AddAttributeL(EFolderAttributeFeedId, buf); + + buf.Zero(); + buf.AppendNum(aStatus); + AddAttributeL(EFolderAttributeStatus, buf); + + buf.Zero(); + buf.AppendNum(aFreq); + AddAttributeL(EFolderAttributeFreq, buf); + + InsertTokenL(EFolderAttributeEnd); + } + + +// ----------------------------------------------------------------------------- +// CPackedFolder::ItemBeginsL +// +// Insert the begining of a item. Used only on the server. +// ----------------------------------------------------------------------------- +// +void CPackedFolder::ItemBeginsL() + { + InsertTokenL(EFolderTokenItemBegin); + } + + +// ----------------------------------------------------------------------------- +// CPackedFolder::ItemEndsL +// +// Insert the ending of a item. Used only on the server. +// ----------------------------------------------------------------------------- +// +void CPackedFolder::ItemEndsL() + { + InsertTokenL(EFolderTokenItemEnd); + } + + +// ----------------------------------------------------------------------------- +// CPackedFolder::DoneL +// +// Called when when packing is done. Used only on the server. +// ----------------------------------------------------------------------------- +// +void CPackedFolder::DoneL() + { + iTokenArrayAsDes.Set((const TUint8*) iTokenArray, iTokenArrayLength * sizeof(TUint)); + } + + +// ----------------------------------------------------------------------------- +// CPackedFolder::ExtractAttributes +// +// Extract the folder item's attributes +// ----------------------------------------------------------------------------- +// +void CPackedFolder::ExtractAttributes( TPtrC& aTitle, TPtrC& aUrl, + TInt& aEntryId, TInt& aFeedId, TTime& aTimestamp, TInt& aUnreadCount, TInt &aStatus, TInt& aFreq) const + { + TBool done = EFalse; + TUint attributeToken; + TPtrC attributeValue; + + // Set the default values. + aTitle.Set(KNullDesC); + aUrl.Set(KNullDesC); + aEntryId = -1; + aFeedId = 0; + aTimestamp.UniversalTime(); + + // Extract the attribute tokens. + while (!done) + { + TUint token; + + token = NextToken(); + + // Extract the next attribute. + if (token != EFolderAttributeEnd) + { + // Get the attribute. + ExtractAttributeValue(attributeToken, attributeValue); + + switch (attributeToken) + { + case EFolderAttributeTitle: + aTitle.Set(attributeValue); + break; + + case EFolderAttributeUrl: + aUrl.Set(attributeValue); + break; + + case EFolderAttributeEntryId: + { + TLex16 lex(attributeValue); + + lex.Val(aEntryId); + } + break; + + case EFolderAttributeFeedId: + { + TLex16 lex(attributeValue); + + lex.Val(aFeedId); + } + break; + + case EFolderAttributeTimestamp: + { + TLex16 lex(attributeValue); + TInt64 ts; + + lex.Val(ts); + aTimestamp = ts; + } + break; + + case EFolderAttributeUnreadCount: + { + TLex16 lex(attributeValue); + TInt unreadCount; + + lex.Val(unreadCount); + aUnreadCount = unreadCount; + } + break; + case EFolderAttributeStatus: + { + TLex16 lex(attributeValue); + + lex.Val(aStatus); + } + break; + case EFolderAttributeFreq: + { + TLex16 lex(attributeValue); + TInt freq; + + lex.Val(freq); + aFreq = freq; + } + break; + } + } + + // Otherwise there are no more attributes. + else + { + done = ETrue; + } + } + } + + +