# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1282115155 -10800 # Node ID c5df59b4ae2d58273cd42fd76fc41a73a7628b44 # Parent b67379558a75dd8891bf5062890031a508d5d7c8 Revision: 201031 Kit: 201033 diff -r b67379558a75 -r c5df59b4ae2d imagehandling_plat/thumbnailmanager_api/inc/thumbnailmanager.h --- a/imagehandling_plat/thumbnailmanager_api/inc/thumbnailmanager.h Tue Jul 06 14:37:18 2010 +0300 +++ b/imagehandling_plat/thumbnailmanager_api/inc/thumbnailmanager.h Wed Aug 18 10:05:55 2010 +0300 @@ -44,12 +44,12 @@ EAudioGridThumbnailSize, EAudioListThumbnailSize, EAudioFullScreenThumbnailSize, +EGridThumbnailSize, +EListThumbnailSize, +EFullScreenThumbnailSize, EContactGridThumbnailSize, EContactListThumbnailSize, EContactFullScreenThumbnailSize, -EGridThumbnailSize, -EListThumbnailSize, -EFullScreenThumbnailSize, EThumbnailSizeCount //last item, don't remove } TThumbnailSize; /** diff -r b67379558a75 -r c5df59b4ae2d imagehandling_plat/thumbnailmanager_api/tsrc/conf/ThumbnailManagerTest.cfg --- a/imagehandling_plat/thumbnailmanager_api/tsrc/conf/ThumbnailManagerTest.cfg Tue Jul 06 14:37:18 2010 +0300 +++ b/imagehandling_plat/thumbnailmanager_api/tsrc/conf/ThumbnailManagerTest.cfg Wed Aug 18 10:05:55 2010 +0300 @@ -85,12 +85,12 @@ EAudioGridThumbnailSize 8 EAudioListThumbnailSize 9 EAudioFullScreenThumbnailSize 10 -EContactGridThumbnailSize 11 -EContactListThumbnailSize 12 -EContactFullScreenThumbnailSize 13 -EGridThumbnailSize = 14 -EListThumbnailSize = 15 -EFullScreenThumbnailSize = 16 +EGridThumbnailSize = 11 +EListThumbnailSize = 12 +EFullScreenThumbnailSize = 13 +EContactGridThumbnailSize = 14 +EContactListThumbnailSize = 15 +EContactFullScreenThumbnailSize = 16 // Custom sizes KCustomSizeX 111 diff -r b67379558a75 -r c5df59b4ae2d imagehandlinglib/Src/IHLDebugPrint.h --- a/imagehandlinglib/Src/IHLDebugPrint.h Tue Jul 06 14:37:18 2010 +0300 +++ b/imagehandlinglib/Src/IHLDebugPrint.h Wed Aug 18 10:05:55 2010 +0300 @@ -59,7 +59,7 @@ /** * Macro for defining debug-only literal strings (empty release version) */ - #define IHL_DEBUG_STRING(name, s) const TIHLEmptyDebugString name + #define IHL_DEBUG_STRING(name, s) const TIHLEmptyDebugString name = {} /** * Output to debugger output (empty) diff -r b67379558a75 -r c5df59b4ae2d imagehandlingutilities/thumbnailmanager/inc/thumbnailmanagerconstants.h --- a/imagehandlingutilities/thumbnailmanager/inc/thumbnailmanagerconstants.h Tue Jul 06 14:37:18 2010 +0300 +++ b/imagehandlingutilities/thumbnailmanager/inc/thumbnailmanagerconstants.h Wed Aug 18 10:05:55 2010 +0300 @@ -178,7 +178,11 @@ _LIT8( KFlashVideoMime, "video/x-flv" ); _LIT( KFlashVideoExt, ".flv" ); _LIT8( KMatroskaVideoMime, "video/x-matroska" ); _LIT( KMatroskaVideoExt, ".mkv" ); _LIT8( KContactMime, "contact/x-vcard" ); _LIT( KContactExt, ".vcf" ); + _LIT( KNonEmbeddedArtExt, ".alb" ); + +_LIT8( KAlbumArtMime, "audio/albumart" ); _LIT( KAlbumArtExt, ".maa" ); + _LIT( KImageMime, "image/*" ); _LIT( KVideoMime, "video/*" ); _LIT( KAudioMime, "audio/*" ); diff -r b67379558a75 -r c5df59b4ae2d imagehandlingutilities/thumbnailmanager/plugins/audio/src/thumbnailaudioprovider.cpp --- a/imagehandlingutilities/thumbnailmanager/plugins/audio/src/thumbnailaudioprovider.cpp Tue Jul 06 14:37:18 2010 +0300 +++ b/imagehandlingutilities/thumbnailmanager/plugins/audio/src/thumbnailaudioprovider.cpp Wed Aug 18 10:05:55 2010 +0300 @@ -69,6 +69,7 @@ { TN_DEBUG1( "CThumbnailAudioProvider::~CThumbnailAudioProvider()" ); delete iImageDecoderv3; + iImageDecoderv3 = NULL; REComSession::DestroyedImplementation( iDtor_ID_Key ); } @@ -152,6 +153,7 @@ { TN_DEBUG1( "CThumbnailAudioProvider::GetThumbnailL() - buffer no mime" ); __ASSERT_DEBUG((EFalse), User::Panic(_L("CThumbnailAudioProvider::GetThumbnailL"), KErrNotSupported)); + User::Leave( KErrNotSupported ); } // --------------------------------------------------------------------------- diff -r b67379558a75 -r c5df59b4ae2d imagehandlingutilities/thumbnailmanager/plugins/audio/src/thumbnailimagedecoderv3.cpp --- a/imagehandlingutilities/thumbnailmanager/plugins/audio/src/thumbnailimagedecoderv3.cpp Tue Jul 06 14:37:18 2010 +0300 +++ b/imagehandlingutilities/thumbnailmanager/plugins/audio/src/thumbnailimagedecoderv3.cpp Wed Aug 18 10:05:55 2010 +0300 @@ -216,7 +216,7 @@ iDecoder = NULL; CImageDecoder::TOptions options = ( CImageDecoder::TOptions )( - CImageDecoder::EOptionNoDither | CImageDecoder::EPreferFastDecode | CImageDecoder::EOptionAlwaysThread ); + CImageDecoder::EOptionNoDither ); TRAPD( decErr, iDecoder = CExtJpegDecoder::DataNewL( CExtJpegDecoder::EHwImplementation, iFs, *iBuffer, options )); diff -r b67379558a75 -r c5df59b4ae2d imagehandlingutilities/thumbnailmanager/plugins/image/src/thumbnailimagedecoder.cpp --- a/imagehandlingutilities/thumbnailmanager/plugins/image/src/thumbnailimagedecoder.cpp Tue Jul 06 14:37:18 2010 +0300 +++ b/imagehandlingutilities/thumbnailmanager/plugins/image/src/thumbnailimagedecoder.cpp Wed Aug 18 10:05:55 2010 +0300 @@ -377,12 +377,12 @@ if ( aFlags == CThumbnailManager::EOptimizeForQuality ) { options = ( CImageDecoder::TOptions )( CImageDecoder - ::EOptionNoDither | CImageDecoder::EOptionAlwaysThread ); + ::EOptionNoDither ); } else { options = ( CImageDecoder::TOptions )( CImageDecoder - ::EOptionNoDither | CImageDecoder::EPreferFastDecode | CImageDecoder::EOptionAlwaysThread ); + ::EOptionNoDither | CImageDecoder::EPreferFastDecode ); } if ( IsSvg()) @@ -576,12 +576,12 @@ CImageDecoder::TOptions options; if ( aFlags == CThumbnailManager::EOptimizeForQuality ) { - options = ( CImageDecoder::TOptions )( CImageDecoder::EOptionNoDither | CImageDecoder::EOptionAlwaysThread ); + options = ( CImageDecoder::TOptions )( CImageDecoder::EOptionNoDither ); } else { options = ( CImageDecoder::TOptions )( CImageDecoder::EOptionNoDither | - CImageDecoder::EPreferFastDecode | CImageDecoder::EOptionAlwaysThread ); + CImageDecoder::EPreferFastDecode ); } TRAPD( err, iDecoder = CExtJpegDecoder::DataNewL( iFs, * iExifThumbImage, options )); diff -r b67379558a75 -r c5df59b4ae2d imagehandlingutilities/thumbnailmanager/plugins/image/src/thumbnailimagedecoderv2.cpp --- a/imagehandlingutilities/thumbnailmanager/plugins/image/src/thumbnailimagedecoderv2.cpp Tue Jul 06 14:37:18 2010 +0300 +++ b/imagehandlingutilities/thumbnailmanager/plugins/image/src/thumbnailimagedecoderv2.cpp Wed Aug 18 10:05:55 2010 +0300 @@ -170,7 +170,7 @@ iDecoder = NULL; CImageDecoder::TOptions options = ( CImageDecoder::TOptions )( - CImageDecoder::EOptionNoDither | CImageDecoder::EPreferFastDecode | CImageDecoder::EOptionAlwaysThread ); + CImageDecoder::EOptionNoDither ); TRAPD( decErr, iDecoder = CExtJpegDecoder::DataNewL( CExtJpegDecoder::EHwImplementation, iFs, *iBuffer, options )); diff -r b67379558a75 -r c5df59b4ae2d imagehandlingutilities/thumbnailmanager/plugins/image/src/thumbnailimageprovider.cpp --- a/imagehandlingutilities/thumbnailmanager/plugins/image/src/thumbnailimageprovider.cpp Tue Jul 06 14:37:18 2010 +0300 +++ b/imagehandlingutilities/thumbnailmanager/plugins/image/src/thumbnailimageprovider.cpp Wed Aug 18 10:05:55 2010 +0300 @@ -67,7 +67,9 @@ { TN_DEBUG1( "CThumbnailImageProvider::~CThumbnailImageProvider()" ); delete iImageDecoder; + iImageDecoder = NULL; delete iImageDecoderv2; + iImageDecoderv2 = NULL; REComSession::DestroyedImplementation( iDtor_ID_Key ); } diff -r b67379558a75 -r c5df59b4ae2d imagehandlingutilities/thumbnailmanager/thumbagdaemon/inc/thumbagprocessor.h --- a/imagehandlingutilities/thumbnailmanager/thumbagdaemon/inc/thumbagprocessor.h Tue Jul 06 14:37:18 2010 +0300 +++ b/imagehandlingutilities/thumbnailmanager/thumbagdaemon/inc/thumbagprocessor.h Wed Aug 18 10:05:55 2010 +0300 @@ -62,7 +62,8 @@ struct TThumbnailGenerationItem { - inline TThumbnailGenerationItem(): iItemId( KErrNotFound ), iItemType(EGenerationItemTypeUnknown), iItemAction(EGenerationItemActionAdd), iPlaceholder(EFalse), iUri(NULL){} + inline TThumbnailGenerationItem(): iItemId( KErrNotFound ), iItemType(EGenerationItemTypeUnknown), + iItemAction(EGenerationItemActionAdd), iPlaceholder(EFalse), iUri(NULL){} inline ~TThumbnailGenerationItem(){delete iUri; iUri = NULL;} TItemId iItemId; @@ -166,7 +167,9 @@ * @param aIDArray IDs for thumbnail creation * @param aForce pass ETrue if processor is forced to run without waiting harvesting complete */ - void AddToQueueL( TObserverNotificationType aType, TThumbnailGenerationItemType aItemType, const RArray& aIDArray, const RPointerArray& aObjectUriArray, TBool aPresent ); + void AddToQueueL( TObserverNotificationType aType, TThumbnailGenerationItemType aItemType, + const RArray& aIDArray, const RPointerArray& aObjectUriArray, + TBool aPresent ); /** * Calls Thumbnail Manager to create thumbnails diff -r b67379558a75 -r c5df59b4ae2d imagehandlingutilities/thumbnailmanager/thumbagdaemon/src/thumbagaudioobserver.cpp --- a/imagehandlingutilities/thumbnailmanager/thumbagdaemon/src/thumbagaudioobserver.cpp Tue Jul 06 14:37:18 2010 +0300 +++ b/imagehandlingutilities/thumbnailmanager/thumbagdaemon/src/thumbagaudioobserver.cpp Wed Aug 18 10:05:55 2010 +0300 @@ -308,18 +308,20 @@ // set observing conditions CMdELogicCondition* addCondition = CMdELogicCondition::NewLC( ELogicConditionOperatorAnd ); - addCondition->AddObjectConditionL( audioDef ); - CleanupStack::Pop( addCondition ); + CMdEObjectCondition& addObjectCondition = addCondition->AddObjectConditionL( audioDef ); + CleanupStack::PushL( &addObjectCondition ); CMdELogicCondition* modifyCondition = CMdELogicCondition::NewLC( ELogicConditionOperatorAnd ); - modifyCondition->AddObjectConditionL( audioDef ); - CleanupStack::Pop( modifyCondition ); + CMdEObjectCondition& modifyObjectCondition = modifyCondition->AddObjectConditionL( audioDef ); + CleanupStack::PushL( &modifyObjectCondition ); // add observer iMdESession->AddObjectObserverL( *this, addCondition, ENotifyAdd ); // modify observer iMdESession->AddObjectObserverL( *this, modifyCondition, ENotifyModify ); + + CleanupStack::Pop( 4, addCondition ); TN_DEBUG1( "CThumbAGAudioObserver::AddObserversL() - end" ); } diff -r b67379558a75 -r c5df59b4ae2d imagehandlingutilities/thumbnailmanager/thumbagdaemon/src/thumbagcameraobserver.cpp --- a/imagehandlingutilities/thumbnailmanager/thumbagdaemon/src/thumbagcameraobserver.cpp Tue Jul 06 14:37:18 2010 +0300 +++ b/imagehandlingutilities/thumbnailmanager/thumbagdaemon/src/thumbagcameraobserver.cpp Wed Aug 18 10:05:55 2010 +0300 @@ -147,7 +147,10 @@ iShutdown = ETrue; delete iMDSShutdownObserver; + iMDSShutdownObserver = NULL; + delete iShutdownObserver; + iShutdownObserver = NULL; if(iReconnect) { @@ -300,18 +303,20 @@ // set observing conditions CMdELogicCondition* addCondition = CMdELogicCondition::NewLC( ELogicConditionOperatorAnd ); - addCondition->AddPropertyConditionL( originPropDef, TMdEUintEqual(MdeConstants::Object::ECamera)); - CleanupStack::Pop( addCondition ); + CMdEPropertyCondition& addPropertyCondition = addCondition->AddPropertyConditionL( originPropDef, TMdEUintEqual(MdeConstants::Object::ECamera)); + CleanupStack::PushL( &addPropertyCondition ); CMdELogicCondition* modifyCondition = CMdELogicCondition::NewLC( ELogicConditionOperatorAnd ); - modifyCondition->AddPropertyConditionL( originPropDef, TMdEUintEqual(MdeConstants::Object::ECamera)); - CleanupStack::Pop( modifyCondition ); + CMdEPropertyCondition& modifyPropertyCondition = modifyCondition->AddPropertyConditionL( originPropDef, TMdEUintEqual(MdeConstants::Object::ECamera)); + CleanupStack::PushL( &modifyPropertyCondition ); // add observer iMdESession->AddObjectObserverL( *this, addCondition, ENotifyAdd ); // modify observer iMdESession->AddObjectObserverL( *this, modifyCondition, ENotifyModify ); + + CleanupStack::Pop( 4, addCondition ); TN_DEBUG1( "CThumbAGCameraObserver::AddObserversL() - end" ); } diff -r b67379558a75 -r c5df59b4ae2d imagehandlingutilities/thumbnailmanager/thumbagdaemon/src/thumbagdaemon.cpp --- a/imagehandlingutilities/thumbnailmanager/thumbagdaemon/src/thumbagdaemon.cpp Tue Jul 06 14:37:18 2010 +0300 +++ b/imagehandlingutilities/thumbnailmanager/thumbagdaemon/src/thumbagdaemon.cpp Wed Aug 18 10:05:55 2010 +0300 @@ -194,7 +194,10 @@ iAudioObserver = NULL; delete iMDSShutdownObserver; + iMDSShutdownObserver = NULL; + delete iShutdownObserver; + iShutdownObserver = NULL; if(iReconnect) { @@ -267,6 +270,7 @@ // comes here if server gets shut down delete server; + server = NULL; CleanupStack::PopAndDestroy( scheduler ); } @@ -538,6 +542,8 @@ TInt ret = rep->Get( KEnableDaemon, val ); delete rep; + rep = NULL; + TN_DEBUG3( "CThumbAGDaemon::DaemonEnabledL() - val == %d, ret == %d", val, ret ); return val; } @@ -579,6 +585,7 @@ { TRAP( result, CThumbAGDaemon::ThreadFunctionL()); delete cleanup; + cleanup = NULL; } if ( result != KErrNone ) diff -r b67379558a75 -r c5df59b4ae2d imagehandlingutilities/thumbnailmanager/thumbagdaemon/src/thumbagimageobserver.cpp --- a/imagehandlingutilities/thumbnailmanager/thumbagdaemon/src/thumbagimageobserver.cpp Tue Jul 06 14:37:18 2010 +0300 +++ b/imagehandlingutilities/thumbnailmanager/thumbagdaemon/src/thumbagimageobserver.cpp Wed Aug 18 10:05:55 2010 +0300 @@ -147,7 +147,10 @@ iShutdown = ETrue; delete iMDSShutdownObserver; + iMDSShutdownObserver = NULL; + delete iShutdownObserver; + iShutdownObserver = NULL; if(iReconnect) { @@ -287,21 +290,28 @@ // set observing conditions CMdELogicCondition* addCondition = CMdELogicCondition::NewLC( ELogicConditionOperatorAnd ); - addCondition->AddObjectConditionL( imageDef ); - addCondition->AddPropertyConditionL( originPropDef, TMdEUintNotEqual(MdeConstants::Object::ECamera)); - CleanupStack::Pop( addCondition ); + + CMdEObjectCondition& addObjectCondition = addCondition->AddObjectConditionL( imageDef ); + CleanupStack::PushL( &addObjectCondition ); + + CMdEPropertyCondition& addPropertyCondition = addCondition->AddPropertyConditionL( originPropDef, TMdEUintNotEqual(MdeConstants::Object::ECamera)); + CleanupStack::PushL( &addPropertyCondition ); CMdELogicCondition* modifyCondition = CMdELogicCondition::NewLC( ELogicConditionOperatorAnd ); - modifyCondition->AddObjectConditionL( imageDef ); - addCondition->AddPropertyConditionL( originPropDef, TMdEUintNotEqual(MdeConstants::Object::ECamera)); - CleanupStack::Pop( modifyCondition ); - + CMdEObjectCondition& modifyObjectCondition = modifyCondition->AddObjectConditionL( imageDef ); + CleanupStack::PushL( &modifyObjectCondition ); + + CMdEPropertyCondition& modifyPropertyCondition = modifyCondition->AddPropertyConditionL( originPropDef, TMdEUintNotEqual(MdeConstants::Object::ECamera)); + CleanupStack::PushL( &modifyPropertyCondition ); + // add observers iMdESession->AddObjectObserverL( *this, addCondition, ENotifyAdd ); // modify observer iMdESession->AddObjectObserverL( *this, modifyCondition, ENotifyModify ); - + + CleanupStack::Pop( 6, addCondition ); + TN_DEBUG1( "CThumbAGImageObserver::AddObserversL() - end" ); } diff -r b67379558a75 -r c5df59b4ae2d imagehandlingutilities/thumbnailmanager/thumbagdaemon/src/thumbagprocessor.cpp --- a/imagehandlingutilities/thumbnailmanager/thumbagdaemon/src/thumbagprocessor.cpp Tue Jul 06 14:37:18 2010 +0300 +++ b/imagehandlingutilities/thumbnailmanager/thumbagdaemon/src/thumbagprocessor.cpp Wed Aug 18 10:05:55 2010 +0300 @@ -958,39 +958,47 @@ CMdEObjectDef& objDef = iDefNamespace->GetObjectDefL( MdeConstants::Object::KBaseObject ); iQuery = iMdESession->NewObjectQueryL( *iDefNamespace, objDef, this ); - iQuery->SetResultMode( EQueryResultModeItem ); + + if(iQuery) + { + iQuery->SetResultMode( EQueryResultModeItem ); - CMdELogicCondition& rootCondition = iQuery->Conditions(); - rootCondition.SetOperator( ELogicConditionOperatorAnd ); + CMdELogicCondition& rootCondition = iQuery->Conditions(); + rootCondition.SetOperator( ELogicConditionOperatorAnd ); - // add IDs - CleanupClosePushL( iQueryQueue ); - rootCondition.AddObjectConditionL( iQueryQueue ); - CleanupStack::Pop( &iQueryQueue ); + // add IDs + CleanupClosePushL( iQueryQueue ); + rootCondition.AddObjectConditionL( iQueryQueue ); + CleanupStack::Pop( &iQueryQueue ); - // add object type conditions - if (!(iModify || iUnknown)) - { - CMdELogicCondition& objDefCondition = rootCondition.AddLogicConditionL( ELogicConditionOperatorOr ); + // add object type conditions + if (!(iModify || iUnknown)) + { + CMdELogicCondition& objDefCondition = rootCondition.AddLogicConditionL( ELogicConditionOperatorOr ); - if (iAutoImage) - { - CMdEObjectDef& imageDef = iDefNamespace->GetObjectDefL( MdeConstants::Image::KImageObject ); - objDefCondition.AddObjectConditionL( imageDef ); - } - if (iAutoVideo) - { - CMdEObjectDef& videoDef = iDefNamespace->GetObjectDefL( MdeConstants::Video::KVideoObject ); - objDefCondition.AddObjectConditionL( videoDef ); - } - if (iAutoAudio) - { - CMdEObjectDef& audioDef = iDefNamespace->GetObjectDefL( MdeConstants::Audio::KAudioObject ); - objDefCondition.AddObjectConditionL( audioDef ); - } - } + if (iAutoImage) + { + CMdEObjectDef& imageDef = iDefNamespace->GetObjectDefL( MdeConstants::Image::KImageObject ); + objDefCondition.AddObjectConditionL( imageDef ); + } + if (iAutoVideo) + { + CMdEObjectDef& videoDef = iDefNamespace->GetObjectDefL( MdeConstants::Video::KVideoObject ); + objDefCondition.AddObjectConditionL( videoDef ); + } + if (iAutoAudio) + { + CMdEObjectDef& audioDef = iDefNamespace->GetObjectDefL( MdeConstants::Audio::KAudioObject ); + objDefCondition.AddObjectConditionL( audioDef ); + } + } - iQuery->FindL(); + iQuery->FindL(); + } + else + { + iQueryActive = EFalse; + } TN_DEBUG1( "CThumbAGProcessor::QueryL() - end" ); } @@ -1036,25 +1044,33 @@ CMdEObjectDef& objDef = iDefNamespace->GetObjectDefL( MdeConstants::Object::KBaseObject); iQueryPlaceholders = iMdESession->NewObjectQueryL( *iDefNamespace, objDef, this ); - iQueryPlaceholders->SetResultMode( EQueryResultModeItem ); - - CMdELogicCondition& rootCondition = iQueryPlaceholders->Conditions(); - rootCondition.SetOperator( ELogicConditionOperatorOr ); - - CMdEObjectCondition& imagePHObjectCondition = rootCondition.AddObjectConditionL(imageObjDef); - imagePHObjectCondition.SetPlaceholderOnly( ETrue ); - imagePHObjectCondition.SetNotPresent( aPresent ); - - CMdEObjectCondition& videoPHObjectCondition = rootCondition.AddObjectConditionL(videoObjDef); - videoPHObjectCondition.SetPlaceholderOnly( ETrue ); - videoPHObjectCondition.SetNotPresent( aPresent ); - - CMdEObjectCondition& audioPHObjectCondition = rootCondition.AddObjectConditionL(audioObjDef); - audioPHObjectCondition.SetPlaceholderOnly( ETrue ); - audioPHObjectCondition.SetNotPresent( aPresent ); - - iQueryPlaceholders->FindL(KMaxTInt, KMaxQueryBatchSize); - + if(iQueryPlaceholders) + { + iQueryPlaceholders->SetResultMode( EQueryResultModeItem ); + + CMdELogicCondition& rootCondition = iQueryPlaceholders->Conditions(); + rootCondition.SetOperator( ELogicConditionOperatorOr ); + + CMdEObjectCondition& imagePHObjectCondition = rootCondition.AddObjectConditionL(imageObjDef); + CleanupStack::PushL( &imagePHObjectCondition ); + imagePHObjectCondition.SetPlaceholderOnly( ETrue ); + imagePHObjectCondition.SetNotPresent( aPresent ); + + CMdEObjectCondition& videoPHObjectCondition = rootCondition.AddObjectConditionL(videoObjDef); + CleanupStack::PushL( &videoPHObjectCondition ); + videoPHObjectCondition.SetPlaceholderOnly( ETrue ); + videoPHObjectCondition.SetNotPresent( aPresent ); + + CMdEObjectCondition& audioPHObjectCondition = rootCondition.AddObjectConditionL(audioObjDef); + CleanupStack::PushL( &audioPHObjectCondition ); + audioPHObjectCondition.SetPlaceholderOnly( ETrue ); + audioPHObjectCondition.SetNotPresent( aPresent ); + + iQueryPlaceholders->FindL(KMdEQueryDefaultMaxCount, KMaxQueryBatchSize); + + CleanupStack::Pop(3, &imagePHObjectCondition ); + } + TN_DEBUG1( "CThumbAGProcessor::QueryPlaceholdersL - end" ); } @@ -1183,7 +1199,7 @@ } #endif - if( iForceRun || iForegroundRun ) + if( (iForceRun || iForegroundRun ) && !iMountTimer->IsActive() ) { TN_DEBUG1( "void CThumbAGProcessor::RunL() skip idle detection!"); CancelTimeout(); @@ -1288,6 +1304,52 @@ QueryL( EGenerationItemActionResolveType ); } + else if ( iDeleteItemCount > 0 ) + { + TN_DEBUG1( "void CThumbAGProcessor::RunL() delete thumbnails"); + // delete thumbs by URI + __ASSERT_DEBUG((iTMSession), User::Panic(_L("CThumbAGProcessor::RunL() !iTMSession "), KErrBadHandle)); + if(iTMSession) + { + TInt itemIndex(KErrNotFound); + + for(TInt i=0;i= 0) + { + if(!iGenerationQueue[itemIndex].iUri) + { + //URI is invalid + TN_DEBUG1( "void CThumbAGProcessor::RunL() unable to delete URI inbalid"); + iGenerationQueue.Remove( itemIndex ); + ActivateAO(); + return; + } + + TN_DEBUG2( "void CThumbAGProcessor::RunL() delete %S", iGenerationQueue[itemIndex].iUri); + CThumbnailObjectSource* source = NULL; + TRAPD(err, source = CThumbnailObjectSource::NewL( *iGenerationQueue[itemIndex].iUri, KNullDesC)); + + if(err == KErrNone) + { + iTMSession->DeleteThumbnails( *source ); + } + delete source; + + delete iGenerationQueue[itemIndex].iUri; + iGenerationQueue[itemIndex].iUri = NULL; + iGenerationQueue.Remove( itemIndex ); + + iActiveCount++; + } + } + } // no items in query queue, start new // select queue to process, priority by type else if ( iModifyItemCount > 0 ) @@ -1313,54 +1375,6 @@ QueryL( EGenerationItemActionAdd ); } - else if ( iDeleteItemCount > 0 ) - { - TN_DEBUG1( "void CThumbAGProcessor::RunL() delete thumbnails"); - i2ndRound = EFalse; - iUnknown = EFalse; - // delete thumbs by URI - __ASSERT_DEBUG((iTMSession), User::Panic(_L("CThumbAGProcessor::RunL() !iTMSession "), KErrBadHandle)); - if(iTMSession) - { - TInt itemIndex(KErrNotFound); - - for(TInt i=0;i= 0) - { - if(!iGenerationQueue[itemIndex].iUri) - { - //URI is invalid - TN_DEBUG1( "void CThumbAGProcessor::RunL() unable to delete URI inbalid"); - iGenerationQueue.Remove( itemIndex ); - ActivateAO(); - return; - } - - TN_DEBUG2( "void CThumbAGProcessor::RunL() delete %S", iGenerationQueue[itemIndex].iUri); - CThumbnailObjectSource* source = NULL; - TRAPD(err, source = CThumbnailObjectSource::NewL( *iGenerationQueue[itemIndex].iUri, KNullDesC)); - - if(err == KErrNone) - { - iTMSession->DeleteThumbnails( *source ); - } - delete source; - - delete iGenerationQueue[itemIndex].iUri; - iGenerationQueue[itemIndex].iUri = NULL; - iGenerationQueue.Remove( itemIndex ); - - iActiveCount++; - } - } - } else if( i2ndAddItemCount > 0) { TN_DEBUG1( "void CThumbAGProcessor::RunL() update 2nd round thumbnails"); @@ -1687,8 +1701,9 @@ } //check if forced run needs to continue - if ( iModifyItemCount || iUnknownItemCount > 0 ) + if ( (iModifyItemCount > 0 || iDeleteItemCount > 0 || iUnknownItemCount > 0) && !iMountTimer->IsActive()) { + TN_DEBUG1( "CThumbAGProcessor::ActivateAO() - forced run"); SetForceRun( ETrue ); } else @@ -1697,7 +1712,7 @@ SetForceRun( EFalse ); } - if( !IsActive() && !iShutdown && ((iActiveCount == 0 && !iQueryActive) || iForceRun )) + if( !IsActive() && !iShutdown && ((iActiveCount < KMaxDaemonRequests && !iQueryActive) || iForceRun )) { TN_DEBUG1( "CThumbAGProcessor::ActivateAO() - Activated"); SetActive(); @@ -1880,12 +1895,17 @@ rootCondition.SetOperator( ELogicConditionOperatorOr ); CMdEObjectCondition& imageObjectCondition = rootCondition.AddObjectConditionL(imageObjDef); + CleanupStack::PushL( &imageObjectCondition ); CMdEObjectCondition& videoObjectCondition = rootCondition.AddObjectConditionL(videoObjDef); + CleanupStack::PushL( &videoObjectCondition ); CMdEObjectCondition& audioObjectCondition = rootCondition.AddObjectConditionL(audioObjDef); + CleanupStack::PushL( &audioObjectCondition ); - iQueryAllItems->FindL(KMaxTInt, KMaxQueryBatchSize); + iQueryAllItems->FindL(KMdEQueryDefaultMaxCount, KMaxQueryBatchSize); + + CleanupStack::Pop(3, &imageObjectCondition); TN_DEBUG1( "CThumbAGProcessor::QueryAllItemsL - end" ); } @@ -2018,8 +2038,11 @@ TN_DEBUG2( "CThumbAGProcessor::FormatNotification(%d)", aFormat ); iFormatting = aFormat; + if(!aFormat) { + //force update + UpdatePSValues(EFalse, ETrue); ActivateAO(); } } @@ -2128,9 +2151,11 @@ } } + TN_DEBUG2( "CThumbAGProcessor::UpdatePSValues() iPreviousItemsLeft == %d", iPreviousItemsLeft); + if( itemsLeft != iPreviousItemsLeft) { - TN_DEBUG2( "CThumbAGProcessor::UpdatePSValues() update KItemsleft == %d", itemsLeft); + TN_DEBUG2( "CThumbAGProcessor::UpdatePSValues() Set KItemsleft == %d", itemsLeft); iPreviousItemsLeft = itemsLeft; TInt ret = RProperty::Set(KTAGDPSNotification, KItemsleft, itemsLeft ); diff -r b67379558a75 -r c5df59b4ae2d imagehandlingutilities/thumbnailmanager/thumbagdaemon/src/thumbagvideoobserver.cpp --- a/imagehandlingutilities/thumbnailmanager/thumbagdaemon/src/thumbagvideoobserver.cpp Tue Jul 06 14:37:18 2010 +0300 +++ b/imagehandlingutilities/thumbnailmanager/thumbagdaemon/src/thumbagvideoobserver.cpp Wed Aug 18 10:05:55 2010 +0300 @@ -301,20 +301,27 @@ // set observing conditions CMdELogicCondition* addCondition = CMdELogicCondition::NewLC( ELogicConditionOperatorAnd ); - addCondition->AddObjectConditionL( videoDef ); - addCondition->AddPropertyConditionL( originPropDef, TMdEUintNotEqual(MdeConstants::Object::ECamera)); - CleanupStack::Pop( addCondition ); + + CMdEObjectCondition& addObjectCondition = addCondition->AddObjectConditionL( videoDef ); + CleanupStack::PushL( &addObjectCondition ); + + CMdEPropertyCondition& addPropertyCondition = addCondition->AddPropertyConditionL( originPropDef, TMdEUintNotEqual(MdeConstants::Object::ECamera)); + CleanupStack::PushL( &addPropertyCondition ); CMdELogicCondition* modifyCondition = CMdELogicCondition::NewLC( ELogicConditionOperatorAnd ); - modifyCondition->AddObjectConditionL( videoDef ); - addCondition->AddPropertyConditionL( originPropDef, TMdEUintNotEqual(MdeConstants::Object::ECamera)); - CleanupStack::Pop( modifyCondition ); + CMdEObjectCondition& modifyObjectCondition = modifyCondition->AddObjectConditionL( videoDef ); + CleanupStack::PushL( &modifyObjectCondition ); + + CMdEPropertyCondition& modifyPropertyCondition = modifyCondition->AddPropertyConditionL( originPropDef, TMdEUintNotEqual(MdeConstants::Object::ECamera)); + CleanupStack::PushL( &modifyPropertyCondition ); // add observer iMdESession->AddObjectObserverL( *this, addCondition, ENotifyAdd ); // modify observer iMdESession->AddObjectObserverL( *this, modifyCondition, ENotifyModify ); + + CleanupStack::Pop( 6, addCondition ); TN_DEBUG1( "CThumbAGVideoObserver::AddObserversL() - end" ); } diff -r b67379558a75 -r c5df59b4ae2d imagehandlingutilities/thumbnailmanager/thumbnailclient/src/thumbnaildataimpl.cpp --- a/imagehandlingutilities/thumbnailmanager/thumbnailclient/src/thumbnaildataimpl.cpp Tue Jul 06 14:37:18 2010 +0300 +++ b/imagehandlingutilities/thumbnailmanager/thumbnailclient/src/thumbnaildataimpl.cpp Wed Aug 18 10:05:55 2010 +0300 @@ -41,6 +41,7 @@ CThumbnailDataImpl::~CThumbnailDataImpl() { delete iBitmap; + iBitmap = NULL; iClientData = NULL; } diff -r b67379558a75 -r c5df59b4ae2d imagehandlingutilities/thumbnailmanager/thumbnailclient/src/thumbnailrequestactive.cpp --- a/imagehandlingutilities/thumbnailmanager/thumbnailclient/src/thumbnailrequestactive.cpp Tue Jul 06 14:37:18 2010 +0300 +++ b/imagehandlingutilities/thumbnailmanager/thumbnailclient/src/thumbnailrequestactive.cpp Wed Aug 18 10:05:55 2010 +0300 @@ -47,6 +47,7 @@ { iTimer->Cancel(); } + delete iTimer; iTimer = NULL; @@ -633,7 +634,7 @@ } } #endif - TN_DEBUG2( "CThumbnaiRequestActive::HandleError() - iObserver.ThumbnailReady %d", iParams.iRequestId ); + TN_DEBUG3( "CThumbnaiRequestActive::HandleError() - iObserver.ThumbnailReady req=%d err=%d", iParams.iRequestId, iError ); iObserver.ThumbnailReady( iError, *iCallbackThumbnail, iParams.iRequestId ); } diff -r b67379558a75 -r c5df59b4ae2d imagehandlingutilities/thumbnailmanager/thumbnailclient/src/thumbnailrequestqueue.cpp --- a/imagehandlingutilities/thumbnailmanager/thumbnailclient/src/thumbnailrequestqueue.cpp Tue Jul 06 14:37:18 2010 +0300 +++ b/imagehandlingutilities/thumbnailmanager/thumbnailclient/src/thumbnailrequestqueue.cpp Wed Aug 18 10:05:55 2010 +0300 @@ -163,6 +163,7 @@ // delete completed task TN_DEBUG3( "CThumbnailRequestQueue::RemoveCompleted() - deleted id = %d (0x%08x)", request->RequestId(), request); delete request; + request = NULL; iRequests.Remove( i ); } } @@ -203,6 +204,7 @@ else { delete request; + request = NULL; iRequests.Remove( i ); TN_DEBUG2( "CThumbnailRequestQueue::CancelRequest() - removed request ID: %d", aRequestId); diff -r b67379558a75 -r c5df59b4ae2d imagehandlingutilities/thumbnailmanager/thumbnailmanagerqt/tsrc/test_qtnmwrapper.cpp --- a/imagehandlingutilities/thumbnailmanager/thumbnailmanagerqt/tsrc/test_qtnmwrapper.cpp Tue Jul 06 14:37:18 2010 +0300 +++ b/imagehandlingutilities/thumbnailmanager/thumbnailmanagerqt/tsrc/test_qtnmwrapper.cpp Wed Aug 18 10:05:55 2010 +0300 @@ -470,7 +470,25 @@ return QTest::qExec(&tc, c, v); } #else - QTEST_MAIN(TestThumbnailManager) + int main (int argc, char* argv[]) + { + for ( int i=0;i +#include NONSHARABLE_CLASS( CThumbnailFetchedChecker ): public CBase { @@ -25,8 +26,10 @@ static CThumbnailFetchedChecker* NewL(); virtual ~CThumbnailFetchedChecker(); public: - TInt LastFetchResult( const TDesC& aUri ); - void SetFetchResult( const TDesC& aUri, TInt aError ); + TInt LastFetchResult( const TDesC& aUri, const TThumbnailSize aThumbnailSize ); + void SetFetchResult( const TDesC& aUri, const TThumbnailSize aThumbnailSize, TInt aError ); + void DeleteFetchResult( const TDesC& aUri ); + void RenameFetchResultL( const TDesC& aNewUri, const TDesC& aOldUri ); void Reset(); private: CThumbnailFetchedChecker(); @@ -34,13 +37,15 @@ NONSHARABLE_CLASS( CEntry ) : public CBase { public: - static CEntry* NewL( const TDesC& aUri, TInt aError ); - static TInt FindCB( const TDesC* aUri, const CEntry& aEntry ); + static CEntry* NewL( const TDesC& aUri, const TThumbnailSize aThumbnailSize, TInt aError ); + static TInt FindCB( const CEntry& aEntry1, const CEntry& aEntry ); + static TInt FindCBUri( const TDesC* aUri, const CEntry& aEntry ); static TInt InsertCB( const CEntry& aEntry1, const CEntry& aEntry2 ); CEntry(); virtual ~CEntry(); public: HBufC* iUri; + TInt32 iSize; TInt iError; }; diff -r b67379558a75 -r c5df59b4ae2d imagehandlingutilities/thumbnailmanager/thumbnailserver/inc/thumbnailserver.h --- a/imagehandlingutilities/thumbnailmanager/thumbnailserver/inc/thumbnailserver.h Tue Jul 06 14:37:18 2010 +0300 +++ b/imagehandlingutilities/thumbnailmanager/thumbnailserver/inc/thumbnailserver.h Wed Aug 18 10:05:55 2010 +0300 @@ -63,7 +63,7 @@ while ( item ) { - delete * item; + delete *item; item = iter.NextValue(); } aHashMap.Close(); diff -r b67379558a75 -r c5df59b4ae2d imagehandlingutilities/thumbnailmanager/thumbnailserver/inc/thumbnailsql.h --- a/imagehandlingutilities/thumbnailmanager/thumbnailserver/inc/thumbnailsql.h Tue Jul 06 14:37:18 2010 +0300 +++ b/imagehandlingutilities/thumbnailmanager/thumbnailserver/inc/thumbnailsql.h Wed Aug 18 10:05:55 2010 +0300 @@ -130,10 +130,6 @@ _LIT8 ( KGetInfoRowID, "SELECT MAX (ThumbnailInfo.rowID) FROM ThumbnailInfo" ); _LIT8 ( KGetDataRowID, "SELECT MAX (ThumbnailInfoData.rowID) FROM ThumbnailInfoData" ); -// counts -_LIT8 ( KGetInfoCount, "SELECT COUNT(*) FROM ThumbnailInfo" ); -_LIT8 ( KGetInfoDataCount, "SELECT COUNT(*) FROM ThumbnailInfoData" ); - // flush _LIT8( KThumbnailMoveFromTempInfoToMainTable, "INSERT INTO ThumbnailInfo SELECT * FROM TempThumbnailInfo;"); _LIT8( KThumbnailMoveFromTempDataToMainTable, "INSERT INTO ThumbnailInfoData SELECT * FROM TempThumbnailInfoData;"); diff -r b67379558a75 -r c5df59b4ae2d imagehandlingutilities/thumbnailmanager/thumbnailserver/inc/thumbnailstore.h --- a/imagehandlingutilities/thumbnailmanager/thumbnailserver/inc/thumbnailstore.h Tue Jul 06 14:37:18 2010 +0300 +++ b/imagehandlingutilities/thumbnailmanager/thumbnailserver/inc/thumbnailstore.h Wed Aug 18 10:05:55 2010 +0300 @@ -208,9 +208,10 @@ * @param aFs File server. * @param aDrive Drive the store used for * @param aCenter Pointer to cenrep data handler + * @param aReadOnly flag is store write protected * @return New CThumbnailStore instance. */ - static CThumbnailStore* NewL( RFs& aFs, TInt aDrive, TDesC& aImei, CThumbnailServer* aServer ); + static CThumbnailStore* NewL( RFs& aFs, TInt aDrive, TDesC& aImei, CThumbnailServer* aServer, const TBool aReadOnly ); /** * Destructor @@ -358,6 +359,11 @@ * @contains indication whether file modified */ TBool CheckModifiedByPathL( const TDesC& aPath, const TInt64 aModified, TBool& modifiedChanged); + + /** + * @return TBool is store write protected + */ + TBool IsReadOnly(); private: /** @@ -366,9 +372,10 @@ * @since S60 v5.0 * @param aFs File server. * @param aDrive Drive the store used for + * @param aReadOnly set flag if store is write protected * @return New CThumbnailStore instance. */ - CThumbnailStore( RFs& aFs, TInt aDrive, TDesC& aImei, CThumbnailServer* aServer); + CThumbnailStore( RFs& aFs, TInt aDrive, TDesC& aImei, CThumbnailServer* aServer, const TBool aReadOnly); /** * Symbian 2nd phase constructor can leave. @@ -648,6 +655,11 @@ * How long previous flush took ms */ TInt iPreviousFlushDelay; + + /** + * is store write protected + */ + TBool iReadOnly; }; // End of File diff -r b67379558a75 -r c5df59b4ae2d imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailcenrep.cpp --- a/imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailcenrep.cpp Tue Jul 06 14:37:18 2010 +0300 +++ b/imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailcenrep.cpp Wed Aug 18 10:05:55 2010 +0300 @@ -113,7 +113,9 @@ { iPersistentSizes.Close(); delete iAutoCreate; + iAutoCreate = NULL; delete iRepository; + iRepository = NULL; } // --------------------------------------------------------------------------- @@ -210,23 +212,52 @@ iPersistentSizes.AppendL( TThumbnailPersistentSize( EAudioFullScreenThumbnailSize, TSize( xSize, ySize ), flags, static_cast (raw_mode), format, autoCreate, TThumbnailPersistentSize::EFullscreen )); - User::LeaveIfError( iRepository->Get( KSizeContactGridWidth, xSize )); - User::LeaveIfError( iRepository->Get( KSizeContactGridHeight, ySize )); - User::LeaveIfError( iRepository->Get( KAutoCreateContactGrid, autoCreate )); +// Contact TN, set default values if not found + if(iRepository->Get( KSizeContactGridWidth, xSize ) != KErrNone) + { + xSize = 54; + } + if( iRepository->Get( KSizeContactGridHeight, ySize ) != KErrNone) + { + ySize = 54; + } + + if( iRepository->Get( KAutoCreateContactGrid, autoCreate ) != KErrNone) + { + autoCreate = 1; + } iPersistentSizes.AppendL( TThumbnailPersistentSize( EContactGridThumbnailSize, TSize( xSize, ySize ), KGridAndListThumbnailCropped, static_cast (raw_mode), format, autoCreate, TThumbnailPersistentSize::EGrid )); - User::LeaveIfError( iRepository->Get( KSizeContactListWidth, xSize )); - User::LeaveIfError( iRepository->Get( KSizeContactListHeight, ySize )); - User::LeaveIfError( iRepository->Get( KAutoCreateContactList, autoCreate )); + if( iRepository->Get( KSizeContactListWidth, xSize ) != KErrNone) + { + xSize = 64; + } + if( iRepository->Get( KSizeContactListHeight, ySize ) != KErrNone) + { + ySize = 64; + } + if( iRepository->Get( KAutoCreateContactList, autoCreate ) != KErrNone) + { + autoCreate = 1; + } iPersistentSizes.AppendL( TThumbnailPersistentSize( EContactListThumbnailSize, TSize( xSize, ySize ), KGridAndListThumbnailCropped, static_cast (raw_mode), format, autoCreate, TThumbnailPersistentSize::EList )); - User::LeaveIfError( iRepository->Get( KSizeContactFullscreenWidth, xSize )); - User::LeaveIfError( iRepository->Get( KSizeContactFullscreenHeight, ySize )); - User::LeaveIfError( iRepository->Get( KAutoCreateContactFullscreen, autoCreate )); + if( iRepository->Get( KSizeContactFullscreenWidth, xSize ) != KErrNone) + { + xSize = 250; + } + if( iRepository->Get( KSizeContactFullscreenHeight, ySize ) != KErrNone) + { + ySize = 250; + } + if( iRepository->Get( KAutoCreateContactFullscreen, autoCreate) != KErrNone) + { + autoCreate = 1; + } iPersistentSizes.AppendL( TThumbnailPersistentSize( EContactFullScreenThumbnailSize, TSize( xSize, ySize ), flags, static_cast (raw_mode), format, autoCreate, TThumbnailPersistentSize::EFullscreen )); @@ -243,9 +274,19 @@ User::LeaveIfError( iRepository->Get( KAutoCreateAudioGrid, iAutoCreate->iAudioGrid )); User::LeaveIfError( iRepository->Get( KAutoCreateAudioList, iAutoCreate->iAudioList )); User::LeaveIfError( iRepository->Get( KAutoCreateAudioFullscreen, iAutoCreate->iAudioFullscreen )); - User::LeaveIfError( iRepository->Get( KAutoCreateContactGrid, iAutoCreate->iContactGrid )); - User::LeaveIfError( iRepository->Get( KAutoCreateContactList, iAutoCreate->iContactList )); - User::LeaveIfError( iRepository->Get( KAutoCreateContactFullscreen, iAutoCreate->iContactFullscreen )); + + if( iRepository->Get( KAutoCreateContactGrid, iAutoCreate->iContactGrid ) != KErrNone ) + { + iAutoCreate->iContactGrid = 1; + } + if( iRepository->Get( KAutoCreateContactList, iAutoCreate->iContactList ) != KErrNone ) + { + iAutoCreate->iContactList = 1; + } + if( iRepository->Get( KAutoCreateContactFullscreen, iAutoCreate->iContactFullscreen ) != KErrNone ) + { + iAutoCreate->iContactFullscreen = 1; + } } // --------------------------------------------------------------------------- diff -r b67379558a75 -r c5df59b4ae2d imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailfetchedchecker.cpp --- a/imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailfetchedchecker.cpp Tue Jul 06 14:37:18 2010 +0300 +++ b/imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailfetchedchecker.cpp Wed Aug 18 10:05:55 2010 +0300 @@ -16,6 +16,7 @@ */ #include "thumbnailfetchedchecker.h" +#include "thumbnaillog.h" const int KMaxStoredEntries = 100; @@ -49,13 +50,27 @@ // CThumbnailFetchedChecker::LastFetchResult() // ----------------------------------------------------------------------------- // -TInt CThumbnailFetchedChecker::LastFetchResult( const TDesC& aUri ) +TInt CThumbnailFetchedChecker::LastFetchResult( const TDesC& aUri, const TThumbnailSize aThumbnailSize ) { - TInt i = iNotFetched.FindInOrder( aUri, CEntry::FindCB ); - if ( i >= 0 && i < iNotFetched.Count() ) + TN_DEBUG3( "CThumbnailFetchedChecker::LastFetchResult(aUri=%S aThumbnailSize=%d)", &aUri, aThumbnailSize); + + CEntry* entry = NULL; + TRAPD( err, entry = CEntry::NewL( aUri, aThumbnailSize, KErrNone ) ); + if ( !err && entry ) { - return iNotFetched[ i ]->iError; + TInt ret = iNotFetched.FindInOrder( entry, CEntry::FindCB ); + if ( ret != KErrNotFound ) + { + TN_DEBUG1( "CThumbnailFetchedChecker::LastFetchResult() -> error found"); + delete entry; + entry = NULL; + return iNotFetched[ ret ]->iError; + } } + + delete entry; + entry = NULL; + return KErrNone; } @@ -63,31 +78,44 @@ // CThumbnailFetchedChecker::SetFetchResult() // ----------------------------------------------------------------------------- // -void CThumbnailFetchedChecker::SetFetchResult( const TDesC& aUri, TInt aError ) +void CThumbnailFetchedChecker::SetFetchResult( const TDesC& aUri, const TThumbnailSize aThumbnailSize, TInt aError ) { + TN_DEBUG4( "CThumbnailFetchedChecker::SetFetchResult(aUri=%S aThumbnailSize=%d aError=%d)", &aUri, aThumbnailSize, aError); if ( aError == KErrNone ) { - // Do not store successful results - TInt i = iNotFetched.FindInOrder( aUri, CEntry::FindCB ); - if ( i >= 0 && i < iNotFetched.Count() ) + // Remove successful results from store + CEntry* entry = NULL; + TRAPD( err, entry = CEntry::NewL( aUri, aThumbnailSize, aError ) ); + if ( !err && entry ) { - delete iNotFetched[ i ]; - iNotFetched.Remove( i ); + TInt i = iNotFetched.FindInOrder( entry, CEntry::FindCB ); + if ( i >= 0 ) + { + TN_DEBUG2( "CThumbnailFetchedChecker::LastFetchResult() -> Remove successful results from store %d", iNotFetched.Count() ); + delete iNotFetched[ i ]; + iNotFetched[ i ] = NULL; + iNotFetched.Remove( i ); + } } + entry = NULL; + delete entry; } else { + // Add or update CEntry* entry = NULL; - TRAPD( err, entry = CEntry::NewL( aUri, aError ) ); + TRAPD( err, entry = CEntry::NewL( aUri, aThumbnailSize, aError ) ); if ( !err && entry ) { err = iNotFetched.Find( entry ); if ( err != KErrNotFound ) { - TInt i = iNotFetched.FindInOrder( aUri, CEntry::FindCB ); - if ( i >= 0 && i < iNotFetched.Count() ) + // update existing fetch result + TInt i = iNotFetched.FindInOrder( entry, CEntry::FindCB ); + if ( i >= 0 ) { + TN_DEBUG1( "CThumbnailFetchedChecker::LastFetchResult() -> Update fetched tn error" ); iNotFetched[ i ]->iError = aError; } } @@ -95,9 +123,11 @@ { if( iNotFetched.Count() < KMaxStoredEntries ) { + // insert new fetch result TInt err = iNotFetched.InsertInOrder( entry, CEntry::InsertCB ); if ( err == KErrNone ) { + TN_DEBUG2( "CThumbnailFetchedChecker::LastFetchResult() -> Inserted new fetched tn error %d", iNotFetched.Count()); entry = NULL; // owned by array now } } @@ -110,25 +140,77 @@ } // ----------------------------------------------------------------------------- +// CThumbnailFetchedChecker::DeleteFetchResult() +// ----------------------------------------------------------------------------- +// +void CThumbnailFetchedChecker::DeleteFetchResult( const TDesC& aUri ) + { + TN_DEBUG2( "CThumbnailFetchedChecker::DeleteFetchResult(%S)", &aUri); + // delete all entries of passed uri + TInt ret; + do + { + ret = iNotFetched.FindInOrder( aUri, CEntry::FindCBUri ); + if ( ret >= 0 ) + { + TN_DEBUG1( "CThumbnailFetchedChecker::DeleteFetchResult() -> Deteled URI from fetched list" ); + delete iNotFetched[ ret ]; + iNotFetched[ ret ] = NULL; + iNotFetched.Remove( ret ); + } + } + while(ret != KErrNotFound ); + + } + +// ----------------------------------------------------------------------------- +// CThumbnailFetchedChecker::LastFetchResult() +// ----------------------------------------------------------------------------- +// +void CThumbnailFetchedChecker::RenameFetchResultL( const TDesC& aNewUri, const TDesC& aOldUri ) + { + TN_DEBUG3( "CThumbnailFetchedChecker::RenameFetchResult(aNewUri=%S aOldUri=%S)", &aNewUri, &aOldUri); + // change every occurence of passed uri + TInt ret; + do + { + ret = iNotFetched.FindInOrder( aOldUri, CEntry::FindCBUri ); + if ( ret >= 0 ) + { + delete iNotFetched[ ret ]->iUri; + iNotFetched[ ret ]->iUri = NULL; + + iNotFetched[ ret ]->iUri = aNewUri.AllocL(); + TN_DEBUG1( "CThumbnailFetchedChecker::RenameeFetchResult() -> Renamed URI in fetched list" ); + } + } + while(ret != KErrNotFound ); + + } + +// ----------------------------------------------------------------------------- // CThumbnailFetchedChecker::Reset() // ----------------------------------------------------------------------------- // void CThumbnailFetchedChecker::Reset() { + TN_DEBUG1( "CThumbnailFetchedChecker::Reset()"); iNotFetched.ResetAndDestroy(); } // ----------------------------------------------------------------------------- -// CThumbnailFetchedChecker::CEntry::New() +// CThumbnailFetchedChecker::CEntry::NewL() // ----------------------------------------------------------------------------- // CThumbnailFetchedChecker::CEntry* CThumbnailFetchedChecker::CEntry::NewL( - const TDesC& aUri, TInt aError ) + const TDesC& aUri, const TThumbnailSize aThumbnailSize, TInt aError ) { + TN_DEBUG4( "CThumbnailFetchedChecker::CEntry::NewL(aUri=%S aThumbnailSize=%d aError=%d)", &aUri, aThumbnailSize, aError); CEntry* self = new (ELeave) CEntry(); if ( self ) { - self->iUri = aUri.Alloc(); + self->iUri = aUri.AllocL(); + self->iSize = aThumbnailSize; self->iError = aError; if ( !self->iUri ) { @@ -144,8 +226,28 @@ // ----------------------------------------------------------------------------- // TInt CThumbnailFetchedChecker::CEntry::FindCB( - const TDesC* aUri, const CThumbnailFetchedChecker::CEntry& aEntry ) + const CThumbnailFetchedChecker::CEntry& aEntry, const CThumbnailFetchedChecker::CEntry& aEntry1 ) { + TN_DEBUG1( "CThumbnailFetchedChecker::CEntry::FindCB"); + if( aEntry1.iSize == aEntry.iSize) + { + // return index if size and uri matches + return aEntry.iUri->CompareF( *( aEntry1.iUri ) ); + } + else + { + return KErrNotFound; + } + } + +// ----------------------------------------------------------------------------- +// CThumbnailFetchedChecker::CEntry::FindCBUri() +// ----------------------------------------------------------------------------- +// +TInt CThumbnailFetchedChecker::CEntry::FindCBUri( + const TDesC* aUri, const CThumbnailFetchedChecker::CEntry& aEntry ) + { + TN_DEBUG2( "CThumbnailFetchedChecker::CEntry::FindCBUri(aUri=%S", &aUri); return aUri->CompareF( *( aEntry.iUri ) ); } @@ -157,7 +259,16 @@ const CThumbnailFetchedChecker::CEntry& aEntry1, const CThumbnailFetchedChecker::CEntry& aEntry2 ) { - return aEntry1.iUri->CompareF( *( aEntry2.iUri ) ); + TN_DEBUG1( "CThumbnailFetchedChecker::CEntry::InsertCB"); + if( aEntry1.iSize == aEntry2.iSize) + { + // return index if size and uri matches + return aEntry1.iUri->CompareF( *( aEntry2.iUri ) ); + } + else + { + return KErrNotFound; + } } // ----------------------------------------------------------------------------- @@ -175,4 +286,5 @@ CThumbnailFetchedChecker::CEntry::~CEntry() { delete iUri; + iUri = NULL; } diff -r b67379558a75 -r c5df59b4ae2d imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailgeneratetask.cpp --- a/imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailgeneratetask.cpp Tue Jul 06 14:37:18 2010 +0300 +++ b/imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailgeneratetask.cpp Wed Aug 18 10:05:55 2010 +0300 @@ -95,6 +95,7 @@ { iMissingSizes->Reset(); delete iMissingSizes; + iMissingSizes = NULL; } if ( iBitmapHandle ) @@ -494,14 +495,14 @@ iServer.StoreForPathL( iFilename )->StoreThumbnailL( iFilename, tempBitmap, aOriginalSize, EFalse, iThumbnailSize, iModified, !iVirtualUri, ETrue ); //remove result from fetched checker - iServer.FetchedChecker().SetFetchResult( iFilename, KErrNone ); + iServer.FetchedChecker().SetFetchResult( iFilename, iThumbnailSize, KErrNone ); } else if(iTargetUri != KNullDesC) { iServer.StoreForPathL( iTargetUri )->StoreThumbnailL( iTargetUri, tempBitmap, aOriginalSize, EFalse, iThumbnailSize, iModified, !iVirtualUri, ETrue ); //remove result from fetched checker - iServer.FetchedChecker().SetFetchResult( iTargetUri, KErrNone ); + iServer.FetchedChecker().SetFetchResult( iTargetUri, iThumbnailSize, KErrNone ); } CleanupStack::PopAndDestroy( tempBitmap ); diff -r b67379558a75 -r c5df59b4ae2d imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailmdsquerytask.cpp --- a/imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailmdsquerytask.cpp Tue Jul 06 14:37:18 2010 +0300 +++ b/imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailmdsquerytask.cpp Wed Aug 18 10:05:55 2010 +0300 @@ -36,7 +36,8 @@ // CThumbnailMDSQueryTask::CThumbnailMDSQueryTask( CThumbnailTaskProcessor& aProcessor, TInt aPriority, CMdESession* aMdESession, CThumbnailServer& aServer): - CThumbnailTask( aProcessor, aPriority ), iMdESession( aMdESession ), iServer(aServer), iUpdateToDb(ETrue) + CThumbnailTask( aProcessor, aPriority ), iMdESession( aMdESession ), iQuery(NULL), + iServer(aServer), iUpdateToDb(ETrue) { TN_DEBUG2( "CThumbnailMDSQueryTask(0x%08x)::CThumbnailMDSQueryTask()", this ); } @@ -55,6 +56,7 @@ { iQuery->Cancel(); delete iQuery; + iQuery = NULL; } } @@ -182,14 +184,21 @@ CMdENamespaceDef* defNamespace = &iMdESession->GetDefaultNamespaceDefL(); CMdEObjectDef& objDef = defNamespace->GetObjectDefL( MdeConstants::Object::KBaseObject ); + delete iQuery; + iQuery = NULL; + iQuery = iMdESession->NewObjectQueryL( *defNamespace, objDef, this ); - iQuery->SetResultMode( EQueryResultModeItem ); + + if(iQuery) + { + iQuery->SetResultMode( EQueryResultModeItem ); - CMdELogicCondition& rootCondition = iQuery->Conditions(); - rootCondition.SetOperator( ELogicConditionOperatorOr ); + CMdELogicCondition& rootCondition = iQuery->Conditions(); + rootCondition.SetOperator( ELogicConditionOperatorOr ); - // add ID condition - rootCondition.AddObjectConditionL( aId ); + // add ID condition + rootCondition.AddObjectConditionL( aId ); + } } // --------------------------------------------------------------------------- diff -r b67379558a75 -r c5df59b4ae2d imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailscaletask.cpp --- a/imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailscaletask.cpp Tue Jul 06 14:37:18 2010 +0300 +++ b/imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailscaletask.cpp Wed Aug 18 10:05:55 2010 +0300 @@ -121,6 +121,7 @@ // Scaled bitmap is owned by us, delete now delete iScaledBitmap; + iScaledBitmap = NULL; } diff -r b67379558a75 -r c5df59b4ae2d imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailserver.cpp --- a/imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailserver.cpp Tue Jul 06 14:37:18 2010 +0300 +++ b/imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailserver.cpp Wed Aug 18 10:05:55 2010 +0300 @@ -416,6 +416,7 @@ "CThumbnailServer::ThreadFunctionL() -- CActiveScheduler::Start() out" ); // Comes here if server gets shut down delete server; + server = NULL; CleanupStack::PopAndDestroy( scheduler ); } } @@ -443,7 +444,10 @@ iSessionCount ); iSessionCount--; - iProcessor->RemoveTasks(aSession); + if(iProcessor) + { + iProcessor->RemoveTasks(aSession); + } TN_DEBUG2( "CThumbnailServer::DropSession() aSession = 0x%08x", aSession ); @@ -459,7 +463,7 @@ { TN_DEBUG2( "CThumbnailServer::DropSession() - ref->iSession = 0x%08x", ref->iSession ); - delete ref->iBitmap; + delete ref->iBitmap; bpiter.RemoveCurrent(); TN_DEBUG2( "CThumbnailServer::DropSession() - deleted bitmap, left=%d", iBitmapPool.Count()); @@ -570,7 +574,7 @@ if( iFetchedChecker ) { - iFetchedChecker->SetFetchResult( aPath, KErrNone ); + iFetchedChecker->SetFetchResult( aPath, aThumbnailSize, KErrNone ); } } @@ -585,7 +589,7 @@ TN_DEBUG3( "CThumbnailServer::FetchThumbnailL(aPath=%S aThumbnailSize=%d)", &aPath, aThumbnailSize ); if( iFetchedChecker ) { - TInt err( iFetchedChecker->LastFetchResult( aPath ) ); + TInt err( iFetchedChecker->LastFetchResult( aPath, aThumbnailSize ) ); if ( err == KErrNone ) // To avoid useless sql gets that fails for sure { // custom sizes are not stored to db, skip fetching @@ -597,7 +601,7 @@ TRAP( err, StoreForPathL( aPath )->FetchThumbnailL( aPath, aThumbnail, aData, aThumbnailSize, aOriginalSize) ); if ( err != KErrNone ) { - iFetchedChecker->SetFetchResult( aPath, err ); + iFetchedChecker->SetFetchResult( aPath, aThumbnailSize, err ); } } User::LeaveIfError( err ); @@ -666,7 +670,7 @@ if( iFetchedChecker ) { - iFetchedChecker->SetFetchResult( aPath, KErrNone ); + iFetchedChecker->DeleteFetchResult( aPath ); } } @@ -852,7 +856,7 @@ if ( ref->iSession == aRequestId.iSession && ref->iRequestId == aRequestId.iRequestId ) { - delete ref->iBitmap; + delete ref->iBitmap; bpiter.RemoveCurrent(); TN_DEBUG2( "CThumbnailServer::DequeTask() - deleted bitmap, left=%d", @@ -944,7 +948,7 @@ } else { - if(iFormatting) + if( iFormatting ) { TN_DEBUG1( "CThumbnailServer::StoreForDriveL() - FORMATTING! - ABORT"); User::Leave( KErrNotSupported ); @@ -953,17 +957,31 @@ TVolumeInfo volumeInfo; TInt err = iFs.Volume( volumeInfo, aDrive ); - if ( err || volumeInfo.iDrive.iDriveAtt& KDriveAttRom || - volumeInfo.iDrive.iDriveAtt& KDriveAttRemote || - volumeInfo.iDrive.iMediaAtt& KMediaAttWriteProtected || - volumeInfo.iDrive.iMediaAtt& KMediaAttLocked ) + if ( err ) + { + // Locked + TN_DEBUG2( "CThumbnailServer::StoreForDriveL() - err %d", err); + User::Leave( err); + } + else if( volumeInfo.iDrive.iMediaAtt& KMediaAttLocked ) { - // We don't support ROM disks or remote mounts. Media - // must be read-write and not locked. - User::Leave( KErrAccessDenied); + TN_DEBUG1( "CThumbnailServer::StoreForDriveL() - locked"); + User::Leave( KErrAccessDenied ); } - - res = CThumbnailStore::NewL( iFs, aDrive, iImei, this ); + else if ( volumeInfo.iDrive.iDriveAtt& KDriveAttRom || + volumeInfo.iDrive.iDriveAtt& KDriveAttRemote || + volumeInfo.iDrive.iMediaAtt& KMediaAttWriteProtected ) + { + // We support ROM disks and remote disks in read only mode. + TN_DEBUG1( "CThumbnailServer::StoreForDriveL() - rom/remote/write protected"); + res = CThumbnailStore::NewL( iFs, aDrive, iImei, this, ETrue ); + } + else + { + TN_DEBUG1( "CThumbnailServer::StoreForDriveL() - normal"); + res = CThumbnailStore::NewL( iFs, aDrive, iImei, this, EFalse ); + } + CleanupStack::PushL( res ); iStores.InsertL( aDrive, res ); res->SetPersistentSizes(iPersistentSizes); @@ -1057,6 +1075,7 @@ if (store) { delete *store; + *store = NULL; iStores.Remove( aDrive ); } } @@ -1145,7 +1164,7 @@ // If drive-list entry is zero, drive is not available continue; } - + TInt err = iFs.Volume(volumeInfo, drive); TInt err_drive = iFs.Drive(driveInfo, drive); @@ -1295,7 +1314,7 @@ if( iFetchedChecker ) { - iFetchedChecker->SetFetchResult( aPath, KErrNone ); + iFetchedChecker->DeleteFetchResult( aPath ); } // need to create new thumbs @@ -1327,8 +1346,7 @@ if( iFetchedChecker ) { - iFetchedChecker->SetFetchResult( aNewPath, iFetchedChecker->LastFetchResult(aCurrentPath) ); - iFetchedChecker->SetFetchResult( aCurrentPath, KErrNone ); + iFetchedChecker->RenameFetchResultL( aNewPath, aCurrentPath ); } } @@ -1453,6 +1471,10 @@ { aMimeType = TDataType( KContactMime ); } + else if ( ext.CompareF( KAlbumArtExt ) == 0 ) + { + aMimeType = TDataType( KAlbumArtMime ); + } else { aMimeType = TDataType( KNullDesC8 ); @@ -1569,7 +1591,8 @@ mimeType.CompareF( KRealVideoMime ) == 0 || mimeType.CompareF( KFlashVideoMime ) == 0 || mimeType.CompareF( KMatroskaVideoMime ) == 0 || - mimeType.CompareF( KContactMime ) == 0 ) + mimeType.CompareF( KContactMime ) == 0 || + mimeType.CompareF( KAlbumArtMime ) == 0 ) { return ETrue; } @@ -1603,6 +1626,7 @@ "CThumbnailServer::E32Main() -- thread function out, result=%d", result ); delete cleanup; + cleanup = NULL; } if ( result != KErrNone ) { diff -r b67379558a75 -r c5df59b4ae2d imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailserversession.cpp --- a/imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailserversession.cpp Tue Jul 06 14:37:18 2010 +0300 +++ b/imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailserversession.cpp Wed Aug 18 10:05:55 2010 +0300 @@ -907,6 +907,8 @@ // all thumbs already exist CleanupStack::PopAndDestroy( missingSizes ); delete missingSizes; + missingSizes = NULL; + if( aFile ) { aFile->Close(); @@ -1038,6 +1040,8 @@ // all thumbs already exist CleanupStack::PopAndDestroy( missingSizes ); delete missingSizes; + missingSizes = NULL; + if ( aBuffer) { delete aBuffer; diff -r b67379558a75 -r c5df59b4ae2d imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailstore.cpp --- a/imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailstore.cpp Tue Jul 06 14:37:18 2010 +0300 +++ b/imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailstore.cpp Wed Aug 18 10:05:55 2010 +0300 @@ -166,9 +166,9 @@ // Two-phased constructor. // --------------------------------------------------------------------------- // -CThumbnailStore* CThumbnailStore::NewL( RFs& aFs, TInt aDrive, TDesC& aImei, CThumbnailServer* aServer ) +CThumbnailStore* CThumbnailStore::NewL( RFs& aFs, TInt aDrive, TDesC& aImei, CThumbnailServer* aServer, const TBool aReadOnly ) { - CThumbnailStore* self = new( ELeave )CThumbnailStore( aFs, aDrive, aImei, aServer ); + CThumbnailStore* self = new( ELeave )CThumbnailStore( aFs, aDrive, aImei, aServer, aReadOnly ); CleanupStack::PushL( self ); self->ConstructL(); CleanupStack::Pop( self ); @@ -222,9 +222,9 @@ // C++ default constructor can NOT contain any code, that might leave. // --------------------------------------------------------------------------- // -CThumbnailStore::CThumbnailStore( RFs& aFs, TInt aDrive, TDesC& aImei, CThumbnailServer* aServer ): - iFs( aFs ), iDrive( aDrive ), iDriveChar( 0 ), iBatchItemCount(0), iImei(aImei), - iServer(aServer), iDiskFull(EFalse), iUnrecoverable(ETrue), iBatchFlushItemCount(KMInBatchItems) +CThumbnailStore::CThumbnailStore( RFs& aFs, TInt aDrive, TDesC& aImei, CThumbnailServer* aServer, const TBool aReadOnly ): + iFs( aFs ), iDrive( aDrive ), iDriveChar( 0 ), iBatchItemCount(0), iImei(aImei), iServer(aServer), iDiskFullNotifier(NULL), + iDiskFull(EFalse), iActivityManager(NULL), iUnrecoverable(ETrue), iBatchFlushItemCount(KMInBatchItems), iReadOnly(aReadOnly) { // no implementation required } @@ -241,31 +241,39 @@ #ifdef _DEBUG iThumbCounter = 0; #endif - - HBufC* databasePath = HBufC::NewLC( KMaxFileName ); - TPtr pathPtr = databasePath->Des(); - User::LeaveIfError( RFs::DriveToChar( iDrive, iDriveChar )); - pathPtr.Append( iDriveChar ); - pathPtr.Append( KThumbnailDatabaseName ); - - //start disk space monitor - iDiskFullNotifier = CThumbnailStoreDiskSpaceNotifierAO::NewL( *this, - KDiskFullThreshold, - pathPtr ); + if(!iReadOnly) + { + HBufC* databasePath = HBufC::NewLC( KMaxFileName ); + TPtr pathPtr = databasePath->Des(); + User::LeaveIfError( RFs::DriveToChar( iDrive, iDriveChar )); + pathPtr.Append( iDriveChar ); + pathPtr.Append( KThumbnailDatabaseName ); + + //start disk space monitor + iDiskFullNotifier = CThumbnailStoreDiskSpaceNotifierAO::NewL( *this, + KDiskFullThreshold, + pathPtr ); - CleanupStack::PopAndDestroy( databasePath ); + CleanupStack::PopAndDestroy( databasePath ); + + TN_DEBUG2( "CThumbnailStore::ConstructL() drive: %d", iDrive ); - TN_DEBUG2( "CThumbnailStore::ConstructL() drive: %d", iDrive ); + OpenDatabaseL(); - OpenDatabaseL(); + // to monitor device activity + iActivityManager = CTMActivityManager::NewL( this, KStoreMaintenanceIdle); + iActivityManager->Start(); - // to monitor device activity - iActivityManager = CTMActivityManager::NewL( this, KStoreMaintenanceIdle); - iActivityManager->Start(); - - iDeleteThumbs = ETrue; - iCheckFilesExist = ETrue; - iLastCheckedRowID = -1; + iDeleteThumbs = ETrue; + iCheckFilesExist = ETrue; + } + else + { + TN_DEBUG1( "CThumbnailStore::ConstructL() - read only, dymmy mode..." ); + iDeleteThumbs = EFalse; + iCheckFilesExist = EFalse; + iLastCheckedRowID = -1; + } } // --------------------------------------------------------------------------- @@ -547,9 +555,7 @@ TInt column = 0; TInt rowStatus = 0; TInt64 inforows = -1; - TInt64 infocount = -1; TInt64 datarows = -1; - TInt64 datacount = -1; TInt ret = stmt.Prepare( iDatabase, KGetInfoRowID ); if(ret < 0) @@ -575,32 +581,7 @@ #endif return KErrNotSupported; } - - ret = stmt.Prepare( iDatabase, KGetInfoCount ); - if(ret < 0) - { - stmt.Close(); - TN_DEBUG1( "CThumbnailStore::CheckRowIDs() KGetInfoCount failed %d"); - return KErrNotSupported; - } - rowStatus = stmt.Next(); - - if ( rowStatus == KSqlAtRow) - { - infocount = stmt.ColumnInt64( column ); - } - - stmt.Close(); - - if(rowStatus < 0) - { -#ifdef _DEBUG - TPtrC errorMsg2 = iDatabase.LastErrorMessage(); - TN_DEBUG2( "RThumbnailTransaction::ResetThumbnailIDs() lastError %S, ret = %d" , &errorMsg2); -#endif - return KErrNotSupported; - } - + ret = stmt.Prepare( iDatabase, KGetDataRowID ); if(ret < 0) { @@ -626,37 +607,10 @@ return KErrNotSupported; } - ret = stmt.Prepare( iDatabase, KGetInfoDataCount ); - if(ret < 0) - { - stmt.Close(); - TN_DEBUG1( "CThumbnailStore::CheckRowIDs() KGetInfoDataCount failed %d"); - return KErrNotSupported; - } - rowStatus = stmt.Next(); - - if ( rowStatus == KSqlAtRow) - { - datacount = stmt.ColumnInt64( column ); - } - - stmt.Close(); - - if(rowStatus < 0) - { -#ifdef _DEBUG - TPtrC errorMsg2 = iDatabase.LastErrorMessage(); - TN_DEBUG2( "RThumbnailTransaction::ResetThumbnailIDs() lastError %S, ret = %d" , &errorMsg2); -#endif - return KErrNotSupported; - } - TN_DEBUG2( "CThumbnailStore::CheckRowIDsL() - inforows %Ld", inforows ); - TN_DEBUG2( "CThumbnailStore::CheckRowIDsL() - infocount %Ld", infocount ); TN_DEBUG2( "CThumbnailStore::CheckRowIDsL() - datarows %Ld", datarows ); - TN_DEBUG2( "CThumbnailStore::CheckRowIDsL() - datacount %Ld", datacount ); - if( inforows != datarows || datacount != infocount) + if( inforows != datarows ) { TN_DEBUG1( "CThumbnailStore::CheckRowIDsL() - tables out of sync" ); return KErrNotSupported; @@ -1121,6 +1075,12 @@ const TThumbnailSize& aThumbnailSize, const TInt64 aModified, const TBool aThumbFromPath ) { TN_DEBUG1( "CThumbnailStore::StoreThumbnailL( private ) in" ); + + if(iReadOnly) + { + TN_DEBUG1( "CThumbnailStore::StoreThumbnailL() read only, skip..." ); + return; + } #ifdef _DEBUG TTime aStart, aStop; @@ -1272,6 +1232,12 @@ { TSize thumbSize = aThumbnail->SizeInPixels(); TN_DEBUG4( "CThumbnailStore::StoreThumbnailL( public ) aThumbnailSize = %d, aThumbnailSize(%d,%d) IN", aThumbnailSize, thumbSize.iWidth, thumbSize.iHeight ); + + if(iReadOnly) + { + TN_DEBUG1( "CThumbnailStore::StoreThumbnailL() read only, skip..." ); + return; + } __ASSERT_DEBUG(( aThumbnail ), ThumbnailPanic( EThumbnailNullPointer )); @@ -1319,17 +1285,20 @@ CleanupStack::PushL( data ); CImageEncoder* encoder = NULL; - TRAPD( decErr, encoder = CExtJpegEncoder::DataNewL( CExtJpegEncoder::EHwImplementation, data, CImageEncoder::EOptionAlwaysThread ) ); + + CImageEncoder::TOptions options = ( CImageEncoder::TOptions )( CImageEncoder::EOptionAlwaysThread ); + + TRAPD( decErr, encoder = CExtJpegEncoder::DataNewL( CExtJpegEncoder::EHwImplementation, data, options ) ); if ( decErr != KErrNone ) { TN_DEBUG2( "CThumbnailStore::StoreThumbnailL( public ) - HW CExtJpegEncoder failed %d", decErr); - TRAPD( decErr, encoder = CExtJpegEncoder::DataNewL( CExtJpegEncoder::ESwImplementation, data, CImageEncoder::EOptionAlwaysThread ) ); + TRAPD( decErr, encoder = CExtJpegEncoder::DataNewL( CExtJpegEncoder::ESwImplementation, data, options ) ); if ( decErr != KErrNone ) { TN_DEBUG2( "CThumbnailStore::StoreThumbnailL( public ) - SW CExtJpegEncoder failed %d", decErr); - TRAPD( decErr, encoder = CImageEncoder::DataNewL( data, KJpegMime(), CImageEncoder::EOptionAlwaysThread ) ); + TRAPD( decErr, encoder = CImageEncoder::DataNewL( data, KJpegMime(), options ) ); if ( decErr != KErrNone ) { TN_DEBUG2( "CThumbnailStore::StoreThumbnailL( public ) - CImageEncoder failed %d", decErr); @@ -1362,7 +1331,7 @@ // Set some format specific data imageData->iSampleScheme = TJpegImageData::EColor444; - imageData->iQualityFactor = 75; + imageData->iQualityFactor = 80; // imageData - ownership passed to frameImageData after AppendImageData User::LeaveIfError(frameImageData->AppendImageData(imageData)); @@ -1432,6 +1401,12 @@ TBool CThumbnailStore::FindDuplicateL( const TDesC& aPath, const TThumbnailSize& aThumbnailSize ) { TN_DEBUG1( "CThumbnailStore::FindDuplicateL()" ); + + if(iReadOnly) + { + TN_DEBUG1( "CThumbnailStore::FindDuplicateL() read only, skip..." ); + return EFalse; + } User::LeaveIfError( CheckDbState() ); @@ -1528,6 +1503,12 @@ { TN_DEBUG2( "CThumbnailStore::GetMissingSizesL() aSourceType == %d", aSourceType ); + if(iReadOnly) + { + TN_DEBUG1( "CThumbnailStore::GetMissingSizesL() read only, skip..." ); + return; + } + User::LeaveIfError( CheckDbState() ); HBufC* path = aPath.AllocLC(); @@ -1637,6 +1618,12 @@ { TN_DEBUG3( "CThumbnailStore::FetchThumbnailL(%S) aThumbnailSize==%d", &aPath, aThumbnailSize ); + if(iReadOnly) + { + TN_DEBUG1( "CThumbnailStore::FetchThumbnailL() read only, skip..." ); + User::Leave( KErrNotFound ); + } + User::LeaveIfError( CheckDbState() ); HBufC* path = aPath.AllocLC(); @@ -1761,6 +1748,12 @@ { TN_DEBUG2( "CThumbnailStore::DeleteThumbnailsL(%S)", &aPath ); + if(iReadOnly) + { + TN_DEBUG1( "CThumbnailStore::DeleteThumbnailsL() read only, skip..." ); + return; + } + #ifdef _DEBUG TTime aStart, aStop; aStart.UniversalTime(); @@ -1960,6 +1953,12 @@ { TN_DEBUG2( "CThumbnailStore::RenameThumbnailsL(%S)", &aCurrentPath ); + if(iReadOnly) + { + TN_DEBUG1( "CThumbnailStore::RenameThumbnailsL() read only, skip..." ); + return; + } + #ifdef _DEBUG TTime aStart, aStop; aStart.UniversalTime(); @@ -2049,6 +2048,12 @@ StopAutoFlush(); + if(iReadOnly) + { + TN_DEBUG1( "CThumbnailStore::FlushCacheTable() read only, skip..." ); + return; + } + if(iBatchItemCount <= 0 || CheckDbState() != KErrNone) { // cache empty or db unusable @@ -2190,6 +2195,12 @@ { TN_DEBUG1( "CThumbnailStore::StartAutoFlush()" ); + if(iReadOnly) + { + TN_DEBUG1( "CThumbnailStore::StartAutoFlush() read only, skip..." ); + return; + } + TInt err = KErrNone; if( iAutoFlushTimer ) @@ -2371,6 +2382,13 @@ { TN_DEBUG2( "CThumbnailStore::CheckModifiedByPathL() %S", &aPath); + if(iReadOnly) + { + TN_DEBUG1( "CThumbnailStore::CheckModifiedByPathL() read only, skip..." ); + modifiedChanged = EFalse; + return ETrue; + } + User::LeaveIfError( CheckDbState() ); HBufC* path = aPath.AllocLC(); @@ -2450,6 +2468,16 @@ return ret; } + +// ----------------------------------------------------------------------------- +// IsReadOnly() +// ----------------------------------------------------------------------------- +// +TBool CThumbnailStore::IsReadOnly() + { + return iReadOnly; + } + // ----------------------------------------------------------------------------- // PrepareBlacklistedItemsForRetryL() // ----------------------------------------------------------------------------- @@ -2480,6 +2508,12 @@ TInt CThumbnailStore::DeleteMarkedL() { TN_DEBUG1( "CThumbnailStore::DeleteMarkedL()" ); + + if(iReadOnly) + { + TN_DEBUG1( "CThumbnailStore::DeleteMarkedL() read only, skip..." ); + return KErrAccessDenied; + } #ifdef _DEBUG TTime aStart, aStop; @@ -2571,6 +2605,12 @@ TInt CThumbnailStore::FileExistenceCheckL() { TN_DEBUG1( "CThumbnailStore::FileExistenceCheckL()" ); + + if(iReadOnly) + { + TN_DEBUG1( "CThumbnailStore::FileExistenceCheckL() read only, skip..." ); + return ETrue; + } #ifdef _DEBUG TTime aStart, aStop; @@ -2693,7 +2733,7 @@ // TInt CThumbnailStore::CheckDbState() { - if (iUnrecoverable) + if (iUnrecoverable && !iReadOnly) { TN_DEBUG1( "CThumbnailStore::CheckDbState() - database in unrecoverable state" ); __ASSERT_DEBUG( !iUnrecoverable, ThumbnailPanic( EThumbnailDatabaseUnrecoverable )); @@ -2723,6 +2763,11 @@ TBool CThumbnailStore::IsDiskFull() { + if(iReadOnly) + { + TN_DEBUG1( "CThumbnailStore::IsDiskFull() read only, skip..." ); + return EFalse; + } return iDiskFull; } @@ -2734,6 +2779,12 @@ { TN_DEBUG2( "CThumbnailStore::ActivityChanged() aActive == %d", aActive); + if( iReadOnly ) + { + TN_DEBUG1( "CThumbnailStore::ActivityChanged() read only, skip..." ); + return; + } + if( aActive ) { iIdle = EFalse; diff -r b67379558a75 -r c5df59b4ae2d imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailtaskprocessor.cpp --- a/imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailtaskprocessor.cpp Tue Jul 06 14:37:18 2010 +0300 +++ b/imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailtaskprocessor.cpp Wed Aug 18 10:05:55 2010 +0300 @@ -105,7 +105,7 @@ iPeriodicTimer->Cancel(); } delete iPeriodicTimer; - + iPeriodicTimer = NULL; } @@ -155,6 +155,7 @@ { // Remove task from queue delete task; + task = NULL; iTasks.Remove( i ); TN_DEBUG2( "CThumbnailTaskProcessor::RemoveTask() - removed request ID: %d", aRequestId.iRequestId); @@ -164,6 +165,7 @@ // Task is already running, canceled first task->Cancel(); delete task; + task = NULL; iTasks.Remove( i ); cancel = ETrue; @@ -207,6 +209,7 @@ for ( TInt i = iTasks.Count(); --i >= 0; ) { CThumbnailTask* task = iTasks[i]; + if ( task->RequestId().iSession == aSession) { if ( task->State() != CThumbnailTask::ERunning ) @@ -215,6 +218,7 @@ // Remove task from queue delete task; + task = NULL; iTasks.Remove( i ); TN_DEBUG2( "CThumbnailTaskProcessor::RemoveTasks() - removed request ID: %d", id); @@ -228,6 +232,7 @@ // Task is already running, canceled first task->Cancel(); delete task; + task = NULL; iTasks.Remove( i ); cancel = ETrue; @@ -266,6 +271,7 @@ // Remove task from queue delete task; + task = NULL; iTasks.Remove( i ); TN_DEBUG2( "CThumbnailTaskProcessor::RemoveTasks() - removed request ID: %d", id); @@ -279,6 +285,7 @@ // Task is already running, canceled first task->Cancel(); delete task; + task = NULL; iTasks.Remove( i ); cancel = ETrue; @@ -342,6 +349,7 @@ { // Delete completed task delete task; + task = NULL; iTasks.Remove( i ); } else diff -r b67379558a75 -r c5df59b4ae2d imagehandlingutilities/thumbnailmanager/thumbnailserver/src/tmgetimei.cpp --- a/imagehandlingutilities/thumbnailmanager/thumbnailserver/src/tmgetimei.cpp Tue Jul 06 14:37:18 2010 +0300 +++ b/imagehandlingutilities/thumbnailmanager/thumbnailserver/src/tmgetimei.cpp Wed Aug 18 10:05:55 2010 +0300 @@ -45,6 +45,7 @@ Cancel(); delete iTelephony; + iTelephony = NULL; } TBuf CTMGetImei::GetIMEI() diff -r b67379558a75 -r c5df59b4ae2d imagehandlingutilities/thumbnailmanager/tmiadrestart/src/tmiadrestart.cpp --- a/imagehandlingutilities/thumbnailmanager/tmiadrestart/src/tmiadrestart.cpp Tue Jul 06 14:37:18 2010 +0300 +++ b/imagehandlingutilities/thumbnailmanager/tmiadrestart/src/tmiadrestart.cpp Wed Aug 18 10:05:55 2010 +0300 @@ -150,6 +150,7 @@ TRAP(err, MainL()); delete cleanup; + cleanup = NULL; __UHEAP_MARKEND; return err; }