browserutilities/feedsengine/FeedsServer/Common/src/PackedFolder.cpp
changeset 0 dd21522fd290
child 36 0ed94ceaa377
--- /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;
+            }
+        }
+    }
+
+
+