cbs/CbsServer/ServerSrc/CCbsTopicList.cpp
changeset 46 2fa1fa551b0b
parent 42 35488577e233
child 48 78df25012fda
--- a/cbs/CbsServer/ServerSrc/CCbsTopicList.cpp	Mon Aug 23 15:50:31 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,697 +0,0 @@
-/*
-* Copyright (c) 2003 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:  This module contains the implementation of CCbsTopicList class 
-*                member functions. 
-* 
-*
-*/
-
-
-
-// INCLUDE FILES
-
-#include "CbsCommon.h"
-#include "CbsServerConstants.h"
-#include "CCbsSession.h"
-#include "CCbsTopicList.h"
-
-#include "CCbsDbImpTopicList.h"
-#include "CCbsRecEtel.h"
-#include "CCbsServer.h"
-#include "CbsLogger.h"
-
-// ================= MEMBER FUNCTIONS =======================
-
-// -----------------------------------------------------------------------------
-// CCbsTopicList::CCbsTopicList
-// C++ default constructor can NOT contain any code, that
-// might leave.
-// -----------------------------------------------------------------------------
-//
-CCbsTopicList::CCbsTopicList( 
-    CCbsSession& aSession, 
-    CCbsDbImpTopicList& aTopicList, 
-    CCbsRecEtel& aReceiver )
-    : CCbsObject( aSession ), 
-    iTopicList( aTopicList ), 
-    iReceiver( aReceiver ), 
-    iIsMessage( EFalse )
-    {
-    }
-
-// -----------------------------------------------------------------------------
-// CCbsTopicList::ConstructL
-// Symbian 2nd phase constructor can leave.
-// -----------------------------------------------------------------------------
-//
-void CCbsTopicList::ConstructL()
-    {
-    iTopicList.AddObserverL( this );
-    }
-
-// -----------------------------------------------------------------------------
-// CCbsTopicList::NewL
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-CCbsTopicList* CCbsTopicList::NewL( 
-    CCbsSession& aSession, 
-    CCbsDbImpTopicList& aTopicList, 
-    CCbsRecEtel& aReceiver )
-    {
-    CCbsTopicList* self = 
-            new ( ELeave ) CCbsTopicList( aSession, aTopicList, aReceiver );
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop();
-    return self;
-    }
-   
-// Destructor
-CCbsTopicList::~CCbsTopicList()
-    {
-    CBSLOGSTRING("CBSSERVER: >>> CCbsTopicList::~CCbsTopicList()");
-    iTopicList.RemoveObserver( this );
-    CBSLOGSTRING("CBSSERVER: <<< CCbsTopicList::~CCbsTopicList()");
-    }
-
-// -----------------------------------------------------------------------------
-// CCbsTopicList::HandleRequestsL
-// Handle the requests for the object. 
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//  
-TBool CCbsTopicList::HandleRequestsL( 
-    const RMessage2& aMessage )
-    {
-    CBSLOGSTRING("CBSSERVER: >>> CCbsTopicList::HandleRequestsL()");
-    
-    TBool requestHandled( ETrue );
-    
-    // Handle all requests for the subsession
-    switch ( aMessage.Function() )
-        {
-        case ECbsCloseTopicListSubsession:
-            CloseTopicList();
-            aMessage.Complete( KErrNone );
-            break;
-        case ECbsGetTopicCount:
-            GetTopicCountL();
-            break;
-    
-        case ECbsGetTopic:
-            GetTopicL();
-            break;
-        
-        case ECbsFindTopicByNumber:
-            FindTopicByNumberL();
-            break;
-
-        case ECbsGetNextAndPrevTopicNumber:
-            GetNextAndPrevTopicNumberL();
-            break;
-
-        case ECbsDeleteTopic:
-            DeleteTopicL();
-            break;
-
-        case ECbsChangeTopicNameAndNumber:
-            ChangeTopicNameAndNumberL();
-            break;
-
-        case ECbsChangeTopicSubscriptionStatus:
-            ChangeTopicSubscriptionStatusL();
-            break;
-
-        case ECbsChangeTopicHotmarkStatus:
-            ChangeTopicHotmarkStatusL();
-            break;
-
-        case ECbsAddTopic:
-            AddTopicL();
-            break;
-
-        case ECbsNotifyOnEvent:
-            NotifyOnEvent();
-            break;
-
-        case ECbsNotifyOnEventCancel:
-            NotifyOnEventCancel();
-            break;
-
-        case ECbsGetNewTopicsCount:
-            GetNewTopicsCountL();
-            break;
-
-        case ECbsGetLatestTopicNumber:
-            GetLatestTopicNumberL();
-            break;
-
-        case ECbsGetUnreadMessageCount:
-            GetUnreadMessageCountL();
-            break;
-
-        case ECbsGetHotmarkedMessageHandle:
-            GetHotmarkedMessageHandleL();
-            break;
-
-        case ECbsDeleteAll:        
-            DeleteAllL();
-            break;
-
-        case ECbsGetUnreadHotmarkedMessageCount:
-            GetUnreadHotmarkedMessageCountL();
-            break;
-        
-        default:
-            requestHandled = EFalse;
-            break;
-        }    
-
-    // Return truth value indicating whether it was possible 
-    // to handle the request or not.    
-    
-    CBSLOGSTRING2("CBSSERVER: <<< CCbsTopicList::HandleRequestsL(), returning requestHandled: %d", requestHandled );
-    
-    return requestHandled;
-    }
-
-// -----------------------------------------------------------------------------
-// CCbsTopicList::TopicListInitializedIndL
-// Called when the topic list is initialized.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CCbsTopicList::TopicListInitializedIndL()
-    {
-    // Notification.
-    NotifyClientL( ECbsTopicListInitialized, 0 );
-    }
-
-// -----------------------------------------------------------------------------
-// CCbsTopicList::TopicAddedIndL
-// Called whenever a topic is created. 
-// If necessary, the client will be notified.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CCbsTopicList::TopicAddedIndL( 
-    const TCbsDbTopicNumber& aNumber )
-    {
-    // Notification.
-    NotifyClientL( ECbsTopicAdded, aNumber );
-    }
-
-// -----------------------------------------------------------------------------
-// CCbsTopicList::TopicDeletedIndL
-// Called whenever a topic is deleted.  
-// If necessary, the client will be notified.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CCbsTopicList::TopicDeletedIndL( 
-    const TCbsDbTopicNumber& aNumber )
-    {
-    // Notification.
-    NotifyClientL( ECbsTopicDeleted, aNumber );
-    }
-
-// -----------------------------------------------------------------------------
-// CCbsTopicList::TopicModifiedIndL
-// Called whenever a topic is modified.  
-// If necessary, the client will be notified.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CCbsTopicList::TopicModifiedIndL( 
-    const TCbsDbTopicNumber& aNumber )
-    {
-    // Notification.
-    NotifyClientL( ECbsTopicModified, aNumber );
-    }
-
-// -----------------------------------------------------------------------------
-// CCbsTopicList::TopicNewMessageReceivedIndL
-// Called whenever a new message has been received.   
-// If necessary, the client will be notified.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//  
-void CCbsTopicList::TopicNewMessageReceivedIndL( 
-    const TCbsDbMessageHandle& aHandle )
-    {
-    TCbsTopicNumber topic( iTopicList.ExtractTopicNumber( aHandle ) );
-    NotifyClientL( ECbsTopicReceivedNewMessage, topic );
-    }
-
-// -----------------------------------------------------------------------------
-// CCbsTopicList::CloseTopicList
-// Closes and destroys the subsession. 
-// Note that after the call has completed, the object is no longer
-// valid. It is also left for the callee's task to complete 
-// the request.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CCbsTopicList::CloseTopicList()
-    {
-    // Removes the object.
-    Session().Server().DeleteObjectByHandle( Message().Int3() );
-    }
-
-// -----------------------------------------------------------------------------
-// CCbsTopicList::GetTopicCountL
-// Returns the total number of topics to the client.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CCbsTopicList::GetTopicCountL()
-    {
-    // Write the topic count to the client side.
-    TInt count( 0 );
-    iTopicList.GetTopicCount( count );
-    TPckgBuf< TInt > pckg( count );
-
-    Message().WriteL( 0, pckg );
-
-    // Complete the request
-    Message().Complete( KErrNone );
-    }
-
-// -----------------------------------------------------------------------------
-// CCbsTopicList::GetTopicL
-// Returns the requested topic to the client.
-// Retrieves topic information with an index to topic list.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CCbsTopicList::GetTopicL()
-    {
-    // First, read the index from the client side
-    TInt topicIndex( 0 );
-    topicIndex = Message().Int0();
-
-    // Then read the topic from the topic list
-    TPckgBuf< TCbsTopic > pckgTopic;
-    TRAPD( errorCode, iTopicList.GetTopicL( topicIndex, pckgTopic() ) );
-
-    if ( errorCode == KErrNone )
-        {
-        // Finally, write the topic information to the client side
-        Message().WriteL( 1, pckgTopic );
-        }
-
-    // Complete the request.
-    Message().Complete( errorCode );
-    }
-
-// -----------------------------------------------------------------------------
-// CCbsTopicList::FindTopicByNumberL
-// Finds a topic by number and returns it to the client.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CCbsTopicList::FindTopicByNumberL()
-    {
-    // First, read the number from the client side
-    TInt topicNumber( 0 );
-    topicNumber = Message().Int0();    
-    
-    // Find topic by handle
-    TPckgBuf< TCbsTopic > pckgTopic;
-    iTopicList.FindTopicByNumberL( static_cast<TUint16> ( topicNumber ), 
-        pckgTopic() );
-
-    // Finally, write the topic information to the client side
-    Message().WriteL( 1, pckgTopic );
-
-    // Complete the request.
-    Message().Complete( KErrNone );
-    }
-
-// -----------------------------------------------------------------------------
-// CCbsTopicList::DeleteTopicL
-// Deletes a topic by its number and returns it to the client.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CCbsTopicList::DeleteTopicL()
-    {
-    // First, read the handle from the client side    
-    TInt topicNumber( 0 );
-    topicNumber = Message().Int0();
-
-    // Delete the topic
-    iTopicList.DeleteTopicL( static_cast<TUint16> ( topicNumber ) );
-
-    iReceiver.DeleteSimTopicL( static_cast<TUint16> ( topicNumber ), EFalse );
-
-    iReceiver.ApplyStateChangesL();
-
-    // Complete the request
-    Message().Complete( KErrNone );
-    }
-
-// -----------------------------------------------------------------------------
-// CCbsTopicList::ChangeTopicNameAndNumberL
-// Changes a topic name and number.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CCbsTopicList::ChangeTopicNameAndNumberL()
-    {
-    TCbsDbTopicName name;
-    TInt oldNumber( 0 );
-    TInt newNumber( 0 );
-
-    oldNumber = Message().Int0();
-    newNumber = Message().Int1();
-    Message().ReadL( 2, name );
-
-    // First find the topic.
-    TCbsDbTopic topic;
-    iTopicList.FindTopicByNumberL( static_cast<TUint16> ( oldNumber ), topic );
-
-    // Then do the operations.
-    iTopicList.UpdateTopicNameAndNumberL( static_cast<TUint16> ( oldNumber ), 
-        static_cast<TUint16> ( newNumber ), name );
-
-    // Now we may need to change the subscriptions
-    if ( oldNumber != newNumber )
-        {
-        iReceiver.DeleteSimTopicL( static_cast<TUint16> ( oldNumber ), EFalse );
-        }
-
-    // Complete the request.
-    Message().Complete( KErrNone );
-    }
-        
-// -----------------------------------------------------------------------------
-// CCbsTopicList::ChangeTopicSubscriptionStatusL
-// Changes topic subscription status.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CCbsTopicList::ChangeTopicSubscriptionStatusL()
-    {
-    TInt topicNumber( 0 );
-    TPckgBuf< TBool > pckgStatus;
-    
-    topicNumber = Message().Int0();
-    Message().ReadL( 1, pckgStatus );
-
-    // First find the topic.
-    TCbsDbTopic topic;
-    iTopicList.FindTopicByNumberL( static_cast<TUint16> ( topicNumber ), topic );
-
-    // Then update.
-    iTopicList.UpdateTopicSubscriptionStatusL( static_cast<TUint16> ( topicNumber ), pckgStatus() );
-    iReceiver.ApplyStateChangesL();
-
-    // Complete the request.
-    Message().Complete( KErrNone );
-    }
-     
-// -----------------------------------------------------------------------------
-// CCbsTopicList::ChangeTopicHotmarkStatusL
-// Changes topic hotmark status.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CCbsTopicList::ChangeTopicHotmarkStatusL()
-    {
-    TPckgBuf< TBool > pckgStatus;
-    TInt topicNumber( 0 );
-    topicNumber = Message().Int0();
-    Message().ReadL( 1, pckgStatus );
-
-    // Then update
-    iTopicList.UpdateTopicHotmarkStatusL( static_cast<TUint16> ( topicNumber ), pckgStatus() );
-
-    // Complete the request.
-    Message().Complete( KErrNone );
-    }
-
-// -----------------------------------------------------------------------------
-// CCbsTopicList::AddTopicL
-// Adds a topic to the list.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CCbsTopicList::AddTopicL()
-    {
-    // First, get the topic information from the client side
-    TPckgBuf< TCbsTopic > pckgTopic;
-    Message().ReadL( 0, pckgTopic );
-
-    // It is not allowed to set protected.
-    if ( pckgTopic().iProtected )
-        {
-        User::Leave( KErrArgument );
-        }
-
-    // Add the topic, not detected automatically
-    iTopicList.AddTopicL( pckgTopic(), EFalse );
-
-    // Load the default topic stream
-    iTopicList.LoadDefaultTopicStreamL();
-    
-    // Write updated data to the client side (only handle is updated)
-    Message().WriteL( 0, pckgTopic );
-    
-    // Complete the request
-    Message().Complete( KErrNone );
-    }
-
-// -----------------------------------------------------------------------------
-// CCbsTopicList::NotifyOnEvent
-// Sets up a pending notification request.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CCbsTopicList::NotifyOnEvent()
-    {
-    if ( iIsMessage )
-        {
-        NotifyOnEventCancel();
-        }
-
-    iMessage = Message();
-    iIsMessage = ETrue;
-    }
-
-// -----------------------------------------------------------------------------
-// CCbsTopicList::NotifyOnEventCancel
-// Cancels a pending notification request.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CCbsTopicList::NotifyOnEventCancel()
-    {
-    // Cancel the pending notify request.
-    if ( iIsMessage )
-        {
-        iMessage.Complete( KErrCancel );
-        iIsMessage = EFalse;
-        }
-
-    // Complete the request.
-    Message().Complete( KErrNone );
-    }
-
-// -----------------------------------------------------------------------------
-// CCbsTopicList::GetNewTopicsCountL
-// Returns the number of "new" topics to the client.
-// By new it is referred to topics that are created because of 
-// topic detection since last power on.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CCbsTopicList::GetNewTopicsCountL()
-    {
-    TPckgBuf< TInt > pckg( Session().TotalTopicsDetected() );
-    Message().WriteL( 0, pckg );
-
-    // Complete the request
-    Message().Complete( KErrNone );
-    }
-
-// -----------------------------------------------------------------------------
-// CCbsTopicList::GetLatestTopicNumberL
-// Retrieves the number of the topic that was added
-// last to the topic list.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CCbsTopicList::GetLatestTopicNumberL()
-    {
-    TCbsTopicNumber number( 0 );
-    TInt result( iTopicList.GetLatestTopicNumber( number ) );
-    if ( result == KErrNone )
-        {
-        TPckgBuf<TCbsTopicNumber> pckg( number );
-        Message().WriteL( 0, pckg );
-        Message().Complete( KErrNone );
-        }
-    else
-        {
-        User::Leave( result );
-        }
-    }
-   
-// -----------------------------------------------------------------------------
-// CCbsTopicList::GetUnreadMessageCountL
-// Returns the total amount of unread messages.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-// 
-void CCbsTopicList::GetUnreadMessageCountL()
-    {
-    // Get unread message count from the database.
-    TPckgBuf<TInt> pckg( 0 );
-    iTopicList.GetUnreadMessageCount( pckg() );
-
-    Message().WriteL( 0, pckg );
-
-    // Complete the request.
-    Message().Complete( KErrNone );
-    }
-
-// -----------------------------------------------------------------------------
-// CCbsTopicList::GetHotmarkedMessageHandleL
-// Returns a handle to the latest (that is not yet taken) 
-// hotmarked message handle.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-// 
-void CCbsTopicList::GetHotmarkedMessageHandleL()
-    {
-    // Get the hotmarked message handle.
-    TCbsMessageHandle handle( 0 );
-    iTopicList.GetHotmarkedMessageHandleL( handle );
-
-    // And then write it to the client.
-    TPckgBuf< TCbsMessageHandle > pckg( handle );
-    Message().WriteL( 0, pckg );
-
-    // Complete the request.
-    Message().Complete( KErrNone );
-    }
-
-// -----------------------------------------------------------------------------
-// CCbsTopicList::GetUnreadHotmarkedMessageCountL
-// Returns the number of hotmarked, unread messages.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CCbsTopicList::GetUnreadHotmarkedMessageCountL()
-    {
-    TInt number( iTopicList.UnreadHotmarkedMessageCount() );
-    TPckgBuf<TInt> pckgNumber( number );
-    Message().WriteL( 0, pckgNumber );
-    Message().Complete( KErrNone );
-    }
-
-// -----------------------------------------------------------------------------
-// CCbsTopicList::DeleteAllL
-// Deletes all topics.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CCbsTopicList::DeleteAllL()
-    {
-    // Delete all topic from the SIM card
-    iReceiver.DeleteAllSimTopicsL();
-    
-    // Delete all topic from the server store
-    iTopicList.InitializeListL( EFalse );
-    iReceiver.ApplyStateChangesL();
-
-    Message().Complete( KErrNone );
-    }
-
-// -----------------------------------------------------------------------------
-// CCbsTopicList::NotifyClientL
-// If there is a pending notify request, notifies 
-// the client.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CCbsTopicList::NotifyClientL( 
-    TCbsTopicListEvent aEvent, 
-    TCbsTopicNumber aNumber )
-    {
-    // If there is a pending request, then process it.
-    if ( iIsMessage )
-        {
-        // First check if the client is interested of the topics.
-        TInt requested( iMessage.Int0() );
-        if ( ( requested & aEvent ) )
-            {
-            // The client is interested of the event, so notify the client.
-            // Make up a pointer descriptors.
-            TPtr8 eventPtr( reinterpret_cast<TText8*>(&aEvent),
-                    sizeof( TCbsTopicListEvent ),
-                    sizeof( TCbsTopicListEvent) );
-
-            TPtr8 numberPtr( reinterpret_cast<TText8*>(&aNumber),
-                    sizeof( TCbsTopicNumber ),
-                    sizeof( TCbsTopicNumber) );
-            // Write through the pointer descriptors.
-            iMessage.WriteL( 1, eventPtr );
-            iMessage.WriteL( 2, numberPtr );
-
-            iMessage.Complete( KErrNone );
-            iIsMessage = EFalse;
-            }        
-        }        
-    }
-
-// -----------------------------------------------------------------------------
-// CCbsTopicList::GetNextAndPrevTopicNumberL
-// Retrieves and returns the numbers of topics that
-// precede and succeed the given topic in topic list.
-// Also returns two flags indicating whether the
-// given topic is the first and/or the last topic in list.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CCbsTopicList::GetNextAndPrevTopicNumberL()
-    {
-    // Retrieve the requested topic number
-    TPckgBuf<TCbsTopicNumber> pckgCurrentTopic( 0 );
-    Message().ReadL( 0, pckgCurrentTopic );
-
-    // Determine requested information
-    TCbsTopicNumber nextTopic( 0 );
-    TCbsTopicNumber prevTopic( 0 );
-    TInt position( 0 );
-    iTopicList.GetNextAndPrevTopicNumberL(
-        pckgCurrentTopic(), nextTopic, prevTopic, position );
-
-    // Write results back
-    TPckgBuf<TCbsNextPrevTopicAndPosition> pckgResults;
-    pckgResults().iNextTopic = nextTopic;
-    pckgResults().iPrevTopic = prevTopic;
-    pckgResults().iPosition = position;
-    Message().WriteL( 1, pckgResults );
-
-    // Complete request
-    Message().Complete( KErrNone );
-    }
-
-
-// ================= OTHER EXPORTED FUNCTIONS ==============
-
-//  End of File