diff -r 4bdfb6b5c9b4 -r b67379558a75 imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailserversession.cpp --- a/imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailserversession.cpp Wed Jun 23 18:33:48 2010 +0300 +++ b/imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailserversession.cpp Tue Jul 06 14:37:18 2010 +0300 @@ -55,6 +55,10 @@ CThumbnailServerSession::~CThumbnailServerSession() { Server()->DropSession(this); + delete iBitmap; + iBitmap = NULL; + delete iBuffer; + iBuffer = NULL; } @@ -458,6 +462,12 @@ ModifyThumbnailSize(sourceType); } + // delete existing + if(params.iImport && params.iOverwrite) + { + Server()->DeleteThumbnailsL( params.iTargetUri); + } + // CreateThumbnails if (params.iControlFlags == EThumbnailGeneratePersistentSizesOnly) { @@ -615,6 +625,19 @@ TN_DEBUG2( "CThumbnailServerSession::RequestThumbByPathAsyncL() - thumbnail not found, err = %d", err ); + // don't try to create from virtual URI + if ( params.iVirtualUri ) + { + User::Leave(err); + } + + // disk space check only for stored sizes + if ( params.iThumbnailSize != ECustomThumbnailSize && + Server()->StoreForPathL(params.iFileName)->IsDiskFull() ) + { + User::Leave( KErrDiskFull ); + } + if ( (err == KErrNotFound || err == KErrAccessDenied) && !(params.iFlags& CThumbnailManager::EDoNotCreate) ) { @@ -622,17 +645,6 @@ // and retry the request using file handle err = KThumbnailErrThumbnailNotFound; } - else - { - User::Leave(err); - } - - // disk space check only for stored sizes - if ( params.iThumbnailSize != ECustomThumbnailSize && - Server()->StoreForPathL(params.iFileName)->IsDiskFull() ) - { - User::Leave( KErrDiskFull ); - } User::Leave(err); } @@ -803,7 +815,8 @@ *Server(), params.iTargetUri, bitmap, bitmapSize, (*missingSizes)[i].iSize, (*missingSizes)[i].iCrop, params.iDisplayMode, KMaxPriority, KNullDesC, (*missingSizes)[i].iType, params.iModified, EFalse, EFalse, - reqId); + reqId, params.iVirtualUri); + CleanupStack::PushL( scaleTask ); scaleTask->SetDoStore( ETrue ); Server()->Processor().AddTaskL( scaleTask ); @@ -851,7 +864,12 @@ "CThumbnailServerSession::CreateGenerateTaskFromFileHandleL() -- create thumbnail generation task for %S", ¶ms.iFileName ); // disk space check only for stored sizes - if ( params.iThumbnailSize != ECustomThumbnailSize && + if ( params.iImport && + Server()->StoreForPathL(params.iTargetUri)->IsDiskFull() ) + { + User::Leave( KErrDiskFull ); + } + else if ( params.iThumbnailSize != ECustomThumbnailSize && Server()->StoreForPathL(params.iFileName)->IsDiskFull() ) { User::Leave( KErrDiskFull ); @@ -869,13 +887,20 @@ TBool gridSizeOnly(EFalse); - if ( params.iQualityPreference == CThumbnailManager - ::EOptimizeForQualityWithPreview ) + if ( params.iQualityPreference == CThumbnailManager::EOptimizeForQualityWithPreview ) { gridSizeOnly = ETrue; } - Server()->GetMissingSizesL( params.iFileName, sourceType, *missingSizes, gridSizeOnly); + // import vs. normal + if(params.iImport) + { + Server()->GetMissingSizesL( params.iTargetUri, sourceType, *missingSizes, gridSizeOnly); + } + else + { + Server()->GetMissingSizesL( params.iFileName, sourceType, *missingSizes, gridSizeOnly); + } if ( missingSizes->Count() == 0) { @@ -926,7 +951,8 @@ CThumbnailGenerateTask* task = new( ELeave )CThumbnailGenerateTask( Server() ->Processor(), * Server(), aFile, NULL, ¶ms.iMimeType, params.iFlags, params.iSize, params.iDisplayMode, priority, missingSizes, params.iTargetUri, - params.iThumbnailSize, params.iModified, params.iQualityPreference ); + params.iThumbnailSize, params.iModified, params.iQualityPreference, + params.iVirtualUri); // do not store bitmaps to server pool when generating only if( params.iControlFlags & EThumbnailGeneratePersistentSizesOnly ) @@ -1038,7 +1064,8 @@ CThumbnailGenerateTask* task = new( ELeave )CThumbnailGenerateTask( Server() ->Processor(), * Server(), NULL, aBuffer, ¶ms.iMimeType, params.iFlags, params.iSize, params.iDisplayMode, priority, missingSizes, params.iTargetUri, - params.iThumbnailSize, params.iModified, params.iQualityPreference ); + params.iThumbnailSize, params.iModified, params.iQualityPreference, + params.iVirtualUri); // do not store bitmaps to server pool when generating only if( params.iControlFlags & EThumbnailGeneratePersistentSizesOnly ) @@ -1332,6 +1359,21 @@ params.iThumbnailSize = EAudioListThumbnailSize; } } + else if(aSourceType == TThumbnailPersistentSize::EContact) + { + if(params.iThumbnailSize == EFullScreenThumbnailSize) + { + params.iThumbnailSize = EContactFullScreenThumbnailSize; + } + else if(params.iThumbnailSize == EGridThumbnailSize) + { + params.iThumbnailSize = EContactGridThumbnailSize; + } + else if(params.iThumbnailSize == EListThumbnailSize) + { + params.iThumbnailSize = EContactListThumbnailSize; + } + } } //------------------------------------------------------------------------ @@ -1345,34 +1387,42 @@ // mime type if ( params.iMimeType.Des8() == KNullDesC8 && !Server()->SupportedMimeType(params.iMimeType) ) - { - // try parsing from file extension - res = Server()->MimeTypeFromFileExt( params.iFileName, params.iMimeType ); - if ( res == KErrNotFound ) - { - if( aFile ) - { - // parsed type not in the list, resolve from file - params.iMimeType = Server()->ResolveMimeTypeL(*aFile); - } - else - { - Server()->Fs().ShareProtected(); - RFile64 file; - CleanupClosePushL( file ); - - User::LeaveIfError( file.Open( Server()->Fs(), params.iFileName, EFileShareReadersOrWriters )); - TN_DEBUG2( "CThumbnailServerSession::ResolveMimeType - file handle opened for %S", ¶ms.iFileName ); - - params.iMimeType = Server()->ResolveMimeTypeL(file); - - file.Close(); - TN_DEBUG1("CThumbnailServerSession::ResolveMimeType - file handle closed"); - - CleanupStack::Pop( &file ); - } - } - } + { + // try parsing from file extension + if (params.iImport) + { + res = Server()->MimeTypeFromFileExt( params.iTargetUri, params.iMimeType ); + } + else + { + res = Server()->MimeTypeFromFileExt( params.iFileName, params.iMimeType ); + } + + if ( res == KErrNotFound ) + { + if( aFile ) + { + // parsed type not in the list, resolve from file + params.iMimeType = Server()->ResolveMimeTypeL(*aFile); + } + else + { + Server()->Fs().ShareProtected(); + RFile64 file; + CleanupClosePushL( file ); + + User::LeaveIfError( file.Open( Server()->Fs(), params.iFileName, EFileShareReadersOrWriters )); + TN_DEBUG2( "CThumbnailServerSession::ResolveMimeType - file handle opened for %S", ¶ms.iFileName ); + + params.iMimeType = Server()->ResolveMimeTypeL(file); + + file.Close(); + TN_DEBUG1("CThumbnailServerSession::ResolveMimeType - file handle closed"); + + CleanupStack::Pop( &file ); + } + } + } } @@ -1383,12 +1433,20 @@ TInt CThumbnailServerSession::ConvertSqlErrToE32Err( TInt aReason ) { TN_DEBUG2("CThumbnailServerSession::ConvertSqlErrToE32Err(%d)", aReason); - TInt e32Err; + TInt e32Err(aReason); + if ( aReason >= - 144 ) // magic: [-1..-144] is E32 error range { // E32 error value or non-negative value - e32Err = aReason; + switch ( aReason ) + { + case KErrServerTerminated: + e32Err = KErrCorrupt; + break; + default: + e32Err = aReason; + } } else { @@ -1505,4 +1563,5 @@ } } + // End of file