--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mobilemessaging/unieditor/model/inc/UniDataModel.h Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,401 @@
+/*
+* 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:
+* CUniDataModel
+*
+*/
+
+
+
+
+#ifndef __UNIDATAMODEL_H
+#define __UNIDATAMODEL_H
+
+// INCLUDES
+#include <gmxmlparser.h>
+#include <gmxmldocument.h>
+#include <msvapi.h> // CMsvEntry
+#include <unidatautils.h>
+#include <unismilmodel.h>
+#include <unismillist.h>
+#include <uniobject.h>
+
+#include <mmsvattachmentmanager.h>
+#include <mmsvattachmentmanagersync.h>
+#include <MsgMediaInfo.h>
+
+// CONSTANTS
+
+// MACROS
+
+// DATA TYPES
+
+// FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+
+class CBaseMtm;
+class CUniDataUtils;
+class CUniObjectsModel;
+class CUniObjectList;
+class CUniObjectsInfo;
+class CMsgMediaResolver;
+class CMmsConformance;
+class CMsvMimeHeaders;
+class CMsvAttachment;
+
+// CLASS DECLARATION
+
+/**
+* MUniDataModelObserver - Callback API for model operations.
+*
+* @since 3.1
+*/
+class MUniDataModelObserver
+ {
+ public:
+ virtual void RestoreReady( TInt aParseResult, TInt aError ) = 0;
+ };
+
+/**
+* CUniDataModel - A container class that owns instances of CMsgMediaResolver,
+* CMmsConformance, CUniDataUtils, CUniObjectList, CUniSmilList and CUniSmilModel.
+* It also handles the initialization of the lists & the SMIL model.
+*
+* @lib UniDataModel.lib
+* @since 3.1
+*/
+class CUniDataModel : public CBase,
+ public MMDXMLParserObserver,
+ public MMediaInfoObserver
+ {
+ public: // Constructors and destructor
+
+ static IMPORT_C CUniDataModel* NewL( RFs& aFs, CBaseMtm& aMtm );
+
+ /**
+ * Destructor.
+ */
+ IMPORT_C ~CUniDataModel();
+
+ public: // New functions
+
+ /**
+ * RestoreL
+ * Loads attachments from message store and initializes
+ * the model.
+ * @param aObserver IN Callback observer
+ * @param aRemoveCorrupted IN If ETrue removes corrupted attachments
+ * If EFalse leaves if corrupted attachments detected
+ * @param aAllowSmil IN If ETrue puts SMIL files to "SmilList"
+ * If EFalse puts SMIL files to "AttachmentList"
+ */
+ IMPORT_C void RestoreL(
+ MUniDataModelObserver& aObserver,
+ TBool aRemoveCorrupted = ETrue,
+ TBool aAllowSmil = ETrue );
+
+ /**
+ * AddObjectL
+ * Adds an object into msg store and smil slide
+ *
+ * @since 3.1
+ * @param aObserver IN Object save observer
+ * @param aMedia IN media info - ownership transferred to MsgObject
+ * @param aSaveType IN either "file" or "linked file"
+ * @return Pointer to the added object
+ * Ownership NOT transferred.
+ */
+ IMPORT_C CUniObject* AddAttachmentL(
+ MUniObjectSaveObserver& aObserver,
+ CMsgMediaInfo* aMedia,
+ CMsvAttachment::TMsvAttachmentType aSaveType = CMsvAttachment::EMsvLinkedFile );
+
+ /**
+ * AddStoredAttachmentL
+ * Adds an object that is already in msg store to smil slide
+ *
+ * @since 3.1
+ * @param aAttachmentId IN file to be added
+ * @param aMedia IN media info - ownership transferred to MsgObject
+ * @return Pointer to the added object
+ * Ownership NOT transferred.
+ */
+ IMPORT_C CUniObject* AddStoredAttachmentL(
+ TMsvAttachmentId aAttachmentId,
+ CMsgMediaInfo* aMedia );
+
+ /**
+ * FinalizeMediaParse
+ * This function synchronizes asynchronous media info parsing if it is still ongoing
+ * To be called from editor/viewer when the message is to be send/saved/forwarded
+ * @since 3.2
+ */
+ IMPORT_C void FinalizeMediaParse();
+
+ public:
+
+ /**
+ * MediaInfoParsed
+ * Callback for MediaInfo active object
+ * @since 3.2
+ */
+ void MediaInfoParsed();
+
+ /**
+ * ParseNextObject
+ * Parses the next object in a to-be-parsed list
+ * Actual parsing is dedicated to MediaInfo's asynchronous method
+ * @since 3.2
+ */
+ void ParseNextObject();
+
+ /**
+ * ParseFileCompleteL
+ * Call back function used to inform client of Parser when RunL function completes
+ */
+ void ParseFileCompleteL();
+
+ public: // inlines
+
+ /**
+ * Returns number of corrupted attachments encountered at load time
+ * i.e. entry is stil there but binary file is missing
+ * Includes corrupted link, presentations etc.
+ *
+ * @return attachment count
+ */
+ inline TInt CorruptedCount() const;
+
+ /**
+ * Returns attachment count before any filtering for "presentation objects"
+ * or corrupted attachments. SMIL attachments are not included in the count.
+ *
+ * @return attachment count
+ */
+ inline TInt OriginalAttachmentCount() const;
+
+ /**
+ * Get reference to file session
+ *
+ * @return reference to RFs
+ */
+ inline RFs& FsSession() const;
+
+ /**
+ * Get reference to base mtm
+ *
+ * @return reference to CBaseMtm
+ */
+ inline CBaseMtm& Mtm() const;
+
+ /**
+ * Returns object list owned by the model. Object list includes all
+ * attachments that are referenced from the SMIL part (or if there is no
+ * SMIL part attachments that are of supported media type).
+ *
+ * @return reference to the object list.
+ */
+ inline CUniObjectList& ObjectList() const;
+
+ /**
+ * Returns attachment list owned by the model. Attachment list includes all
+ * attachments that are NOT referenced from the SMIL part.
+ *
+ * @return reference to the attachment list.
+ */
+ inline CUniObjectList& AttachmentList() const;
+
+ /**
+ * Returns SMIL list owned by the model. SMIL list includes all
+ * attachments that are of type "application/smil".
+ *
+ * @return reference to the SMIL attachment list.
+ */
+ inline CUniSmilList& SmilList() const;
+
+ /**
+ * Returns data utils object used by the model.
+ *
+ * @return reference to the data utils object.
+ */
+ inline CUniDataUtils& DataUtils() const;
+
+ /**
+ * Returns SMIL type of the message.
+ * @return Possible return values are:
+ * -ENoSmil
+ * -EMmsSmil
+ * -EOtherSmil
+ * -EMultipleSmil
+ * -ETemplateSmil
+ */
+ inline TUniSmilType SmilType();
+
+ /**
+ * Returns SMIL type of the message.
+ * @param aSmilType:
+ * -ENoSmil
+ * -EMmsSmil
+ * -EOtherSmil
+ * -EMultipleSmil
+ * -ETemplateSmil
+ */
+ inline void SetSmilType( TUniSmilType aSmilType );
+
+ /**
+ * Get reference to SmilModel
+ *
+ * @return reference to SmilModel
+ */
+ inline CUniSmilModel& SmilModel() const;
+
+ /**
+ * Get reference to MediaResolver
+ *
+ * @return reference to MediaResolver
+ */
+ inline CMsgMediaResolver& MediaResolver() const;
+
+ /**
+ * Get reference to MmsConformance
+ *
+ * @return reference to MmsConformance
+ */
+ inline CMmsConformance& MmsConformance() const;
+
+ /**
+ * Return SMIL DOM
+ *
+ * @return Pointer to SMIL DOM
+ */
+ inline CMDXMLDocument* Dom();
+
+ /**
+ * Set SMIL DOM
+ *
+ * @param Pointer to SMIL DOM, takes ownership
+ */
+ inline void SetDom( CMDXMLDocument* aDom );
+
+ /*
+ * Accessor
+ *
+ * @return parse result from CUniSmilModel::ParseL()
+ */
+ inline TInt ParseResult() const;
+
+ private: // New functions
+
+ /**
+ * CUniDataModel
+ * Constructor.
+ */
+ CUniDataModel( RFs& aFs, CBaseMtm& aMtm );
+
+ /**
+ * ConstructL
+ * 2nd phase constructor.
+ */
+ void ConstructL();
+
+ private: // New Functions
+
+
+ /**
+ * DoParseFileCompleteL
+ */
+ void DoParseFileCompleteL();
+
+ /**
+ * FinalizeRestoreL
+ */
+ void FinalizeRestoreL( TInt aError );
+
+ /**
+ * Handles corrupted attachments.
+ *
+ * @param aRemoveCorrupted IN
+ * - If ETrue tries to recover by removing corrupted attachments.
+ *
+ * Note: This means that SMIL parsing will fail with ESmil_Missing_Objects.
+ * and object order is not maintained. But better to do it this
+ * way so that message can be opened.
+ *
+ * - If EFalse leaves with KErrCorrupt if corrupted attachments detected.
+ * Model not made caller should exit!
+ */
+ void FindAndHandleCorruptL( TBool aRemoveCorrupted );
+
+ /**
+ * Finds corrupted attachments from context message.
+ */
+ CMsvEntrySelection* FindCorruptLC();
+
+ /**
+ * FindAttachmentsL
+ * Browses through SMIL and separates objects that are
+ * referenced from attachments.
+ */
+ void FindAttachmentsL();
+
+ /**
+ * Creates an object from msg store attachment
+ * @param aMimeType - mime type of new object.
+ * @param aAttachmentId - ID to be used for searching
+ * attachment from store
+ */
+ CUniObject* CreateObjectFromAttachmentLC(
+ const TPtrC8& aMimeType,
+ RFile& aFile,
+ MMsvAttachmentManager& aManager,
+ CMsvAttachment& aAttachment );
+
+ /**
+ * Browses through (non-MMS) SMIL and searches reference counts for objects and separates
+ * objects and attachments in different lists.
+ */
+ void FindDomObjectRefCountsL();
+
+ protected: // data
+
+ RFs& iFs;
+ CBaseMtm& iMtm;
+
+ CMsgMediaResolver* iMediaResolver;
+ CMmsConformance* iMmsConformance;
+ CUniDataUtils* iDataUtils;
+ CUniObjectList* iObjectList;
+ CUniObjectList* iAttachmentList;
+ CUniSmilList* iSmilList;
+
+ CUniSmilModel* iSmilModel;
+ TUniSmilType iSmilType;
+ TInt iOrigAttachmentCount;
+ TInt iCorruptedCount; // Number of attas detected to be corrupted when loading
+
+ CMDXMLParser* iParser;
+ CMDXMLDocument* iDom;
+
+ MUniDataModelObserver* iObserver;
+ TInt iParseResult;
+ CActiveSchedulerWait iObjWait;
+ CUniObject* iObjectToParse;
+};
+
+#include <unidatamodel.inl>
+
+#endif // __UNIDATAMODEL_H
+
+// End of file