--- 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;
/**
--- 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
--- 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)
--- 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/*" );
--- 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 );
}
// ---------------------------------------------------------------------------
--- 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 ));
--- 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 ));
--- 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 ));
--- 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 );
}
--- 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<TItemId>& aIDArray, const RPointerArray<HBufC>& aObjectUriArray, TBool aPresent );
+ void AddToQueueL( TObserverNotificationType aType, TThumbnailGenerationItemType aItemType,
+ const RArray<TItemId>& aIDArray, const RPointerArray<HBufC>& aObjectUriArray,
+ TBool aPresent );
/**
* Calls Thumbnail Manager to create thumbnails
--- 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" );
}
--- 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" );
}
--- 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 )
--- 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" );
}
--- 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<iGenerationQueue.Count() || itemIndex == KErrNotFound;i++)
+ {
+ if(iGenerationQueue[i].iItemAction == EGenerationItemActionDelete)
+ {
+ itemIndex = i;
+ }
+ }
+
+ if(itemIndex >= 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<iGenerationQueue.Count() || itemIndex == KErrNotFound;i++)
- {
- if(iGenerationQueue[i].iItemAction == EGenerationItemActionDelete)
- {
- itemIndex = i;
- }
- }
-
- if(itemIndex >= 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 );
--- 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" );
}
--- 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;
}
--- 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 );
}
--- 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);
--- 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<argc; i++){
+ if (strcmp(argv[i], "-o")==0 && i+1 <argc ){
+ //let's make sure that folder specified after -o exists
+ QDir file( QString::fromLatin1( argv[i+1] ));
+ QString s = file.absolutePath ();
+ s = s.left( s.lastIndexOf(file.dirName()) );
+ if ( !file.exists(s) ){
+ file.mkpath(s);
+ }
+ }
+ }
+
+ QApplication app(argc, argv);
+ QTEST_DISABLE_KEYPAD_NAVIGATION
+ TestThumbnailManager tc;
+ return QTest::qExec(&tc, argc, argv);
+ }
#endif
#include "test_qtnmwrapper.moc"
--- a/imagehandlingutilities/thumbnailmanager/thumbnailserver/inc/thumbnailfetchedchecker.h Tue Jul 06 14:37:18 2010 +0300
+++ b/imagehandlingutilities/thumbnailmanager/thumbnailserver/inc/thumbnailfetchedchecker.h Wed Aug 18 10:05:55 2010 +0300
@@ -18,6 +18,7 @@
#define THUMBNAILFETCHEDCHECKER_H
#include <e32base.h>
+#include <thumbnailmanager.h>
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;
};
--- 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();
--- 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;");
--- 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
--- 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 <TDisplayMode> (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 <TDisplayMode> (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 <TDisplayMode> (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 <TDisplayMode> (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;
+ }
}
// ---------------------------------------------------------------------------
--- 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;
}
--- 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 );
--- 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 );
+ }
}
// ---------------------------------------------------------------------------
--- 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;
}
--- 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 )
{
--- 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;
--- 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;
--- 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
--- 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<KImeiBufferSize> CTMGetImei::GetIMEI()
--- 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;
}