messagingapp/msgutils/unidatautils/unidatamodel/src/UniDataUtils.cpp
changeset 25 84d9eb65b26f
child 37 518b245aa84c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgutils/unidatautils/unidatamodel/src/UniDataUtils.cpp	Mon May 03 12:29:07 2010 +0300
@@ -0,0 +1,250 @@
+/*
+* 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: 
+*           Data utility class for UniEditor & MMS related editors and viewers
+*
+*
+*/
+
+
+// ========== INCLUDE FILES ================================
+
+#include <e32std.h>
+#include <e32base.h>
+#include <f32file.h>
+#include <data_caging_path_literals.hrh>
+
+#include <bautils.h>
+
+#include <mtclbase.h>
+#include <msvstore.h>
+#include <mmsvattachmentmanager.h>
+#include <cmsvattachment.h>
+#include <cmsvmimeheaders.h>
+
+#include <StringLoader.h>           // for StringLoader (load and foramt strings from resources)
+#include <CommonContentPolicy.h>
+
+#include <UniDataModel.rsg>           // Viewer/Editor Mimetype strings
+
+#include "UniModelConst.h"
+#include "UniDataUtils.h"
+#include "msgtextutils.h"
+#include "MsgMimeTypes.h"
+
+// ========== LOCAL CONSTANTS AND MACROS ===================
+
+const TInt KTextBufferMaxSize( 256 );   // Max size for string read from resources.
+                                        // NOTE: This is 256 unicode chars, too.
+
+// ========== MEMBER FUNCTIONS =============================
+
+
+// ---------------------------------------------------------
+// CUniDataUtils::NewL
+// ---------------------------------------------------------
+//
+EXPORT_C CUniDataUtils* CUniDataUtils::NewL( RFs& aFs )
+    {
+    CUniDataUtils* data = new ( ELeave ) CUniDataUtils( aFs );
+    CleanupStack::PushL( data );
+    data->ConstructL();
+    CleanupStack::Pop( data );
+    return data;
+    }
+
+
+// ---------------------------------------------------------
+// CUniDataUtils::CUniDataUtils
+//
+// Constructor
+// ---------------------------------------------------------
+//
+CUniDataUtils::CUniDataUtils( RFs& aFs )
+    : iFs( aFs )
+    {
+    }
+
+
+// ---------------------------------------------------------
+// CUniDataUtils::ConstructL
+// ---------------------------------------------------------
+//
+void CUniDataUtils::ConstructL()
+    {
+    RegisterDataL();
+    iTextUtils = CMsgTextUtils::NewL( iFs );
+    }
+
+// ---------------------------------------------------------
+// CUniDataUtils::~CUniDataUtils
+//
+// Destructor.
+// ---------------------------------------------------------
+//
+CUniDataUtils::~CUniDataUtils()
+    {
+    delete iDefaultFileName;
+    delete iEmptyPageString;
+    delete iTextUtils;
+    }
+
+// ---------------------------------------------------------
+// CUniDataUtils::CharconvIdToMibIdL
+// ---------------------------------------------------------
+//
+EXPORT_C TUint CUniDataUtils::CharconvIdToMibIdL( TUint aCharconvCharsetId )
+    {
+    return iTextUtils->CharconvIdToMibIdL( aCharconvCharsetId );
+    }
+
+// ---------------------------------------------------------
+// CUniDataUtils::MibIdToCharconvIdL
+// ---------------------------------------------------------
+//
+EXPORT_C TUint CUniDataUtils::MibIdToCharconvIdL( TUint aMibId )
+    {
+    return iTextUtils->MibIdToCharconvIdL( aMibId );
+    }
+
+// ---------------------------------------------------------
+// CUniDataUtils::UTF8Size
+// ---------------------------------------------------------
+EXPORT_C TInt CUniDataUtils::UTF8Size( TPtrC aText )
+    {
+    return CMsgTextUtils::UTF8Size( aText );
+    }
+
+// ---------------------------------------------------------
+// CUniDataUtils::RegisterDataL
+//
+// Registers data
+// ---------------------------------------------------------
+//
+void CUniDataUtils::RegisterDataL()
+    {
+    TFileName fileName;
+    TParse parse;
+    parse.Set( KUniDataModelResourceFilename, &KDC_RESOURCE_FILES_DIR, NULL );
+    fileName = parse.FullName();
+
+    BaflUtils::NearestLanguageFile( iFs, fileName );
+
+    RResourceFile resourceFile;
+    resourceFile.OpenL( const_cast<RFs&>( iFs ), fileName );
+    resourceFile.ConfirmSignatureL( KDefResFileSignature );
+    CleanupClosePushL( resourceFile );
+
+    iDefaultFileName = ReadResStringL( resourceFile, R_MMDU_DEFAULT_FILE_NAME );
+    iEmptyPageString = ReadResStringL( resourceFile, R_MMDU_EMPTY_SLIDE );
+
+    CleanupStack::PopAndDestroy( &resourceFile );
+    }
+
+
+// ---------------------------------------------------------
+// CUniDataUtils::ReadResStringL
+//
+// Read single string.
+// ---------------------------------------------------------
+//
+HBufC* CUniDataUtils::ReadResStringL( const RResourceFile& aResourceFile, TInt aSrcResId )
+    {
+    HBufC* readBuf = HBufC::NewLC( KTextBufferMaxSize );
+    TPtr8 readBuffer( (TText8*) readBuf->Ptr(), KTextBufferMaxSize * 2 );
+    aResourceFile.ReadL(readBuffer, (0x00000fff & aSrcResId) ); // Remove offset from id
+
+    if ( readBuffer.Length() != 0 )
+        {
+        readBuf->Des().SetLength((readBuffer.Length()+1)>>1);
+        }
+
+    CleanupStack::Pop( readBuf );
+    return readBuf;
+    }
+
+// ---------------------------------------------------------
+// FileSizeL
+// ---------------------------------------------------------
+EXPORT_C TInt CUniDataUtils::FileSizeL( const TFileName& aFileName )
+    {
+    TInt size(0);
+    RFile file;
+
+    TInt err = file.Open( iFs, aFileName, EFileShareAny );
+    if ( err == KErrAccessDenied || err == KErrInUse )
+        {
+        err = file.Open( iFs, aFileName, EFileShareReadersOnly );
+        }
+    if ( err == KErrNone )
+        {
+        file.Size( size );
+        }
+    else
+        {
+        file.Close();
+        User::Leave( err );
+        }
+
+    file.Close();
+    return size;
+    }
+
+// ---------------------------------------------------------
+// CUniObject::GetAttachmentFileL
+// ---------------------------------------------------------
+//
+EXPORT_C RFile CUniDataUtils::GetAttachmentFileL( CBaseMtm& aMtm, TMsvAttachmentId aId )
+    {
+    RFile file;
+    CMsvStore* store = aMtm.Entry().ReadStoreL();
+    CleanupStack::PushL( store );
+    MMsvAttachmentManager& manager = store->AttachmentManagerL();
+    file = manager.GetAttachmentFileL( aId );
+    CleanupStack::PopAndDestroy( store );
+
+    return file;
+    }
+
+// ---------------------------------------------------------
+// CUniObject::IndexPositionOfAttachmentL
+// ---------------------------------------------------------
+//
+EXPORT_C TInt CUniDataUtils::IndexPositionOfAttachmentL(
+        MMsvAttachmentManager& aManager,
+        TMsvAttachmentId aId )
+	{
+    TInt count = aManager.AttachmentCount();
+	TInt foundPosition = KErrNotFound;
+
+    for ( TInt i = 0; i < count; ++i )
+        {
+        CMsvAttachment* attachment = aManager.GetAttachmentInfoL( i );
+        TMsvAttachmentId id = attachment->Id();
+        delete attachment;
+        if ( id == aId )
+            {
+            foundPosition = i;
+            break;
+            }
+        }
+
+	// Leave with KErrNotFound if the attachment id is not found
+	User::LeaveIfError( foundPosition );
+
+	// return the index position of attachment
+	return foundPosition;
+	}
+
+//  End of File