diff -r 753e33780645 -r 453d490c84a5 testconnuis/htiui/HtiServicePlugins/HtiPIMServicePlugin/src/PIMHandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/testconnuis/htiui/HtiServicePlugins/HtiPIMServicePlugin/src/PIMHandler.cpp Fri Sep 17 08:58:49 2010 +0300 @@ -0,0 +1,782 @@ +/* +* 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: Functional implementation of PIM service (for vCalendar, vCard) +* +*/ + + +// INCLUDE FILES +#include "../../../symbian_version.hrh" + +#include "HtiPIMServicePlugin.h" +#include "PIMHandler.h" + +#include +#include + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +// CONSTANTS +_LIT8( KErrorUnrecognizedCommand, "Unrecognized command" ); +_LIT8( KErrorCalendarFileFormat, "Invalid format of calendar file name"); +_LIT8( KErrorVCardImportFailed, "vCard import failed" ); +_LIT8( KErrorVCalendarImportFailed, "vCalendar import failed" ); +_LIT8( KErrorMissingVCalendar, "Missing vCalendar object" ); +_LIT8( KErrorMissingVCard, "Missing vCard object" ); +_LIT8( KErrorInvalidId, "Invalid ID parameter" ); +_LIT8( KErrorItemNotFound, "Item not found" ); +_LIT8( KErrorFailedDelete, "Failed to delete item" ); +_LIT8( KErrorFailedDeleteAll, "Failed to delete all items" ); +_LIT8( KErrorFailedOpenCalendar, "Failed to open calendar file"); +//_LIT8( KErrorFailedOpenContact, "Failed to open contact database"); + + + +_LIT( KDefaultAgendaFile, "" ); // A default file is opened if fileName is KNullDesC + +#if ( SYMBIAN_VERSION_SUPPORT < SYMBIAN_4 ) +_LIT8( KErrorMissingText, "Text parameter missing" ); +_LIT8( KErrorMissingFilepath, "Filepath parameter missing" ); +_LIT8( KErrorNotepadAddMemoFailed, "Notepad add memo failed" ); +_LIT8( KErrorNotepadAddMemoFromFileFailed, "Notepad add memo from file failed" ); +_LIT8( KErrorNotepadDeleteAllFailed, "Notepad delete all failed" ); + +_LIT( KHtiNpdHlpExe, "HtiNpdHlp.exe" ); +_LIT( KCmdAddMemo, "AddMemo" ); +_LIT( KCmdAddMemoFromFile, "AddMemoFromFile" ); +_LIT( KCmdDeleteAll, "DeleteAll" ); +_LIT( KCmdDelim, " " ); +#else +_LIT8( KErrorNotepadNotSupported, "Notepad not supported" ); +#endif + +// ---------------------------------------------------------------------------- +CPIMHandler* CPIMHandler::NewL() + { + HTI_LOG_FUNC_IN( "CPIMHandler::NewL" ); + CPIMHandler* self = new (ELeave) CPIMHandler(); + CleanupStack::PushL ( self ); + self->ConstructL(); + CleanupStack::Pop(); + HTI_LOG_FUNC_OUT( "CPIMHandler::Done" ); + return self; + } + +// ---------------------------------------------------------------------------- +CPIMHandler::CPIMHandler():iIsBusy( EFalse ), iEntryViewErr( KErrNone ), + iCalSession(NULL) + { + } + +// ---------------------------------------------------------------------------- +CPIMHandler::~CPIMHandler() + { + HTI_LOG_TEXT( "CPIMHandler destroy" ); + HTI_LOG_TEXT( "Deleting iCalSession"); + delete iCalSession; + HTI_LOG_TEXT( "Deleting iWaiter" ); + delete iWaiter; + } + +// ---------------------------------------------------------------------------- +void CPIMHandler::ConstructL() + { + HTI_LOG_TEXT( "CPIMHandler::ConstructL" ); + iWaiter = new ( ELeave ) CActiveSchedulerWait; + } + +// ---------------------------------------------------------------------------- +void CPIMHandler::SetDispatcher( MHtiDispatcher* aDispatcher ) + { + iDispatcher = aDispatcher; + } + +// ---------------------------------------------------------------------------- +void CPIMHandler::ProcessMessageL( const TDesC8& aMessage, + THtiMessagePriority /*aPriority*/ ) + { + HTI_LOG_FUNC_IN( "CPIMHandler::ProcessMessageL" ); + + iIsBusy = ETrue; + TInt err = KErrNone; + + // Zero legth of aMessage tested already in CHtiPIMServicePlugin. + // Other sanity checks must be done here. + + TUint8 command = aMessage.Ptr()[0]; + switch ( command ) + { + case CHtiPIMServicePlugin::EImportVCard: + { + TRAP( err, HandleVCardImportFuncL( + aMessage.Right( aMessage.Length() - 1 ) ) ); + break; + } + case CHtiPIMServicePlugin::EImportVCalendar: + { + TRAP( err, HandleVCalendarImportFuncL( + aMessage.Right( aMessage.Length() - 1 ) ) ); + break; + } + case CHtiPIMServicePlugin::EDeleteContact: + { + TRAP( err, HandleContactDeleteFuncL( + aMessage.Right( aMessage.Length() - 1 ) ) ); + break; + } + case CHtiPIMServicePlugin::EDeleteCalendar: + { + TRAP( err, HandleCalendarDeleteFuncL( + aMessage.Right( aMessage.Length() - 1 ) ) ); + break; + } + case CHtiPIMServicePlugin::EOpenCalendarFile: + { + TRAP( err, HandleOpenCalendarFileL( + aMessage.Right( aMessage.Length() - 1 ))); + break; + } + case CHtiPIMServicePlugin::EListCalendarFiles: + { + TRAP( err, HandleListCalendarFilesL()); + break; + } + case CHtiPIMServicePlugin::ENotepadAddMemo: + { + TRAP( err, HandleNotepadAddMemoFuncL( aMessage.Mid( 1 ) ) ); + break; + } + case CHtiPIMServicePlugin::ENotepadAddMemoFromFile: + { + TRAP( err, HandleNotepadAddMemoFromFileFuncL( aMessage.Mid( 1 ) ) ); + break; + } + case CHtiPIMServicePlugin::ENotepadDeleteAll: + { + TRAP( err, HandleNotepadDeleteAllFuncL() ); + break; + } + default: + { + TRAP( err, SendErrorMessageL( + KErrArgument, KErrorUnrecognizedCommand ) ); + break; + } + } + + if ( err != KErrNone ) + { + iIsBusy = EFalse; + User::Leave( err ); + } + + HTI_LOG_FUNC_OUT( "CPIMHandler::ProcessMessageL: Done" ); + } + +// ---------------------------------------------------------------------------- +TBool CPIMHandler::IsBusy() + { + return iIsBusy; + } + +// ---------------------------------------------------------------------------- +void CPIMHandler::HandleOpenCalendarFileL( const TDesC8& aData ) + { + HTI_LOG_FUNC_IN( "CPIMHandler::HandleOpenCalendarFileL" ); + + // check the format, the correct format is DriveLetter:FileName + if (aData.Length() != 0) + { + if(aData.Length() < 3 || aData[1] != ':'|| + !(aData[0] >= 'a' && aData[0] <= 'z' || aData[0] >= 'A' && aData[0] <= 'Z')) + { + SendErrorMessageL( KErrArgument, KErrorCalendarFileFormat ); + return; + } + } + + delete iCalSession; + iCalSession = NULL; + + // Open iCalSession + HTI_LOG_TEXT("Open calendar session"); + iCalSession = CCalSession::NewL(); + TBuf calFile; + calFile.Copy(aData); + TRAPD(err, iCalSession->OpenL(calFile)); + if(err == KErrNone) + { + HTI_LOG_TEXT("Calendar session open"); + SendOkMsgL( KNullDesC8 ); + } + else + { + HTI_LOG_TEXT("Failed to open calendar file"); + SendErrorMessageL( err, KErrorFailedOpenCalendar ); + delete iCalSession; + iCalSession = NULL; + } + HTI_LOG_FUNC_OUT( "CPIMHandler::HandleOpenCalendarFileL: Done" ); + } + +// ---------------------------------------------------------------------------- +void CPIMHandler::HandleListCalendarFilesL() + { + HTI_LOG_FUNC_IN( "CPIMHandler::HandleListCalendarFiles" ); + + CCalSession* calSession = CCalSession::NewL(); + CleanupStack::PushL(calSession); + HTI_LOG_TEXT("List all calendar files"); + CDesCArray* calFiles = calSession->ListCalFilesL(); + + if(calFiles == NULL) //No calendar files + { + TBuf8<2> reply; + reply.AppendFill(0, 2); + SendOkMsgL(reply); + CleanupStack::PopAndDestroy(); // calSession + return; + } + + CleanupStack::PushL(calFiles); + TInt count = calFiles->Count(); + + // files count + file count * (file name length + max file name + driver letter + ':') + TInt bufSize = 2 + count * (2 + KMaxFileName + 1 + 1); + CBufFlat* calListBuf = CBufFlat::NewL( bufSize ); + CleanupStack::PushL(calListBuf); + + HBufC8* calArray = HBufC8::NewLC( bufSize ); + TPtr8 calArrayPtr = calArray->Des(); + + calArrayPtr.Append((TUint8*)(&count), 2); + TInt pos = 0; + calListBuf->ExpandL(pos, 2); + calListBuf->Write(pos, *calArray, 2); + calArrayPtr.Zero(); + pos += 2; + + for(int i = 0; i < count; ++i) + { + TInt len = calFiles->MdcaPoint(i).Length(); + calArrayPtr.Append((TUint8*)(&len), 2); + calArrayPtr.Append(calFiles->MdcaPoint(i)); + calListBuf->ExpandL(pos, calArray->Length()); + calListBuf->Write(pos,*calArray, calArray->Length()); + pos += calArray->Length(); + calArrayPtr.Zero(); + } + SendOkMsgL( calListBuf->Ptr( 0 ) ); + CleanupStack::PopAndDestroy(4); //calArray, calListBuf, calFiles, calSession; + HTI_LOG_FUNC_OUT( "CPIMHandler::HandleListCalendarFiles: Done" ); + } + +// ---------------------------------------------------------------------------- +void CPIMHandler::HandleVCardImportFuncL( const TDesC8& aData ) + { + HTI_LOG_FUNC_IN( "CPIMHandler::HandleVCardImportFuncL" ); + if ( aData.Length() == 0 ) + { + SendErrorMessageL( KErrArgument, KErrorMissingVCard ); + return; + } + + CContactDatabase* contactDatabase = CContactDatabase::OpenL(); + HTI_LOG_TEXT( "CPIMHandler: Contact database open" ); + CleanupStack::PushL(contactDatabase); + + CBufFlat* buffer = CBufFlat::NewL(aData.Length()); + CleanupStack::PushL(buffer); + buffer->ExpandL(0, aData.Length()); + buffer->Ptr(0).Copy(aData.Right(aData.Length())); + RBufReadStream readStream; + readStream.Open(*buffer, 0); + CleanupClosePushL( readStream ); + + // Imports vCard + TBool success = EFalse; + TUid format = TUid::Uid(KUidVCardConvDefaultImpl); + CArrayPtr* contacts = NULL; + TRAPD(err,contacts = contactDatabase->ImportContactsL(format, readStream, success, + CContactDatabase::EImportSingleContact | CContactDatabase::ETTFormat)); + CleanupStack::PushL(contacts); + if(err != KErrNone || success == EFalse || contacts == NULL || contacts->Count() == 0) + { + HTI_LOG_TEXT("Failed to import vCard"); + SendErrorMessageL( err, KErrorVCardImportFailed ); + } + else + { + // Returns the imported contact id + TInt32 entryId = contacts->At(0)->Id(); + TBuf8<4> idBuf; + idBuf.Append( ( TUint8* ) &entryId, 4 ); + HTI_LOG_TEXT("vCard imported"); + SendOkMsgL( idBuf ); + } + + contacts->ResetAndDestroy(); + + CleanupStack::PopAndDestroy(4); // contacts, readStream, buffer, contactDatabase + HTI_LOG_FUNC_OUT( "CPIMHandler::HandleVCardImportFuncL: Done" ); + } + +// ---------------------------------------------------------------------------- +void CPIMHandler::HandleVCalendarImportFuncL( const TDesC8& aData ) + { + HTI_LOG_FUNC_IN( "CPIMHandler::HandleVCalendarImportFuncL" ); + + if ( aData.Length() == 0 ) + { + HTI_LOG_TEXT( "CPIMHandler::HandleVCalendarImportFuncL: Error: length of data is zero" ) + SendErrorMessageL( KErrArgument, KErrorMissingVCalendar ); + return; + } + + CBufFlat* buffer = CBufFlat::NewL( aData.Length() ); + CleanupStack::PushL(buffer); + buffer->ExpandL( 0, aData.Length() ); + buffer->Ptr( 0 ).Copy( aData ); + RBufReadStream readStream; + readStream.Open( *buffer, 0 ); + CleanupClosePushL( readStream ); + + if(iCalSession == NULL) + { + HTI_LOG_TEXT( "CPIMHandler: Open default calendar file" ); + iCalSession = CCalSession::NewL(); + iCalSession->OpenL( KDefaultAgendaFile ); + HTI_LOG_TEXT( "CPIMHandler: Calendar session open" ); + } + + CCalDataExchange* importer = CCalDataExchange::NewL(*iCalSession); + CleanupStack::PushL( importer ); + HTI_LOG_TEXT( "CPIMHandler: Calendar importer created" ); + + RPointerArray entryArray; + CleanupClosePushL( entryArray ); + + TInt err = KErrNone; + TInt size = 0; + // Import as VCalendar + TRAP( err, importer->ImportL( KUidVCalendar, readStream, entryArray ) ); + HTI_LOG_FORMAT( "ImportL return value %d", err ); + size = entryArray.Count(); + HTI_LOG_FORMAT( "Import VCalendarL imported %d entries", size ); + TCalLocalUid uniqueId = 0; + TInt success = 0; + if ( size > 0 ) + { + CCalEntryView* entryView = CCalEntryView::NewL( *iCalSession, *this ); + iWaiter->Start(); + CleanupStack::PushL(entryView); + if ( iEntryViewErr == KErrNone ) + { + TRAP( err, entryView->StoreL( entryArray, success ) ); + HTI_LOG_FORMAT( "StoreL return value %d", err ); + HTI_LOG_FORMAT( "Successfully stored %d entries", success ); + uniqueId = entryArray[0]->LocalUidL(); + } + CleanupStack::PopAndDestroy(); + } + entryArray.ResetAndDestroy(); + CleanupStack::PopAndDestroy(); // entryArray + + if ( err == KErrNone && success > 0 ) + { + HTI_LOG_TEXT("vCalendar imported"); + TBuf8<8> uniqueIdStr; + uniqueIdStr.Copy( ( TUint8* ) ( &uniqueId ), sizeof( uniqueId ) ); + SendOkMsgL( uniqueIdStr ); + } + else + { + HTI_LOG_TEXT("Failed to import vCalendar"); + if ( err == KErrNone ) + { + err = KErrGeneral; + } + SendErrorMessageL( err, KErrorVCalendarImportFailed ); + } + + CleanupStack::PopAndDestroy( 3 ); // buffer, readStream, importer + HTI_LOG_FUNC_OUT( "CPIMHandler::HandleVCalendarImportFuncL: Done" ); + } + +// ---------------------------------------------------------------------------- +void CPIMHandler::HandleContactDeleteFuncL( const TDesC8& aData ) + { + HTI_LOG_FUNC_IN( "CPIMHandler::HandleContactDeleteFuncL" ); + TInt dataLength = aData.Length(); + if ( dataLength != 0 && dataLength != 4 ) + { + HTI_LOG_TEXT( "CPIMHandler: Error: wrong length of data" ) + SendErrorMessageL( KErrArgument, KErrorInvalidId ); + return; + } + CContactDatabase* contactDatabase = CContactDatabase::OpenL(); + HTI_LOG_TEXT( "CPIMHandler: Contact database open" ); + CleanupStack::PushL(contactDatabase); + + if(dataLength == 0) // delete all contacts + { + //const CContactIdArray* array = iContactDatabase->SortedItemsL(); + CCntFilter *filter = CCntFilter::NewLC(); + filter->SetContactFilterTypeCard(ETrue); + filter->SetContactFilterTypeGroup(EFalse); + contactDatabase->FilterDatabaseL(*filter); + TRAPD(err, contactDatabase->DeleteContactsL(*filter->iIds)); + CleanupStack::PopAndDestroy(); + if(err == KErrNone) + { + HTI_LOG_TEXT("All contacts deleted"); + SendOkMsgL( KNullDesC8 ); + } + else + { + HTI_LOG_TEXT("Failed to delete all contacts"); + SendErrorMessageL( err, KErrorFailedDeleteAll ); + } + } + else // delete one contact by id + { + TUint id = aData[0] + ( aData[1] << 8 ) + + ( aData[2] << 16 ) + + ( aData[3] << 24 ); + TRAPD(err, contactDatabase->DeleteContactL(id)); + + if(err == KErrNone) + { + HTI_LOG_TEXT("Contact deleted"); + SendOkMsgL( KNullDesC8 ); + } + else + { + HTI_LOG_TEXT("Failed to delete contact"); + SendErrorMessageL( err, KErrorFailedDelete ); + } + } + + CleanupStack::PopAndDestroy(); + HTI_LOG_FUNC_OUT( "CPIMHandler::HandleContactDeleteFuncL" ); + } + +// ---------------------------------------------------------------------------- +void CPIMHandler::HandleCalendarDeleteFuncL( const TDesC8& aData ) + { + HTI_LOG_FUNC_IN( "CPIMHandler::HandleVCalendarDeleteFuncL" ); + + TInt dataLength = aData.Length(); + if ( dataLength != 0 && dataLength != 4 ) + { + HTI_LOG_TEXT( "CPIMHandler: Error: wrong length of data" ) + SendErrorMessageL( KErrArgument, KErrorInvalidId ); + return; + } + + + if(iCalSession == NULL) + { + HTI_LOG_TEXT( "CPIMHandler: Open default calendar file" ); + iCalSession = CCalSession::NewL(); + iCalSession->OpenL( KDefaultAgendaFile ); + HTI_LOG_TEXT( "CPIMHandler: Calendar session open" ); + } + + HTI_LOG_TEXT( "CPIMHandler: Creating entry view" ); + CCalEntryView* entryView = CCalEntryView::NewL( *iCalSession, *this ); + iWaiter->Start(); + CleanupStack::PushL(entryView); + if ( iEntryViewErr != KErrNone ) + { + User::Leave( iEntryViewErr ); + } + + // If dataLength is 0, no ID given, delete all calendar entries + if ( dataLength == 0 ) + { + HTI_LOG_TEXT( "CPIMHandler: Deleting all calendar entries" ); + TCalTime minTime; + TCalTime maxTime; + minTime.SetTimeUtcL( TCalTime::MinTime() ); + maxTime.SetTimeUtcL( TCalTime::MaxTime() ); + CalCommon::TCalTimeRange timeRange( minTime, maxTime ); + TRAPD( err, entryView->DeleteL( timeRange, + CalCommon::EIncludeAll, *this ) ); + iWaiter->Start(); + if ( err == KErrNone && iEntryViewErr == KErrNone ) + { + HTI_LOG_TEXT("All calendar entries deleted"); + SendOkMsgL( KNullDesC8 ); + } + else + { + HTI_LOG_TEXT("Failed to delete all calendar entries"); + SendErrorMessageL( KErrGeneral, KErrorFailedDeleteAll ); + } + } + + // If id given, delete only calendar entry having that id + else + { + TCalLocalUid id = aData[0] + ( aData[1] << 8 ) + + ( aData[2] << 16 ) + + ( aData[3] << 24 ); + HTI_LOG_FORMAT( "CPIMHandler: Deleting one calendar entry %d", id ); + CCalEntry* entryToDelete = NULL; + TRAPD( err, entryToDelete = entryView->FetchL( id ) ); + + if ( err || entryToDelete == NULL ) + { + HTI_LOG_TEXT( "CPIMHandler: Calendar entry not found" ); + SendErrorMessageL( KErrNotFound, KErrorItemNotFound ); + } + else + { + CleanupStack::PushL( entryToDelete ); + TRAP( err, entryView->DeleteL( *entryToDelete ) ); + if ( err == KErrNone ) + { + HTI_LOG_TEXT("calendar entrie deleted"); + SendOkMsgL( KNullDesC8 ); + } + else + { + HTI_LOG_TEXT( "Failed to delete calendar entry" ) + SendErrorMessageL( KErrGeneral, KErrorFailedDelete ); + } + CleanupStack::PopAndDestroy( entryToDelete ); + } + } + CleanupStack::PopAndDestroy(); //entryView; + HTI_LOG_FUNC_OUT( "CPIMHandler::HandleVCalendarDeleteFuncL" ); + } + +#if ( SYMBIAN_VERSION_SUPPORT < SYMBIAN_4 ) +TInt CallNpdHlp( const TDesC& aCmd ) + { + HTI_LOG_FUNC_IN( "CallNpdHlp" ); + + RProcess HtiNpdHlp; + TInt err = HtiNpdHlp.Create( KHtiNpdHlpExe, aCmd ); + if ( err ) + { + HTI_LOG_FORMAT( "Could not create HtiNpdHlp.Exe process %d", err ); + return err; + } + + TRequestStatus status; + HtiNpdHlp.Logon( status ); + HtiNpdHlp.Resume(); + User::WaitForRequest( status ); + if ( status.Int() != KErrNone ) + { + HTI_LOG_FORMAT( "status %d", status.Int() ); + HTI_LOG_FORMAT( "ExitReason %d", HtiNpdHlp.ExitReason() ); + HTI_LOG_FORMAT( "ExitType %d", HtiNpdHlp.ExitType() ); + HtiNpdHlp.Close(); + return status.Int(); + } + + HtiNpdHlp.Close(); + + HTI_LOG_FUNC_OUT( "CallNpdHlp" ); + return KErrNone; + } +#endif + +// ---------------------------------------------------------------------------- +void CPIMHandler::HandleNotepadAddMemoFuncL( const TDesC8& aData ) + { + HTI_LOG_FUNC_IN( "CPIMHandler::HandleNotepadAddMemoFuncL" ); +#if ( SYMBIAN_VERSION_SUPPORT < SYMBIAN_4 ) + if ( aData.Length() < 1 ) + { + SendErrorMessageL( KErrArgument, KErrorMissingText ); + return; + } + + // convert text from TDesC8 -> TDesC + // expecting the input TDesC8 contains UTF-8 data + HBufC* text = CnvUtfConverter::ConvertToUnicodeFromUtf8L( aData ); + HTI_LOG_TEXT( "CPIMHandler: Conversion to Unicode done" ); + CleanupStack::PushL( text ); + + HBufC* cmd = HBufC::NewLC( KCmdAddMemo().Length() + 1 + ( *text ).Length() ); + cmd->Des().Copy( KCmdAddMemo ); + cmd->Des().Append( KCmdDelim ); + cmd->Des().Append( *text ); + + TInt err = CallNpdHlp( *cmd ); + if ( err ) + { + SendErrorMessageL( err, KErrorNotepadAddMemoFailed ); + } + else + { + SendNotepadOkMsgL( CHtiPIMServicePlugin::ENotepadAddMemo ); + } + + CleanupStack::PopAndDestroy( 2 ); // text, cmd +#else + SendErrorMessageL(KErrNotSupported, KErrorNotepadNotSupported); +#endif + HTI_LOG_FUNC_OUT( "CPIMHandler::HandleNotepadAddMemoFuncL" ); + } + +// ---------------------------------------------------------------------------- +void CPIMHandler::HandleNotepadAddMemoFromFileFuncL( const TDesC8& aData ) + { + HTI_LOG_FUNC_IN( "CPIMHandler::HandleNotepadAddMemoFromFileFuncL" ); +#if ( SYMBIAN_VERSION_SUPPORT < SYMBIAN_4 ) + if ( aData.Length() < 1 ) + { + SendErrorMessageL( KErrArgument, KErrorMissingFilepath ); + return; + } + + // convert filename from TDesC8 -> TDesC + // expecting the input TDesC8 contains UTF-8 data + HBufC* filename = CnvUtfConverter::ConvertToUnicodeFromUtf8L( aData ); + HTI_LOG_TEXT( "CPIMHandler: Conversion to Unicode done" ); + CleanupStack::PushL( filename ); + + HBufC* cmd = HBufC::NewLC( KCmdAddMemoFromFile().Length() + 1 + ( *filename ).Length() ); + cmd->Des().Copy( KCmdAddMemoFromFile ); + cmd->Des().Append( KCmdDelim ); + cmd->Des().Append( *filename ); + + TInt err = CallNpdHlp( *cmd ); + if ( err ) + { + SendErrorMessageL( err, KErrorNotepadAddMemoFromFileFailed ); + } + else + { + SendNotepadOkMsgL( CHtiPIMServicePlugin::ENotepadAddMemoFromFile ); + } + + CleanupStack::PopAndDestroy( 2 ); // filename, cmd +#else + SendErrorMessageL(KErrNotSupported, KErrorNotepadNotSupported); +#endif + HTI_LOG_FUNC_OUT( "CPIMHandler::HandleNotepadAddMemoFromFileFuncL" ); + } + +// ---------------------------------------------------------------------------- +void CPIMHandler::HandleNotepadDeleteAllFuncL() + { + HTI_LOG_FUNC_IN( "CPIMHandler::HandleNotepadDeleteAllFuncL" ); +#if ( SYMBIAN_VERSION_SUPPORT < SYMBIAN_4 ) + TInt err = CallNpdHlp( KCmdDeleteAll() ); + if ( err ) + { + SendErrorMessageL( err, KErrorNotepadDeleteAllFailed ); + } + else + { + SendNotepadOkMsgL( CHtiPIMServicePlugin::ENotepadDeleteAll ); + } +#else + SendErrorMessageL(KErrNotSupported, KErrorNotepadNotSupported); +#endif + HTI_LOG_FUNC_OUT( "CPIMHandler::HandleNotepadDeleteAllFuncL" ); + } + +// ---------------------------------------------------------------------------- +void CPIMHandler::SendNotepadOkMsgL( CHtiPIMServicePlugin::TCommand aCommand ) + { + HTI_LOG_FUNC_IN( "CPIMHandler::SendNotepadOkMsgL" ); + TBuf8<1> msg; + msg.Append( aCommand ); + User::LeaveIfError( iDispatcher->DispatchOutgoingMessage( + msg.AllocL(), KPIMServiceUid ) ); + iIsBusy = EFalse; + HTI_LOG_FUNC_OUT( "CPIMHandler::SendNotepadOkMsgL" ); + } + +// ---------------------------------------------------------------------------- +void CPIMHandler::SendOkMsgL( const TDesC8& aData ) + { + HTI_LOG_FUNC_IN( "CPIMHandler::SendOkMsgL: Starting" ); + + User::LeaveIfNull( iDispatcher ); + + HBufC8* temp = HBufC8::NewL( aData.Length() + 1 ); + TPtr8 response = temp->Des(); + response.Append( ( TChar ) CHtiPIMServicePlugin::EResultOk ); + response.Append( aData ); + User::LeaveIfError( iDispatcher->DispatchOutgoingMessage( + temp, KPIMServiceUid ) ); + iIsBusy = EFalse; + HTI_LOG_FUNC_OUT( "CPIMHandler::SendOkMsgL: Done" ); + } + +// ---------------------------------------------------------------------------- +void CPIMHandler::SendErrorMessageL( TInt aError, const TDesC8& aDescription ) + { + HTI_LOG_FUNC_IN( "CPIMHandler::SendErrorMessageL: Starting" ); + User::LeaveIfNull( iDispatcher ); + User::LeaveIfError( iDispatcher->DispatchOutgoingErrorMessage( + aError, aDescription, KPIMServiceUid ) ); + iIsBusy = EFalse; + HTI_LOG_FUNC_OUT( "CPIMHandler::SendErrorMessageL: Done" ); + } + +// ---------------------------------------------------------------------------- +// CPIMHandler::Progress +// Called during calendar entry view creation and operations. +// Called only if NotifyProgress returns ETrue. +// From MCalProgressCallBack +// ---------------------------------------------------------------------------- +void CPIMHandler::Progress( TInt /*aProgress*/ ) + { + } + +// ---------------------------------------------------------------------------- +// CPIMHandler::Completed +// Called on completion of calendar entry view creation and operations +// From MCalProgressCallBack +// ---------------------------------------------------------------------------- +void CPIMHandler::Completed( TInt aError ) + { + HTI_LOG_FUNC_IN( "CPIMHandler::Completed" ); + HTI_LOG_FORMAT( "Completed with error code %d", aError ); + iEntryViewErr = aError; + iWaiter->AsyncStop(); + HTI_LOG_FUNC_OUT( "CPIMHandler::Completed" ); + } + +// ---------------------------------------------------------------------------- +// CPIMHandler::NotifyProgress +// Returns whether or not progress notification is required +// From MCalProgressCallBack +// ---------------------------------------------------------------------------- +TBool CPIMHandler::NotifyProgress() + { + HTI_LOG_FUNC_IN( "CPIMHandler::NotifyProgress" ); + HTI_LOG_FUNC_OUT( "CPIMHandler::NotifyProgress" ); + return EFalse; // Don't notify about progress + }