omads/omadsextensions/adapters/bookmark/src/bookmarkdatastore.cpp
changeset 19 2691f6aa1921
parent 4 e6e896426eac
child 20 e1de7d03f843
--- a/omads/omadsextensions/adapters/bookmark/src/bookmarkdatastore.cpp	Tue Feb 02 00:02:49 2010 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2117 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies). 
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "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:  Part of SyncML Data Synchronization Plug In Adapter
-*
-*/
-
-
-#include <sysutil.h> 
-#include <favouritesitem.h>
-#include <FavouritesItemList.h> 
-
-#include <FeedsServerClient.h>
-#include <FeedsServerFeed.h>
-#include <feedsserverfolderitem.h>
-
-#include "bookmarkdatastore.h"
-#include "vbookmarkconverter.h"
-#include "omadsfolderobject.h"
-#include "bookmarkdataproviderdefs.h"
-#include "conversionutil.h"
-#include "changefinder.h"
-#include "logger.h"
-
-
-_LIT8( KBookmarkFolderMimeType, "application/vnd.omads-folder+xml" );
-_LIT8( KBookmarkFolderMimeVersion, "" );
-_LIT8( KBookmarkItemMimeType, "text/x-vbookmark" );
-_LIT8( KBookmarkItemMimeVersion, "" );
-_LIT( KRSSRootFolderName, "Web Feeds" );
-
-const TInt KDefaultBufferSize = 1024;
-const TInt KDataBufferNotReady = -1;
-const TInt KRssFeedsOffset = 50000;
-// -----------------------------------------------------------------------------
-// CBookmarkDataStore::CBookmarkDataStore
-// C++ default constructor can NOT contain any code, that might leave.
-// -----------------------------------------------------------------------------
-CBookmarkDataStore::CBookmarkDataStore() :
-    iDataBaseOpened( EFalse ), iFeedsServer(*this), iRootFolder(*this),
-    iKey( TKeyArrayFix( _FOFF( TNSmlSnapshotItem, ItemId() ), ECmpTInt ) ),
-    iHasHistory( EFalse )
-    {
-    LOGGER_ENTERFN( "CBookmarkDataStore" );
-    LOGGER_LEAVEFN( "CBookmarkDataStore" ); 
-    }
-    
-// -----------------------------------------------------------------------------
-// CBookmarkDataStore::ConstructL
-// Symbian 2nd phase constructor, can leave.
-// -----------------------------------------------------------------------------    
-void CBookmarkDataStore::ConstructL()
-    {
-    LOGGER_ENTERFN( "CBookmarkDataStore::ConstructL" );
-    
-    User::LeaveIfError( iRfs.Connect() );
-    User::LeaveIfError( iSession.Connect() );
-    
-    iNewItems = new ( ELeave ) CNSmlDataItemUidSet;
-    iDeletedItems = new ( ELeave ) CNSmlDataItemUidSet;
-    iSoftDeletedItems = new ( ELeave ) CNSmlDataItemUidSet;
-    iUpdatedItems = new ( ELeave ) CNSmlDataItemUidSet;
-    iMovedItems = new ( ELeave ) CNSmlDataItemUidSet;
-    
-    LOGGER_LEAVEFN( "CBookmarkDataStore::ConstructL" );
-    }
-    
-// -----------------------------------------------------------------------------
-// CBookmarkDataStore::~CBookmarkDataStore
-// Destructor
-// -----------------------------------------------------------------------------    
-CBookmarkDataStore::~CBookmarkDataStore()
-    {
-    LOGGER_ENTERFN( "~CBookmarkDataStore" );
-
-    delete iDataBuffer;
-    delete iNewItems;
-    delete iDeletedItems;
-    delete iSoftDeletedItems;
-    delete iUpdatedItems;
-    delete iMovedItems;
-    delete iItemToBeReplaced;
-    
-    if ( iChangeFinder )
-        {
-        TRAPD( error, iChangeFinder->CloseL() );
-        if ( error != KErrNone )
-            {
-            LOGGER_WRITE_1( "iChangeFinder->CloseL() leaved with %d", error );
-            }
-        }
-    delete iChangeFinder;
-    
-    delete iConverter;
-            
-    if ( iDataBaseOpened )
-        {
-        iDb.Close();
-        iRootFolder.Close();
-        iFeedsServer.Close();
-        }
-    
-    iSession.Close();
-    iRfs.Close();
-    LOGGER_LEAVEFN( "~CBookmarkDataStore" );
-    }
-
-// -----------------------------------------------------------------------------
-// CBookmarkDataStore::NewL
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-CBookmarkDataStore* CBookmarkDataStore::NewL()
-    {
-    LOGGER_ENTERFN( "CBookmarkDataStore::NewL" );
-    CBookmarkDataStore* self = CBookmarkDataStore::NewLC();
-    CleanupStack::Pop( self );
-    LOGGER_LEAVEFN( "CBookmarkDataStore::NewL" );
-    return self;
-    }
-
-// -----------------------------------------------------------------------------
-// CBookmarkDataStore::NewLC
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-CBookmarkDataStore* CBookmarkDataStore::NewLC()
-    {
-    LOGGER_ENTERFN( "CBookmarkDataStore::NewLC" );
-    CBookmarkDataStore* self = new ( ELeave ) CBookmarkDataStore();
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    LOGGER_LEAVEFN( "CBookmarkDataStore::NewLC" );
-    return self;
-    }
-
-// -----------------------------------------------------------------------------
-// CBookmarkDataStore::DoOpenL
-// Opens database.
-// -----------------------------------------------------------------------------
-void CBookmarkDataStore::DoOpenL( const TDesC& /*aStoreName*/,
-    MSmlSyncRelationship& aContext, TRequestStatus& aStatus )
-    {
-    LOGGER_ENTERFN( "CBookmarkDataStore::DoOpenL" );
-    
-    iCallerStatus = &aStatus;           
-    *iCallerStatus = KRequestPending;
-    
-    if ( iDataBaseOpened )
-        {
-        User::RequestComplete( iCallerStatus, KErrInUse );
-        LOGGER_WRITE( "CBookmarkDataStore::DoOpenL failed with KErrInUse." );
-        return;
-        }
-        
-    // Create ChangeFinder
-    if ( iChangeFinder )
-        {
-        delete iChangeFinder;
-        iChangeFinder = NULL;
-        }
-    iChangeFinder = CChangeFinder::NewL( aContext, iKey, iHasHistory );
-    
-    // Create converter object
-    if ( iConverter )
-        {
-        delete iConverter;
-        iConverter = NULL;
-        }
-    iConverter = CBookmarkConversionUtil::NewL();
-    
-
-    TInt err( KErrNone );       
-    err = iDb.Open( iSession, KBrowserBookmarks );
-    if ( err )
-        {
-        LOGGER_WRITE_1( "CBookmarkDataStore::DoOpenL iDb.Open err: %d.", err );
-        User::RequestComplete( iCallerStatus, err );
-        return;
-        }
-    err = iFeedsServer.Connect();
-    if ( err )
-        {
-        LOGGER_WRITE_1( "CBookmarkDataStore::DoOpenL iFeedsServer.Connect err: %d.", err );
-        User::RequestComplete( iCallerStatus, err );
-        return;
-        }
-    err = iRootFolder.Open( iFeedsServer );
-    if ( err )
-        {
-        LOGGER_WRITE_1( "CBookmarkDataStore::DoOpenL iRootFolder.Open err: %d.", err );
-        User::RequestComplete( iCallerStatus, err );
-        return;
-        }
-        
-    iRootFolder.FetchRootFolderItemL(); // calls FolderItemRequestCompleted when completed
-    
-    LOGGER_LEAVEFN( "CBookmarkDataStore::DoOpenL" );
-    }
-
-// -----------------------------------------------------------------------------
-// CBookmarkDataStore::FolderItemRequestCompleted
-// RSS item database request is completed
-// -----------------------------------------------------------------------------
-void CBookmarkDataStore::FolderItemRequestCompleted( TInt aStatus,
-    CRequestHandler::TRequestHandlerType )
-    {
-    LOGGER_ENTERFN( "CBookmarkDataStore::FolderItemRequestCompleted" );
-    
-    TRAPD( err, DoFolderItemRequestCompletedL( aStatus ) );
-    
-    if ( err != KErrNone )
-        {
-        LOGGER_WRITE_1( "DoFolderItemRequestCompletedL leaved with err: %d", err );
-        User::RequestComplete( iCallerStatus, err );
-        }
-    
-    LOGGER_LEAVEFN( "CBookmarkDataStore::FolderItemRequestCompleted" );
-    }
-
-// -----------------------------------------------------------------------------
-// CBookmarkDataStore::DoFolderItemRequestCompletedL
-// RSS item database request is completed
-// -----------------------------------------------------------------------------
-void CBookmarkDataStore::DoFolderItemRequestCompletedL( TInt aStatus )
-    {
-    LOGGER_ENTERFN( "CBookmarkDataStore::DoFolderItemRequestCompletedL" );
-    switch ( iCurrentState )
-        {
-        case EClosed : 
-            {
-            LOGGER_WRITE("Database ready");
-            iDataBaseOpened = ETrue;
-            iCurrentState = EOpenAndWaiting;
-            RegisterSnapshotL();
-            break;
-            }
-        
-        // bookmark is added (Add command)
-        case EBookmarkCreating :
-           	{
-           	// RSS Item has been created.
-           	LOGGER_WRITE_1("RSS item created, err %d", aStatus);
-           	// Restore state
-           	iCurrentState = EOpenAndWaiting;
-            if ( aStatus == KErrNone )
-                {
-                RssItemCreatedL();
-                }
-            break;
-            }
-        
-        // bookmark is updated (Replace command)
-        case EBookmarkUpdating :
-            {
-            LOGGER_WRITE("RSS item replaced");
-            if ( aStatus == KErrNone )
-                {
-                TBool moveNeeded(EFalse);
-                RssItemReplacedL( moveNeeded );
-                
-                if ( moveNeeded )
-                    {
-                    // Moving is still ongoing, don't complete request yet.
-                    return;
-                    }
-                
-                LOGGER_WRITE_1("Item ID: %d", *iCurrentItem);
-                LOGGER_WRITE_1("Parent ID: %d", iParentFolder);
-                }
-            // Restore state
-            iCurrentState = EOpenAndWaiting;
-            break;
-            }
-        
-        // bookmark is updated and moved (Replace command, 2nd phase)
-        case EBookmarkUpdatedAndMoving:
-            {
-            LOGGER_WRITE_1( "RSS item moved (replaced), err: %d", aStatus );
-            if ( aStatus == KErrNone )
-                {
-                // Inform ChangeFinder of updated item
-                iChangeFinder->ItemUpdatedL( *iMovedItem ); // ownership transferred
-                iMovedItem = NULL;
-                LOGGER_WRITE( "ItemReplacedL" );
-                }
-            else
-                {
-                delete iMovedItem;
-                iMovedItem = NULL;
-                }
-            // Restore state
-            iCurrentState = EOpenAndWaiting;
-            break;
-            }
-        
-        // bookmark is moved (Move command)
-        case EBookmarkMoving:
-            {
-            LOGGER_WRITE_1( "RSS item moved, err: %d", aStatus );
-            if ( aStatus == KErrNone )
-                {
-                iChangeFinder->ItemMovedL( *iMovedItem ); // ownership transferred
-                iMovedItem = NULL;
-                }
-            else
-                {
-                delete iMovedItem;
-                iMovedItem = NULL;
-                }
-            // Restore state
-            iCurrentState = EOpenAndWaiting;
-            break;
-            }
-            
-        case EBookmarkDeleting:
-            {
-            LOGGER_WRITE_1( "RSS item removed, err: %d", aStatus );
-            if ( aStatus == KErrNone )
-                {
-                // Inform ChangeFinder of the removed item
-                TSnapshotItem item( iReplaceItem );     
-                iChangeFinder->ItemDeletedL( item );
-                }
-            // Restore state
-            iCurrentState = EOpenAndWaiting;
-            break;
-            }
-        case EBookmarkDeletingAll:
-            {
-            LOGGER_WRITE_1( "all RSS items removed, err: %d", aStatus );
-            break;
-            }
-        
-        default :
-            LOGGER_WRITE_1( "Invalid state: %d", iCurrentState );
-            return;
-        }
-    User::RequestComplete( iCallerStatus, aStatus );
-    LOGGER_LEAVEFN( "CBookmarkDataStore::DoFolderItemRequestCompletedL" ); 
-    }
-
-// -----------------------------------------------------------------------------
-// CBookmarkDataStore::RssItemCreatedL
-// Rss item has been created, add item to changefinder
-// -----------------------------------------------------------------------------
-void CBookmarkDataStore::RssItemCreatedL()
-    {
-    TRACE_FUNC_ENTRY;
-    if ( !iRootFolder.HasRootFolderItem() )
-        {
-        LOGGER_WRITE( "rss root folder not found" );
-        User::Leave( KErrNotFound );
-        }
-    const CFolderItem& rootFolder = iRootFolder.RootFolderItem();
-    const CFolderItem* parent = rootFolder.Search( iParentFolder - KRssFeedsOffset );
-    if ( !parent )
-        {
-        LOGGER_WRITE( "parent folder not found" );
-        User::Leave( KErrNotFound );
-        }
-    LOGGER_WRITE_1("parent->Id(): %d", parent->Id());
-    LOGGER_WRITE_1( "Name: %S", &iNewItemName );
-    const CFolderItem* addedItem = parent->Search( iNewItemName );
-    iNewItemName.Zero();
-    if ( addedItem )
-        {
-        LOGGER_WRITE_1("addedItem found, id: %d", addedItem->Id());
-        
-        // Output the uid value of new item
-        *iCurrentItem = addedItem->Id() + KRssFeedsOffset;
-        
-        // Inform ChangeFinder of the added item
-        TSnapshotItem snapshotItem( *iCurrentItem );
-        snapshotItem.SetParentId( iParentFolder );
-        snapshotItem.CreateHashL( addedItem->Name(), addedItem->SourceUrl() );
-        iChangeFinder->ItemAddedL( snapshotItem );
-        LOGGER_WRITE( "ItemAddedL" );
-        }
-    else
-        {
-        LOGGER_WRITE( "Added item not found" );
-        User::Leave( KErrNotFound );
-        }
-    LOGGER_WRITE_1("Item ID: %d", *iCurrentItem);
-    LOGGER_WRITE_1("Parent ID: %d", iParentFolder);
-    TRACE_FUNC_EXIT;
-    }
-
-// -----------------------------------------------------------------------------
-// CBookmarkDataStore::RssItemReplacedL
-// Rss item has been replaced, update changefinder
-// -----------------------------------------------------------------------------
-void CBookmarkDataStore::RssItemReplacedL( TBool& aMoveNeeded )
-    {
-    TRACE_FUNC_ENTRY;
-    aMoveNeeded = EFalse;
-    if ( !iRootFolder.HasRootFolderItem() )
-        {
-        LOGGER_WRITE( "rss root folder not found" );
-        User::Leave( KErrNotFound );
-        }
-    const CFolderItem& rootFolder = iRootFolder.RootFolderItem();
-    LOGGER_WRITE_1( "rootFolder.Search %d", iReplaceItem - KRssFeedsOffset );
-    const CFolderItem* modItem = rootFolder.Search( iReplaceItem - KRssFeedsOffset );
-    if ( modItem )
-        {
-        LOGGER_WRITE_1("Item found, id: %d", modItem->Id());
-        
-        const CFolderItem* parent = modItem->Parent();
-        if ( parent )
-            {
-            TInt currentParent = parent->Id() + KRssFeedsOffset;
-            if ( iParentFolder != parent->Id() + KRssFeedsOffset )
-                {
-                // move to another folder
-                const CFolderItem* newParent = rootFolder.Search(
-                    iParentFolder - KRssFeedsOffset );
-                if ( !newParent )
-                    {
-                    // new parent not found
-                    LOGGER_WRITE( "new parent not found" );
-                    User::Leave( KErrPathNotFound );
-                    }
-                else if ( !newParent->IsFolder() )
-                    {
-                    // not a folder
-                    LOGGER_WRITE( "parent is not a folder" );
-                    User::Leave( KErrPathNotFound );
-                    }
-                else
-                    {
-                    // Output the uid value of new item
-                    *iCurrentItem = modItem->Id() + KRssFeedsOffset;
-        
-                    iCurrentState = EBookmarkUpdatedAndMoving;
-                    RPointerArray<const CFolderItem> movedItems;
-                    CleanupClosePushL( movedItems );
-                    movedItems.Append( modItem );
-                    // FolderItemRequestCompleted is called when ready
-                    iRootFolder.MoveFolderItemsToL( movedItems, *newParent);
-                    CleanupStack::PopAndDestroy( &movedItems );
-                    aMoveNeeded = ETrue;
-                    
-                    delete iMovedItem;
-                    iMovedItem = NULL;
-                    iMovedItem = new (ELeave) TSnapshotItem( *iCurrentItem ,
-                        iParentFolder );
-                    iMovedItem->CreateHashL( modItem->Name(), modItem->SourceUrl() );
-                    LOGGER_WRITE( "ItemReplacedL,waiting to move item.." );
-                    return;
-                    }
-                
-                }
-            }
-        else
-            {
-            //parent not found
-            LOGGER_WRITE( "rss parent not defined" );
-            }
-        
-        // Output the uid value of new item
-        *iCurrentItem = modItem->Id() + KRssFeedsOffset;
-        
-        // Inform ChangeFinder of updated item
-        TSnapshotItem snapshotItem( *iCurrentItem, iParentFolder );
-        snapshotItem.CreateHashL( modItem->Name(), modItem->SourceUrl() );
-        iChangeFinder->ItemUpdatedL( snapshotItem );
-        LOGGER_WRITE( "ItemReplacedL" );
-        }
-    else
-        {
-        LOGGER_WRITE_1( "Replaced item %d not found",iReplaceItem - KRssFeedsOffset );
-        User::Leave( KErrNotFound );
-        }
-    TRACE_FUNC_EXIT;
-    }
-
-// -----------------------------------------------------------------------------
-// CBookmarkDataStore::DoCancelRequest
-// Not supported, does nothing.
-// -----------------------------------------------------------------------------
-void CBookmarkDataStore::DoCancelRequest()
-    {
-    LOGGER_ENTERFN( "CBookmarkDataStore::DoCancelRequest" );
-    LOGGER_LEAVEFN( "CBookmarkDataStore::DoCancelRequest" );    
-    }
-
-// -----------------------------------------------------------------------------
-// CBookmarkDataStore::DoStoreName
-// Returns the name of the DataStore
-// -----------------------------------------------------------------------------
-const TDesC& CBookmarkDataStore::DoStoreName() const
-    {
-    LOGGER_ENTERFN( "CBookmarkDataStore::DoStoreName" );
-    LOGGER_LEAVEFN( "CBookmarkDataStore::DoStoreName" );
-    
-    if ( iDataBaseOpened )
-        {
-        return KBrowserBookmarks;
-        }
-    else
-        {
-        return KNullDesC;
-        }
-    }
-    
-// -----------------------------------------------------------------------------
-// CBookmarkDataStore::DoBeginTransactionL
-// Transactions are not supported.
-// -----------------------------------------------------------------------------    
-void CBookmarkDataStore::DoBeginTransactionL()
-    {
-    LOGGER_ENTERFN( "CBookmarkDataStore::DoBeginTransactionL" );
-    LOGGER_WRITE( "CBookmarkDataStore::DoBeginTransactionL leaved with KErrNotSupported." )
-    User::Leave( KErrNotSupported );
-    }
-
-// -----------------------------------------------------------------------------
-// CBookmarkDataStore::DoCommitTransactionL
-// Transactions are not supported.
-// -----------------------------------------------------------------------------
-void CBookmarkDataStore::DoCommitTransactionL( TRequestStatus& aStatus )
-    {
-    LOGGER_ENTERFN( "CBookmarkDataStore::DoCommitTransactionL" );
-    LOGGER_WRITE( "CBookmarkDataStore::DoCommitTransactionL failed with KErrNotSupported." );
-    
-    iCallerStatus = &aStatus;
-    User::RequestComplete( iCallerStatus, KErrNotSupported );
-    
-    LOGGER_LEAVEFN( "CBookmarkDataStore::DoCommitTransactionL" );
-    }
-
-// -----------------------------------------------------------------------------
-// CBookmarkDataStore::DoRevertTransaction
-// Transactions are not supported.
-// -----------------------------------------------------------------------------
-void CBookmarkDataStore::DoRevertTransaction( TRequestStatus& aStatus )
-    {
-    LOGGER_ENTERFN( "CBookmarkDataStore::DoRevertTransaction" );
-    iCallerStatus = &aStatus;
-    User::RequestComplete( iCallerStatus, KErrNotSupported );
-    LOGGER_LEAVEFN( "CBookmarkDataStore::DoRevertTransaction" );
-    }
-
-// -----------------------------------------------------------------------------
-// CBookmarkDataStore::DoBeginBatchL
-// Batching is not supported.
-// -----------------------------------------------------------------------------
-void CBookmarkDataStore::DoBeginBatchL()
-    {
-    LOGGER_ENTERFN( "CBookmarkDataStore::DoBeginBatchL" );
-    LOGGER_WRITE( "CBookmarkDataStore::DoBeginBatchL leaved with KErrNotSupported." );
-    User::Leave( KErrNotSupported );
-    }
-
-// -----------------------------------------------------------------------------
-// CBookmarkDataStore::DoCommitBatchL
-// Batching is not supported
-// -----------------------------------------------------------------------------
-void CBookmarkDataStore::DoCommitBatchL( RArray<TInt>& /*aResultArray*/, TRequestStatus& aStatus )
-    {
-    LOGGER_ENTERFN( "CBookmarkDataStore::DoCommitBatchL" );
-    LOGGER_WRITE( "CBookmarkDataStore::DoCommitBatchL failed with KErrNotSupported" );
-        
-    iCallerStatus = &aStatus;
-    User::RequestComplete( iCallerStatus, KErrNotSupported );
-    
-    LOGGER_LEAVEFN( "CBookmarkDataStore::DoCommitBatchL" );
-    }
-
-// -----------------------------------------------------------------------------
-// CBookmarkDataStore::DoCancelBatch
-// Batching is not supported
-// -----------------------------------------------------------------------------
-void CBookmarkDataStore::DoCancelBatch()
-    {
-    LOGGER_ENTERFN( "CBookmarkDataStore::DoCancelBatch" );
-    LOGGER_LEAVEFN( "CBookmarkDataStore::DoCancelBatch" );
-    }
-
-// -----------------------------------------------------------------------------
-// CBookmarkDataStore::DoSetRemoteStoreFormatL
-// Not supported
-// -----------------------------------------------------------------------------
-void CBookmarkDataStore::DoSetRemoteStoreFormatL( const CSmlDataStoreFormat& /*aServerDataStoreFormat*/ )
-    {
-    LOGGER_ENTERFN( "CBookmarkDataStore::DoSetRemoteStoreFormatL" );
-    LOGGER_LEAVEFN( "CBookmarkDataStore::DoSetRemoteStoreFormatL" );
-    }
-    
-// -----------------------------------------------------------------------------
-// CBookmarkDataStore::DoSetRemoteMaxObjectSize
-// Not supported
-// -----------------------------------------------------------------------------
-void CBookmarkDataStore::DoSetRemoteMaxObjectSize( TInt /*aServerMaxObjectSize*/ )
-    {
-    LOGGER_ENTERFN( "CBookmarkDataStore::DoSetRemoteMaxObjectSize" );
-    LOGGER_LEAVEFN( "CBookmarkDataStore::DoSetRemoteMaxObjectSize" );   
-    }
-
-
-// -----------------------------------------------------------------------------
-// CBookmarkDataStore::DoMaxObjectSize
-// Reads the maximum object size from the central repository
-// -----------------------------------------------------------------------------
-TInt CBookmarkDataStore::DoMaxObjectSize() const
-    {
-    LOGGER_ENTERFN( "CBookmarkDataStore::DoMaxObjectSize" );
-    LOGGER_LEAVEFN( "CBookmarkDataStore::DoMaxObjectSize" );    
-    return 0; // no limit
-    }
-
-// -----------------------------------------------------------------------------
-// CBookmarkDataStore::DoOpenItemL
-// Opens item in the DataStore, reads it (either completely or partially) 
-// to the temporary buffer where it can be later read to the remote database.
-// -----------------------------------------------------------------------------
-void CBookmarkDataStore::DoOpenItemL(
-    TSmlDbItemUid aUid, 
-    TBool& aFieldChange, 
-    TInt& aSize, 
-    TSmlDbItemUid& aParent, 
-    TDes8& aMimeType, 
-    TDes8& aMimeVer, 
-    TRequestStatus& aStatus )
-    {
-    LOGGER_ENTERFN( "CBookmarkDataStore::DoOpenItemL" );
-    LOGGER_WRITE_1( "Item: %d", aUid );
-    
-    
-    iCallerStatus = &aStatus;
-    *iCallerStatus = KRequestPending;
-    
-    aFieldChange = EFalse;
-    
-    if ( iCurrentState != EOpenAndWaiting )
-        {
-        LOGGER_WRITE_1( "Warning: Unexpected current state: %d", iCurrentState );
-        }
-    
-    SAFEDELETE( iDataBuffer );
-    iDataBuffer = CBufFlat::NewL( KDefaultBufferSize ); 
-    iReaderPosition = 0;
-    if ( aUid < KRssFeedsOffset )
-        {
-        LOGGER_WRITE( "Handle id as bookmark item " );
-        TInt err( KErrNone );   
-        CFavouritesItem* item = CFavouritesItem::NewLC();
-        err = iDb.Get( aUid, *item );
-        if (err)
-            {
-            User::RequestComplete( iCallerStatus, KErrNotFound );
-            LOGGER_WRITE_1( "RFavouritesDb::Get failed with %d", err );
-            CleanupStack::PopAndDestroy( item );
-            return;
-            }
-            
-        
-        
-        iConverter->FavouritesItemToBufferL( *item, *iDataBuffer );
-        aSize = iDataBuffer->Size();
-        aParent = item->ParentFolder();
-
-        // Set mime type according to item type
-        // The following code handles also the case, where the receiving
-        // buffer doesn't contain enough space for the type (truncated)
-        if ( item->Type() == CFavouritesItem::EItem )
-            {
-            LOGGER_WRITE("item type: EItem");
-            AssignString( aMimeType, KBookmarkItemMimeType );
-            AssignString( aMimeVer, KBookmarkItemMimeVersion );
-            }
-        else
-            {
-            LOGGER_WRITE("item type: EFolder");
-            AssignString( aMimeType, KBookmarkFolderMimeType );
-            AssignString( aMimeVer, KBookmarkFolderMimeVersion );
-            }
-
-        CleanupStack::PopAndDestroy( item );
-        }
-    else
-        {
-        LOGGER_WRITE( "Handle id as rssFeed item " );
-        
-        TInt rssId = aUid - KRssFeedsOffset;
-        LOGGER_WRITE_1( "rssId: %d", rssId );
-        
-        if ( !iRootFolder.HasRootFolderItem() )
-            {
-            User::RequestComplete( iCallerStatus, KErrNotFound );
-            LOGGER_WRITE( "rss root folder not found" );
-            return;
-            }
-        
-        const CFolderItem& rootFolder = iRootFolder.RootFolderItem();
-        const CFolderItem* founded = rootFolder.Search( rssId );
-        if ( founded )
-            {
-            LOGGER_WRITE( "Item found" );
-            const CFolderItem* parent = founded->Parent();
-            if ( parent )
-                {
-                LOGGER_WRITE( "parent found" );
-                aParent = parent->Id() + KRssFeedsOffset;
-                }
-            else
-                {
-                LOGGER_WRITE( "no parent (root)" );
-                aParent = KErrNotFound;// rootFolder.Id() + KRssFeedsOffset;
-                }
-            
-            if ( !founded->IsFolder() )
-                {
-                LOGGER_WRITE("item type: EItem");
-                AssignString( aMimeType, KBookmarkItemMimeType );
-                AssignString( aMimeVer, KBookmarkItemMimeVersion );
-                }
-            else
-                {
-                LOGGER_WRITE("item type: EFolder");
-                AssignString( aMimeType, KBookmarkFolderMimeType );
-                AssignString( aMimeVer, KBookmarkFolderMimeVersion );
-                }
-            iConverter->RssItemToBufferL( *founded, *iDataBuffer );
-            aSize = iDataBuffer->Size();
-            
-            }
-        else
-            {
-            LOGGER_WRITE( "Item not found" );
-            User::RequestComplete( iCallerStatus, KErrNotFound );
-            return;
-            }
-        
-        }
-    
-    User::RequestComplete( iCallerStatus, KErrNone );   
-    iCurrentState = EBookmarkOpen;
-    
-#ifdef _DEBUG
-    LOGGER_WRITE_1( "aFieldChange: %d", (TInt)aFieldChange );
-    LOGGER_WRITE_1( "aSize: %d", aSize );
-    LOGGER_WRITE_1( "aParent: %d", aParent );
-    TPtr8 bufPtr = iDataBuffer->Ptr(0);
-    LOGGER_WRITE8_1( "iDataBuffer: %S", &bufPtr);
-#endif
-
-    LOGGER_LEAVEFN( "CBookmarkDataStore::DoOpenItemL" );        
-    }
-
-// -----------------------------------------------------------------------------
-// CBookmarkDataStore::DoCreateItemL
-// Create new item to the message store.
-// Return the id number of the newly created item
-// -----------------------------------------------------------------------------
-void CBookmarkDataStore::DoCreateItemL(
-    TSmlDbItemUid& aUid, 
-    TInt aSize, 
-    TSmlDbItemUid aParent, 
-    const TDesC8& aMimeType, 
-    const TDesC8& /*aMimeVer*/, 
-    TRequestStatus& aStatus )
-    {
-    LOGGER_ENTERFN( "CBookmarkDataStore::DoCreateItemL" );
-    LOGGER_WRITE_1( "aParent: %d", aParent );
-    LOGGER_WRITE8_1( "aMimeType: %S", &aMimeType );
-    
-    iCallerStatus = &aStatus;
-    *iCallerStatus = KRequestPending;
-    
-    delete iItemToBeReplaced;
-    iItemToBeReplaced = NULL;
-    
-    // Check MIME type
-    if ( aMimeType.Compare( KBookmarkFolderMimeType() ) == 0 )  
-        {
-        LOGGER_WRITE("item type: EFolder");
-        iMimeType = CFavouritesItem::EFolder;
-        }
-    else if ( aMimeType.Compare( KBookmarkItemMimeType() ) == 0 )
-        {
-        LOGGER_WRITE("item type: EItem");
-        iMimeType = CFavouritesItem::EItem;
-        }
-    else
-        {
-        User::RequestComplete( iCallerStatus, KErrNotSupported );
-        LOGGER_WRITE( "Unexpected mime type" );
-        return;
-        }   
-    
-    // Ensure that we're in a proper state
-    if ( iCurrentState != EOpenAndWaiting )
-        {
-        LOGGER_WRITE_1( "Warning: Unexpected current state: %d", iCurrentState );
-        }
-        
-    // Ensure that we've got enough disk space for the item
-    if ( SysUtil::DiskSpaceBelowCriticalLevelL( &iRfs, aSize, EDriveC ) )
-        {
-        User::RequestComplete( iCallerStatus, KErrDiskFull );
-        LOGGER_WRITE( "SysUtil::DiskSpaceBelowCriticalLevelL failed with KErrDiskFull." );
-        return;
-        }
-    
-    if ( aParent < KRssFeedsOffset )
-        {
-        LOGGER_WRITE( "Handle id as bookmark item" );
-        // Ensure that parent folder exists 
-        TBool folderExists( EFalse );   
-        TInt err = iDb.FolderExists( aParent, folderExists );
-        if ( err || !folderExists )
-            {
-            User::RequestComplete( iCallerStatus, KErrPathNotFound );
-            LOGGER_WRITE_1( "iDb.FolderExist returned %d, folder not found", err );
-            return;
-            }
-        
-        }
-    else
-        {
-        LOGGER_WRITE( "Handle id as rssFeed item " );
-        
-        TInt rssId = aParent - KRssFeedsOffset;
-        LOGGER_WRITE_1( "parentRssId: %d", rssId );
-        
-        if ( !iRootFolder.HasRootFolderItem() )
-            {
-            User::RequestComplete( iCallerStatus, KErrPathNotFound );
-            LOGGER_WRITE( "rss root folder not found" );
-            return;
-            }
-        
-        const CFolderItem& rootFolder = iRootFolder.RootFolderItem();
-        const CFolderItem* founded = rootFolder.Search( rssId );
-        TBool folderExists( EFalse );
-        if ( founded )
-            {
-            if ( founded->IsFolder() )
-                {
-                folderExists = ETrue;
-                }
-            }
-        if ( !folderExists )
-            {
-            User::RequestComplete( iCallerStatus, KErrPathNotFound );
-            LOGGER_WRITE( "Folder does not exist" );
-            return;
-            }
-        }
-    
-    iCurrentState = EBookmarkCreating;
-    // Store parent for further use 
-    iParentFolder = aParent;    
-                
-    SAFEDELETE( iDataBuffer );
-    iDataBuffer = CBufFlat::NewL( KDefaultBufferSize );
-    iWriterPosition = 0;
-        
-    iCurrentItem = &aUid;   
-    
-    
-    User::RequestComplete( iCallerStatus, KErrNone );
-        
-    LOGGER_LEAVEFN( "CBookmarkDataStore::DoCreateItemL" );      
-    }
-
-// -----------------------------------------------------------------------------
-// CBookmarkDataStore::DoReplaceItemL
-// Begin the replace operation, ensure that the item really exists
-// -----------------------------------------------------------------------------
-void CBookmarkDataStore::DoReplaceItemL(
-    TSmlDbItemUid aUid, 
-    TInt aSize, 
-    TSmlDbItemUid aParent,
-    TBool /*aFieldChange*/, 
-    TRequestStatus& aStatus )
-    {
-    LOGGER_ENTERFN( "CBookmarkDataStore::DoReplaceItemL" );
-    LOGGER_WRITE_1("aUid: %d", aUid);
-    LOGGER_WRITE_1("aParent: %d", aParent);
-    
-    iCallerStatus = &aStatus;
-    *iCallerStatus = KRequestPending;
-    
-    delete iItemToBeReplaced;
-    iItemToBeReplaced = NULL;
-    
-    if ( iCurrentState != EOpenAndWaiting )
-        {
-        LOGGER_WRITE_1( "Warning: Unexpected current state: %d", iCurrentState );
-        }
-        
-    // Ensure that we've got enough disk space for the item
-    if ( SysUtil::DiskSpaceBelowCriticalLevelL( &iRfs, aSize, EDriveC ) )
-        {
-        User::RequestComplete( iCallerStatus, KErrDiskFull );
-        LOGGER_WRITE( "SysUtil::DiskSpaceBelowCriticalLevelL failed with KErrDiskFull." );
-        return;
-        }       
-    
-    if ( aUid < KRssFeedsOffset )
-        {
-        LOGGER_WRITE( "Bookmark item" );
-        iItemToBeReplaced = CFavouritesItem::NewL();
-        // Check that item exists
-        TInt err = iDb.Get( aUid, *iItemToBeReplaced );
-        if ( err != KErrNone )
-            {
-            User::RequestComplete( iCallerStatus, KErrNotFound );
-            LOGGER_WRITE_1( "iDb.Get failed with %d", err );
-            SAFEDELETE(iItemToBeReplaced);
-            return;
-            }
-        
-        // is parent changed
-        if ( aParent != iItemToBeReplaced->ParentFolder() )
-            {
-            if ( aParent >= KRssFeedsOffset )
-                {
-                User::RequestComplete( iCallerStatus, KErrNotSupported );
-                LOGGER_WRITE( "cannot move to RSS items folder" );
-                SAFEDELETE(iItemToBeReplaced);
-                return;
-                }
-            // parent is changed, ensure that new parent folder exists
-            TBool folderExists( EFalse ); 
-            err = iDb.FolderExists( aParent, folderExists );
-            if ( err || !folderExists )
-                {
-                User::RequestComplete( iCallerStatus, KErrPathNotFound );
-                LOGGER_WRITE_1( "iDb.FolderExist returned %d, new parent folder not found", err );
-                SAFEDELETE(iItemToBeReplaced);
-                return;
-                }
-            }
-        
-        
-        // Store some variables to be used later in commit
-        iMimeType = iItemToBeReplaced->Type();
-        iItemToBeReplaced->SetParentFolder( aParent );
-        iParentFolder = aParent;
-        iReplaceItem = aUid;
-        }
-    else
-        {
-        LOGGER_WRITE( "RSS item" );
-        if ( aParent < KRssFeedsOffset )
-            {
-            User::RequestComplete( iCallerStatus, KErrNotSupported );
-            LOGGER_WRITE( "cannot move RSS item to normal folder" );
-            return;
-            }
-        if ( !iRootFolder.HasRootFolderItem() )
-            {
-            User::RequestComplete( iCallerStatus, KErrNotFound );
-            LOGGER_WRITE( "rss root folder not found" );
-            return;
-            }
-        const CFolderItem& rootFolder = iRootFolder.RootFolderItem();
-        const CFolderItem* rssItem = rootFolder.Search( aUid - KRssFeedsOffset );
-        if ( !rssItem )
-            {
-            User::RequestComplete( iCallerStatus, KErrNotFound );
-            LOGGER_WRITE( "rss item not found" );
-            return;
-            }
-        if ( rssItem->IsFolder() )
-            {
-            iMimeType = CFavouritesItem::EFolder;
-            }
-        else
-            {
-            iMimeType = CFavouritesItem::EItem;
-            }
-        const CFolderItem* parent = rssItem->Parent();
-        if ( parent )
-            {
-            TInt currentParent = parent->Id() + KRssFeedsOffset;
-            
-            const CFolderItem* newParent = rootFolder.Search( aParent - KRssFeedsOffset );
-            if ( !newParent )
-                {
-                User::RequestComplete( iCallerStatus, KErrPathNotFound );
-                LOGGER_WRITE( "new parent not found" );
-                return;
-                }
-            else if ( !newParent->IsFolder() )
-                {
-                User::RequestComplete( iCallerStatus, KErrPathNotFound );
-                LOGGER_WRITE( "new parent must be folder" );
-                return;
-                }
-            else
-                {
-                iParentFolder = aParent;
-                }
-            
-            }
-        else
-            {
-            iParentFolder = KErrNotFound;
-            }
-        iReplaceItem = aUid;
-        }
-    
-    
-    
-    SAFEDELETE(iDataBuffer);
-    iDataBuffer = CBufFlat::NewL( KDefaultBufferSize );
-    iWriterPosition = 0;
-        
-    iCurrentItem = &aUid;   
-    iCurrentState = EBookmarkUpdating;
-    
-    User::RequestComplete( iCallerStatus, KErrNone );   
-    
-    LOGGER_LEAVEFN( "CBookmarkDataStore::DoReplaceItemL" );     
-    }
-
-// -----------------------------------------------------------------------------
-// CBookmarkDataStore::DoReadItemL
-// Read specified amount of data from the temporary buffer
-// -----------------------------------------------------------------------------
-void CBookmarkDataStore::DoReadItemL( TDes8& aBuffer )
-    {
-    LOGGER_ENTERFN( "CBookmarkDataStore::DoReadItemL" );
-    
-    if (iCurrentState != EBookmarkOpen || !iDataBuffer)
-        {
-        LOGGER_WRITE_1( "Unexpected state %d", iCurrentState );
-        User::Leave( KErrNotReady );
-        }
-        
-    if (iReaderPosition == KDataBufferNotReady)
-        {
-        LOGGER_WRITE( "No data to read" );
-        User::Leave( KErrEof );
-        }
-    
-    // Thiw is how much data there is left in the buffer    
-    TInt left = iDataBuffer->Size() - iReaderPosition;
-    
-    if ( left > 0 )
-        {
-        // This is how much there's space in the destination buffer
-        TInt destSize = aBuffer.MaxSize();
-        
-        // This is how much we can read
-        TInt toRead = destSize < left ? destSize : left;
-        
-        // Read the data from the buffer, then update the position      
-        iDataBuffer->Read( iReaderPosition, aBuffer, toRead );
-        iReaderPosition += toRead;
-        }
-    else
-        {
-        iReaderPosition = KDataBufferNotReady;
-        LOGGER_WRITE( "No data to read" );
-        User::Leave( KErrEof );
-        }   
-        
-    LOGGER_LEAVEFN( "CBookmarkDataStore::DoReadItemL" );        
-    }
-
-// -----------------------------------------------------------------------------
-// CBookmarkDataStore::DoWriteItemL
-// Write specified amount of data to the temporary buffer
-// -----------------------------------------------------------------------------
-void CBookmarkDataStore::DoWriteItemL( const TDesC8& aData )
-    {
-    LOGGER_ENTERFN( "CBookmarkDataStore::DoWriteItemL" );
-    
-    if ( iCurrentState != EBookmarkCreating && iCurrentState != EBookmarkUpdating )
-        {
-        LOGGER_WRITE_1( "Unexpected current state: %d", iCurrentState );
-        User::Leave( KErrNotReady );
-        }
-    
-    // Calculate total size
-    TInt totalSize = aData.Size() + iDataBuffer->Size();
-
-    // Ensure that we've got enough disk space for the item
-    if ( SysUtil::DiskSpaceBelowCriticalLevelL( &iRfs, totalSize, EDriveC ) )
-        {
-        User::RequestComplete( iCallerStatus, KErrDiskFull );
-        LOGGER_WRITE("SysUtil::DiskSpaceBelowCriticalLevelL failed with KErrDiskFull.");
-        return;
-        }
-        
-    // Add data to buffer       
-    iDataBuffer->InsertL( iWriterPosition, aData );
-    iWriterPosition += aData.Size();
-    
-    LOGGER_LEAVEFN( "CBookmarkDataStore::DoWriteItemL" );
-    }
-
-// -----------------------------------------------------------------------------
-// CBookmarkDataStore::DoCommitItemL
-// Commits item from temporary buffer to the message store
-// -----------------------------------------------------------------------------
-void CBookmarkDataStore::DoCommitItemL( TRequestStatus& aStatus )
-    {
-    LOGGER_ENTERFN( "CBookmarkDataStore::DoCommitItemL" );
-    LOGGER_WRITE_1("iParentFolder: %d", iParentFolder);
-    iCallerStatus = &aStatus;
-    *iCallerStatus = KRequestPending;
-    
-    // Check that we're in proper state
-    if ( iCurrentState != EBookmarkCreating && iCurrentState != EBookmarkUpdating )
-        {
-        User::RequestComplete( iCallerStatus, KErrNotReady );
-        LOGGER_WRITE_1( "Unexpected current state: %d", iCurrentState );
-        return;
-        }
-        
-    if ( iDataBuffer->Size() <= 0 )
-        {
-        User::RequestComplete( iCallerStatus, KErrNotReady );
-        LOGGER_WRITE_1( "Data buffer has no data (%d)", iDataBuffer->Size() );
-        return; 
-        }
-    
-    
-    
-    // If iItemToBeReplaced exist, bookmark item is going to be replaced.
-    // iItemToBeReplaced contains original bookmark and only some of it's data is replaced.
-    CFavouritesItem* item(NULL);
-    if ( iItemToBeReplaced )
-        {
-        // Change object ownership to "item"-object, and push to cleanupStack
-        item = iItemToBeReplaced;
-        CleanupStack::PushL( item );
-        iItemToBeReplaced = NULL;
-        }
-    else
-        {
-        // Create new object.
-        item = CFavouritesItem::NewLC();
-        }
-    
-    iDataBuffer->Compress();
-    TInt err = iConverter->BufferToFavouritesItemL( iMimeType, *iDataBuffer, *item );
-    
-    if ( iParentFolder == KErrNotFound )
-        {
-        if ( item->Name().Compare( KRSSRootFolderName ) == 0 )
-            {
-            LOGGER_WRITE( "Was RSS Rootfolder" );
-            // Remove from cleanup stack
-            CleanupStack::PopAndDestroy( item );
-            
-            if ( !iRootFolder.HasRootFolderItem() )
-                {
-                User::RequestComplete( iCallerStatus, KErrNotFound );
-                LOGGER_WRITE( "rss root folder not found" );
-                return;
-                }
-            const CFolderItem& rootFolder = iRootFolder.RootFolderItem();
-            
-            *iCurrentItem = rootFolder.Id() + KRssFeedsOffset;
-            
-            // Inform ChangeFinder of updated item
-            TSnapshotItem snapshotItem( rootFolder.Id() + KRssFeedsOffset );
-            snapshotItem.SetParentId( iParentFolder );
-            snapshotItem.CreateHashL( KRSSRootFolderName, KNullDesC );
-            iChangeFinder->ItemUpdatedL( snapshotItem );
-            
-            // Destroy buffer
-            SAFEDELETE( iDataBuffer );
-            iWriterPosition = 0;
-            
-            // Restore state and signal we're done
-            LOGGER_WRITE( "Signal KErrNone" );
-            iCurrentState = EOpenAndWaiting;
-            User::RequestComplete( iCallerStatus, KErrNone );
-            
-            LOGGER_WRITE_1("Item ID: %d", *iCurrentItem);
-            LOGGER_WRITE_1("Parent ID: %d", iParentFolder);
-            LOGGER_LEAVEFN( "CBookmarkDataStore::DoCommitItemL" );
-            return;
-            }
-        }
-
-    if ( iParentFolder < KRssFeedsOffset )
-        {
-        // Convert buffer to favourites item
-        LOGGER_WRITE( "BookmarkItem" );
-        
-        if ( err == KErrNone )
-            {
-            LOGGER_WRITE_1 ( "ParentFolder: %d", iParentFolder )
-            // Creating new item
-            if ( iCurrentState == EBookmarkCreating )
-                {
-#ifdef _DEBUG                
-                LOGGER_WRITE( "Create new bookmark item" );
-                TPtrC namePtr = item->Name();
-                LOGGER_WRITE_1( "name: %S", &namePtr );
-#endif
-                // Set parent folder
-                item->SetParentFolder( iParentFolder );
-
-                // Add to database
-                err = iDb.Add( *item, EFalse );
-                LOGGER_WRITE_1("iDb.Add return: %d", err);
-                if ( err == KErrNone )
-                    {
-                    // Output the uid value of new item
-                    *iCurrentItem = item->Uid();
-                    LOGGER_WRITE_1("New item Uid: %d", *iCurrentItem);
-                    // Inform ChangeFinder of the added item
-                    TSnapshotItem snapshotItem( *iCurrentItem );
-                    snapshotItem.SetParentId( iParentFolder );
-                    snapshotItem.CreateHashL( item->Name(), item->Url() );
-                    iChangeFinder->ItemAddedL( snapshotItem );
-                    }
-                else
-                    {
-                    LOGGER_WRITE_1( "RFavouritesDb::Add failed: %d", err );
-                    }
-                }
-            // Updating existing item
-            else
-                {
-                LOGGER_WRITE( "Update existing item" );
-                item->SetParentFolder(iParentFolder);
-                err = iDb.Update( *item, iReplaceItem, EFalse );
-                if ( err == KErrNone )
-                    {
-                    // Inform ChangeFinder of updated item
-                    TSnapshotItem snapshotItem( iReplaceItem );
-                    snapshotItem.SetParentId( iParentFolder );
-                    snapshotItem.CreateHashL( item->Name(), item->Url() );
-                    iChangeFinder->ItemUpdatedL( snapshotItem );
-                    }
-                else
-                    {
-                    LOGGER_WRITE_1( "RFavouritesDb::Update failed: %d", err );
-                    }
-                }
-            }
-        else
-            {
-            LOGGER_WRITE_1( "Failed to create db item (%d)", err );
-            }
-
-        }
-    else
-        {
-        LOGGER_WRITE( "RSS item" );
-        err = iConverter->BufferToFavouritesItemL( iMimeType, *iDataBuffer, *item );
-        // Destroy buffer
-        SAFEDELETE( iDataBuffer );
-        iWriterPosition = 0;
-        if ( err == KErrNone )
-            {
-            if ( iCurrentState == EBookmarkCreating )
-                {
-                TBool isFolder = ( iMimeType == CFavouritesItem::EFolder );
-                CreateRssItemL( iParentFolder - KRssFeedsOffset, item->Name(), item->Url(), isFolder );
-                
-                CleanupStack::PopAndDestroy( item );
-                LOGGER_WRITE( "waiting FolderItemRequestCompleted..." );
-                return;    
-                }
-            else
-                {
-                LOGGER_WRITE( "Replace RSS item" );
-                ReplaceRssItemL( iReplaceItem - KRssFeedsOffset, item->Name(), item->Url());
-                
-                CleanupStack::PopAndDestroy( item );
-                LOGGER_WRITE( "waiting FolderItemRequestCompleted..." );
-                return;
-                }
-            }
-        else
-            {
-            // Data was corrupted
-            LOGGER_WRITE_1( " iConverter->BufferToFavouritesItemL err: %d", err );
-            err = KErrCorrupt;
-            }
-        }
-    
-
-    // Remove from cleanup stack
-    CleanupStack::PopAndDestroy( item );
-    
-    // Destroy buffer
-    SAFEDELETE( iDataBuffer );
-    iWriterPosition = 0;
-    
-    // Restore state and signal we're done
-    iCurrentState = EOpenAndWaiting;
-    User::RequestComplete( iCallerStatus, err );
-    
-    LOGGER_WRITE_1("Item ID: %d", iReplaceItem);
-    LOGGER_WRITE_1("Parent ID: %d", iParentFolder);
-    LOGGER_LEAVEFN( "CBookmarkDataStore::DoCommitItemL" );
-    }
-
-// -----------------------------------------------------------------------------
-// CBookmarkDataStore::CreateRssItemL
-// Creates new Rss item, FolderItemRequestCompleted is called when done
-// -----------------------------------------------------------------------------
-void CBookmarkDataStore::CreateRssItemL( TInt aRssParentUid, const TDesC& aName, const TDesC& aUrl, TBool aIsFolder )
-    {
-    TRACE_FUNC_ENTRY;
-    LOGGER_WRITE_1("aRssParentUid: %d", aRssParentUid);
-    LOGGER_WRITE_1("aName: %S", &aName);
-    
-    if ( !iRootFolder.HasRootFolderItem() )
-        {
-        LOGGER_WRITE( "rss root folder not found" );
-        User::Leave( KErrNotFound );
-        }
-    
-    const CFolderItem& rootFolder = iRootFolder.RootFolderItem();
-    
-    // check that parent folder exists
-    const CFolderItem* parent = rootFolder.Search( aRssParentUid );
-    if ( !parent )
-        {
-        LOGGER_WRITE( "parent folder not found" );
-        User::Leave( KErrNotFound );
-        }
-    
-    // check that folder does not already exists
-    const CFolderItem* existingItem = parent->Search( aName );
-    if ( existingItem )
-        {
-        LOGGER_WRITE("Same name already exist, return KErrAlreadyExists");
-        User::Leave( KErrAlreadyExists );
-        }
-    
-    TInt err(KErrNone);
-    // async func. FolderItemRequestCompleted is called when completed
-    TRAP( err, iRootFolder.AddFolderItemL(
-        aName,
-        aUrl,
-        aIsFolder,
-        *parent ) );
-    LOGGER_WRITE_1( "iRootFolder.AddFolderItemL err: %d", err );
-    
-    iNewItemName.Copy( aName );
-    
-    TRACE_FUNC_EXIT;
-    }
-
-// -----------------------------------------------------------------------------
-// CBookmarkDataStore::ReplaceRssItemL
-// Replaces rss item, FolderItemRequestCompleted is called when done
-// -----------------------------------------------------------------------------
-void CBookmarkDataStore::ReplaceRssItemL( TInt aRssItemUid, const TDesC& aNewName, const TDesC& aNewUrl )
-    {
-    TRACE_FUNC_ENTRY;
-    LOGGER_WRITE_1("aRssItemUid: %d", aRssItemUid);
-    LOGGER_WRITE_1("aNewName: %S", &aNewName);
-    LOGGER_WRITE_1("aNewUrl: %S", &aNewUrl);
-    
-    if ( !iRootFolder.HasRootFolderItem() )
-        {
-        LOGGER_WRITE( "rss root folder not found" );
-        User::Leave( KErrNotFound );
-        }
-    const CFolderItem& rootFolder = iRootFolder.RootFolderItem();
-    LOGGER_WRITE_1( "rootFolder.Search %d", aRssItemUid );
-    const CFolderItem* rssItem = rootFolder.Search( aRssItemUid );
-    if ( !rssItem )
-        {
-        LOGGER_WRITE( "rssItem not found" );
-        User::Leave( KErrNotFound );
-        }
-    
-    // async func. FolderItemRequestCompleted is called when completed
-    if ( rssItem->IsFolder() )
-        {
-        iRootFolder.ChangeFolderItemL(
-        *rssItem,
-        aNewName,
-        KNullDesC );
-        }
-    else
-        {
-        iRootFolder.ChangeFolderItemL(
-        *rssItem,
-        aNewName,
-        aNewUrl );
-        }
-    
-    TRACE_FUNC_EXIT;
-    }
-
-// -----------------------------------------------------------------------------
-// CBookmarkDataStore::DoCloseItem
-// Closes open item in the data store
-// -----------------------------------------------------------------------------
-void CBookmarkDataStore::DoCloseItem()
-    {
-    LOGGER_ENTERFN( "CBookmarkDataStore::DoCloseItem" );
-    
-    // Make sure that we're opened an item
-    if ( iCurrentState == EBookmarkOpen )
-        {
-        // Reset read buffer 
-        iReaderPosition = KDataBufferNotReady;
-        SAFEDELETE( iDataBuffer );
-        
-        // Start to wait for the next operation     
-        iCurrentState = EOpenAndWaiting;
-        }
-    else 
-        {
-        LOGGER_WRITE_1( "Invalid state %d.", iCurrentState );
-        }   
-    
-    LOGGER_LEAVEFN( "CBookmarkDataStore::DoCloseItem" );    
-    }
-
-// -----------------------------------------------------------------------------
-// CBookmarkDataStore::DoMoveItemL
-// Moves item from one bookmark folder to another 
-// -----------------------------------------------------------------------------
-void CBookmarkDataStore::DoMoveItemL( TSmlDbItemUid aUid,
-    TSmlDbItemUid aNewParent, TRequestStatus& aStatus )
-    {
-    LOGGER_ENTERFN( "CBookmarkDataStore::DoMoveItemL" );
-    LOGGER_WRITE_1("aUid: %d", aUid);
-    LOGGER_WRITE_1("new parent: %d", aNewParent);
-
-    iCallerStatus = &aStatus;
-    *iCallerStatus = KRequestPending;
-
-    TInt err( KErrNone ); 
-    
-    if ( iCurrentState != EOpenAndWaiting )
-        {
-        LOGGER_WRITE_1( "WARNING! Invalid state: %d", iCurrentState );
-        }
-    
-    if ( aUid < KRssFeedsOffset )
-        {
-        // Bookmark item
-        LOGGER_WRITE( "Bookmark item" );
-        // Ensure that new parent folder exists 
-        TBool folderExists( EFalse );   
-        err = iDb.FolderExists( aNewParent, folderExists );
-        if ( err || !folderExists )
-            {
-            User::RequestComplete( iCallerStatus, KErrPathNotFound );
-            LOGGER_WRITE_1( "iDb.FolderExist returned %d, new parent folder not found", err );
-            return;
-            }   
-        
-        CFavouritesItem* item = CFavouritesItem::NewLC();
-
-        err = iDb.Get( aUid, *item );
-        if ( err == KErrNone )
-            {
-            if ( item->ParentFolder() != aNewParent )
-                {
-                TTime time = item->Modified();
-                
-                // Parent was changed, set new
-                item->SetParentFolder( aNewParent );
-
-                // Update, this'll move the item
-                err = iDb.Update( *item, aUid, ETrue );
-                
-                if ( err == KErrNone )
-                    {
-                    // Do not change the timestamp, otherwise this will be
-                    // considered to be 'updated' item instead of moved one
-                    err = iDb.SetModified(aUid, time);
-                    if ( err != KErrNone )
-                        {
-                        LOGGER_WRITE_1( "iDb.SetModified(aUid, time) failed (%d).", err );
-                        }
-                        
-                    // Inform ChangeFinder of updated item
-                    TSnapshotItem snapshotItem( aUid );
-                    snapshotItem.SetParentId( iParentFolder );
-                    snapshotItem.CreateHashL( item->Name(), item->Url() );
-                    iChangeFinder->ItemMovedL( snapshotItem );
-                    }
-                else 
-                    {
-                    LOGGER_WRITE_1( "iDb.Update(*item, aUid, ETrue) failed (%d).", err );
-                    }               
-                }
-            else 
-                {
-                LOGGER_WRITE( "Ignoring move (parent was already correct)." );
-                }           
-            }
-        else
-            {
-            LOGGER_WRITE_1( "RFavouritesDb::Get failed with %d", err );
-            err = KErrNotFound;
-            }
-
-        CleanupStack::PopAndDestroy( item );
-        User::RequestComplete( iCallerStatus, err ); 
-        }
-    else
-        {
-        // RRS item
-        LOGGER_WRITE( "RSS item" );
-        if ( !iRootFolder.HasRootFolderItem() )
-            {
-            User::RequestComplete( iCallerStatus, KErrNotFound );
-            LOGGER_WRITE( "rss root folder not found" );
-            return;
-            }
-        const CFolderItem& rootFolder = iRootFolder.RootFolderItem();
-        const CFolderItem* rssItem = rootFolder.Search( aUid - KRssFeedsOffset );
-        if ( !rssItem )
-            {
-            User::RequestComplete( iCallerStatus, KErrNotFound );
-            LOGGER_WRITE( "rssItem not found" );
-            return;
-            }
-        LOGGER_WRITE_1("rssItem->Id(): %d", rssItem->Id());
-        if ( !rssItem->Parent() )
-            {
-            // this is "RSS Root" folder, can't move
-            User::RequestComplete( iCallerStatus, KErrNotFound );
-            LOGGER_WRITE( "RSS Root folder, can't move" );
-            return;
-            }
-        const CFolderItem* parent = rootFolder.Search( aNewParent - KRssFeedsOffset );
-        if ( !parent )
-            {
-            // new parent not found
-            User::RequestComplete( iCallerStatus, KErrNotFound );
-            LOGGER_WRITE( "new parent not found" );
-            return;
-            }
-        if ( !parent->IsFolder() )
-            {
-            // not a folder
-            User::RequestComplete( iCallerStatus, KErrNotFound );
-            LOGGER_WRITE( "parent is not a folder" );
-            return;
-            }
-        RPointerArray<const CFolderItem> movedItems;
-        CleanupClosePushL( movedItems );
-        movedItems.Append( rssItem );
-        // FolderItemRequestCompleted is called when ready
-        iRootFolder.MoveFolderItemsToL( movedItems, *parent);
-        CleanupStack::PopAndDestroy( &movedItems );
-              
-        delete iMovedItem;
-        iMovedItem = NULL;
-        iMovedItem = new (ELeave) TSnapshotItem( aUid, aNewParent );
-        
-        iCurrentState = EBookmarkMoving;
-        LOGGER_WRITE( "Wait for FolderItemRequestCompleted.." );
-        }   
-    
-    LOGGER_LEAVEFN( "CBookmarkDataStore::DoMoveItemL" );
-    }
-
-// -----------------------------------------------------------------------------
-// CBookmarkDataStore::DoDeleteItemL
-// Removes item from the message store
-// -----------------------------------------------------------------------------
-void CBookmarkDataStore::DoDeleteItemL( TSmlDbItemUid aUid, TRequestStatus& aStatus )
-    {
-    LOGGER_ENTERFN( "CBookmarkDataStore::DoDeleteItemL" );
-    LOGGER_WRITE_1( "aUid: %d", aUid );
-    iCallerStatus = &aStatus;
-    *iCallerStatus = KRequestPending;
-    
-    // Check that we're in proper state
-    if ( iCurrentState != EOpenAndWaiting ) 
-        {
-        LOGGER_WRITE_1("CBookmarkDataStore::DoDeleteItemL, Incorrect state: %d", iCurrentState);
-        }
-    
-    TInt error( KErrNone );
-    if ( aUid < KRssFeedsOffset )
-        {
-        LOGGER_WRITE( "Delete Bookmark item" );
-        // Delete item from db and return the error code
-        error = iDb.Delete( aUid );
-        
-        if ( error == KErrNone )
-            {
-            // Inform ChangeFinder of the removed item
-            TSnapshotItem item( aUid );     
-            iChangeFinder->ItemDeletedL( item );
-            }
-        else
-            {
-            LOGGER_WRITE_1("CBookmarkDataStore::DoDeleteItemL, iDb.Delete failed: %d", error);
-            }
-        
-        User::RequestComplete( iCallerStatus, error );
-        }
-    else
-        {
-        LOGGER_WRITE( "Delete RSS item" );
-        if ( !iRootFolder.HasRootFolderItem() )
-            {
-            User::RequestComplete( iCallerStatus, KErrNotFound );
-            LOGGER_WRITE( "rss root folder not found" );
-            LOGGER_LEAVEFN( "CBookmarkDataStore::DoDeleteItemL" );
-            return;
-            }
-        const CFolderItem& rootFolder = iRootFolder.RootFolderItem();
-        const CFolderItem* item = rootFolder.Search( aUid - KRssFeedsOffset );
-        if ( !item )
-            {
-            User::RequestComplete( iCallerStatus, KErrNotFound );
-            LOGGER_WRITE( "item not found" );
-            LOGGER_LEAVEFN( "CBookmarkDataStore::DoDeleteItemL" );
-            return;
-            }
-        
-        LOGGER_WRITE_1("founded. item->Id(): %d", item->Id());
-        if ( !item->Parent() )
-            {
-            LOGGER_WRITE_1(
-            "Item parent not found, this is root folder. Return error: %d", KErrAccessDenied);
-            User::RequestComplete( iCallerStatus, KErrAccessDenied );
-            LOGGER_LEAVEFN( "CBookmarkDataStore::DoDeleteItemL" );
-            return;
-            }
-        else
-            {
-            LOGGER_WRITE( "parent found" );
-            }
-        
-        RPointerArray<const CFolderItem> folderItems;
-        CleanupClosePushL( folderItems );
-        error = folderItems.Append( item );
-        LOGGER_WRITE_1( "folderItems.Append error: %d", error );
-        TRAP( error, iRootFolder.DeleteFolderItemsL( folderItems ) );
-        CleanupStack::PopAndDestroy( &folderItems );
-        LOGGER_WRITE_1( "Trap error: %d", error );
-        
-        iReplaceItem = aUid;
-        iCurrentState = EBookmarkDeleting;
-        LOGGER_WRITE( "Wait for FolderItemRequestCompleted.." );
-        }
-        
-    LOGGER_LEAVEFN( "CBookmarkDataStore::DoDeleteItemL" );
-    }
-
-// -----------------------------------------------------------------------------
-// CBookmarkDataStore::DoSoftDeleteItemL
-// Soft delete isn't supported.
-// -----------------------------------------------------------------------------
-void CBookmarkDataStore::DoSoftDeleteItemL(TSmlDbItemUid /*aUid*/, TRequestStatus& aStatus)
-    {
-    LOGGER_ENTERFN( "CBookmarkDataStore::DoSoftDeleteItemL" );
-    iCallerStatus = &aStatus;
-    *iCallerStatus = KRequestPending;
-    
-    User::RequestComplete(iCallerStatus, KErrNotSupported); 
-    LOGGER_LEAVEFN( "CBookmarkDataStore::DoSoftDeleteItemL" );  
-    }
-
-// -----------------------------------------------------------------------------
-// CBookmarkDataStore::DoDeleteAllItemsL
-// Deletes all items in the standard folders of bookmark store
-// -----------------------------------------------------------------------------
-void CBookmarkDataStore::DoDeleteAllItemsL( TRequestStatus& aStatus )
-    {
-    LOGGER_ENTERFN( "CBookmarkDataStore::DoDeleteAllItemsL" );
-
-    iCallerStatus = &aStatus;
-    *iCallerStatus = KRequestPending;
-
-    // Check that we're in proper state
-    if (iCurrentState != EOpenAndWaiting) 
-        {
-        LOGGER_WRITE_1( "CSmsDataStore::DoDeleteAllItemsL, Incorrect state: %d", iCurrentState );
-        }
-
-    // Reset the whole change finder
-    iChangeFinder->ResetL();
-    
-    // Delete all Bookmark items
-    LOGGER_WRITE( "Delete Bookmark items" );
-    // Loop through all items at root, and delete everything
-    CFavouritesItemList* list = new ( ELeave ) CFavouritesItemList();
-    TInt error = iDb.GetAll( *list, KFavouritesRootUid );
-    if ( error == KErrNone )  
-        {
-        // Loop through the list and delete all items
-        TInt count = list->Count();
-        LOGGER_WRITE_1("list->Count(): %d", count);
-        for ( TInt i = 0; i < count; ++i )
-            {
-            CFavouritesItem* item = (*list)[i];
-        
-            // Don't bother try to erase items, which are read only
-            if ( !item->IsFactoryItem() )
-                {
-                TInt deleted = iDb.Delete( item->Uid() );
-                if ( deleted != KErrNone )
-                    {
-                    // In the case of error, store the error value
-                    error = deleted;
-                    LOGGER_WRITE_1("CBookmarkDataStore::DoDeleteAllItemsL, iDb.Delete failed: %d", error);
-                    }
-                
-                LOGGER_WRITE_1("item->Uid(): %d", item->Uid())
-                LOGGER_WRITE_1("iDb.Delete ret: %d", error)
-                
-                }
-            else
-                {
-                LOGGER_WRITE_1("item->IsFactoryItem(): id: %d", item->Uid());
-                }
-            }
-        }
-    else
-        {
-        LOGGER_WRITE_1("CBookmarkDataStore::DoDeleteAllItemsL, iDb.GetAll failed: %d", error);
-        }
-    delete list;
-    
-    // Delete all WebFeeds
-    LOGGER_WRITE( "Delete RSS items" );
-    if ( !iRootFolder.HasRootFolderItem() )
-        {
-        User::RequestComplete( iCallerStatus, error );
-        LOGGER_WRITE( "no RSS items" );
-        return;
-        }
-    const CFolderItem& rootFolder = iRootFolder.RootFolderItem();
-    // add subfolders
-    RPointerArray<const CFolderItem> folderItems;
-    CleanupClosePushL( folderItems );
-    for ( TInt i = 0; i < rootFolder.FolderItemCount(); i++)
-        {
-        error = folderItems.Append( rootFolder.FolderItemAt( i ) );
-        LOGGER_WRITE_1( "folderItems.Append error: %d", error );
-        }
-    
-    if ( folderItems.Count() > 0 )
-        {
-        TRAP( error, iRootFolder.DeleteFolderItemsL( folderItems ) );
-        
-        LOGGER_WRITE_1( "Trap error: %d", error );
-        
-        iCurrentState = EBookmarkDeletingAll;
-        LOGGER_WRITE( "Wait for FolderItemRequestCompleted.." );
-        }
-    else
-        {
-        LOGGER_WRITE( "RSS items not found" );
-        User::RequestComplete( iCallerStatus, KErrNone ); 
-        }
-    CleanupStack::PopAndDestroy( &folderItems );
-    LOGGER_LEAVEFN( "CBookmarkDataStore::DoDeleteAllItemsL" );          
-    }
-
-// -----------------------------------------------------------------------------
-// CBookmarkDataStore::DoHasSyncHistory
-// This method returns ETrue if Data Store has history information. 
-// Slow-sync will be used if Data Store does not have history information.
-// -----------------------------------------------------------------------------
-TBool CBookmarkDataStore::DoHasSyncHistory() const
-    {
-    LOGGER_ENTERFN( "CBookmarkDataStore::DoHasSyncHistory" );
-    LOGGER_WRITE_1( "iHasHistory: %d", iHasHistory );
-    LOGGER_LEAVEFN( "CBookmarkDataStore::DoHasSyncHistory" );   
-    return iHasHistory;
-    }
-
-// -----------------------------------------------------------------------------
-// CBookmarkDataStore::DoAddedItems
-// This method returns UIDs of added items. Those items are added after previous
-// synchronization with current synchronization relationship. 
-// -----------------------------------------------------------------------------
-const MSmlDataItemUidSet& CBookmarkDataStore::DoAddedItems() const
-    {
-    LOGGER_ENTERFN( "CBookmarkDataStore::DoAddedItems" );
-    
-    // Ensure that we're in a proper state
-    if ( iCurrentState != EOpenAndWaiting )
-        {
-        LOGGER_WRITE_1( "CBookmarkDataStore::DoAddedItems, invalid state %d.", iCurrentState );
-        }
-    
-    TInt error(KErrNone);
-    
-    // Clear new-items array
-    iNewItems->Reset();
-    
-    // Search for new items
-    TRAP( error, iChangeFinder->FindNewItemsL( *iNewItems ) )
-    if ( error != KErrNone )
-        {
-        LOGGER_WRITE_1( "CBookmarkDataStore::DoAddedItems, iChangeFinder->FindNewItemsL leaved with %d.", error );
-        } 
-    
-    LOGGER_WRITE_1( "New item count: %d.", iNewItems->ItemCount() );
-    LOGGER_LEAVEFN( "CBookmarkDataStore::DoAddedItems" );
-    
-    return *iNewItems;  
-    }
-    
-// -----------------------------------------------------------------------------
-// CBookmarkDataStore::DoDeletedItems
-// Returns ids of items, which are deleted after previous synchronization
-// -----------------------------------------------------------------------------
-const MSmlDataItemUidSet& CBookmarkDataStore::DoDeletedItems() const
-    {
-    LOGGER_ENTERFN( "CBookmarkDataStore::DoDeletedItemsL" );    
-    
-    // Ensure that we're in a proper state
-    if ( iCurrentState != EOpenAndWaiting )
-        {
-        LOGGER_WRITE_1( "CBookmarkDataStore::DoDeletedItems, invalid state %d.", iCurrentState );
-        }
-    
-    TInt error( KErrNone );
-    
-    // Clear deleted-items array
-    iDeletedItems->Reset();
-    
-    // Search for deleted items
-    TRAP( error, iChangeFinder->FindDeletedItemsL( *iDeletedItems ) );
-    if ( error != KErrNone )
-        {
-        LOGGER_WRITE_1( "CBookmarkDataStore::DoDeletedItems, iChangeFinder->FindDeletedItemsL leaved with %d.", error );
-        }
-    
-    LOGGER_WRITE_1( "Deleted item count: %d.", iDeletedItems->ItemCount() );
-    LOGGER_LEAVEFN( "CBookmarkDataStore::DoDeletedItemsL" );
-    return *iDeletedItems;
-    }
-
-// -----------------------------------------------------------------------------
-// CBookmarkDataStore::DoSoftDeletedItems
-// Not directly supported, empty list returned
-// -----------------------------------------------------------------------------
-const MSmlDataItemUidSet& CBookmarkDataStore::DoSoftDeletedItems() const
-    {
-    LOGGER_ENTERFN( "CBookmarkDataStore::DoSoftDeletedItems" );
-    LOGGER_LEAVEFN( "CBookmarkDataStore::DoSoftDeletedItems" );         
-
-    // Return empty array as a result
-    iSoftDeletedItems->Reset();
-    return *iSoftDeletedItems;
-    }
-
-// -----------------------------------------------------------------------------
-// CBookmarkDataStore::DoModifiedItems
-// Finds all modified items in the data store
-// -----------------------------------------------------------------------------
-const MSmlDataItemUidSet& CBookmarkDataStore::DoModifiedItems() const
-    {
-    LOGGER_ENTERFN( "CBookmarkDataStore::DoModifiedItems" );    
-    
-    // Ensure that we're in a proper state
-    if ( iCurrentState != EOpenAndWaiting )
-        {
-        LOGGER_WRITE_1( "CBookmarkDataStore::DoModifiedItems, invalid state %d.", iCurrentState );
-        }
-
-    TInt error( KErrNone );
-
-    // Clear updated-items array
-    iUpdatedItems->Reset();
-    
-    // Search for updated items
-    TRAP( error, iChangeFinder->FindChangedItemsL( *iUpdatedItems ) )
-    if ( error != KErrNone )
-        {
-        LOGGER_WRITE_1( "CBookmarkDataStore::DoModifiedItems, iChangeFinder->FindChangedItemsL leaved with %d.", error );
-        }
-    
-    LOGGER_WRITE_1( "Modified item count: %d.", iUpdatedItems->ItemCount() );
-    LOGGER_LEAVEFN( "CBookmarkDataStore::DoModifiedItems" );        
-    return *iUpdatedItems;
-    }
-
-// -----------------------------------------------------------------------------
-// CBookmarkDataStore::DoMovedItems
-// Finds all moved items in the data store
-// -----------------------------------------------------------------------------
-const MSmlDataItemUidSet& CBookmarkDataStore::DoMovedItems() const
-    {
-    LOGGER_ENTERFN( "CBookmarkDataStore::DoMovedItems" );   
-    
-    // Ensure that we're in a proper state
-    if ( iCurrentState != EOpenAndWaiting )
-        {
-        LOGGER_WRITE_1( "CBookmarkDataStore::DoMovedItems, invalid state %d.", iCurrentState );
-        }       
-    
-    TInt error( KErrNone );
-    
-    // Clear moved-items array
-    iMovedItems->Reset();
-    
-    TRAP( error, iChangeFinder->FindMovedItemsL( *iMovedItems ) );
-    if ( error != KErrNone )
-        {
-        LOGGER_WRITE_1( "CBookmarkDataStore::DoMovedItems, iChangeFinder->FindMovedItemsL leaved with %d.", error );
-        }
-       
-    LOGGER_WRITE_1( "Moved item count: %d.", iMovedItems->ItemCount() );
-    LOGGER_LEAVEFN( "CBookmarkDataStore::DoMovedItems" );
-    return *iMovedItems;
-    }
-
-// -----------------------------------------------------------------------------
-// CBookmarkDataStore::DoResetChangeInfoL
-// Resets change history in the data store. All content is considered
-// new in the data store point of view.
-// -----------------------------------------------------------------------------
-void CBookmarkDataStore::DoResetChangeInfoL( TRequestStatus& aStatus )
-    {
-    LOGGER_ENTERFN( "CBookmarkDataStore::DoResetChangeInfoL" );
-    
-    iCallerStatus = &aStatus;
-    *iCallerStatus = KRequestPending;
-    
-    // Check that we're in proper state
-    if ( iCurrentState != EOpenAndWaiting ) 
-        {
-        LOGGER_WRITE_1( "CBookmarkDataStore::DoResetChangeInfoL, invalid state %d.", iCurrentState );
-        }   
-            
-    // Reset change info in ChangeFinder
-    iChangeFinder->ResetL();
-    iHasHistory = EFalse;
-    
-    // Signal we're done
-    User::RequestComplete( iCallerStatus, KErrNone );   
-        
-    LOGGER_LEAVEFN( "CBookmarkDataStore::DoResetChangeInfoL" );     
-    }
-
-// -----------------------------------------------------------------------------
-// CBookmarkDataStore::DoCommitChangeInfoL
-// Commits change info. These items are no longer reported, when change
-// information is being queried.
-// -----------------------------------------------------------------------------
-void CBookmarkDataStore::DoCommitChangeInfoL( TRequestStatus& aStatus,
-    const MSmlDataItemUidSet& aItems )
-    {
-    LOGGER_ENTERFN( "CBookmarkDataStore::DoCommitChangeInfoL(1)" );
-    
-    iCallerStatus = &aStatus;
-    *iCallerStatus = KRequestPending;
-    
-    // Ensure that we're in a proper state
-    if ( iCurrentState != EOpenAndWaiting ) 
-        {
-        LOGGER_WRITE_1( "CBookmarkDataStore::DoCommitChangeInfoL, invalid state %d.", iCurrentState );
-        }
-
-    // Notify ChangeFinder
-    LOGGER_WRITE_1( "CBookmarkDataStore::DoCommitChangeInfoL, item count %d.", aItems.ItemCount() );
-    iChangeFinder->CommitChangesL( aItems );
-    iHasHistory = ETrue;
-        
-    // Signal we're done
-    User::RequestComplete( iCallerStatus, KErrNone );
-    
-    LOGGER_LEAVEFN(" CBookmarkDataStore::DoCommitChangeInfoL(1)" ); 
-    }
-
-// -----------------------------------------------------------------------------
-// CBookmarkDataStore::DoCommitChangeInfoL
-// Commits change info. There is no more nothing to report when change
-// information is being queried. 
-// -----------------------------------------------------------------------------
-void CBookmarkDataStore::DoCommitChangeInfoL( TRequestStatus& aStatus )
-    {
-    LOGGER_ENTERFN( "CBookmarkDataStore::DoCommitChangeInfoL(2)" );
-
-    iCallerStatus = &aStatus;
-    *iCallerStatus = KRequestPending;
-    
-    // Ensure that we're in a proper state
-    if ( iCurrentState != EOpenAndWaiting ) 
-        {
-        LOGGER_WRITE_1( "CBookmarkDataStore::DoCommitChangeInfoL, invalid state %d.", iCurrentState );
-        }
-    
-    // Notify ChangeFinder
-    iChangeFinder->CommitChangesL();
-    iHasHistory = ETrue;
-        
-    // Signal we're done
-    User::RequestComplete( iCallerStatus, KErrNone );
-        
-    LOGGER_LEAVEFN( "CBookmarkDataStore::DoCommitChangeInfoL(2)" );     
-    }
-
-// -----------------------------------------------------------------------------
-// CBookmarkDataStore::RegisterSnapshotL
-// Sets Changefinder to compare against current bookmark store content
-// -----------------------------------------------------------------------------
-void CBookmarkDataStore::RegisterSnapshotL()
-    {
-    LOGGER_ENTERFN( "CBookmarkDataStore::RegisterSnapshotL()" );
-    
-    CArrayFixSeg<TSnapshotItem>* snapshot = 
-        new ( ELeave ) CArrayFixSeg<TSnapshotItem>( KSnapshotGranularity );
-    CleanupStack::PushL( snapshot );
-    
-    
-    RegisterToSnapshotL( snapshot, KFavouritesRootUid );
-    
-    if ( iRootFolder.HasRootFolderItem() )
-        {
-        RegisterRssFeedsToSnapshotL( snapshot, iRootFolder.RootFolderItem() );
-        }
-    
-    // Set new snapshot to compare against
-    iChangeFinder->SetNewSnapshot( snapshot );
-    
-    // Changefinder takes ownership of the snapshot
-    CleanupStack::Pop( snapshot );
-    
-    LOGGER_LEAVEFN( "CBookmarkDataStore::RegisterSnapshotL()" );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CBookmarkDataStore::RegisterToSnapshotL
-// Adds recursively all the bookmark items to the snapshot
-// -----------------------------------------------------------------------------
-void CBookmarkDataStore::RegisterToSnapshotL( CArrayFixSeg<TSnapshotItem>* aSnapshot,
-    TInt aFolderUid )
-    {
-    CFavouritesItemList* list = new ( ELeave ) CFavouritesItemList;
-    CleanupStack::PushL( list );
-    TInt error = iDb.GetAll( *list, aFolderUid );
-    if ( error == KErrNone )
-        {
-        // Loop through the list. Add folders and items to the snapshot
-        TInt count = list->Count();
-        for ( TInt i = 0; i < count; ++i )
-            {
-            CFavouritesItem* item = (*list)[i];
-            // No matter whether it's a folder or item, we'll add it to snapshot
-            TSnapshotItem snapshotItem( item->Uid() );
-            snapshotItem.SetParentId( item->ParentFolder() );
-            snapshotItem.CreateHashL( item->Name(), item->Url() );
-            TKeyArrayFix key( iKey );
-            aSnapshot->InsertIsqL( snapshotItem, key );
-
-            // Remember to add also childs in case of folder (recurse)
-            if ( item->Type() == CFavouritesItem::EFolder )
-                {
-                RegisterToSnapshotL( aSnapshot, item->Uid() );
-                }
-            }
-        }
-    CleanupStack::PopAndDestroy( list ); //list
-    }
-
-// -----------------------------------------------------------------------------
-// CBookmarkDataStore::RegisterRssFeedsToSnapshotL
-// Adds recursively all the rssFeed items to the snapshot
-// -----------------------------------------------------------------------------
-void CBookmarkDataStore::RegisterRssFeedsToSnapshotL( CArrayFixSeg<TSnapshotItem>* aSnapshot,
-    const CFolderItem& folder )
-    {
-    TSnapshotItem snapshotItem( folder.Id() + KRssFeedsOffset );
-    
-    const CFolderItem* parent = folder.Parent();
-    if ( parent )
-        {
-        snapshotItem.SetParentId( parent->Id() + KRssFeedsOffset );
-        }
-    else
-        {
-        snapshotItem.SetParentId( KErrNotFound );
-        }
-    snapshotItem.CreateHashL( folder.Name(), folder.SourceUrl() );
-    
-    TKeyArrayFix key( iKey );
-    aSnapshot->InsertIsqL( snapshotItem, key );
-    
-    // add subfolders
-    for ( TInt i = 0; i < folder.FolderItemCount(); i++)
-        {
-        RegisterRssFeedsToSnapshotL( aSnapshot, *(folder.FolderItemAt( i ) ));
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CBookmarkDataStore::AssignString
-// Assigns data from one descriptor into another, truncates if too long 
-// -----------------------------------------------------------------------------
-void CBookmarkDataStore::AssignString( TDes8& aDestination, const TDesC8& aSource )
-    {
-    TInt targetLength = aSource.Length();
-    if ( aDestination.MaxLength() < targetLength )
-        {
-        targetLength = aDestination.MaxLength();
-        }
-        
-    aDestination.Copy( aSource.Ptr(), targetLength );
-    }