diff -r 000000000000 -r ff3b6d0fd310 cbs/CbsServer/ClientSrc/RCbsTopicList.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cbs/CbsServer/ClientSrc/RCbsTopicList.cpp Tue Feb 02 01:11:09 2010 +0200 @@ -0,0 +1,416 @@ +/* +* 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 RCbsTopicList class + member functions. +* +*/ + + + +// INCLUDE FILES + +#include "CbsServerConstants.h" +#include "RCbs.h" +#include "RCbsTopicList.h" + +// ================= MEMBER FUNCTIONS ======================= + +// ----------------------------------------------------------------------------- +// RCbsTopicList::RCbsTopicList +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +RCbsTopicList::RCbsTopicList() + : iNotifyEventPtr( NULL, 0, 0 ), + iNotifyHandlePtr( NULL, 0, 0 ) + { + } + +// ----------------------------------------------------------------------------- +// RCbsTopicList::Open +// Creates a subsession to the server. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt RCbsTopicList::Open( + RCbs& aServer ) + { + const TIpcArgs args( TIpcArgs::ENothing ); + return CreateSubSession( aServer, ECbsCreateTopicListSubsession, args ); + } + +// ----------------------------------------------------------------------------- +// RCbsTopicList::Close +// Closes the subsession and connection to the server. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt RCbsTopicList::Close() + { + // Close the subsession. + RSubSessionBase::CloseSubSession( ECbsCloseTopicListSubsession ); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// RCbsTopicList::GetTopicCount +// Returns the total amount of topics the topic list contains. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void RCbsTopicList::GetTopicCount( + TInt& aCount ) + { + // Send request to the server. Get the total amount of topics. + aCount = 0; + TPckgBuf< TInt > pckg( aCount ); + const TIpcArgs args( &pckg ); + + TInt result = SendReceive( ECbsGetTopicCount, args ); + // In case everything went just fine update the parameter! + if ( result == KErrNone ) + { + aCount = pckg(); + } + } + +// ----------------------------------------------------------------------------- +// RCbsTopicList::GetTopic +// Returns information about a topic from the topic list. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt RCbsTopicList::GetTopic( + const TInt aIndex, + TCbsTopic& aTopic ) + { + TPckgBuf< TCbsTopic > pckgTopic; + const TIpcArgs args( aIndex, &pckgTopic ); + + TInt result = SendReceive( ECbsGetTopic, args ); + + // Update if everything went just fine + if ( result == KErrNone ) + { + aTopic = pckgTopic(); + } + + return result; + } + +// ----------------------------------------------------------------------------- +// RCbsTopicList::FindTopicByNumber +// Finds the topic by given number. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt RCbsTopicList::FindTopicByNumber( + TCbsTopicNumber aNumber, + TCbsTopic& aTopic ) + { + TPckgBuf< TCbsTopic > pckgTopic; + const TIpcArgs args( aNumber, &pckgTopic ); + + TInt result = SendReceive( ECbsFindTopicByNumber, args ); + + // Update aTopic if everything went just fine. + if ( result == KErrNone ) + { + aTopic = pckgTopic(); + } + + return result; + } + +// ----------------------------------------------------------------------------- +// RCbsTopicList::DeleteTopic +// Deletes an existing topic. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt RCbsTopicList::DeleteTopic( + TCbsTopicNumber aNumber ) + { + // Send request to the server to delete a topic by handle + const TIpcArgs args( aNumber ); + return SendReceive( ECbsDeleteTopic, args ); + } + +// ----------------------------------------------------------------------------- +// RCbsTopicList::DeleteAllTopics +// Delete all topics. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt RCbsTopicList::DeleteAllTopics() + { + const TIpcArgs args( TIpcArgs::ENothing ); + return SendReceive( ECbsDeleteAll, args ); + } + +// ----------------------------------------------------------------------------- +// RCbsTopicList::AddTopic +// Adds a new topic. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt RCbsTopicList::AddTopic( + TCbsTopic& aTopic ) + { + // Send request to add a topic to the list. + TPckgBuf< TCbsTopic > pckgTopic( aTopic ); + const TIpcArgs args( &pckgTopic ); + + TInt result = SendReceive( ECbsAddTopic, args ); + + if ( result == KErrNone ) + { + // Update the topic information (only handle). + aTopic = pckgTopic(); + } + + return result; + } + +// ----------------------------------------------------------------------------- +// RCbsTopicList::ChangeTopicNameAndNumber +// Changes the name and number of the existing topic. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt RCbsTopicList::ChangeTopicNameAndNumber( + TCbsTopicNumber aOldNumber, + TCbsTopicNumber aNewNumber, + const TCbsTopicName& aName ) + { + // Send request to the server + const TIpcArgs args( aOldNumber, aNewNumber, &aName ); + return SendReceive( ECbsChangeTopicNameAndNumber, args ); + } + +// ----------------------------------------------------------------------------- +// RCbsTopicList::ChangeTopicSubscriptionStatus +// Changes topic subscription status. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt RCbsTopicList::ChangeTopicSubscriptionStatus( + TCbsTopicNumber aNumber, + TBool aNewStatus ) + { + // Send request to the server + TPckgBuf< TBool > pckgStatus( aNewStatus ); + const TIpcArgs args( aNumber, &pckgStatus ); + return SendReceive( ECbsChangeTopicSubscriptionStatus, args ); + } + +// ----------------------------------------------------------------------------- +// RCbsTopicList::ChangeTopicHotmarkStatus +// Changes topic hotmark status. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt RCbsTopicList::ChangeTopicHotmarkStatus( + TCbsTopicNumber aNumber, + TBool aNewStatus ) + { + // Send request to the server + TPckgBuf< TBool > pckgStatus( aNewStatus ); + const TIpcArgs args( aNumber, &pckgStatus ); + return SendReceive( ECbsChangeTopicHotmarkStatus, args ); + } + +// ----------------------------------------------------------------------------- +// RCbsTopicList::NotifyOnEvent +// Requests the server to notify the client whenever an event occurs that +// changes the information of the topics. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void RCbsTopicList::NotifyOnEvent( + TRequestStatus& aStatus, + const TInt aRequested, + TCbsTopicListEvent& aEvent, + TCbsTopicNumber& aHandle ) + { + // Send request for the notify + iNotifyEventPtr.Set( reinterpret_cast< TText8* >( &aEvent ), + sizeof( TCbsTopicListEvent ), + sizeof( TCbsTopicListEvent ) ); + iNotifyHandlePtr.Set( reinterpret_cast< TText8* >( &aHandle ), + sizeof( TCbsTopicNumber ), + sizeof( TCbsTopicNumber ) ); + + const TIpcArgs args( aRequested, &iNotifyEventPtr, &iNotifyHandlePtr ); + SendReceive( ECbsNotifyOnEvent, args, aStatus ); + } + +// ----------------------------------------------------------------------------- +// RCbsTopicList::NotifyOnEventCancel +// Cancels the pending notify request. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void RCbsTopicList::NotifyOnEventCancel() + { + const TIpcArgs args( TIpcArgs::ENothing ); + SendReceive( ECbsNotifyOnEventCancel, args ); + } + +// ----------------------------------------------------------------------------- +// RCbsTopicList::GetNewTopicsCount +// Returns the number of session-specific new topics and resets the counter. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt RCbsTopicList::GetNewTopicsCount( + TInt& aCount ) + { + // Send request to the server to get the total amount of new topics + aCount = 0; + TPckgBuf pckg( aCount ); + const TIpcArgs args( &pckg ); + + TInt result( SendReceive( ECbsGetNewTopicsCount, args ) ); + + if ( result == KErrNone ) + { + aCount = pckg(); + } + + return result; + } + +// ----------------------------------------------------------------------------- +// RCbsTopicList::GetLatestTopicNumber +// Returns the latest topic's number. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt RCbsTopicList::GetLatestTopicNumber( + TCbsTopicNumber& aNumber ) + { + aNumber = 0; + TPckgBuf pckg( aNumber ); + const TIpcArgs args( &pckg ); + + TInt result( SendReceive( ECbsGetLatestTopicNumber, args ) ); + + if ( result == KErrNone ) + { + aNumber = pckg(); + } + return result; + } + +// ----------------------------------------------------------------------------- +// RCbsTopicList::GetUnreadMessageCount +// Returns the total amount of unread messages. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void RCbsTopicList::GetUnreadMessageCount( + TInt& aCount ) + { + // Send request to the server to get the total amount of unread messages + TPckgBuf pckg( aCount ); + const TIpcArgs args( &pckg ); + + TInt result = SendReceive( ECbsGetUnreadMessageCount, args ); + + // In case everything went just fine update the parameter + if ( result == KErrNone ) + { + aCount = pckg(); + } + } + +// ----------------------------------------------------------------------------- +// RCbsTopicList::GetHotmarkedMessageHandle +// Returns the handle to the latest hotmarked message that has been +// received after the system has started up. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void RCbsTopicList::GetHotmarkedMessageHandle( + TCbsMessageHandle& aMessage ) + { + // Send request to the server to get the handle to the hotmarked message + TPckgBuf pckgMessageHandle( aMessage ); + const TIpcArgs args( &pckgMessageHandle ); + + TInt result = SendReceive( ECbsGetHotmarkedMessageHandle, args ); + + if ( result == KErrNone ) + { + aMessage = pckgMessageHandle(); + } + else + { + aMessage = 0; + } + } + +// ----------------------------------------------------------------------------- +// RCbsTopicList::NumberOfUnreadHotmarkedMessages +// Returns the number of unread messages in hotmarked topics. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt RCbsTopicList::NumberOfUnreadHotmarkedMessages() + { + TInt hotMsgCount( 0 ); + TPckgBuf pckgHotMsgCount; + const TIpcArgs args( &pckgHotMsgCount ); + + if ( SendReceive( ECbsGetUnreadHotmarkedMessageCount, args ) == KErrNone ) + { + hotMsgCount = pckgHotMsgCount(); + } + + return hotMsgCount; + } + +// ----------------------------------------------------------------------------- +// RCbsTopicList::GetNextAndPrevTopicNumber +// Returns the numbers of topics that precede and succeed the given +// topic in server-side topic list. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt RCbsTopicList::GetNextAndPrevTopicNumber( + const TCbsTopicNumber& aCurrentTopicNumber, + TCbsTopicNumber& aPrevTopicNumber, + TCbsTopicNumber& aNextTopicNumber, + TInt& aPosition ) + { + TPckgBuf pckgCurrentTopic( aCurrentTopicNumber ); + TPckgBuf pckgResults; + + const TIpcArgs args( &pckgCurrentTopic, &pckgResults ); + + TInt result( SendReceive( ECbsGetNextAndPrevTopicNumber, args ) ); + if ( result == KErrNone ) + { + aPrevTopicNumber = pckgResults().iPrevTopic; + aNextTopicNumber = pckgResults().iNextTopic; + aPosition = pckgResults().iPosition; + } + return result; + } + +// ================= OTHER EXPORTED FUNCTIONS ============== + +// End of File