diff -r 2bb96f4ecad8 -r 8e7494275d3a omads/omadsextensions/dsutils/nsmldefaultagendahandler/src/nsmldefaultagendahandlerplugin.cpp --- a/omads/omadsextensions/dsutils/nsmldefaultagendahandler/src/nsmldefaultagendahandlerplugin.cpp Thu Aug 19 09:41:17 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,817 +0,0 @@ -/* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: -* -*/ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "nsmldefaultagendahandlerplugin.h" -#include "nsmldefaultagendahandlerutil.h" -#include "nsmldefaultagendahandlerdebug.h" - - - -// CONSTANTS -const TInt KBuffLength = 128; - -// ---------------------------------------------------------------------------- -// CNSmlDefaultAgendaHandlerPlugin::NewL -// Two Phase Construction -// ---------------------------------------------------------------------------- -EXPORT_C CNSmlDefaultAgendaHandlerPlugin* CNSmlDefaultAgendaHandlerPlugin::NewL() - { - FLOG( _L("CNSmlDefaultAgendaHandlerPlugin::NewL, BEGIN")); - - CNSmlDefaultAgendaHandlerPlugin* self = new ( ELeave ) CNSmlDefaultAgendaHandlerPlugin(); - self->ConstructL(); - - FLOG( _L("CNSmlDefaultAgendaHandlerPlugin::NewL, END")); - return self; - } - -// ---------------------------------------------------------------------------- -// CNSmlDefaultAgendaHandlerPlugin::~CNSmlDefaultAgendaHandlerPlugin -// Destructor -// ---------------------------------------------------------------------------- -CNSmlDefaultAgendaHandlerPlugin::~CNSmlDefaultAgendaHandlerPlugin() - { - FLOG( _L("CNSmlDefaultAgendaHandlerPlugin::~CNSmlDefaultAgendaHandlerPlugin, BEGIN")); - - FLOG( _L("CNSmlDefaultAgendaHandlerPlugin::~CNSmlDefaultAgendaHandlerPlugin, END")); - } - -// ---------------------------------------------------------------------------- -// C++ constructor - not exported; -// implicitly called from NewL() -// ---------------------------------------------------------------------------- -CNSmlDefaultAgendaHandlerPlugin::CNSmlDefaultAgendaHandlerPlugin() - { - FLOG( _L("CNSmlDefaultAgendaHandlerPlugin::CNSmlDefaultAgendaHandlerPlugin, BEGIN")); - FLOG( _L("CNSmlDefaultAgendaHandlerPlugin::CNSmlDefaultAgendaHandlerPlugin, END")); - } - -// ---------------------------------------------------------------------------- -// 2nd phase constructor -// ---------------------------------------------------------------------------- -void CNSmlDefaultAgendaHandlerPlugin::ConstructL() - { - FLOG( _L("CNSmlDefaultAgendaHandlerPlugin::ConstructL, BEGIN")); - - // Initialize server supports for folder - iServerSupportsForFolder.iSSName = EFalse; - iServerSupportsForFolder.iSSCreated = EFalse; - iServerSupportsForFolder.iSSModified = EFalse; - - FLOG( _L("CNSmlDefaultAgendaHandlerPlugin::ConstructL, END")); - } - -// ----------------------------------------------------------------------------- -// CNSmlDefaultAgendaHandlerPlugin::CheckServerSupportForFolder -// Method to check if needed properties are supported by remote server. -// ----------------------------------------------------------------------------- -void CNSmlDefaultAgendaHandlerPlugin::CheckServerSupportForFolder( const CSmlDataStoreFormat& aServerDataStoreFormat ) - { - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::CheckServerSupportForFolder: BEGIN")); - - iServerSupportsForFolder.iSSName = EFalse; - iServerSupportsForFolder.iSSCreated = EFalse; - iServerSupportsForFolder.iSSModified = EFalse; - - if ( aServerDataStoreFormat.FolderPropertyCount() == 0 ) - { - // Server has no restricition on folder property - iServerSupportsForFolder.iSSName = ETrue; - iServerSupportsForFolder.iSSCreated = ETrue; - iServerSupportsForFolder.iSSModified = ETrue; - return; - } - else - { - for ( TInt i = 0; - i < aServerDataStoreFormat.FolderPropertyCount(); - i++ ) - { - if ( aServerDataStoreFormat.FolderProperty( i ).Field().Name().DesC().Compare( KNSmlDataObjectNAME ) == 0 ) - { - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::CheckServerSupportForFolder: Supports NAME Property")); - iServerSupportsForFolder.iSSName = ETrue; - } - else if ( aServerDataStoreFormat.FolderProperty( i ).Field().Name().DesC().Compare( KNSmlDataObjectCREATED ) == 0 ) - { - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::CheckServerSupportForFolder: Supports CREATED Property")); - iServerSupportsForFolder.iSSCreated = ETrue; - } - else if ( aServerDataStoreFormat.FolderProperty( i ).Field().Name().DesC().Compare( KNSmlDataObjectMODIFIED ) == 0 ) - { - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::CheckServerSupportForFolder: Supports MODIFIED Property")); - iServerSupportsForFolder.iSSModified = ETrue; - } - } - } - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::CheckServerSupportForFolder: END")); - } - -// ----------------------------------------------------------------------------- -// CNSmlDefaultAgendaHandlerPlugin::FetchFolderL -// Method to read folder item from database. -// ----------------------------------------------------------------------------- -void CNSmlDefaultAgendaHandlerPlugin::FetchFolderL( const TSmlDbItemUid aUid, RBufWriteStream& aStream ) - { - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::FetchFolderL: begin")); - - // Create parser and set properties - CNSmlFolderParser* parser = CNSmlFolderParser::NewLC(); - TNSmlParserGeneratorError parseError = EErrorNone; - HBufC8* generatedBuf = NULL; - HBufC8* nameBuf = NULL; - - //Get the Folder Information - CNSmlDefaultAgendaHandlerUtil* agendautil = CalendarInfoL(aUid); - if( NULL == agendautil ) - { - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::FetchFolderL:Invalid CalendarInfo")); - CleanupStack::PopAndDestroy( parser ); - User::Leave( KErrNotFound ); - } - - if ( iServerSupportsForFolder.iSSCreated ) - { - parser->iCreated = agendautil->iCreated; - } - else - { - parser->iCreated = Time::NullTTime(); - } - - if ( iServerSupportsForFolder.iSSName ) - { - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::FetchFolderL: retrieving name")); - nameBuf = HBufC8::NewL( agendautil->iName->Length() ); - TPtr8 name( nameBuf->Des() ); - CnvUtfConverter::ConvertFromUnicodeToUtf8(name , agendautil->iName->Des()); - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::FetchFolderL: name converted")); - parser->iName = nameBuf; - } - - // Generate data and write it to buffer - generatedBuf = HBufC8::NewLC( 1 ); - generatedBuf->Des() = KNullDesC8; - CleanupStack::Pop(); // generatedBuf - parseError = parser->GenerateXml( generatedBuf ); - CleanupStack::PushL( generatedBuf ); - - aStream.WriteL( generatedBuf->Des() ); - - delete agendautil; - CleanupStack::PopAndDestroy( generatedBuf ); - CleanupStack::PopAndDestroy( parser ); - - if ( parseError != EErrorNone ) - { - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::FetchFolderL(): end with leave")); - User::Leave( KErrGeneral ); - } - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::FetchFolderL: end")); - } - -// ----------------------------------------------------------------------------- -// CNSmlDefaultAgendaHandlerPlugin::SynchronizableCalendarIdsL -// Retrieve the CalendarFile ID -// ----------------------------------------------------------------------------- -void CNSmlDefaultAgendaHandlerPlugin::SynchronizableCalendarIdsL( CArrayFixFlat* aFolderUidArray ) - { - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::SynchronizableCalendarIdsL BEGIN")); - - CCalSession* vCalSession = NULL; - CCalSession* vCalSubSession = NULL; - TBuf8 keyBuff; - - aFolderUidArray->Reset(); - - vCalSession = CCalSession::NewL(); - CleanupStack::PushL(vCalSession); - - CDesCArray* calfilearr = vCalSession->ListCalFilesL(); - CleanupStack::PushL(calfilearr); - - for(TInt i = 0; i < calfilearr->Count(); i++) - { - TInt err = KErrNone; - vCalSubSession = CCalSession::NewL(); - CleanupStack::PushL(vCalSubSession); - vCalSubSession->OpenL(calfilearr->MdcaPoint(i)); - - CCalCalendarInfo* caleninfo = vCalSubSession->CalendarInfoL(); - CleanupStack::PushL(caleninfo); - - //Get UID value associated with the CalFile - keyBuff.Zero(); - TUint UidVal; - keyBuff.AppendNum( EFolderLUID ); - TPckgC pckUidValue(UidVal); - TRAP(err,pckUidValue.Set(caleninfo->PropertyValueL( keyBuff ))); - UidVal = pckUidValue(); - - if( err != KErrNone ) - { - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::SynchronizableCalendarIdsL: Error while retrieving CalFile Property: '%d'"), err); - CleanupStack::PopAndDestroy(caleninfo); - CleanupStack::PopAndDestroy(vCalSubSession); - continue; - } - - //Get MARKASDELETE MetaData property - keyBuff.Zero(); - TBool markAsdelete = EFalse; - keyBuff.AppendNum( EMarkAsDelete ); - TPckgC pckMarkAsDelete(markAsdelete); - TRAP(err,pckMarkAsDelete.Set(caleninfo->PropertyValueL(keyBuff))); - if ( err == KErrNone ) - { - markAsdelete = pckMarkAsDelete(); - if( markAsdelete ) - { - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::SynchronizableCalendarIdsL: Dead Calendar, not including in the snapshot")); - CleanupStack::PopAndDestroy(caleninfo); - CleanupStack::PopAndDestroy(vCalSubSession); - continue; - } - } - - //Get OWNER value associated with the CalFile - keyBuff.Zero(); - TInt SyncServiceOwnerVal; - keyBuff.AppendNum( EDeviceSyncServiceOwner ); - TPckgC pckOwnerValue(SyncServiceOwnerVal); - TRAP(err,pckOwnerValue.Set(caleninfo->PropertyValueL( keyBuff ))); - SyncServiceOwnerVal = pckOwnerValue(); - - if( err == KErrNotFound ) - { - // Set DS Application as owner - SyncServiceOwnerVal = KCRUidNSmlDSApp.iUid; - TPckgC pckOwnerValue(SyncServiceOwnerVal); - caleninfo->SetPropertyL( keyBuff, pckOwnerValue ); - vCalSubSession->SetCalendarInfoL( *caleninfo ); - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::SynchronizableCalendarIdsL: Empty Owner LUID '%d'"), UidVal ); - aFolderUidArray->AppendL(UidVal); - } - else if( err == KErrNone ) - { - if( KCRUidNSmlDSApp.iUid == SyncServiceOwnerVal ) - { - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::SynchronizableCalendarIdsL: DS Owner LUID '%d'"), UidVal ); - aFolderUidArray->AppendL(UidVal); - } - } - else - { - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::SynchronizableCalendarIdsL: Error while retrieving Owner Property: '%d'"), err); - } - CleanupStack::PopAndDestroy(caleninfo); - CleanupStack::PopAndDestroy(vCalSubSession); - } - CleanupStack::PopAndDestroy(calfilearr); - CleanupStack::PopAndDestroy(vCalSession); - - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::SynchronizableCalendarIdsL END")); - } - -// ----------------------------------------------------------------------------- -// CNSmlDefaultAgendaHandlerPlugin::CreateFolderItemL -// Creates the Folder item with the stream provided -// ----------------------------------------------------------------------------- -TCalLocalUid CNSmlDefaultAgendaHandlerPlugin::CreateFolderL( RBufReadStream& aStream ) - { - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::CreateFolderItemL BEGIN")); - - TBuf8 keyBuff; - TUint calValue = 0; - CNSmlDefaultAgendaHandlerUtil* agendautil = NULL; - CCalCalendarInfo* calinfo = CCalCalendarInfo::NewL(); - CleanupStack::PushL(calinfo); - - // Parse the buffer for the folder data and construct the calendar info - agendautil = ParseFolderDataL( aStream ); - - if( agendautil ) - { - // Visibility - calinfo->SetEnabled( agendautil->iEnabled ); - - // LUID Meta Property - keyBuff.Zero(); - keyBuff.AppendNum( EFolderLUID ); - calValue = CCalenMultiCalUtil::GetNextAvailableOffsetL(); - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::CreateFolderItemL: nextoffset: '%d'"), calValue); - TPckgC pckgUidValue( calValue ); - calinfo->SetPropertyL( keyBuff, pckgUidValue ); - - // Create & Modified Time Meta Property - keyBuff.Zero(); - keyBuff.AppendNum( ECreationTime ); - TTime time; - time.HomeTime(); - TPckgC pckgCreateTimeValue( time ); - calinfo->SetPropertyL( keyBuff, pckgCreateTimeValue ); - keyBuff.Zero(); - keyBuff.AppendNum( EModificationTime ); - calinfo->SetPropertyL( keyBuff, pckgCreateTimeValue ); - - // Sync Status Meta Property - keyBuff.Zero(); - keyBuff.AppendNum( ESyncStatus ); - TBool syncstatus( ETrue ); - TPckgC pckgSyncStatusValue( syncstatus ); - calinfo->SetPropertyL( keyBuff, pckgSyncStatusValue ); - - // Add - CCalSession* calsession = CCalSession::NewL(); - TInt err(KErrNone); - if( agendautil->iName != NULL ) - { - calinfo->SetNameL( agendautil->iName->Des() ); - HBufC* calfilename = CCalenMultiCalUtil::GetNextAvailableCalFileL(); - TRAP( err, calsession->CreateCalFileL( *calfilename, *calinfo ) ); - delete calfilename; - } - else - { - err = KErrNotFound; - } - - delete calsession; - delete agendautil; - CleanupStack::PopAndDestroy(calinfo); - - if( err != KErrNone ) - { - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::CreateFolderItemL: Error while Creating Calfile")); - User::Leave( KErrGeneral ); - } - } - else - { - CleanupStack::PopAndDestroy(calinfo); - User::Leave( KErrGeneral ); - } - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::CreateFolderItemL END")); - return calValue; - } - -// ----------------------------------------------------------------------------- -// CNSmlDefaultAgendaHandlerPlugin::ReplaceFolderItemL -// Replaces the Folder item with the ID provided -// ----------------------------------------------------------------------------- -void CNSmlDefaultAgendaHandlerPlugin::ReplaceFolderL( const TCalLocalUid& aUid, - RBufReadStream& aStream, TBool& aSyncStatus ) - { - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::ReplaceFolderItemL: BEGIN")); - - TBuf8 keyBuff; - CNSmlDefaultAgendaHandlerUtil* agendautil = NULL; - - // Parse the buffer for the folder data and construct the calendar info - agendautil = ParseFolderDataL( aStream ); - - if( agendautil ) - { - //Get the associated Calendar File - CNSmlDefaultAgendaHandlerUtil* updateagendautil = CalendarInfoL( aUid ); - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::ReplaceFolderItemL: After CalendarInfoL '%d'"), updateagendautil); - - if( NULL == updateagendautil ) - { - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::ReplaceFolderItemL:Invalid Updatable CalendarInfo")); - delete agendautil; - User::Leave( KErrNotFound ); - } - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::ReplaceFolderItemL:valid CalendarInfo")); - if( updateagendautil->iFileName != NULL ) - { - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::ReplaceFolderItemL:valid name '%S'"), updateagendautil->iFileName); - CCalSession* vCalSession = CCalSession::NewL(); - CleanupStack::PushL(vCalSession); - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::ReplaceFolderItemL:Open the session")); - vCalSession->OpenL(updateagendautil->iFileName->Des()); - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::ReplaceFolderItemL:Get the Calendar Info")); - CCalCalendarInfo* caleninfo = vCalSession->CalendarInfoL(); - CleanupStack::PushL(caleninfo); - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::ReplaceFolderItemL:Set the status")); - caleninfo->SetEnabled(agendautil->iEnabled); - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::ReplaceFolderItemL:Set the name")); - caleninfo->SetNameL(agendautil->iName->Des()); - - // Modified Time Meta Property - keyBuff.Zero(); - keyBuff.AppendNum( EModificationTime ); - TTime time; - time.HomeTime(); - TPckgC pckgCreateTimeValue( time ); - caleninfo->SetPropertyL( keyBuff, pckgCreateTimeValue ); - - aSyncStatus = updateagendautil->iSyncStatus; - - // Update - vCalSession->SetCalendarInfoL(*caleninfo); - - CleanupStack::PopAndDestroy(caleninfo); - CleanupStack::PopAndDestroy( vCalSession ); - } - else - { - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::ReplaceFolderItemL:Invalid Updatable CalendarInfo Name")); - delete agendautil; - delete updateagendautil; - User::Leave( KErrNotFound ); - } - } - else - { - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::ReplaceFolderItemL:Invalid Parsed CalendarInfo")); - User::Leave( KErrNotFound ); - } - - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::ReplaceFolderItemL: END")); - } - -// ----------------------------------------------------------------------------- -// CNSmlDefaultAgendaHandlerPlugin::FolderNameL -// Returns the FolderName for the given ID -// ----------------------------------------------------------------------------- -HBufC* CNSmlDefaultAgendaHandlerPlugin::FolderNameL( TSmlDbItemUid aUid ) - { - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::FolderNameL: BEGIN")); - - HBufC* calfilename = NULL; - CNSmlDefaultAgendaHandlerUtil* agendautil = CalendarInfoL( aUid ); - - if( agendautil != NULL ) - { - calfilename = agendautil->iFileName->Alloc(); - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::foldername: '%S'"), calfilename); - } - delete agendautil; - - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::FolderNameL: END")); - - return calfilename; - } - -// ----------------------------------------------------------------------------- -// CNSmlDefaultAgendaHandlerPlugin::StoreFormatL -// Returns adapters supported store format which is read from Calendar Plug -// In Adapter own resource file. -// ----------------------------------------------------------------------------- -CSmlDataStoreFormat* CNSmlDefaultAgendaHandlerPlugin::StoreFormatL( RStringPool& aStringPool ) - { - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::StoreFormatL: BEGIN")); - - TFileName fileName; - TParse* parse = new(ELeave) TParse(); - CleanupStack::PushL( parse ); - - parse->Set( KNSmlDefaultAgendaHandlerRsc_1_2, - &KDC_RESOURCE_FILES_DIR, NULL ); - - fileName = parse->FullName(); - RResourceFile resourceFile; - RFs rfs; - User::LeaveIfError(rfs.Connect()); - - BaflUtils::NearestLanguageFile( rfs, fileName ); - - TRAPD( leavecode, resourceFile.OpenL( rfs,fileName ) ); - if ( leavecode != 0 ) - { - CleanupStack::PopAndDestroy(); // parse - rfs.Close(); - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin:::StoreFormatL(): Error END")); - User::Leave( leavecode ); - } - - CleanupClosePushL( resourceFile ); - HBufC8* buffer = resourceFile.AllocReadLC( NSML_DEFAULT_AGENDA_HANDLER ); - TResourceReader reader; - reader.SetBuffer( buffer ); - - CSmlDataStoreFormat* dsFormat = NULL; - dsFormat = CSmlDataStoreFormat::NewLC( aStringPool, reader ); - CleanupStack::Pop(); // dsFormat - CleanupStack::PopAndDestroy( 3 ); // buffer, resourceFile, parse - rfs.Close(); - - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::StoreFormatL: END")); - return dsFormat; - } - -// ----------------------------------------------------------------------------- -// CNSmlDefaultAgendaHandlerPlugin::DeviceSyncOwner -// Returns the DS Application UID -// ----------------------------------------------------------------------------- -TInt CNSmlDefaultAgendaHandlerPlugin::DeviceSyncOwner() - { - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::DeviceSyncOwner: BEGIN")); - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::DeviceSyncOwner: '%d' END"), KCRUidNSmlDSApp.iUid ); - return KCRUidNSmlDSApp.iUid; - } - -// ----------------------------------------------------------------------------- -// CNSmlDefaultAgendaHandlerPlugin::FolderSyncStatusL -// Returns the Sync Status for the given UID -// ----------------------------------------------------------------------------- -TBool CNSmlDefaultAgendaHandlerPlugin::FolderSyncStatusL( TSmlDbItemUid aUid ) - { - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::FolderSyncStatusL: BEGIN")); - - TBool syncstatus( EFalse ); - CNSmlDefaultAgendaHandlerUtil* agendautil = CalendarInfoL( aUid ); - if( agendautil != NULL ) - { - syncstatus = agendautil->iSyncStatus; - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::syncstatus: '%d'"), syncstatus ); - } - delete agendautil; - - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::FolderSyncStatusL: END")); - - return syncstatus; - } - -// ----------------------------------------------------------------------------- -// CNSmlDefaultAgendaHandlerPlugin::FolderSyncStatusL -// Returns the Sync Status for the given FolderName -// ----------------------------------------------------------------------------- -TBool CNSmlDefaultAgendaHandlerPlugin::FolderSyncStatusL( HBufC* aFolderName ) - { - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::FolderSyncStatusL: BEGIN")); - - TBool syncstatus( EFalse ); - TBuf8 keyBuff; - CCalSession *calsession = CCalSession::NewL(); - CleanupStack::PushL(calsession); - calsession->OpenL(aFolderName->Des()); - CCalCalendarInfo* caleninfo = calsession->CalendarInfoL(); - CleanupStack::PushL(caleninfo); - // Sync Status - keyBuff.Zero(); - keyBuff.AppendNum( ESyncStatus ); - TPckgC pckgSyncStatusValue(syncstatus); - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::FolderSyncStatusL: Get sync status")); - TRAPD(err,pckgSyncStatusValue.Set(caleninfo->PropertyValueL( keyBuff ))); - - syncstatus = pckgSyncStatusValue(); - if( err != KErrNone ) - { - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::FolderSyncStatusL: Error while retrieving CalFile SYNC Property")); - } - CleanupStack::PopAndDestroy(caleninfo); - CleanupStack::PopAndDestroy(calsession); - - - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::FolderSyncStatusL: END")); - - return syncstatus; - } - -// ----------------------------------------------------------------------------- -// CNSmlDefaultAgendaHandlerPlugin::CreateFolderSnapShotItemL -// Create the Folder SnapShot Item -// ----------------------------------------------------------------------------- -TNSmlSnapshotItem CNSmlDefaultAgendaHandlerPlugin::CreateFolderSnapShotItemL( const TCalLocalUid& aUid ) - { - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::CreateFolderSnapShotItemL: BEGIN")); - - TNSmlSnapshotItem item( 0 ); - - CNSmlDefaultAgendaHandlerUtil* agendautil = CalendarInfoL( aUid ); - if( NULL == agendautil ) - { - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::CreateFolderSnapShotItemL:Invalid CalendarInfo")); - return item; - } - item.SetItemId( aUid ); - item.SetLastChangedDate(agendautil->iModified); - item.SetSoftDelete(EFalse); - delete agendautil; - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::CreateFolderSnapShotItemL: END")); - - return item; - } - -// ----------------------------------------------------------------------------- -// CNSmlDefaultAgendaHandlerPlugin::ParseFolderDataL -// Method to Parse the Folder Data Obtained -// ----------------------------------------------------------------------------- -CNSmlDefaultAgendaHandlerUtil* CNSmlDefaultAgendaHandlerPlugin::ParseFolderDataL( RBufReadStream& aStream ) - { - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::ParseFolderDataL: BEGIN")); - - CNSmlDefaultAgendaHandlerUtil* agendautil = CNSmlDefaultAgendaHandlerUtil::NewL(); - - // Create parser and parse data from Buffer - CNSmlFolderParser* folderparser = CNSmlFolderParser::NewLC(); - TParse name; - - TInt size = aStream.Source()->SizeL(); - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::ParseFolderDataL: size:'%d'"), size); - CBufFlat* buffer = CBufFlat::NewL( 64 ); - CleanupStack::PushL( buffer ); - buffer->ResizeL( size ); - TPtr8 ptr = buffer->Ptr( 0 ); - aStream.ReadL( ptr, size ); - HBufC8* dataBuffer = HBufC8::NewLC( buffer->Size() ); - TPtr8 dataBufferPtr = dataBuffer->Des(); - buffer->Read( 0, dataBufferPtr, buffer->Size() ); - - TNSmlParserGeneratorError parseError = - folderparser->ParseXml( dataBuffer ); - CleanupStack::PopAndDestroy( 2 ); // dataBuffer, buffer - - if ( parseError != EErrorNone ) - { - delete agendautil; - CleanupStack::PopAndDestroy( ); // folderparser - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::ParseFolderDataL: end with leave")); - User::Leave( KErrGeneral ); - return NULL; - } - - // Every folder item must have NAME property. Even replace because this - // Plug In does not support field level update for folders. - if ( !folderparser->iName ) - { - delete agendautil; - CleanupStack::PopAndDestroy( ); // folderparser - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::ParseFolderDataL: end with leave")); - User::Leave( KErrArgument ); - return NULL; - } - - // Create Calendar info - agendautil->iName = CnvUtfConverter::ConvertToUnicodeFromUtf8L(folderparser->iName->Des()); - CleanupStack::PopAndDestroy( ); // folderparser; - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::ParseFolderDataL: END")); - return agendautil; - } - -// ----------------------------------------------------------------------------- -// CNSmlDefaultAgendaHandlerPlugin::CalendarInfoL -// Retrieve the CalendarFile Info using the aUid value -// ----------------------------------------------------------------------------- -CNSmlDefaultAgendaHandlerUtil* CNSmlDefaultAgendaHandlerPlugin::CalendarInfoL( TSmlDbItemUid aUid ) - { - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::CalendarInfoL: BEGIN")); - - TBuf8 keyBuff; - CNSmlDefaultAgendaHandlerUtil* agendautil = NULL; - CCalSession* vCalSession = NULL; - CCalSession* vCalSubSession = NULL; - - vCalSession = CCalSession::NewL(); - CleanupStack::PushL(vCalSession); - - CDesCArray* calfilearr = vCalSession->ListCalFilesL(); - CleanupStack::PushL(calfilearr); - - for(TInt i = 0; i < calfilearr->Count(); i++) - { - vCalSubSession = CCalSession::NewL(*vCalSession); - CleanupStack::PushL(vCalSubSession); - vCalSubSession->OpenL(calfilearr->MdcaPoint(i)); - - CCalCalendarInfo* caleninfo = vCalSubSession->CalendarInfoL(); - CleanupStack::PushL(caleninfo); - - TUint UidVal; - keyBuff.Zero(); - keyBuff.AppendNum( EFolderLUID ); - TPckgC intBuf(UidVal); - TRAPD(err,intBuf.Set(caleninfo->PropertyValueL(keyBuff))); - - if( err != KErrNone ) - { - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::CalendarInfoL: Error while retrieving CalFile Property")); - CleanupStack::PopAndDestroy(caleninfo); - CleanupStack::PopAndDestroy(vCalSubSession); - CleanupStack::PopAndDestroy(calfilearr); - CleanupStack::PopAndDestroy(vCalSession); - return agendautil; - } - - UidVal = intBuf(); - - if(aUid == UidVal) - { - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::CalendarInfoL: Found a match")); - agendautil = CNSmlDefaultAgendaHandlerUtil::NewL(); - agendautil->iEnabled = caleninfo->Enabled(); - agendautil->iName = caleninfo->NameL().AllocL(); - agendautil->iFileName = caleninfo->FileNameL().AllocL(); - - TInt err(KErrNone); - - // Created Time - TTime timeval; - keyBuff.Zero(); - keyBuff.AppendNum( ECreationTime ); - TPckgC pckgCreateTimeValue( timeval ); - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::CalendarInfoL: Get Creation date")); - TRAP(err,pckgCreateTimeValue.Set(caleninfo->PropertyValueL( keyBuff ))); - - if( err != KErrNone ) - { - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::CalendarInfoL: Error while retrieving CalFile CREATED Property")); - } - agendautil->iCreated = pckgCreateTimeValue(); - - // Modified Time - keyBuff.Zero(); - keyBuff.AppendNum( EModificationTime ); - TPckgC pckgModifyTimeValue( timeval ); - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::CalendarInfoL: Get Modified date")); - TRAP(err,pckgModifyTimeValue.Set(caleninfo->PropertyValueL( keyBuff ))); - - if( err != KErrNone ) - { - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::CalendarInfoL: Error while retrieving CalFile MODIFIED Property")); - } - agendautil->iModified = pckgModifyTimeValue(); - - // Sync Status - TBool syncstatus; - keyBuff.Zero(); - keyBuff.AppendNum( ESyncStatus ); - TPckgC pckgSyncStatusValue(syncstatus); - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::CalendarInfoL(): Get sync status")); - TRAP(err,pckgSyncStatusValue.Set(caleninfo->PropertyValueL( keyBuff ))); - - if( err != KErrNone ) - { - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::CalendarInfoL: Error while retrieving CalFile SYNC Property")); - } - agendautil->iSyncStatus = pckgSyncStatusValue(); - } - CleanupStack::PopAndDestroy(caleninfo); - CleanupStack::PopAndDestroy(vCalSubSession); - } - CleanupStack::PopAndDestroy(calfilearr); - CleanupStack::PopAndDestroy(vCalSession); - - FLOG(_L("CNSmlDefaultAgendaHandlerPlugin::CalendarInfoL: END")); - - return agendautil; - } - -/** - * Provides a key value pair table, this is used to identify - * the correct construction function for the requested interface. - */ -const TImplementationProxy ImplementationTable[] = -{ - IMPLEMENTATION_PROXY_ENTRY(0x20029F16, CNSmlDefaultAgendaHandlerPlugin::NewL ) -}; - -/** - * Function used to return an instance of the proxy table.+ - */ -EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount ) -{ - aTableCount = sizeof( ImplementationTable ) / sizeof( TImplementationProxy ); - return ImplementationTable; -} - -#ifdef EKA2 -GLDEF_C TInt E32Dll() -#else -GLDEF_C TInt E32Dll(TDllReason /*aReason*/) -#endif -// DLL entry point - { - return(KErrNone); - } - -//End of file -