mmsharing/mmshavailability/src/musavacontactavailability.cpp
changeset 22 496ad160a278
--- /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 <cntviewbase.h>
+#ifdef UNIT_TESTING // if unit testing
+#include <digia/eunit/eunitdecorators.h>
+#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