/** Copy or resize if need be a source image to the internal folder @return A file path of the new destination of the rescaled image @param aSourceFile Source image path to be resized @param aItem Contact item to help naming the new image */ TPath CImageRescaler::ResizeAndCopyImage(const TDesC& aSourceFile, const CContactItem& aItem) { TPtrC guid = const_cast<CContactItem&>(aItem).Guid(); // Remove the old file. An empty guid means that this contact is new and // does not have any image associated with it in the images dir if (guid.Length()) { TPath oldFile; oldFile.Append(iImagesDirPath); oldFile.Append(guid); oldFile.Append(_L("*")); // Remove previous file(s) BaflUtils::DeleteFile(iFs, oldFile); // Error value not necessary } TPath destFile = GenerateDestPath(aSourceFile); // Check the size of the image if (IsImageTooLarge(aSourceFile)) { // Resize image TRAPD(err, ResizeImageL(aSourceFile, destFile)); if (err != KErrNone && err != KErrArgument) { // Copy original image to the images directory to ensure // the contact keeps a copy of the image if (BaflUtils::CopyFile(iFs, aSourceFile, destFile) != KErrNone) { destFile.Zero(); } } } else { // Copy image to the images directory if the image is not to big if (BaflUtils::CopyFile(iFs, aSourceFile, destFile) != KErrNone) { destFile.Zero(); } } return destFile; }
// --------------------------------------------------------------------------- // CAknMemorySelectionModelMultiDrive::UpdateDataArraysL // --------------------------------------------------------------------------- // void CAknMemorySelectionModelMultiDrive::UpdateDataArraysL() { TDriveList driveList; TInt driveCount; User::LeaveIfError( DriveInfo::GetUserVisibleDrives( iCoeEnv->FsSession(), driveList, driveCount, KDriveAttAll ) ); TPath rootPath; TDriveNumber driveNumber; AknCommonDialogsDynMem::TMemoryTypes memoryType; CDesCArrayFlat* driveArray = STATIC_CAST( CDesCArrayFlat*, iDriveArray ); CDesCArrayFlat* defaultFolderArray = STATIC_CAST( CDesCArrayFlat*, iDefaultFolderArray ); driveArray->Reset(); defaultFolderArray->Reset(); if ( iDefDriveArray != NULL && iDefDefaultFolderArray != NULL ) { for ( TInt i = 0; i < KMaxDrives; i++ ) { TInt driveExist = driveList[i]; if ( driveExist ) { driveNumber = TDriveNumber( i ); rootPath.Zero(); memoryType = AknCFDUtility::DriveMemoryTypeL( driveNumber ); if( memoryType & iIncludedMedias ) { User::LeaveIfError( PathInfo::GetRootPath( rootPath, driveNumber ) ); } else { continue; } TBool isUserDefined = EFalse; // add right location even user's location with wrong sequence for ( TInt j = 0; j < iDefDriveArray->MdcaCount(); j++ ) { // same drive info and user's root path must under c:\data\. // try to get the location if ( ( *iDefDriveArray )[j].FindC( rootPath ) == 0 ) { // Use user's root path, part of user definiens // (lowercase) may be replaced by system rootPath rootPath.Append( ( *iDefDriveArray )[j].Right( ( *iDefDriveArray )[j].Length() - rootPath.Length() ) ); driveArray->AppendL( rootPath ); defaultFolderArray->AppendL( ( *iDefDefaultFolderArray )[j] ); isUserDefined = ETrue; break; } } if ( !isUserDefined ) { // user does not define location for this drive // use the default driveArray->AppendL( rootPath ); defaultFolderArray->AppendL( KNullDesC ); } } } } else { for ( TInt i=0; i<KMaxDrives; i++ ) { TInt drive = driveList[i]; driveNumber = TDriveNumber( i ); if (drive) { memoryType = AknCFDUtility::DriveMemoryTypeL( driveNumber ); if( memoryType & iIncludedMedias ) { User::LeaveIfError( PathInfo::GetRootPath( rootPath, driveNumber ) ); driveArray->AppendL( rootPath ); defaultFolderArray->AppendL( KNullDesC ); } } } } }