diff -r da5135c61bad -r cd2816114bd1 emailservices/emailstore/base_plugin/src/BasePlugin.cpp --- a/emailservices/emailstore/base_plugin/src/BasePlugin.cpp Wed Mar 31 21:08:33 2010 +0300 +++ b/emailservices/emailstore/base_plugin/src/BasePlugin.cpp Wed Apr 14 15:42:15 2010 +0300 @@ -30,6 +30,7 @@ //Freestyle. #include "cfsmailcommon.h" #include "cfsmailmessage.h" +#include "cmrcalendarinfo.h" // //Base plugin. #include "baseplugin.h" @@ -40,6 +41,7 @@ // Other #include #include +#include // #include "FreestyleEmailUiConstants.h" @@ -258,6 +260,37 @@ MMRInfoProcessor* infoProcessor = CBaseMrInfoProcessor::NewL( *this ); result->SetMRInfoProcessorL( infoProcessor ); + //JOJA-83VJ4L Plugins need to set the correct Calendar Database ID for MRUI to work + //get the calendar file name from the derived class + const TDesC& calFileName = CalendarFileName(); + if ( calFileName != KNullDesC ) + { + //the derived class does use its own calendar file, check if that file exists + //the file may not exist because cal sync was disabled, or the file was deleted from the calendar UI + CCalSession* calSession = CCalSession::NewL(); + CleanupStack::PushL( calSession ); + + TRAPD( error, calSession->OpenL( calFileName ) ); + if ( error == KErrNone ) + { + //calendar file exists, get its file id, and set it to cMail Celendar Info via the extention + TCalFileId fileId = KNullFileId; + calSession->FileIdL( fileId ); + + //get the extention api for the MR info, set the cal db id, and release the extention + CEmailExtension* extension = NULL; + TRAP( error, extension = result->ExtensionL( KMailboxExtMrCalInfo ) ); + if ( error == KErrNone ) + { + CMRCalendarInfo* calInfo = reinterpret_cast( extension ); + calInfo->SetCalendarDatabaseIdL( fileId ); // cannot actually leave + result->ReleaseExtension( calInfo ); + } + } + + CleanupStack::PopAndDestroy( calSession ); + } + CleanupStack::Pop( result ); __LOG_EXIT