void CTcFileHandlerSession::ReadFileNameL( TInt aItcArgIndex, const RMessage2& aMessage, TFileName& aFileName ) const { HBufC8* fileName = ReadLC( aItcArgIndex, aMessage ); __ASSERT_ALWAYS( fileName->Des().Length() <= KMaxFileName, User::Leave( KErrArgument ) ); aFileName.Copy( *fileName ); CleanupStack::PopAndDestroy(); // fileName }
void CTcFileHandlerSession::DoCreateFileL( const RMessage2& aMessage ) const { TFileName destinationPath; ReadFileNameL( 0, aMessage, destinationPath ); HBufC8* data = ReadLC( 1, aMessage ); RFs fs; User::LeaveIfError( fs.Connect() ); CleanupClosePushL( fs ); // Make sure path exists, ignore errors since path might exist already fs.MkDirAll( destinationPath ); RFile out; User::LeaveIfError( out.Replace( fs, destinationPath, EFileWrite ) ); CleanupClosePushL( out ); User::LeaveIfError( out.Write( *data ) ); CleanupStack::PopAndDestroy( 3 ); // out, fs, data }
/** Add the given contact item to the database. Forward the call to CPplTableBase based classes representing the tables in the contact database. @param aItem The contact item to be added to the database. @param aSessionId The ID of the session that issued the request. Used to prevent Phonebook Synchroniser deadlock. @return Contact item ID of the contact added to the database. */ TContactItemId CPplContactItemManager::CreateL(CContactItem& aItem, TUint aSessionId) { TBool controlTransaction = !(iTransactionManager.IsTransactionActive()); TBool compressedGuid=EFalse; // If needed generate a gui for the current contact item if (aItem.Guid() == TPtrC(KNullDesC)) { iPreferencePersistor->SetGuidL(aItem, compressedGuid); } if (compressedGuid) { aItem.SetHasCompressedGuid(compressedGuid); } if (aItem.Type() == KUidContactICCEntry) { const TInt ret = iContactProperties.ContactSynchroniserL(aSessionId).ValidateWriteContact(static_cast<CContactICCEntry&>(aItem)); User::LeaveIfError(ret); } if(controlTransaction) { StartTransactionL(aSessionId); } iContactTable->CreateInDbL(aItem); iGroupTable->CreateInDbL(aItem); iCommAddrTable->CreateInDbL(aItem); TContactItemId groupId = iIccContactStore.CreateInDbL(aItem, aSessionId); if(groupId != KNullContactId) { //Every ICC entry is added to a special group, created by the Phonebook //Synchroniser server during the initial synchronisation with the Contacts Model. CContactItemViewDef* itemDef = CContactItemViewDef::NewLC(CContactItemViewDef::EIncludeFields,CContactItemViewDef::EMaskHiddenFields); itemDef->AddL(KUidContactFieldMatchAll); // Add ICC entry to the group. CContactGroup* grp = static_cast<CContactGroup*>(ReadLC(groupId, *itemDef, EPlAllInfo, aSessionId)); grp->AddContactL(aItem.Id()); UpdateL(*grp, aSessionId); CleanupStack::PopAndDestroy(2, itemDef); // grp } if(controlTransaction) { CommitTransactionL(); } // Assuming success if no leaves at this point, so update // the metadata search store for this entry //CCntMetadataOperation* op = CCntMetadataOperation::NewLC(iColSession); //TRAP_IGNORE(op->SaveContactLD(aItem)); //CleanupStack::Pop(op); // Do not destroy - called LD function return aItem.Id(); }