messagingapp/msgutils/unidatamodel/unimmsdataplugin/src/UniTextObject.cpp
changeset 25 84d9eb65b26f
parent 23 238255e8b033
child 27 e4592d119491
child 37 518b245aa84c
child 79 2981cb3aa489
--- a/messagingapp/msgutils/unidatamodel/unimmsdataplugin/src/UniTextObject.cpp	Fri Apr 16 14:56:15 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,539 +0,0 @@
-/*
-* Copyright (c) 2005 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: 
-*       CUniTextObject, Storage for single text attachment in presentation.
-*
-*
-*/
-
-
-// ========== INCLUDE FILES ================================
-
-#include <e32def.h>     // for basic types
-#include <eikenv.h>     // for CBase
-#include <mtclbase.h>   // for CBaseMtm
-#include <msvstd.h>     // for TMsvId
-#include <msvids.h>     // for KMsvTempIndexEntryId
-#include <msvstore.h>
-#include <mmsvattachmentmanager.h>
-#include <cmsvattachment.h>
-
-#include <eikrted.h>    // CEikRichTextEditor
-#include <charconv.h>
-
-
-#include <MsgMediaInfo.h>
-#include <MsgTextInfo.h>
-#include <MsgAttachmentUtils.h>
-
-#include "msgtextutils.h"
-#include "UniModelConst.h"
-#include "UniMimeInfo.h"
-#include "UniObject.h"
-#include "UniTextObject.h"
-#include "UniDataUtils.h"
-//rushi
-#include "MsgMimeTypes.h"
-#include "MuiuOperationWait.h"
-
-
-// ========== EXTERNAL DATA STRUCTURES =====================
-
-// ========== EXTERNAL FUNCTION PROTOTYPES =================
-
-// ========== CONSTANTS ====================================
-
-// ========== MACROS =======================================
-
-// ========== LOCAL CONSTANTS AND MACROS ===================
-const TInt KMaxFilenameLenghtForAttachment = 20;   // Characters
-
-const TInt KMaxCharSize = 3;
-const TInt KMinCharSize = 1;
-// Always count exact size
-// -> performance penalty with very long text files.
-const TInt KSyncInterval = 0;
-const TInt KForceSyncLength = KMaxTInt;
-
-_LIT16( KExtTextPlain_16, ".txt" );
-
-
-// ========== MODULE DATA STRUCTURES =======================
-
-
-// ========== LOCAL FUNCTION PROTOTYPES ====================
-
-// ========== LOCAL FUNCTIONS ==============================
-
-// ========== MEMBER FUNCTIONS =============================
-
-// ---------------------------------------------------------
-// CUniTextObject::NewLC
-//
-// Factory method.
-// ---------------------------------------------------------
-//
-CUniTextObject* CUniTextObject::NewLC( RFs& aFs,
-                                               CBaseMtm& aMtm,
-                                               CUniDataUtils& aData,
-                                               CMsgTextInfo* aMedia,
-                                               MMsvAttachmentManager& aManager,
-                                               CMsvAttachment& aAttachment )
-    {
-    CUniTextObject* self =
-        new ( ELeave ) CUniTextObject( aFs, aMtm, aData, aMedia );
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    self->ConstructFromAttachmentL( aManager, aAttachment );
-    return self;
-    }
-
-// ---------------------------------------------------------
-// CUniTextObject::NewL
-//
-// Factory method.
-// ---------------------------------------------------------
-//
-CUniTextObject* CUniTextObject::NewL( RFs& aFs,
-                                              CBaseMtm& aMtm,
-                                              CUniDataUtils& aData,
-                                              CMsgTextInfo* aMedia,
-                                              MMsvAttachmentManager& aManager,
-                                              CMsvAttachment& aAttachment )
-    {
-    CUniTextObject* self = NewLC( aFs, aMtm, aData, aMedia, aManager, aAttachment );
-    CleanupStack::Pop( self );
-    return self;
-    }
-
-// ---------------------------------------------------------
-// CUniTextObject::NewLC
-//
-// Factory method.
-// ---------------------------------------------------------
-//
-CUniTextObject* CUniTextObject::NewLC( RFs& aFs,
-                                               CBaseMtm& aMtm,
-                                               CUniDataUtils& aData,
-                                               CMsgTextInfo* aMedia )
-    {
-    CUniTextObject* self =
-        new ( ELeave ) CUniTextObject( aFs, aMtm, aData, aMedia );
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    self->CreateMimeInfoL();
-    return self;
-    }
-
-// ---------------------------------------------------------
-// CUniTextObject::NewL
-//
-// Factory method.
-// ---------------------------------------------------------
-//
-CUniTextObject* CUniTextObject::NewL( RFs& aFs,
-                                              CBaseMtm& aMtm,
-                                              CUniDataUtils& aData,
-                                              CMsgTextInfo* aMedia )
-    {
-    CUniTextObject* self = NewLC( aFs, aMtm, aData, aMedia );
-    CleanupStack::Pop( self );
-    return self;
-    }
-
-// ---------------------------------------------------------
-// CUniTextObject::NewLC
-//
-// Factory method.
-// ---------------------------------------------------------
-//
-CUniTextObject* CUniTextObject::NewLC( RFs& aFs,
-                                               CBaseMtm& aMtm,
-                                               CUniDataUtils& aData,
-                                               CEikRichTextEditor* aTextEditor )
-    {
-    RFile nullHandle;
-    TDataType mime( KMsgMimeTextPlain );
-    CMsgTextInfo* info = CMsgTextInfo::NewL(
-        nullHandle,
-        mime,
-        aFs );
-    info->SetCharacterSet( KCharacterSetMIBEnumUtf8 );
-    CleanupStack::PushL( info );
-    CUniTextObject* self =
-        new ( ELeave ) CUniTextObject( aFs, aMtm, aData, info );
-    CleanupStack::Pop( info ); // ownership transferred
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    self->ConstructFromTextL( aTextEditor );
-    self->SynchronizeSize();
-    return self;
-    }
-
-// ---------------------------------------------------------
-// CUniTextObject::NewL
-//
-// Factory method.
-// ---------------------------------------------------------
-//
-CUniTextObject* CUniTextObject::NewL( RFs& aFs,
-                                              CBaseMtm& aMtm,
-                                              CUniDataUtils& aData,
-                                              CEikRichTextEditor* aTextEditor )
-    {
-    CUniTextObject* self = NewLC( aFs, aMtm, aData, aTextEditor );
-    CleanupStack::Pop( self );
-    return self;
-    }
-
-
-// ---------------------------------------------------------
-// CUniTextObject::CUniTextObject
-//
-// Constructor.
-// ---------------------------------------------------------
-//
-CUniTextObject::CUniTextObject( RFs& aFs,
-                               CBaseMtm& aMtm,
-                               CUniDataUtils& aData,
-                               CMsgTextInfo* aMedia )
-        :
-        CUniObject( aFs, aMtm, aData, aMedia ),
-        iTextEditor( NULL )
-    {
-    }
-
-
-// ---------------------------------------------------------
-// CUniTextObject::CUniTextObject
-//
-// Destructor.
-// ---------------------------------------------------------
-//
-CUniTextObject::~CUniTextObject()
-    {
-    if ( iEditFile )
-        {
-        iEditFile->Close();
-        delete iEditFile;
-        }
-    }
-
-// ---------------------------------------------------------
-// CUniTextObject::Save
-// ---------------------------------------------------------
-//
-void CUniTextObject::Save( MUniObjectSaveObserver& aObserver,
-                           CMsvAttachment::TMsvAttachmentType aSaveType )
-    {
-    iTextSaveState = ETextSavingIdle;
-    CUniObject::Save( aObserver, aSaveType );
-    }
-
-// ---------------------------------------------------------
-// CUniTextObject::DoSaveL
-// ---------------------------------------------------------
-//
-void CUniTextObject::DoSaveL()
-    {
-    switch ( iTextSaveState )
-        {
-        case ETextSavingIdle:
-            {
-            InitializeTextSaveL();
-            break;
-            }
-        case ETextCreatingAttachment:
-            {
-            CreateTextAttachmentL();
-            break;
-            }
-        case ETextWritingToFile:
-            {
-            WriteToFileL();
-            break;
-            }
-        default:
-            {
-            break;
-            }
-        }
-    }
-
-// ---------------------------------------------------------
-// CUniTextObject::Size
-//
-// Accessor.
-// ---------------------------------------------------------
-//
-TInt CUniTextObject::Size( TBool aWithoutHeaders )
-    {
-    if ( iTextEditor && iTextEditor->TextLength() )
-        {
-        TInt size = 0;
-        TInt length = iTextEditor->TextLength();
-        TInt change = length - iPrevLength;
-        if ( change )
-            {
-            //add absolute value
-            iSyncCounter += Max( change, -change );
-            iPrevLength = length;
-            }
-        if ( iSyncCounter > KSyncInterval ||
-            length <= KForceSyncLength )
-            {
-            size = SynchronizeSize();
-            }
-        else
-            {
-            TInt diff = length - iSyncLength;
-            TInt charSize = diff < 0
-                ? KMinCharSize
-                : KMaxCharSize;
-            size = iSyncSize + charSize * diff;
-            size = Max( size, 0 );
-            }
-        return ( aWithoutHeaders ? size : size + iMimeInfo->Size() );
-        }
-    else
-        {
-        return CUniObject::Size( aWithoutHeaders );
-        }
-    }
-
-// ---------------------------------------------------------
-// CUniTextObject::SyncronizeSize
-//
-// Counts real buffer size and syncronizes internal
-// size variables.
-// ---------------------------------------------------------
-//
-TInt CUniTextObject::SynchronizeSize()
-    {
-    iSyncCounter = 0;
-    if ( iTextEditor )
-        {
-        iSyncLength = iTextEditor->TextLength();
-        iPrevLength = iSyncLength;
-        TPtrC ptr = iTextEditor->Text()->Read( 0, iTextEditor->Text()->DocumentLength() );
-        iSyncSize = CUniDataUtils::UTF8Size( ptr );
-        }
-    else
-        {
-        iSyncSize = 0;
-        iSyncLength = 0;
-        iPrevLength = 0;
-        }
-    return iSyncSize;
-    }
-
-// ---------------------------------------------------------
-// CUniTextObject::ConstructL
-//
-// 2nd phase constructor.
-// ---------------------------------------------------------
-//
-void CUniTextObject::ConstructL()
-    {
-    CUniObject::ConstructL();
-    }
-
-// ---------------------------------------------------------
-// CUniTextObject::ConstructFromTextL
-//
-// 2nd phase constructor.
-// ---------------------------------------------------------
-//
-void CUniTextObject::ConstructFromTextL( CEikRichTextEditor* aTextEditor )
-    {
-    iAttachmentId = KMsvNullIndexEntryId;
-    iTextEditor = aTextEditor;
-    //iStoreState = EMmsStoreStateTemporary;
-    //Create MIME headers
-    CreateMimeInfoL();
-    }
-
-// ---------------------------------------------------------
-// CreateFileName
-// ---------------------------------------------------------
-//
-void CUniTextObject::CreateFileName( TFileName& aFileName )
-    {
-    if ( iTextEditor && iTextEditor->Text()->DocumentLength() )
-        {
-    	TPtrC ptr = iTextEditor->Text()->Read( 0, KMaxFilenameLenghtForAttachment );
-        MsgAttachmentUtils::GetFileNameFromBuffer(
-            aFileName,
-            ptr,
-            KMaxFilenameLenghtForAttachment,
-            &KExtTextPlain_16 );
-        }
-    if ( aFileName.Length() == 0 ||
-        !iFs.IsValidName( aFileName ) )
-        {
-        // No filename -> Use default
-        aFileName.Zero();
-        aFileName.Copy( iData.DefaultFileName() );
-        aFileName.Append( KExtTextPlain_16 );
-        }
-    }
-
-// ---------------------------------------------------------
-// InitializeTextSaveL
-// ---------------------------------------------------------
-//
-void CUniTextObject::InitializeTextSaveL()
-    {
-    if ( !iTextEditor )
-        {
-        CUniObject::DoSaveL();
-        return;
-        }
-
-    // Remove possibly already existing attachment from store
-    RemoveFromStoreL();
-
-    if ( !iTextEditor->TextLength() )
-        {
-        //Nothing to save. (Shouldn't really get here
-        //since there shouldn't be "empty" text objects
-        //in the smil model.)
-        iObserver->ObjectSaveReady( KErrNone );
-        return;
-        }
-    iTextSaveState = ETextCreatingAttachment;
-    //CompleteSelf();
-    RunL();
-    }
-
-// ---------------------------------------------------------
-// CreateTextAttachmentL
-// ---------------------------------------------------------
-//
-void CUniTextObject::CreateTextAttachmentL()
-    {
-    TFileName fileName;
-    CreateFileName( fileName );
-
-    TFileName contentLocation( fileName );
-    CMsgTextUtils::TrimAndRemoveNonAlphaDigit( contentLocation );
-    iMimeInfo->SetContentLocationL( contentLocation );
-    iMimeInfo->SetContentTypeL( KMsgMimeTextPlain );
-    iMimeInfo->SetCharset( KCharacterSetMIBEnumUtf8 );
-
-    iEditStore = iMtm.Entry().EditStoreL();
-    iManager = &( iEditStore->AttachmentManagerL() );
-    CMsvAttachment* attachment = CMsvAttachment::NewL( CMsvAttachment::EMsvFile );
-    CleanupStack::PushL( attachment );
-
-    attachment->SetMimeTypeL( KMsgMimeTextPlain );
-    attachment->SetSize( SynchronizeSize() );
-    //TODO: Set complete flag?
-    //attachment->SetComplete( EFalse );
-
-    attachment->SetIntAttributeL( KUidAttachmentIndication, Attachment() );
-
-    iEditFile = new ( ELeave ) RFile;
-
-    //Make this synchronous process
-    CMuiuOperationWait* wait = CMuiuOperationWait::NewLC();
-    
-    iManager->CreateAttachmentL( fileName, *iEditFile, attachment, wait->iStatus );
-    wait->Start();
-    
-    CleanupStack::PopAndDestroy( wait );
-    	
-    CleanupStack::Pop( attachment );
-    iAttachment = attachment;
-    iTextSaveState = ETextWritingToFile;
-    
-    //SetActive();
-    RunL();
-    }
-
-// ---------------------------------------------------------
-// WriteToFileL
-// ---------------------------------------------------------
-//
-void CUniTextObject::WriteToFileL()
-    {
-    RFileWriteStream writer( *iEditFile );
-    delete iEditFile;
-    iEditFile = NULL;
-
-    // Write the text to a file
-
-    // UTF-8 signature
-    // Taken out because not all terminals can deal with it.
-    // Maybe taken back into use in the future
-    //writer.WriteInt8L( 0xEF );
-    //writer.WriteInt8L( 0xBB );
-    //writer.WriteInt8L( 0xBF );
-
-    HBufC* buffer = iTextEditor->GetTextInHBufL();
-    CleanupStack::PushL( buffer );
-
-    // Convert the text to utf8
-    CCnvCharacterSetConverter* converter = CCnvCharacterSetConverter::NewLC();
-
-    if ( converter->PrepareToConvertToOrFromL( KCharacterSetIdentifierUtf8, iFs )
-        != CCnvCharacterSetConverter::EAvailable )
-        {
-        User::Leave( KErrNotSupported );
-        }
-
-    TBuf8<128> outputBuffer;
-    TPtrC16 remainderOfUnicodeText( *buffer );
-    FOREVER
-        {
-        TInt returnValue = converter->ConvertFromUnicode(
-            outputBuffer, remainderOfUnicodeText );
-        if ( returnValue == CCnvCharacterSetConverter::EErrorIllFormedInput )
-            {
-            User::Leave( KErrCorrupt );
-            }
-        else if ( returnValue<0 ) // future-proof against "TError" expanding
-            {
-            User::Leave( KErrGeneral );
-            }
-
-        // ? - do something here with outputBuffer
-        writer.WriteL( outputBuffer );
-
-        if ( returnValue == 0 )
-            {
-            break; // all of aUnicodeText has been converted and handled
-            }
-        remainderOfUnicodeText.Set( remainderOfUnicodeText.Right(
-            returnValue ) );
-        }
-
-    CleanupStack::PopAndDestroy( 2, buffer ); //converter, buffer
-
-    // Close handles
-    writer.Close();
-    //TInt fileSize( 0 );
-    //iEditFile->Size( fileSize );
-    //iAttachment->SetSize( fileSize );
-    //iEditFile->Close();
-    //delete iEditFile;
-    //iEditFile = NULL;
-
-    // Closes & destroys other "attachment handling" members
-    // Sends callback to observer
-    FinalizeObjectSaveL();
-    }
-
-
-// End of file