installationservices/swi/source/swis/server/processor.cpp
branchRCL_3
changeset 26 8b7f4e561641
parent 25 7333d7932ef7
equal deleted inserted replaced
25:7333d7932ef7 26:8b7f4e561641
   257 		break;
   257 		break;
   258 	
   258 	
   259 	case EInstallFiles:
   259 	case EInstallFiles:
   260 		if (DoStateInstallFilesL())
   260 		if (DoStateInstallFilesL())
   261 			{
   261 			{
   262 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK			
       
   263 			SwitchState(EParseApplicationRegistrationFiles);
       
   264 #else
       
   265 			SwitchState(EUpdateRegistry);
   262 			SwitchState(EUpdateRegistry);
   266 #endif			
   263 			}
   267 			}
   264 		break;
   268 		break;
   265 
   269 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
       
   270 	case EParseApplicationRegistrationFiles:
       
   271 	    if (DoParseApplicationRegistrationFilesL())
       
   272 	        {
       
   273 	        SwitchState(EUpdateRegistry);
       
   274 	        }
       
   275 	    break;
       
   276 #endif		
       
   277 	    
       
   278 	case EUpdateRegistry:
   266 	case EUpdateRegistry:
   279 		if (DoStateUpdateRegistryL())
   267 		if (DoStateUpdateRegistryL())
   280 			{
   268 			{
   281 			SwitchState(EFinished);
   269 			SwitchState(EFinished);
   282 			}
   270 			}
   787 		
   775 		
   788 		// Skip targets less than 4 characters, since this won't be a valid path
   776 		// Skip targets less than 4 characters, since this won't be a valid path
   789 		// for transaction service RemoveL().
   777 		// for transaction service RemoveL().
   790 		if (fileToRemove.Length() > 3)
   778 		if (fileToRemove.Length() > 3)
   791 			{
   779 			{
   792 			err = RemoveWithRetryAttemptL(fileToRemove);
   780 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
       
   781 			TRAP(err, TransactionSession().RemoveL(fileToRemove));
       
   782 #else
       
   783 			TRAP(err, IntegrityServices().RemoveL(fileToRemove));
       
   784 #endif
       
   785 			// Display error dialog and leave if the file cannot be removed,
       
   786 			// ignoring missing files, media cards not present or corrupt media
       
   787 
       
   788 			TInt noOfDetletionAttempts=1;
       
   789 			while ((err == KErrInUse ||err==KErrAccessDenied )&& noOfDetletionAttempts <= KMaxNoOfDeletionAttempts )
       
   790 			    {
       
   791 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
       
   792 			    TRAP(err, TransactionSession().RemoveL(fileToRemove));
       
   793 #else
       
   794 			    TRAP(err, IntegrityServices().RemoveL(fileToRemove));
       
   795 #endif
       
   796                 DEBUG_PRINTF2(_L8("Deletion attempt %d"), noOfDetletionAttempts);
       
   797                 noOfDetletionAttempts++;
       
   798                 User::After(KRetryInterval);
       
   799 			    }
   793 
   800 
   794 			if(err !=KErrNone && err != KErrNotFound && err != KErrPathNotFound	&& err != KErrNotReady && err != KErrCorrupt)
   801 			if(err !=KErrNone && err != KErrNotFound && err != KErrPathNotFound	&& err != KErrNotReady && err != KErrCorrupt)
   795 				{
   802 				{
   796 				CDisplayError* displayCannotDelete=CDisplayError::NewLC(iPlan.AppInfoL(), EUiCannotDelete, fileToRemove);
   803         		CDisplayError* displayCannotDelete=CDisplayError::NewLC(iPlan.AppInfoL(), EUiCannotDelete, fileToRemove);
   797 				iUiHandler.ExecuteL(*displayCannotDelete);
   804 				iUiHandler.ExecuteL(*displayCannotDelete);
   798 				CleanupStack::PopAndDestroy(displayCannotDelete);
   805 				CleanupStack::PopAndDestroy(displayCannotDelete);
   799 				User::Leave(err);
   806 				User::Leave(err);
   800 				}
   807 				}
   801 			//Create an SWI event					
   808 			//Create an SWI event					
   833 				if (!(info.iMediaAtt & KMediaAttWriteProtected) && info.iType!=EMediaNotPresent)
   840 				if (!(info.iMediaAtt & KMediaAttWriteProtected) && info.iType!=EMediaNotPresent)
   834 					{
   841 					{
   835 					TChar driveLetter;
   842 					TChar driveLetter;
   836 					User::LeaveIfError(iFs.DriveToChar(drive, driveLetter));
   843 					User::LeaveIfError(iFs.DriveToChar(drive, driveLetter));
   837 					privatePath[0] =  static_cast<TText> (driveLetter);
   844 					privatePath[0] =  static_cast<TText> (driveLetter);
   838 
   845 					// try to remove the private directory, ignore if it can't be found
   839 					err = RemoveWithRetryAttemptL(privatePath);
   846 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
       
   847 					TRAP(err, TransactionSession().RemoveL(privatePath));
       
   848 #else
       
   849 					TRAP(err, IntegrityServices().RemoveL(privatePath));
       
   850 #endif
       
   851 
       
   852 		            TInt noOfDetletionAttempts=1;
       
   853 		            while ((err == KErrInUse ||err==KErrAccessDenied )&& noOfDetletionAttempts <= KMaxNoOfDeletionAttempts )
       
   854 		                {
       
   855 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
       
   856 		                TRAP(err, TransactionSession().RemoveL(privatePath));
       
   857 #else
       
   858 		                TRAP(err, IntegrityServices().RemoveL(privatePath));
       
   859 #endif
       
   860 		                DEBUG_PRINTF2(_L8("Deletion attempt %d"), noOfDetletionAttempts);
       
   861 		                noOfDetletionAttempts++;
       
   862 		                User::After(KRetryInterval);
       
   863 		                }
   840 
   864 
   841 					if (err != KErrNone && err != KErrNotReady &&
   865 					if (err != KErrNone && err != KErrNotReady &&
   842 						err != KErrNotFound && err != KErrPathNotFound && err != KErrCorrupt)
   866 						err != KErrNotFound && err != KErrPathNotFound && err != KErrCorrupt)
   843 						{
   867 						{
   844 						User::Leave(err);
   868 						User::Leave(err);
   884 		// not block uninstallation.Retaining the RunRemove behaviour. 
   908 		// not block uninstallation.Retaining the RunRemove behaviour. 
   885 		TRAP_IGNORE(RunFileL(fileName->Target(), fileName->MimeType(), fileName->OperationOptions()));
   909 		TRAP_IGNORE(RunFileL(fileName->Target(), fileName->MimeType(), fileName->OperationOptions()));
   886 		}	
   910 		}	
   887 	}
   911 	}
   888 
   912 
   889 TInt CProcessor::RemoveWithRetryAttemptL(TDesC& aFileToRemove)
       
   890 	{
       
   891 	TInt err = KErrNone;
       
   892 	TInt noOfDetletionAttempts=1;
       
   893 			
       
   894 	do {
       
   895 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
       
   896 	    TRAP(err, TransactionSession().RemoveL(aFileToRemove));
       
   897 #else
       
   898 	    TRAP(err, IntegrityServices().RemoveL(aFileToRemove));
       
   899 #endif
       
   900         DEBUG_PRINTF2(_L8("Deletion attempt %d"), noOfDetletionAttempts);
       
   901         noOfDetletionAttempts++;
       
   902         User::After(KRetryInterval);
       
   903 		} while ((err == KErrInUse ||err==KErrAccessDenied )&& noOfDetletionAttempts <= KMaxNoOfDeletionAttempts );
       
   904 	return err;
       
   905 	}
       
   906