omads/omadsappui/AspSyncUtil/src/AspSyncUtil.cpp
branchRCL_3
changeset 25 4f0867e42d62
equal deleted inserted replaced
24:8e7494275d3a 25:4f0867e42d62
       
     1 /*
       
     2 * Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies). 
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 
       
    20 // INCLUDES
       
    21 #include "AspSyncUtil.h"
       
    22 #include "AspDialogUtil.h"
       
    23 #include "AspProfileDialog.h"
       
    24 #include "AspProfileWizardDialog.h"
       
    25 #include "AspAutoSyncHandler.h"
       
    26 
       
    27 #include "AspSyncUtil.rh"
       
    28 #include "AspDebug.h"
       
    29 
       
    30 #include <AiwCommon.hrh> // for application ids 
       
    31 #include <DataSyncInternalPSKeys.h>
       
    32 
       
    33 #ifdef RD_DSUI_TIMEDSYNC 
       
    34 #include "AspSettingViewDialog.h"
       
    35 #endif
       
    36 // ============================ MEMBER FUNCTIONS ===============================
       
    37 
       
    38 
       
    39 
       
    40 // -----------------------------------------------------------------------------
       
    41 // CAspSyncUtil::NewL
       
    42 //
       
    43 // -----------------------------------------------------------------------------
       
    44 //
       
    45 CAspSyncUtil* CAspSyncUtil::NewL()
       
    46     {
       
    47 	FLOG( _L("CAspSyncUtil::NewL START") );
       
    48 
       
    49     CAspSyncUtil* self = new (ELeave) CAspSyncUtil();
       
    50 	CleanupStack::PushL(self);
       
    51 	self->ConstructL();
       
    52 	CleanupStack::Pop(self);
       
    53 
       
    54 	FLOG( _L("CAspSyncUtil::NewL END") );
       
    55     return self;
       
    56     }
       
    57 
       
    58 
       
    59 // -----------------------------------------------------------------------------
       
    60 // Destructor
       
    61 //
       
    62 // -----------------------------------------------------------------------------
       
    63 //
       
    64 CAspSyncUtil::~CAspSyncUtil()
       
    65     {
       
    66    	FLOG( _L("CAspSyncUtil::~CAspSyncUtil START") );
       
    67    	
       
    68 	delete iResHandler;
       
    69 	delete iSyncHandler;
       
    70  	delete iContentList;
       
    71 	
       
    72 	CloseSyncSession();
       
    73 	
       
    74 	FLOG( _L("CAspSyncUtil::~CAspSyncUtil END") );
       
    75     }
       
    76 
       
    77 
       
    78 // -----------------------------------------------------------------------------
       
    79 // CAspSyncUtil::ConstructL
       
    80 //
       
    81 // -----------------------------------------------------------------------------
       
    82 //
       
    83 void CAspSyncUtil::ConstructL(void)
       
    84     {
       
    85    	FLOG( _L("CAspSyncUtil::ConstructL START") );
       
    86  	
       
    87     iSettingEnforcement = TUtil::SettingEnforcementState();
       
    88    	    
       
    89    	TAspParam param(iApplicationId, NULL);  // param not used in CAspSyncHandler
       
    90 	iSyncHandler = CAspSyncHandler::NewL(param);
       
    91 
       
    92 	iSyncSessionOpen = EFalse;
       
    93 	
       
    94    	FLOG( _L("CAspSyncUtil::ConstructL END") );
       
    95     }
       
    96 
       
    97 
       
    98 // -----------------------------------------------------------------------------
       
    99 // CAspSyncUtil::CAspSyncUtil
       
   100 //
       
   101 // -----------------------------------------------------------------------------
       
   102 //
       
   103 CAspSyncUtil::CAspSyncUtil()
       
   104 	{
       
   105 	}
       
   106 
       
   107 
       
   108 // -----------------------------------------------------------------------------
       
   109 // CAspSyncUtil::SynchronizeL
       
   110 //
       
   111 // Called by CSyncUtilApi::SynchronizeL.
       
   112 // -----------------------------------------------------------------------------
       
   113 //
       
   114 void CAspSyncUtil::SynchronizeL(RFile& aTaskFile)
       
   115 	{
       
   116 	CAspAutoSyncHandler* autoSyncHandler = CAspAutoSyncHandler::NewL();
       
   117 	CleanupStack::PushL(autoSyncHandler);
       
   118 	
       
   119 	autoSyncHandler->SynchronizeL(aTaskFile);
       
   120 	
       
   121 	CleanupStack::PopAndDestroy(autoSyncHandler);
       
   122 	}
       
   123 
       
   124 
       
   125 // -----------------------------------------------------------------------------
       
   126 // CAspSyncUtil::SynchronizeL
       
   127 //
       
   128 // Called by CSyncUtilApi::SynchronizeL. 
       
   129 // -----------------------------------------------------------------------------
       
   130 //
       
   131 void CAspSyncUtil::SynchronizeL(TInt aApplicationId, TInt aJobId, TInt aInfo1, TDes& aInfo2)
       
   132 	{
       
   133 	FLOG( _L("CAspSyncUtil::SynchronizeL START") );
       
   134 	
       
   135 	if (!iResHandler)
       
   136 		{
       
   137 		iResHandler = CAspResHandler::NewL();
       
   138 		}
       
   139 		
       
   140 	iApplicationId = aApplicationId;
       
   141 	
       
   142 	OpenSyncSessionL();
       
   143 	
       
   144 	TRAPD(err, DoSynchronizeL(aApplicationId, aJobId, aInfo1, aInfo2));
       
   145 	
       
   146 	CloseSyncSession();
       
   147 	
       
   148 	User::LeaveIfError(err);
       
   149 		
       
   150 	FLOG( _L("CAspSyncUtil::SynchronizeL END") );
       
   151 	}
       
   152 
       
   153 
       
   154 // -----------------------------------------------------------------------------
       
   155 // CAspSyncUtil::ShowSettingsL
       
   156 //
       
   157 // Called by CSyncUtilApi::ShowSettingsL.
       
   158 // -----------------------------------------------------------------------------
       
   159 //
       
   160 void CAspSyncUtil::ShowSettingsL(TInt aApplicationId, TInt aInfo1, TDes& /*aInfo2*/)
       
   161 	{
       
   162     FLOG( _L("CAspSyncUtil::ShowSettingsL START") );
       
   163 
       
   164 	if (!iResHandler)
       
   165 		{
       
   166 		iResHandler = CAspResHandler::NewL();
       
   167 		}
       
   168 
       
   169     iApplicationId = aApplicationId;
       
   170     
       
   171     if (aApplicationId != EApplicationIdSync)
       
   172     	{
       
   173     	// other apps only show profile dialog
       
   174     	ShowProfileDialogL(aApplicationId);
       
   175     	return;
       
   176     	}
       
   177     	
       
   178     
       
   179     TInt dialogMode = EModeDialogWait;
       
   180     if (aInfo1 == EModeDialogNoWait)
       
   181     	{
       
   182     	dialogMode = EModeDialogNoWait;
       
   183     	}
       
   184     
       
   185     OpenSyncSessionL();
       
   186         
       
   187     TRAPD(err, ShowSettingsDialogL(aApplicationId, KErrNotFound, dialogMode));
       
   188             
       
   189     if (dialogMode == EModeDialogWait)
       
   190     	{
       
   191     	iSettingDialog = NULL;
       
   192     	CloseSyncSession();
       
   193     	}
       
   194     
       
   195     User::LeaveIfError(err);
       
   196     
       
   197     FLOG( _L("CAspSyncUtil::ShowSettingsL END") );
       
   198 	}
       
   199 
       
   200 
       
   201 // -----------------------------------------------------------------------------
       
   202 // CAspSyncUtil::ShowSettingsDialog
       
   203 //
       
   204 // -----------------------------------------------------------------------------
       
   205 //
       
   206 void CAspSyncUtil::ShowSettingsDialogL(TInt aApplicationId, 
       
   207                                        TInt aProfileId, TInt aDialogMode)
       
   208 	{
       
   209 	if (aApplicationId != EApplicationIdSync)
       
   210 		{
       
   211 		CreateContentListL();
       
   212 	    CheckAppAndProviderL(aApplicationId);
       
   213 		}
       
   214 	
       
   215 	TAspParam param(aApplicationId, &iSyncSession);
       
   216 	param.iMode = aDialogMode;
       
   217 	param.iProfileId = aProfileId;
       
   218 
       
   219     iSettingDialog = CAspSettingDialog::NewL(param);
       
   220  
       
   221     if (aDialogMode == EModeDialogWait)
       
   222     	{
       
   223     	iSettingDialog->ExecuteLD(R_ASP_SETTING_DIALOG);
       
   224     	}
       
   225     else
       
   226     	{
       
   227     	iSettingDialog->ExecuteLD(R_ASP_SETTING_DIALOG_2);
       
   228     	}
       
   229 	}
       
   230 
       
   231 
       
   232 // -----------------------------------------------------------------------------
       
   233 // CAspSyncUtil::ShowProfileDialog
       
   234 //
       
   235 // -----------------------------------------------------------------------------
       
   236 //
       
   237 void CAspSyncUtil::ShowProfileDialogL(TInt aApplicationId)
       
   238 	{
       
   239     FLOG( _L("CAspSyncUtil::ShowProfileDialogL START") );
       
   240     
       
   241 	OpenSyncSessionL();
       
   242 	
       
   243 	TRAPD(err, EditProfileL(aApplicationId));
       
   244 	
       
   245 	CloseSyncSession();
       
   246 		
       
   247     User::LeaveIfError(err);
       
   248 		
       
   249 	FLOG( _L("CAspSyncUtil::ShowProfileDialogL END") );
       
   250 	}
       
   251 
       
   252 
       
   253 // -----------------------------------------------------------------------------
       
   254 // CAspSyncUtil::EditProfileL
       
   255 //
       
   256 // -----------------------------------------------------------------------------
       
   257 //
       
   258 void CAspSyncUtil::EditProfileL(TInt aAplicationId)
       
   259 	{
       
   260 	CreateContentListL();
       
   261     CheckAppAndProviderL(aAplicationId);
       
   262 	
       
   263 	TInt profileId = KErrNotFound;
       
   264 	TInt taskId = KErrNotFound;
       
   265 	TInt resourceId = R_ASP_PROFILE_QUERY_TITLE;
       
   266 	
       
   267 	TBool ret = SelectProfileL(profileId, taskId, resourceId, KNullDesC,ETrue);
       
   268 	if (!ret || profileId == KErrNotFound)
       
   269 		{
       
   270 		return;  // no sync profile
       
   271 		}
       
   272 
       
   273     if (iSettingEnforcement)
       
   274     	{
       
   275     	DoEditReadOnlyProfileL(aAplicationId, profileId, 
       
   276     	                       EDialogModeSettingEnforcement);
       
   277     	}
       
   278     else
       
   279     	{
       
   280     	DoEditProfileL(aAplicationId, profileId, EDialogModeEdit);
       
   281     	}
       
   282 	}
       
   283 
       
   284 
       
   285 // -----------------------------------------------------------------------------
       
   286 // CAspSyncUtil::DoEditProfileL
       
   287 //
       
   288 // -----------------------------------------------------------------------------
       
   289 //
       
   290 void CAspSyncUtil::DoEditProfileL(TInt aApplicationId, TInt aProfileId,
       
   291                                                       TInt aDialogMode)
       
   292 	{
       
   293 	TAspParam param(EApplicationIdSync, &iSyncSession);
       
   294 	CAspProfileList* profileList = CAspProfileList::NewLC(param);
       
   295 	profileList->ReadAllProfilesL(CAspProfileList::ENoMandatoryCheck);
       
   296 	
       
   297 	
       
   298     param.iApplicationId = aApplicationId;
       
   299 	CAspProfile* profile = CAspProfile::NewLC(param);
       
   300     
       
   301     TInt err = KErrNone;
       
   302     TRAP(err, profile->OpenL(aProfileId, CAspProfile::EOpenReadWrite,
       
   303                                          CAspProfile::EAllProperties));
       
   304 
       
   305 	if (err == KErrLocked)
       
   306 		{
       
   307 		TDialogUtil::ShowErrorNoteL(R_ASP_LOCKED_PROFILE);
       
   308 		}
       
   309 	User::LeaveIfError(err);
       
   310 
       
   311 	iContentList->SetProfile(profile);
       
   312 	TRAP(err, iContentList->InitAllTasksL());
       
   313 	
       
   314 	if (err != KErrNone)
       
   315 		{
       
   316 		iContentList->SetProfile(NULL);
       
   317 		}
       
   318 	User::LeaveIfError(err);
       
   319 		
       
   320 	TAspParam param2(aApplicationId, &iSyncSession);
       
   321 	param2.iProfile = profile;
       
   322 	param2.iMode = aDialogMode;
       
   323     param2.iContentList = iContentList;
       
   324     param2.iProfileList = profileList;  // needed for unique server id check
       
   325  
       
   326 #ifdef RD_DSUI_TIMEDSYNC 
       
   327 	CAspSettingViewDialog::ShowDialogL(param2);
       
   328 #else
       
   329 	TRAP(err, CAspProfileDialog::ShowDialogL(param2));
       
   330 #endif
       
   331 	
       
   332 	iContentList->SetProfile(NULL);
       
   333 	User::LeaveIfError(err);
       
   334 
       
   335 	CleanupStack::PopAndDestroy(profile);
       
   336 	CleanupStack::PopAndDestroy(profileList);
       
   337 	}
       
   338 
       
   339 
       
   340 // -----------------------------------------------------------------------------
       
   341 // CAspSyncUtil::DoEditReadOnlyProfileL
       
   342 //
       
   343 // -----------------------------------------------------------------------------
       
   344 //
       
   345 void CAspSyncUtil::DoEditReadOnlyProfileL(TInt aApplicationId, TInt aProfileId,
       
   346                                                       TInt aDialogMode)
       
   347 	{
       
   348 	TAspParam param(aApplicationId, &iSyncSession);
       
   349 	CAspProfile* profile = CAspProfile::NewLC(param);
       
   350     
       
   351     profile->OpenL(aProfileId, CAspProfile::EOpenRead,
       
   352                                          CAspProfile::EAllProperties);
       
   353 
       
   354 	iContentList->SetProfile(profile);
       
   355 	TInt err = KErrNone;
       
   356 	TRAP(err, iContentList->InitAllTasksL());
       
   357 	
       
   358 	if (err != KErrNone)
       
   359 		{
       
   360 		iContentList->SetProfile(NULL);
       
   361 		}
       
   362 	User::LeaveIfError(err);
       
   363 		
       
   364 	TAspParam param2(aApplicationId, &iSyncSession);
       
   365 	param2.iProfile = profile;
       
   366 	param2.iMode = aDialogMode;
       
   367     param2.iContentList = iContentList;
       
   368  
       
   369 	TRAP(err, CAspProfileDialog::ShowDialogL(param2));
       
   370 	
       
   371 	iContentList->SetProfile(NULL);
       
   372 	User::LeaveIfError(err);
       
   373 
       
   374 	CleanupStack::PopAndDestroy(profile);
       
   375 	}
       
   376 
       
   377 
       
   378 // -----------------------------------------------------------------------------------------------------
       
   379 // CAspSyncUtil::SelectProfileL
       
   380 // aCheckId currently will be always set to ETrue
       
   381 // this Check can be used in future to differentiate if its called from DoSynchronizeL() or EditProfileL()
       
   382 // ------------------------------------------------------------------------------------------------------
       
   383 //
       
   384 TBool CAspSyncUtil::SelectProfileL(TInt& aProfileId, TInt& aTaskId, 
       
   385                                    TInt aResourceId, const TDesC& aLocalDatabase,TBool aCheckId)
       
   386 	{
       
   387 	aProfileId = KErrNotFound;
       
   388 	aTaskId = KErrNotFound;
       
   389 	TBool ret = EFalse;
       
   390 	TInt index=KErrNotFound;
       
   391 	
       
   392 	TAspParam param(iApplicationId, &iSyncSession);
       
   393 	CAspProfileList* profileList = CAspProfileList::NewLC(param);
       
   394 	
       
   395 	if (aLocalDatabase.Length() > 0)
       
   396 		{
       
   397 		profileList->ReadEMailProfilesL(aLocalDatabase, KErrNotFound);
       
   398 		if(profileList->Count() == 0)
       
   399 		{
       
   400 		 profileList->ReadAllProfilesL(CAspProfileList::EBasePropertiesOnly);
       
   401 		}
       
   402 		}
       
   403 	else
       
   404 		{
       
   405 		profileList->ReadAllProfilesL(CAspProfileList::EBasePropertiesOnly);
       
   406 		}
       
   407 	
       
   408 	profileList->Sort();
       
   409    	
       
   410 	if (profileList->Count() == 0)
       
   411 		{
       
   412 	    if (!iSettingEnforcement)
       
   413 	    	{
       
   414 	    	if (TDialogUtil::ShowConfirmationQueryL(R_ASP_QUERY_NO_PROFILES))
       
   415 		        {
       
   416 	    	    TAspParam param(iApplicationId, &iSyncSession);
       
   417          	    CAspProfileWizardDialog::ShowDialogL(param);
       
   418     	        }
       
   419 	    	}
       
   420 
       
   421     	ret = EFalse;
       
   422 		}
       
   423 		
       
   424 			
       
   425 	else
       
   426 		{
       
   427 		if(aCheckId)
       
   428 		{
       
   429 			
       
   430 	
       
   431 			if (iSettingEnforcement)
       
   432 				{
       
   433 					ret = TDialogUtil::ShowProfileQueryL(profileList, aProfileId, aResourceId);
       
   434 						
       
   435 				}
       
   436 			else
       
   437 				{
       
   438 		  			ret = TDialogUtil::ShowProfileQueryAppL(profileList, aProfileId, aResourceId,index);	
       
   439 				}
       
   440 		
       
   441 		
       
   442 			if (ret)
       
   443 				{
       
   444 		   			 index = profileList->ListIndex(aProfileId);
       
   445 	    	
       
   446 	        		__ASSERT_DEBUG(index != KErrNotFound, TUtil::Panic(KErrGeneral));
       
   447 	              
       
   448 	         		TAspProfileItem& item = profileList->Item(index);
       
   449 	         		
       
   450 		   			aTaskId = item.iTaskId;
       
   451 	       
       
   452 				}
       
   453 			
       
   454 		 	else
       
   455 	 			 {
       
   456 	 		    		if(index==1)
       
   457 			     		CAspProfileWizardDialog::ShowDialogL(param);
       
   458 	        	 		//ret=EFalse;
       
   459 		 	
       
   460 		 		 }	
       
   461 		}
       
   462 		
       
   463 		else
       
   464 		{
       
   465 		
       
   466 		   
       
   467 			ret = TDialogUtil::ShowProfileQueryL(profileList, aProfileId, aResourceId);	
       
   468 		  	
       
   469 	 		if (ret)
       
   470 				{
       
   471 					TInt index = profileList->ListIndex(aProfileId);
       
   472 	    	
       
   473 	        		__ASSERT_DEBUG(index != KErrNotFound, TUtil::Panic(KErrGeneral));
       
   474 	                
       
   475 	          		TAspProfileItem& item = profileList->Item(index);
       
   476 		      		aTaskId = item.iTaskId;
       
   477 	        
       
   478 			
       
   479 		 
       
   480 		 		}
       
   481 				
       
   482 		
       
   483 	   		}
       
   484 		}
       
   485 		
       
   486 	CleanupStack::PopAndDestroy(profileList);
       
   487 
       
   488 	return ret;
       
   489 	}
       
   490 
       
   491 
       
   492 // -----------------------------------------------------------------------------
       
   493 // CAspSyncUtil::DoSynchronizeL
       
   494 //
       
   495 // -----------------------------------------------------------------------------
       
   496 //
       
   497 void CAspSyncUtil::DoSynchronizeL(TInt aApplicationId, TInt /*aJobId*/, 
       
   498                                   TInt aInfo1, TDes& aInfo2)
       
   499 	{
       
   500 	FLOG( _L("CAspSyncUtil::DoSynchronizeL START") );
       
   501 	
       
   502 	CreateContentListL();
       
   503 	CheckAppAndProviderL(aApplicationId);
       
   504 
       
   505 	//check PS key
       
   506     TInt keyVal = 0;//EDataSyncNotRunning
       
   507     TInt err = RProperty::Get( KPSUidDataSynchronizationInternalKeys,
       
   508                                  KDataSyncStatus,
       
   509                                  keyVal );
       
   510     if(err == KErrNone && keyVal)
       
   511     	{
       
   512     	TDialogUtil::ShowInformationNoteL(R_ASP_SYNC_ALREADY_RUNNING);
       
   513 		return;
       
   514     	}
       
   515 	
       
   516 	if (CAspProfile::OtherSyncRunning(&iSyncSession))
       
   517 		{
       
   518 		TDialogUtil::ShowInformationNoteL(R_ASP_SYNC_ALREADY_RUNNING);
       
   519 		FLOG( _L("CAspSyncUtil::DoSynchronizeL END") );
       
   520    		return;
       
   521 		}
       
   522 		
       
   523 	if (iApplicationId == EApplicationIdEmail && TUtil::IsEmpty(aInfo2))
       
   524 		{
       
   525 		FLOG( _L("### mailbox name not defined ###") );
       
   526 		FLOG( _L("CAspSyncUtil::DoSynchronizeL END") );
       
   527 		User::Leave(KErrNotFound);
       
   528 		}
       
   529 	
       
   530 
       
   531 	TInt profileId = KErrNotFound;
       
   532 	TInt taskId = KErrNotFound;
       
   533 	TBool ret = EFalse;
       
   534 	TInt resourceId = R_ASP_PROFILE_QUERY_TITLE;
       
   535 
       
   536 	if (aApplicationId == EApplicationIdEmail)
       
   537 		{
       
   538 		ret = SelectProfileL(profileId, taskId, resourceId, aInfo2,ETrue);
       
   539 		}
       
   540 	else
       
   541 		{
       
   542 		ret = SelectProfileL(profileId, taskId, resourceId, KNullDesC,ETrue);
       
   543 		}
       
   544 		
       
   545 	if (!ret || profileId == KErrNotFound)
       
   546 		{
       
   547 		FLOG( _L("CAspSyncUtil::DoSynchronizeL END") );
       
   548 		return; // no sync profile
       
   549 		}
       
   550 	
       
   551 	TAspParam aspParam(iApplicationId, &iSyncSession);
       
   552 	CAspProfile* profile = CAspProfile::NewLC(aspParam);
       
   553 	TRAPD (err1, profile->OpenL(profileId, CAspProfile::EOpenRead, 
       
   554 	                           CAspProfile::EAllProperties));
       
   555 	User::LeaveIfError(err1);
       
   556 	if (aApplicationId != EApplicationIdEmail)
       
   557 		{
       
   558 		aInfo2 = KNullDesC;
       
   559 		}
       
   560 	//create task for content type ,if it is not created yet
       
   561 	ret = CheckTaskAndProtocolL(profileId, aInfo2);
       
   562 	
       
   563 	TInt dataProviderId = TUtil::ProviderIdFromAppId(aApplicationId);
       
   564 	taskId = TAspTask::FindTaskIdL(profile, dataProviderId, aInfo2);
       
   565 	
       
   566 	CleanupStack::PopAndDestroy(profile);
       
   567 	    		
       
   568 	if (!ret)
       
   569 		{
       
   570 		    FLOG( _L("CAspSyncUtil::DoSynchronizeL END") );
       
   571 			return; // some mandatory data missing
       
   572 		}
       
   573 	
       
   574 	if (!CheckMandatoryL(profileId))
       
   575 		{
       
   576 	    FLOG( _L("CAspSyncUtil::DoSynchronizeL END") );
       
   577 		return; // some mandatory data missing
       
   578 		}
       
   579 
       
   580 #ifdef _DEBUG
       
   581         TBuf<KBufSize> buf;
       
   582         TUtil::GetApplicationName(buf, aApplicationId);
       
   583         FTRACE(RDebug::Print(_L("statrting sync (%S)"), &buf));
       
   584 #endif
       
   585 
       
   586 	TAspSyncParam param(aApplicationId);
       
   587 	param.iProfileId = profileId;
       
   588 	param.iTaskId = taskId;
       
   589 
       
   590     if (aInfo1 == EApplicationIdEmail)
       
   591     	{
       
   592     	// email sync 3.2 needs synchronous syncing
       
   593     	param.iDialogMode = EModeDialogWait;
       
   594     	}
       
   595 
       
   596 	iSyncHandler->SynchronizeL(param);
       
   597 
       
   598 	FLOG( _L("CAspSyncUtil::DoSynchronizeL END") );
       
   599 	}
       
   600 
       
   601 
       
   602 // -----------------------------------------------------------------------------
       
   603 // CAspSyncUtil::CheckMandatoryL
       
   604 //
       
   605 // -----------------------------------------------------------------------------
       
   606 //
       
   607 TBool CAspSyncUtil::CheckMandatoryL(TInt aProfileId)
       
   608 	{
       
   609 	TAspParam param(iApplicationId, &iSyncSession);
       
   610 	CAspProfile* profile = CAspProfile::NewLC(param);
       
   611 	profile->OpenL(aProfileId, CAspProfile::EOpenRead, 
       
   612 	                           CAspProfile::EAllProperties);
       
   613 	
       
   614 	TInt contentCount = 0;
       
   615 	TInt ret = CAspProfile::CheckMandatoryData(profile, contentCount);
       
   616 	CleanupStack::PopAndDestroy(profile);
       
   617 	
       
   618 	if (ret != EMandatoryOk)
       
   619 		{
       
   620         if (iSettingEnforcement)
       
   621     	    {
       
   622     	    TDialogUtil::ShowInformationNoteL(R_ASP_NOTE_TARM_MANDATORY_MISSING);
       
   623     	    }    	
       
   624     	else if (TDialogUtil::ShowConfirmationQueryL(R_ASP_QUERY_MANDATORY_MISSING))
       
   625 			{
       
   626    	        DoEditProfileL(iApplicationId, aProfileId, EDialogModeEditMandatory);
       
   627  			}
       
   628 		
       
   629 		return EFalse;
       
   630     	}
       
   631 	
       
   632 	return ETrue;
       
   633 	}
       
   634 
       
   635 
       
   636 // -----------------------------------------------------------------------------
       
   637 // CAspSyncUtil::DataProviderExist
       
   638 //
       
   639 // -----------------------------------------------------------------------------
       
   640 //
       
   641 TBool CAspSyncUtil::DataProviderExist(TInt aApplicationId)
       
   642 	{
       
   643 	if (iContentList == NULL)
       
   644 		{
       
   645 		return ETrue;
       
   646 		}
       
   647 	
       
   648 	TInt providerId = TUtil::ProviderIdFromAppId(aApplicationId);
       
   649 	TInt index = iContentList->FindProviderIndex(providerId);
       
   650 	
       
   651 	if (index == KErrNotFound)
       
   652 		{
       
   653 		return EFalse;
       
   654 		}
       
   655 	return ETrue;
       
   656 	}
       
   657 
       
   658 
       
   659 // -----------------------------------------------------------------------------
       
   660 // CAspSyncUtil::CreateContentListL
       
   661 //
       
   662 // -----------------------------------------------------------------------------
       
   663 //
       
   664 void CAspSyncUtil::CreateContentListL()
       
   665 	{
       
   666 	if (iContentList)
       
   667 		{
       
   668 		return;
       
   669 		}
       
   670 
       
   671 	TAspParam param(KErrNotFound, &iSyncSession);
       
   672     param.iMode = CAspContentList::EInitDataProviders;
       
   673     iContentList = CAspContentList::NewL(param);
       
   674 	}
       
   675 
       
   676 
       
   677 // -----------------------------------------------------------------------------
       
   678 // CAspSyncUtil::CheckAppAndProvider
       
   679 //
       
   680 // -----------------------------------------------------------------------------
       
   681 //
       
   682 void CAspSyncUtil::CheckAppAndProviderL(TInt aApplicationId)
       
   683 	{
       
   684 	TInt sid = RProcess().SecureId().iId;
       
   685 	
       
   686 	if (!TUtil::IsValidSID(sid))
       
   687 		{
       
   688 		FLOG( _L("### CAspSyncUtil::CheckAppAndProviderL: wrong SID (%xd) ###"), sid);
       
   689 		User::Leave(KErrNotSupported);  // unknown caller app
       
   690 		}
       
   691 
       
   692 	if (!TUtil::IsValidAppId(aApplicationId))
       
   693 		{
       
   694 		FLOG( _L("### CAspSyncUtil::CheckAppAndProviderL: wrong app id (%d) ###"), aApplicationId);
       
   695 		User::Leave(KErrNotSupported);  // unknown caller app
       
   696 		}
       
   697 		
       
   698 	if (aApplicationId != EApplicationIdSync && !DataProviderExist(aApplicationId))
       
   699 		{
       
   700 		FLOG( _L("### CAspSyncUtil::CheckAppAndProviderL: no data provider (%d) ###"), aApplicationId);
       
   701 		User::Leave(KErrNotFound);  // sync data provider not found
       
   702 		}
       
   703 	}
       
   704 
       
   705 // -----------------------------------------------------------------------------
       
   706 // CAspSyncUtil::CheckTaskAndProtocolL
       
   707 //
       
   708 // -----------------------------------------------------------------------------
       
   709 //
       
   710 TBool CAspSyncUtil::CheckTaskAndProtocolL(TInt aProfileId ,const TDesC& aLocalDatabase)
       
   711 	{
       
   712 	
       
   713 	TAspParam param(iApplicationId, &iSyncSession);
       
   714 	
       
   715 	CAspProfile* profile = CAspProfile::NewLC(param);
       
   716 	TRAPD (err, profile->OpenL(aProfileId, CAspProfile::EOpenReadWrite, 
       
   717 	                           CAspProfile::EAllProperties));
       
   718 	if (err == KErrLocked)
       
   719 		{
       
   720 			TDialogUtil::ShowErrorNoteL(R_ASP_LOCKED_PROFILE);
       
   721 			CleanupStack::PopAndDestroy(profile);                           
       
   722 			return EFalse;
       
   723 		}
       
   724 	
       
   725 	TInt dataProviderId = TUtil::ProviderIdFromAppId(iApplicationId, CAspProfile::IsOperatorProfileL(profile));
       
   726 	iContentList->RemoveAllTasks();
       
   727 	iContentList->SetProfile(profile);
       
   728 	iContentList->InitAllTasksL();
       
   729 	
       
   730 	if (iApplicationId == EApplicationIdEmail)
       
   731 		{
       
   732 			    
       
   733 	    TInt protocol = profile->ProtocolVersion();
       
   734 		if (protocol == EAspProtocol_1_1)
       
   735 			{
       
   736 
       
   737       		CleanupStack::PopAndDestroy(profile);
       
   738       		iContentList->SetProfile(NULL);
       
   739       		return EFalse;	 
       
   740 			}
       
   741         
       
   742         TInt taskId = TAspTask::FindTaskIdL(profile, dataProviderId, aLocalDatabase);
       
   743         if (taskId == KErrNotFound)
       
   744 			{
       
   745 	  		
       
   746       	  iContentList->ModifyTaskIncludedL(dataProviderId, ETrue, aLocalDatabase);
       
   747       		
       
   748       		}
       
   749 	
       
   750 		}
       
   751     else
       
   752 		{
       
   753 		TInt taskId = TAspTask::FindTaskIdL(profile, dataProviderId, KNullDesC);
       
   754         if (taskId == KErrNotFound)
       
   755 			{
       
   756 	  		    		
       
   757       		iContentList->ModifyTaskIncludedL(dataProviderId, ETrue, KNullDesC);
       
   758       		
       
   759 			}
       
   760 		}
       
   761 	
       
   762 	iContentList->SetProfile(NULL);
       
   763 	CleanupStack::PopAndDestroy(profile);
       
   764 	return ETrue;
       
   765 	}
       
   766 
       
   767 // -----------------------------------------------------------------------------
       
   768 // OpenSyncSessionL
       
   769 // 
       
   770 // -----------------------------------------------------------------------------
       
   771 //
       
   772 void CAspSyncUtil::OpenSyncSessionL()
       
   773 	{
       
   774 	if (!iSyncSessionOpen)
       
   775 		{
       
   776         TRAPD(err, iSyncSession.OpenL());
       
   777         
       
   778         if (err != KErrNone)
       
   779         	{
       
   780         	FLOG( _L("### CAspSyncUtil::OpenSyncSessionL: RSyncMLSession::OpenL failed (%d) ###"), err);
       
   781         	
       
   782             iSyncSession.Close();  // can be done always
       
   783         	User::Leave(err);
       
   784         	}
       
   785         else
       
   786         	{
       
   787         	FLOG( _L("CAspSyncUtil::OpenSyncSessionL: RSyncMLSession::OpenL ok") );
       
   788         	}
       
   789         
       
   790 		iSyncSessionOpen = ETrue;
       
   791 		}
       
   792     }
       
   793 
       
   794 
       
   795 // -----------------------------------------------------------------------------
       
   796 // CloseSyncSession
       
   797 // 
       
   798 // -----------------------------------------------------------------------------
       
   799 //
       
   800 void CAspSyncUtil::CloseSyncSession()
       
   801 	{
       
   802 	if (iSyncSessionOpen)
       
   803 		{
       
   804 		iSyncSession.Close();
       
   805 		iSyncSessionOpen = EFalse;
       
   806 		}
       
   807     }
       
   808 
       
   809 
       
   810 // End of file
       
   811