browserutilities/feedsengine/FeedsServer/Client/src/Item.cpp
changeset 0 dd21522fd290
child 25 0ed94ceaa377
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/browserutilities/feedsengine/FeedsServer/Client/src/Item.cpp	Mon Mar 30 12:54:55 2009 +0300
@@ -0,0 +1,337 @@
+/*
+* 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:  Holds information about a feed item.
+*
+*/
+
+
+#include "FeedAttributes.h"
+#include "FeedsServerFeed.h"
+#include "Logger.h"
+
+// Constants
+_LIT(KNew, "new");
+_LIT(KRead, "read");
+_LIT(KUnread, "unread");
+
+
+// -----------------------------------------------------------------------------
+// CItem::NewL
+//
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CItem* CItem::NewL(CFeedsEntity* aFeedsEntity)
+    {
+    CItem* self = new (ELeave) CItem(aFeedsEntity);
+
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop();
+
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CItem::CItem
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CItem::CItem(CFeedsEntity* aFeedsEntity):iLeakTracker(CLeakTracker::EItem),
+        iFeedsEntity(aFeedsEntity), iTitle(KNullDesC), 
+        iDescription(KNullDesC), iUrl(KNullDesC), iItemStatus(EUnreadItem), iEnclosures(5)
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CItem::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CItem::ConstructL()
+    {
+    TPtrC   url;    
+    TPtrC   description; 
+    TPtrC   title;
+    TInt    item;
+
+    iFeedsEntity->GetTimeValue( EItemAttributeTimestamp, iTimestamp);
+
+    iFeedsEntity->GetStringValue( EItemAttributeLink, url); 
+    SetAttribute( EItemAttributeLink, url);
+
+    iFeedsEntity->GetStringValue( EItemAttributeDescription, description);
+    SetAttribute( EItemAttributeDescription, description);    
+
+    iFeedsEntity->GetStringValue( EItemAttributeTitle, title); 
+    SetAttribute( EItemAttributeTitle, title);
+
+    iFeedsEntity->GetIntegerValue( EItemAttributeStatus, item);
+
+    switch(item)
+        {
+        case EItemStatusNew:
+             iItemStatus = ENewItem;
+             break;
+
+        case EItemStatusRead:
+             iItemStatus = EReadItem;
+             break;
+
+        case EItemStatusUnread:
+             iItemStatus = EUnreadItem;
+             break;
+        }
+
+    iId = iFeedsEntity->GetId();
+    }
+
+// -----------------------------------------------------------------------------
+// CItem::~CItem
+// Deconstructor.
+// -----------------------------------------------------------------------------
+//
+CItem::~CItem()
+    {
+    // Delete the enclosures.
+    iEnclosures.ResetAndDestroy();
+    }
+
+// -----------------------------------------------------------------------------
+// CItem::Id
+//
+// Returns the item's id.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CItem::Id() const
+    {
+    return iId;
+    }
+
+// -----------------------------------------------------------------------------
+// CItem::Title
+//
+// Returns the item's title.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C const TDesC& CItem::Title() const
+    {
+    return iTitle;
+    }
+
+// -----------------------------------------------------------------------------
+// CItem::Description
+//
+// Returns the item's description.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C const TDesC& CItem::Description() const
+    {    
+    return iDescription;
+    }
+
+// -----------------------------------------------------------------------------
+// CItem::Url
+//
+// Returns the item's url.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C const TDesC& CItem::Url() const
+    {              
+    return iUrl;
+    }
+
+// -----------------------------------------------------------------------------
+// CItem::Date
+//
+// Returns the item's date.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C const TTime& CItem::Timestamp() const
+    {
+    return iTimestamp;
+    }
+
+// -----------------------------------------------------------------------------
+// CItem::ItemStatus
+//
+// Returns the item's status.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TItemStatus CItem::ItemStatus() const
+    {
+    return iItemStatus;
+    }
+
+// -----------------------------------------------------------------------------
+// CItem::EnclosureCount
+//
+// Returns the number of enclosures.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CItem::EnclosureCount() const
+    {
+    return iEnclosures.Count();
+    }
+
+// -----------------------------------------------------------------------------
+// CItem::ItemAt
+//
+// Returns the enclosure at the given index
+// -----------------------------------------------------------------------------
+//
+EXPORT_C const CEnclosure& CItem::EnclosureAt(TInt aIndex) const
+    {
+    // TODO: assert if out of range.
+    return *(iEnclosures[aIndex]);
+    }
+
+// -----------------------------------------------------------------------------
+// CItem::AddEnclosureL
+//
+// Appends the new enclosure to the Feed.  aItem is adopted by this method.
+// -----------------------------------------------------------------------------
+//
+void CItem::AddEnclosureL(CEnclosure* aEnclosure)
+    {
+    User::LeaveIfError(iEnclosures.Append(aEnclosure));
+    }
+
+// -----------------------------------------------------------------------------
+// CItem::SetAttribute
+//
+// Sets an attribute.
+// -----------------------------------------------------------------------------
+//
+void CItem::SetAttribute(TUint aAttribute, const TPtrC& aAttributeValue)
+    {
+    switch (aAttribute)
+        {
+        case EItemAttributeTitle:
+            iTitle.Set(aAttributeValue);
+            break;
+
+        case EItemAttributeDescription:
+            iDescription.Set(aAttributeValue);
+            break;
+
+        case EItemAttributeLink:
+            iUrl.Set(aAttributeValue);
+            break;
+
+        case EItemAttributeStatus:
+            if (aAttributeValue.CompareF(KNew) == 0)
+                {
+                iItemStatus = ENewItem;
+                }
+            else if (aAttributeValue.CompareF(KRead) == 0)
+                {
+                iItemStatus = EReadItem;
+                }
+            else if (aAttributeValue.CompareF(KUnread) == 0)
+                {
+                iItemStatus = EUnreadItem;
+                }
+            break;
+
+        case EItemAttributeTimestamp:
+            {
+            TLex16  lex(aAttributeValue);
+            TInt64  ts;
+              
+            lex.Val(ts);
+            iTimestamp = ts;
+            }
+            break;
+
+        case EItemAttributeItemId:
+            {
+            TLex16  lex(aAttributeValue);
+            TInt64  id;
+              
+            lex.Val(id);
+            iId = id;
+            }
+            break;
+
+        default:
+            break;
+        }
+    }
+
+//#ifdef _DEBUG
+// -----------------------------------------------------------------------------
+// CItem::Debug_Print
+//
+// Prints the item to the log file.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CItem::Debug_Print(void) const
+    {
+    FEED_LOG(_L("Feeds"), _L("Feeds_Dump.log"), 
+        EFileLoggingModeAppend, _L("\tItem:"));
+
+    if (iTitle.Length() > 0)
+        {
+        FEED_LOG1(_L("Feeds"), _L("Feeds_Dump.log"), 
+            EFileLoggingModeAppend, _L("\t\tTitle: %S"), &iTitle);
+        }
+
+    if (iUrl.Length() > 0)
+        {
+        FEED_LOG1(_L("Feeds"), _L("Feeds_Dump.log"), 
+            EFileLoggingModeAppend, _L("\t\tLink: %S"), &iUrl);
+        }
+
+    if (iDescription.Length() > 0)
+        {
+        FEED_LOG1(_L("Feeds"), _L("Feeds_Dump.log"), 
+            EFileLoggingModeAppend, _L("\t\tDescription: %S"), &iDescription);
+        }
+
+    switch( iItemStatus )
+        {
+        case ENewItem:
+            {            
+            FEED_LOG1(_L("Feeds"), _L("Feeds_Dump.log"), 
+                EFileLoggingModeAppend, _L("\t\tStatus: %S"), &KNew());
+            }
+            break;
+        case EReadItem:
+            {            
+            FEED_LOG1(_L("Feeds"), _L("Feeds_Dump.log"), 
+                EFileLoggingModeAppend, _L("\t\tStatus: %S"), &KRead());
+            }
+            break;
+        case EUnreadItem:
+            {
+            FEED_LOG1(_L("Feeds"), _L("Feeds_Dump.log"), 
+                EFileLoggingModeAppend, _L("\t\tStatus: %S"), &KUnread());
+            }
+            break;
+        }
+
+    // Print the enclosures.
+    if (iEnclosures.Count() > 0)
+        {        
+        FEED_LOG(_L("Feeds"), _L("Feeds_Dump.log"), 
+            EFileLoggingModeAppend, _L("\tEnclosures:"));
+
+        for (TInt i = 0; i < iEnclosures.Count(); i++)
+            {
+            iEnclosures[i]->Debug_Print();
+            }
+        }
+    }