mmsengine/inc/mmsattachmenthandler.h
changeset 0 72b543305e3a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmsengine/inc/mmsattachmenthandler.h	Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,236 @@
+/*
+* Copyright (c) 2004-2007 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:  
+*     Attachment handling helper functions functions
+*
+*/
+
+
+
+#ifndef MMSATTACHMENTHANDLER_H
+#define MMSATTACHMENTHANDLER_H
+
+// INCLUDES
+#include <e32def.h>
+#include <cmsvattachment.h> // for TMsvAttachmentId
+
+// CONSTANTS
+
+// MACROS
+
+// DATA TYPES
+
+// FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+class CMsvStore;
+class RFs;
+class RFile;
+class TDesC8;
+class TDriveUnit;
+class CMsvMimeHeaders;
+
+// CLASS DECLARATION
+
+/**
+* Attachment handling functions that can be called from both client and
+* server side
+*
+* @lib mmsgenutil.lib
+* @since 3.2
+*/
+NONSHARABLE_CLASS( CMmsAttachmentHandler ):public CBase
+    {
+    public:  // Constructors and destructor
+        
+        /**
+        * Two-phased constructor.
+        * @param aEntryWrapper MMS entry wrapper hiding difference between
+        *     CMsvServerEntry and CMsvEntry.
+        */
+        IMPORT_C static CMmsAttachmentHandler* NewL();
+        
+        /**
+        * Destructor.
+        */
+        virtual ~CMmsAttachmentHandler();
+
+    public: // New functions
+
+        /**
+        * Returns total size of all attachments including mime headers
+        * and binary attachment data. Linked attachments are included
+        * This function is needed to allocate the encoding buffer.
+        * @param aStore Read store for the message entry
+        * @return combined size of all attachments, including linked attachments
+        */
+        IMPORT_C static TInt AttachmentsSizeL( CMsvStore& aStore );
+        
+        /**
+        * Check if aFileName would be a valid filename.
+        * Cannot use path because absolute path is not known. Only filename is checked
+        * @param aFs open file system handle.
+        * @param aFileName suggestion of a filename.
+        * @return ETrue if filename is valid, EFalse if not.
+        */
+        IMPORT_C static TBool IsValidFilename( RFs& aFs, const TPtrC& aFileName );
+
+        /**
+        * Create attachment entry and copy specified file to binary file storage.
+        * @param aStore an open EditStore. Caller must commit store
+        *     (several attachments can be added before committing store)
+        * @param aFile opened file handle, source of the attachment.
+        *     File must be in public location to be accessible.
+        *     Caller must close the file afterwards.
+        * @param aFs File session handle. Needed to check disk space
+        * @param aMessageDrive the drive the message store is on.
+        *     (needed for disk space check)
+        * @param aMimeType mime type of the attachmet.
+        * @param aMimeHeaders mime headers for the attachment. If content type is not
+        *     defined, function adds the mime type and subtype from aMimeType
+        *     Suggested filename in mimeHeaders is used as attachment name
+        * @param aAttachmentInfo must be initialized to a CMsvAttachment::EMsvFile
+        *     on return contains data about the attachment.
+        *     Ownership of attachmentinfo is transferred to attachment manager,
+        *     it must not be deleted by caller.
+        *     Attachment manager will be destroyed when store is deleted.
+        *     After that aAttachmentInfo will no longer be available.
+        * @param aAttaId attachment id of the newly created attachment
+        */
+        IMPORT_C static void CreateAttachmentL(
+            CMsvStore& aStore,
+            RFile& aFile,
+            RFs& aFs,
+            TDriveUnit aMessageDrive,
+            TDesC8& aMimeType,
+            CMsvMimeHeaders& aMimeHeaders,
+            CMsvAttachment* aAttachmentInfo,
+            TMsvAttachmentId& aAttaId);
+            
+        /**
+        * Create text/plain attachment. <br>
+        * Creates a text attachment from descriptor.
+        * Has option to convert all unicode paragraph separator marks to line feeds.
+        * Converts text from unicode (ucs-2) to utf-8 before storing it.
+        * @param aStore an open EditStore. Caller must commit store
+        *     (several attachments can be added before committing store)
+        * @param aAttachmentId returned ID of the new attachment entry
+        * @param aText UNICODE text to be added as a text/plain attachment.
+        * @param aFile suggested filename for the attachment
+        * @param aFs File session handle. Needed to check disk space
+        * @param aMessageDrive the drive the message store is on.
+        *     (needed for disk space check)
+        * @param aConvertParagraphSeparator flag to tell if the function 
+        *     will search for all 0x2029 characters (Unicode paragraph
+        *     separator) and replace them with 0x000a (line feed).
+        *     aConvertParagraphSeparator == ETrue: convert
+        *     aConvertParagraphSeparator == EFalse: do not convert
+        */
+        IMPORT_C static void CreateTextAttachmentL(
+            CMsvStore& aStore,
+            TMsvAttachmentId& aAttachmentId,
+            const TDesC& aText,
+            const TDesC& aFile,
+            RFs& aFs,
+            TDriveUnit aMessageDrive,
+            TBool aConvertParagraphSeparator = ETrue );
+            
+        /**
+        * Create text/plain attachment. <br>
+        * Creates a text attachment from descriptor.
+        * Has option to convert all unicode paragraph separator marks to line feeds.
+        * Converts text from unicode (ucs-2) to utf-8 before storing it.
+        * @param aStore an open EditStore. Caller must commit store
+        *     (several attachments can be added before committing store)
+        * @param aAttachmentId returned ID of the new attachment entry
+        * @param aFile open file read handle to unicode plain text file
+        * @param aFs File session handle. Needed to check disk space
+        * @param aMessageDrive the drive the message store is on.
+        *     (needed for disk space check)
+        */
+        IMPORT_C static void CreateUTF8TextAttachmentFromFileL(
+            CMsvStore& aStore,
+            TMsvAttachmentId& aAttachmentId,
+            RFile& aFile,
+            RFs& aFs,
+            TDriveUnit aMessageDrive
+            );
+            
+        
+    public: // Functions from base classes
+
+    protected:  // New functions
+        
+    protected:  // Functions from base classes
+        
+    private:
+
+        /**
+        * C++ constructor.
+        * @param aEntryWrapper MMS entry wrapper hiding difference between
+        *     CMsvServerEntry and CMsvEntry
+        */
+        CMmsAttachmentHandler( );
+
+        /**
+        * Constructor.
+        */
+        void ConstructL();
+        
+        /**
+        * Remove an attachment by attaId.
+        * Symbian synchronous attachment manager can only remove by index.
+        * 
+        * @param aAttaId id of the attachment to be removed
+        * @param aStore reference to open edit store
+        */
+        static void RemoveAttachmentL( TMsvAttachmentId aAttaId, CMsvStore& aStore );
+        
+        
+    };
+    
+/**
+* Reads and writes single lines of text to or from a file.
+*
+* @lib mmsgenutil.lib
+* @since 3.2
+*/
+
+NONSHARABLE_CLASS ( TMmsFileText )
+	{
+public:
+	enum TFileState
+		{
+		EStartOfFile,
+		ENormal,
+		EReverse
+		};
+public:
+	TMmsFileText();
+	void Set(RFile& aFile);
+	TInt Read(TDes& aDes);
+private:
+	TInt CheckForTerminator(TBool& anAnswer);
+	TInt FillBuffer();
+private:
+	const TText* iNext;
+	const TText* iEnd;
+	TFileState iState;
+	RFile iFile;
+	TBuf8<0x100> iReadBuf; 
+	};
+	
+#endif      // MMSATTACHMENTHANDLER_H   
+            
+// End of File