diff -r 420f6808bf21 -r f9e827349359 photosgallery/collectionframework/datasource/manager/src/glxcollectionpluginbase.cpp --- a/photosgallery/collectionframework/datasource/manager/src/glxcollectionpluginbase.cpp Wed Jun 09 09:41:51 2010 +0300 +++ b/photosgallery/collectionframework/datasource/manager/src/glxcollectionpluginbase.cpp Mon Jun 21 15:40:32 2010 +0300 @@ -373,7 +373,7 @@ EXPORT_C void CGlxCollectionPluginBase::HandleResponse(CMPXMedia* aResponse, CGlxRequest* aRequest, const TInt& aError) { TRACER("void CGlxCollectionPluginBase::HandleResponse()"); - + GLX_DEBUG2("CGlxCollectionPluginBase::HandleResponse()() aError=%d", aError); if (dynamic_cast(aRequest)) // iRequest is a CGlxIdListRequest { @@ -384,8 +384,20 @@ else if (dynamic_cast(aRequest)) // iRequest is a CGlxThumbnailRequest { - iObs->HandleMedia(aResponse, aError); - } + //when IAD update / sisx installation of S60 TNM is done and + //photos asks for the thumbnail, the thumbnail manager returns an + //error KErrServerTerminated(-15)/KErrDied(-13) for which the MPX recreates + //the collection plugins and reconnects to the MPX server and goes into + //a invalid state. After this, the error is not propogated to the Medialist + //and no further requests are processed and it keeps returning KErrNotReady(-18) + //So, as a HACK we are changing the error code to KErrCompletion(-17), + //for which the MPX collection does not take any action and propogates the error + //to the medialist. This error(KErrCompletion) is treated as a temporary error + //and the thumbnail request is made again from the medialist for which the + //S60 TNM returns the thumbnail properly. + iObs->HandleMedia(aResponse, ((aError == KErrServerTerminated + || aError == KErrDied) ? KErrCompletion : aError)); + } else if (dynamic_cast(aRequest)) // iRequest is a CGlxGetRequest { @@ -456,7 +468,7 @@ if( KGlxMediaIdCollectionPluginSpecific == aAttrs[i].ContentId()) { cpiAttributeArray.AppendL(aAttrs[i]); - CpiAttributeAdditionalAttributes(aAttrs[i], attributeArray); + CpiAttributeAdditionalAttributesL(aAttrs[i], attributeArray); doNotNeedDataSource = EFalse; } else @@ -494,9 +506,9 @@ return ETrue; } -EXPORT_C void CGlxCollectionPluginBase::CpiAttributeAdditionalAttributes(const TMPXAttribute& /*aCpiAttribute*/, RArray& /*aAttributeArray*/) +EXPORT_C void CGlxCollectionPluginBase::CpiAttributeAdditionalAttributesL(const TMPXAttribute& /*aCpiAttribute*/, RArray& /*aAttributeArray*/) { - TRACER("void CGlxCollectionPluginBase::CpiAttributeAdditionalAttributes()"); + TRACER("void CGlxCollectionPluginBase::CpiAttributeAdditionalAttributesL()"); // Default implementation does not require additional attributes }