diff -r ccd8e69b5392 -r 496ad160a278 mmsharing/mmshavailability/src/musavacontactavailability.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshavailability/src/musavacontactavailability.cpp Fri Jun 11 13:36:18 2010 +0300 @@ -0,0 +1,186 @@ +/* +* Copyright (c) 2005-2007 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: Provide interface for the client requestin availability class. +* +*/ + + +#include "musavacontactavailability.h" +#include "musavaavailabilityobserver.h" +#include "musavasettingsimp.h" +#include "musavaobserver.h" +#include "muslogger.h" +#include "mussettings.h" + +#include +#ifdef UNIT_TESTING // if unit testing +#include +#endif // UNIT_TESTING + +const TInt KContactsArraySize = 10; + +_LIT( KMusAvaTel, "tel:" ); +_LIT( KMusAvaPlus, "+" ); + +CMusAvaContactAvailability* CMusAvaContactAvailability::NewL( + MMusAvaAvailabilityObserver& aObserver, + CMusAvaSettingsImp& aSettings ) + { + MUS_LOG( "mus: [MUSAVA] -> CMusAvaContactAvailability::NewL()" ) + + CMusAvaContactAvailability* self = + CMusAvaContactAvailability::NewLC( + aObserver, + aSettings ); + CleanupStack::Pop( self ); + + MUS_LOG( "mus: [MUSAVA] <- CMusAvaContactAvailability::NewL()" ) + return self; + } + + +CMusAvaContactAvailability* CMusAvaContactAvailability::NewLC( + MMusAvaAvailabilityObserver& aObserver, + CMusAvaSettingsImp& aSettings ) + { + MUS_LOG( "mus: [MUSAVA] -> CMusAvaContactAvailability::NewL()" ) + CMusAvaContactAvailability* self = + new( ELeave ) CMusAvaContactAvailability( + aObserver, + aSettings ); + CleanupStack::PushL( self ); + self->ConstructL(); + + MUS_LOG( "mus: [MUSAVA] <- CMusAvaContactAvailability::NewL()" ) + return self; + } + + +CMusAvaContactAvailability::~CMusAvaContactAvailability() + { + MUS_LOG( "mus: [MUSAVA] -> CMusAvaContactAvailability::\ + ~CMusAvaContactAvailability()" ) + delete iContactName; + iContactName = NULL; + MUS_LOG( "mus: [MUSAVA] <- CMusAvaContactAvailability::\ + ~CMusAvaContactAvailability()" ) + } + + +CMusAvaContactAvailability::CMusAvaContactAvailability( + MMusAvaAvailabilityObserver& aObserver, + CMusAvaSettingsImp& aSettings ) + :CMusAvaAvailability( aObserver ), + iContactName( NULL ), + iSettings( aSettings ) + { + } + + +void CMusAvaContactAvailability::ConstructL() + { + MUS_LOG( "mus: [MUSAVA] -> CMusAvaContactAvailability::ConstructL()" ) + iOperatorVariant = MultimediaSharingSettings::OperatorVariantSettingL(); + MUS_LOG( "mus: [MUSAVA] <- CMusAvaContactAvailability::ConstructL()" ) + } + + +// ------------------------------------------------------------------------- +// Starts the loopy execution. +// ------------------------------------------------------------------------- +// +void CMusAvaContactAvailability::DoExecuteL() + { + MUS_LOG( "mus: [MUSAVA] -> CMusAvaContactAvailability::DoExecuteL()" ) + + CDesCArrayFlat* contactsArray + = new ( ELeave ) CDesCArrayFlat( KContactsArraySize ); + CleanupStack::PushL( contactsArray ); + + ActiveCallL( contactsArray ); + + iSettings.SetSipAddressesL( *contactsArray ); + + contactsArray->Reset(); + + CleanupStack::PopAndDestroy( contactsArray ); + + SetState( MMusAvaObserver::EMusAvaStatusAvailable ); + + MUS_LOG( "mus: [MUSAVA] <- CMusAvaContactAvailability::DoExecuteL()" ) + } + + +// ------------------------------------------------------------------------- +// +// ------------------------------------------------------------------------- +// +TBool CMusAvaContactAvailability::ActiveCallL( CDesCArrayFlat*& aContactsArray ) + { + MUS_LOG( "mus: [MUSAVA] -> CMusAvaContactAvailability::ActiveCallL()" ) + + const TDesC& phoneNumber = iSettings.TelNumber(); + TInt retval = EFalse; + const MDesCArray& addresses = iSettings.SipAddresses(); + TInt addressesCount = addresses.MdcaCount(); + + if ( phoneNumber.Length() > 0 && + ( iOperatorVariant == MusSettingsKeys::EOperatorSpecific || + phoneNumber.Left(1).Compare( KMusAvaPlus() ) == 0 ) ) + { + MUS_LOG( "mus: [MUSAVA] Phone number found with + prefix \ + (or operator variant)" ) + // No, it doesn't, so add the prefix to the new address. + MUS_LOG( "mus: [MUSAVA] Prefix to the new address is added" ) + //Create contact array + //Create tel bufer + HBufC* tmpDescriptor = HBufC::NewLC( KMusAvaTel().Length() + + phoneNumber.Length() ); + tmpDescriptor->Des().Append( KMusAvaTel() ); + tmpDescriptor->Des().Append( phoneNumber ); + //Add to array + aContactsArray->AppendL( tmpDescriptor->Des() ); + CleanupStack::PopAndDestroy( tmpDescriptor ); + retval = ETrue; + } + else if ( addressesCount > 0 ) + { + MUS_LOG1( "mus: [MUSAVA] addresses.MdcaCount() %d", + addressesCount ) + const TDesC& sipAddress = addresses.MdcaPoint( 0 ); + MUS_LOG_TDESC( "mus: [MUSAVA] SIP Address: ", + sipAddress ) + aContactsArray->AppendL( sipAddress ); + retval = ETrue; + } + else + { + MUS_LOG( "mus: [MUSAVA] Phone number or SIP URL not found " ) + retval = EFalse; + } + MUS_LOG1( "mus: [MUSAVA] <- CMusAvaContactAvailability::\ + ActiveCallL return %d", retval ) + + return retval; + } + +MMusAvaObserver::TAvailabilityName CMusAvaContactAvailability::Name() + { + return MMusAvaObserver::EMusAvaNameContactStatus; + } + + + + +// End of file