omads/omadsappui/AiwSyncProvider/src/AiwSyncProvider.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 14 Sep 2010 20:55:10 +0300
branchRCL_3
changeset 26 3e6957da2ff8
parent 0 dab8a81a92de
permissions -rw-r--r--
Revision: 201033 Kit: 201035

/*
* Copyright (c) 2002-2005 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:  
*
*/



#include <AiwMenu.h>
#include <AiwGenericParam.hrh>
#include <AiwCommon.hrh>

#include <implementationproxy.h>

#include <data_caging_path_literals.hrh>  // for resource and bitmap directories

#include <aiwsyncprovider.rsg>
#include "AiwSyncProvider.h"
#include "AiwSyncProviderUids.hrh"
#include "AiwSyncProvider.rh"
#include "AiwSyncProviderDebug.h"

#include <aknnotewrappers.h>    // CAknInformationNote




_LIT( KResFileName, "z:AiwSyncProvider.rsc" );



// -----------------------------------------------------------------------------
// CAspSyncProvider::NewL
//
// -----------------------------------------------------------------------------
//
CAspSyncProvider* CAspSyncProvider::NewL()
	{
    FLOG( _L("CAspSyncProvider::NewL START") );

	CAspSyncProvider* self = new (ELeave) CAspSyncProvider();
    CleanupStack::PushL(self);
    self->ConstructL();
    CleanupStack::Pop(self);
    
    FLOG( _L("CAspSyncProvider::NewL END") );
	return self;
	}


// -----------------------------------------------------------------------------
// CAspSyncProvider::Constructor
//
// -----------------------------------------------------------------------------
//
CAspSyncProvider::CAspSyncProvider()
	{
	}


// -----------------------------------------------------------------------------
// CAspSyncProvider::Destructor
//
// -----------------------------------------------------------------------------
//
CAspSyncProvider::~CAspSyncProvider()
	{
	FLOG( _L("~CAspSyncProvider START") );
	
	delete iSyncUtilApi;
	
	FLOG( _L("~CAspSyncProvider END") );
	}


// -----------------------------------------------------------------------------
// CAspSyncProvider::ConstructL
//
// -----------------------------------------------------------------------------
//
void CAspSyncProvider::ConstructL()
    {
    FLOG( _L("CAspSyncProvider::ConstructL START") );
 
	iSyncUtilApi = CSyncUtilApi::NewL();

    FLOG( _L("CAspSyncProvider::ConstructL END") );
    } 


 
// -----------------------------------------------------------------------------
// CAspSyncProvider::InitialiseL (from CAiwServiceIfBase)
//
// -----------------------------------------------------------------------------
//
void CAspSyncProvider::InitialiseL(MAiwNotifyCallback& /*aFrameworkCallback*/,
	    						   const RCriteriaArray& /*aInterest*/)
	{
	// Not implemented
	}


// -----------------------------------------------------------------------------
// CAspSyncProvider::HandleServiceCmdL (from CAiwServiceIfBase)
//
// -----------------------------------------------------------------------------
//
void CAspSyncProvider::HandleServiceCmdL(const TInt& aCmdId,
                                         const CAiwGenericParamList& aInParamList,
                                         CAiwGenericParamList& /*aOutParamList*/,
                                         TUint /*aCmdOptions*/,
                                         const MAiwNotifyCallback* /*aCallback*/)
	{
	TInt jobId = KErrNotFound;
	TInt info1 = KErrNotFound;
	TBuf<KBufSize> info2(KNullDesC);
	TInt applicationId = GetApplicationId(aInParamList);

	if (aCmdId != KAiwCmdSynchronize)
		{
		return;
		}
		
   	if (applicationId == EGenericParamMessageItemEMail)
		{
	    GetFileName(aInParamList, info2);
	    if (info2.Length() == 0)
	    	{
	    	FLOG( _L("### mailbox name not found ###") );
	    	return; // email sync requires mailbox name
	    	}
	    info1 = EGenericParamMessageItemEMail;
		}
		
	iSyncUtilApi->SynchronizeL(applicationId, jobId, info1, info2); 
		
    
        
    // R&D solution: Remove constness.
    //MAiwNotifyCallback* callback = 
    //    const_cast< MAiwNotifyCallback* >(aCallback);

	//CAiwGenericParamList* dummyParamList = NULL;
	
	//callback->HandleNotifyL(0, 0, *dummyParamList, *dummyParamList);
	}



 
// -----------------------------------------------------------------------------
// CAspSyncProvider::InitializeMenuPaneL (from CAiwServiceIfMenu)
//
// -----------------------------------------------------------------------------
//
void CAspSyncProvider::InitializeMenuPaneL(CAiwMenuPane& aMenuPane,
											  TInt aIndex,
											  TInt /*aCascadeId*/,
											  const CAiwGenericParamList& aInParamList)
	{
	FLOG( _L("CAspSyncProvider::InitializeMenuPaneL START") );
	
	
	TFileName resFile;
	GetResFileName(resFile);
	
	FTRACE( RDebug::Print(_L("resfile= '%S'  index= %d"), &resFile, aIndex) );

    TInt serviceCommand = GetServiceCommandId(aInParamList);
    
    if (serviceCommand == KErrNotFound)
    	{
    	FLOG( _L("### service command not found ###") );
    	FLOG( _L("CAspSyncProvider::InitializeMenuPaneL END") );
    	return;
    	}
    
    if (serviceCommand == KAiwCmdSynchronizeSelected)
    	{
        TRAPD(ignoreError, aMenuPane.AddMenuItemsL(resFile, R_ASPSYNCPROVIDER_MENU_4, KAiwCmdSynchronizeSelected, aIndex));
        if (ignoreError != KErrNone)
        	{
        	FTRACE( RDebug::Print(_L("### CAiwMenuPane::AddMenuItemsL failed (%d) ###"), ignoreError) );
        	}
       	}
       	
    if (serviceCommand == KAiwCmdSynchronize)
    	{
    	TRAPD(ignoreError, aMenuPane.AddMenuItemsL(resFile, R_ASPSYNCPROVIDER_SUBMENU, KAiwCmdSynchronize, aIndex));
        if (ignoreError != KErrNone)
        	{
        	FTRACE( RDebug::Print(_L("### CAiwMenuPane::AddMenuItemsL failed (%d) ###"), ignoreError) );
        	}
    	}
    	
    FLOG( _L("CAspSyncProvider::InitializeMenuPaneL END") );
	}


// -----------------------------------------------------------------------------
// CAspSyncProvider::HandleMenuCmdL (from CAiwServiceIfMenu)
//
// -----------------------------------------------------------------------------
//
void CAspSyncProvider::HandleMenuCmdL(TInt aMenuCmdId, 
                                      const CAiwGenericParamList& aInParamList,
                                      CAiwGenericParamList& /*aOutParamList*/,
                                      TUint /*aCmdOptions*/,
                                      const MAiwNotifyCallback* /*aCallback*/)
	{
	FLOG( _L("CAspSyncProvider::HandleMenuCmdL START") );
    
	TInt jobId = KErrNotFound;
	TInt info1 = KErrNotFound;
	TBuf<KBufSize> info2(KNullDesC);
	TInt applicationId = GetApplicationId(aInParamList);
	
	if (applicationId == KErrNotFound)
		{
    	FLOG(_L("### application id not found ###"));
		return; // must have consumer app id
		}
	
	switch (aMenuCmdId)
		{
		case EAspSyncProviderCmdStart:
			if (applicationId == EGenericParamMessageItemEMail)
				{
			    GetFileName(aInParamList, info2);
			    if (info2.Length() == 0)
			    	{
			    	FLOG( _L("### mailbox name not found ###") );
			    	return; // email sync requires mailbox name
			    	}
				}
		
			iSyncUtilApi->SynchronizeL(applicationId, jobId, info1, info2); 
            break;

		case EAspSyncProviderCmdSettings:
		    iSyncUtilApi->ShowSettingsL(applicationId, info1, info2);
            break;
            
		case EAspSyncProviderCmdRetrieve:
		    applicationId = EGenericParamMessageItemEMail;
		    info1 = KAiwCmdSynchronizeSelected;
		    GetFileName(aInParamList, info2);
		    if (info2.Length() == 0)
		    	{
		    	FLOG( _L("### mailbox name not found ###") );
		    	return; // email sync requires mailbox name
		    	}
		    
		    iSyncUtilApi->SynchronizeL(applicationId, jobId, info1, info2);
            break; 
            
		default:
		    FTRACE( RDebug::Print(_L("### unknown menu command (%d) ###"), aMenuCmdId) );
			break;
		}
		
	FLOG( _L("CAspSyncProvider::HandleMenuCmdL END") );
	}


// -----------------------------------------------------------------------------
// CAspSyncProvider::GetApplicationIdL
//
// -----------------------------------------------------------------------------
//
TInt CAspSyncProvider::GetApplicationId(const CAiwGenericParamList& aInParamList)
	{
	_LIT(KSyncApplicationName, "sync");
	
	TInt index = 0;
	
	const TAiwGenericParam* param = aInParamList.FindFirst(index, EGenericParamContactItem);
	if (index >= 0)
		{
    	return EGenericParamContactItem;
		}
		
	index = 0;
	param = aInParamList.FindFirst(index, EGenericParamCalendarItem);
	if (index >= 0)
		{
    	return EGenericParamCalendarItem;
		}

    index = 0;
	param = aInParamList.FindFirst(index, EGenericParamMessageItemEMail);
	if (index >= 0)
		{
    	return EGenericParamMessageItemEMail;
		}
		
	index = 0;
	param = aInParamList.FindFirst(index, EGenericParamNoteItem);
	if (index >= 0)
		{
    	return EGenericParamNoteItem;
		}
   
    index = 0;
	param = aInParamList.FindFirst(index, EGenericParamMessageItemMMS);
	if (index >= 0)
		{
    	return EGenericParamMessageItemMMS;
		}

    index = 0;
	param = aInParamList.FindFirst(index, EGenericParamEmailAddress);
	if (index >= 0)
		{
    	return EGenericParamEmailAddress;
		}

	// this is for starting Sync application - not used at the moment
	index = 0;
	param = aInParamList.FindFirst(index, EGenericParamApplication);
	if (index >= 0)
		{
   	    TPtrC ptr;
    	const TAiwVariant& val = param->Value();
	    if (val.Get(ptr))
		    {
		    if (ptr.Compare(KSyncApplicationName) == 0)
		    	{
		    	return KSyncApplicationId;
		    	}
		    }
		}

	return KErrNotFound;
	}


// -----------------------------------------------------------------------------
// CAspSyncProvider::GetFileName
//
// -----------------------------------------------------------------------------
//
void CAspSyncProvider::GetFileName(const CAiwGenericParamList& aInParamList, TDes& aText)
	{
	aText = KNullDesC;
	TInt index = 0;
	const TAiwGenericParam* param = aInParamList.FindFirst(index, EGenericParamMessageItemMbox);
	if (index < 0)
		{
		return;
		}

    TPtrC ptr;
	const TAiwVariant& val = param->Value();
	if (!val.Get(ptr))
		{
		FLOG(_L("### CAspSyncProvider::GetFileName: param value not found ###"));
		return;
		}
	
	StrCopy(aText, ptr);
	}


// -----------------------------------------------------------------------------
// CAspSyncProvider::GetServiceCommandId
//
// -----------------------------------------------------------------------------
//
TInt CAspSyncProvider::GetServiceCommandId(const CAiwGenericParamList& aInParamList)
	{
	TInt index = 0;
	const TAiwGenericParam* param = aInParamList.FindFirst(index, EGenericParamServiceCommand);
	if (index < 0)
		{
    	return KErrNotFound;
		}

    TInt32 num = 0;
	const TAiwVariant& val = param->Value();
	if (!val.Get(num))
		{
		FLOG(_L("CAspSyncProvider::GetServiceCommandId: param value not found"));
		return KErrNotFound;
		}
	return num;
	}


// -----------------------------------------------------------------------------
// CAspSyncProvider::GetResFileName
//
// -----------------------------------------------------------------------------
//
void CAspSyncProvider::GetResFileName(TDes& aText)
	{
	TParse parse;
	parse.Set(KResFileName, &KDC_RESOURCE_FILES_DIR, NULL);
	StrCopy(aText, parse.FullName());
	}


// -------------------------------------------------------------------------------
// CAspSyncProvider::StrCopy
//
// String copy with lenght check.
// -------------------------------------------------------------------------------
//
void CAspSyncProvider::StrCopy(TDes& aTarget, const TDesC& aSource)
    {
	TInt len = aTarget.MaxLength();
    if(len < aSource.Length()) 
	    {
		aTarget.Copy(aSource.Left(len));
		return;
	    }
	aTarget.Copy(aSource);
    }


//------------------------------------------------------------------------------
// TDialogUtil::ShowInformationNoteL
//
//------------------------------------------------------------------------------
//
void CAspSyncProvider::ShowInformationNoteL(const TDesC& aText)
	{
	CAknInformationNote* queryDialog = new (ELeave) CAknInformationNote(ETrue);
	queryDialog->ExecuteLD(aText);
	}





//
// Rest of the file is for ECom initialization. 
//




// -----------------------------------------------------------------------------
// Map the interface UIDs to implementation factory functions
//
// -----------------------------------------------------------------------------
//
const TImplementationProxy ImplementationTable[] =
    {
    IMPLEMENTATION_PROXY_ENTRY(KAspSyncProviderImplUid,	CAspSyncProvider::NewL)
    };


// -----------------------------------------------------------------------------
// Exported proxy for instantiation method resolution
//
// -----------------------------------------------------------------------------
//
EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
{
    aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);

    return ImplementationTable;
}






// End of file