messagingapp/msgui/msguiutils/src/mmsconformancecheck.cpp
changeset 37 518b245aa84c
parent 25 84d9eb65b26f
child 38 4e4b6adb1024
--- a/messagingapp/msgui/msguiutils/src/mmsconformancecheck.cpp	Mon May 03 12:29:07 2010 +0300
+++ b/messagingapp/msgui/msguiutils/src/mmsconformancecheck.cpp	Fri Jun 25 15:47:40 2010 +0530
@@ -21,24 +21,26 @@
 #include <MmsConformance.h>
 #include <centralrepository.h>
 #include <mmsconst.h>
-#include <msgmediainfo.h>
+#include <MsgMediaInfo.h>
 #include <fileprotectionresolver.h>
 
 #include <MsgMediaResolver.h>
 #include <DRMHelper.h>
 #include <MmsEngineInternalCRKeys.h>
 #include <hbmessagebox.h>
-#include <hbnotificationdialog>
+#include <HbNotificationDialog>
+#include <hbaction.h>
 
 #include "unidatamodelloader.h"
 #include "unidatamodelplugininterface.h"
-#include "unieditorgenutils.h" // This is needed for KDefaultMaxSize
-#include "s60qconversions.h"
+#include "UniEditorGenUtils.h" // This is needed for KDefaultMaxSize
+#include <xqconversions.h>
 #include "debugtraces.h"
 
 //DEFINES
 #define RMODE_INSERT_ERROR hbTrId("Unable to insert. Object format not supported in restricted creation mode.")
 #define INSERT_ERROR hbTrId("txt_messaging_dpopinfo_unable_to_attach_item_file")
+#define INSERT_PROTECTED_ERROR hbTrId("txt_messaging_dpopinfo_unable_to_attach_protected")
 #define INSERT_QUERY_CONFRM hbTrId("The receiving phone may not support this object. Continue?")
 // -----------------------------------------------------------------------------
 // MmsConformanceCheck::MmsConformanceCheck
@@ -48,7 +50,7 @@
 {
     QDEBUG_WRITE("MmsConformanceCheck::MmsConformanceCheck start");
 
-    TRAP_IGNORE(        
+    TRAP_IGNORE(
         CRepository* repository = CRepository::NewL(KCRUidMmsEngine);
     CleanupStack::PushL(repository);
 
@@ -62,7 +64,7 @@
     repository->Get( KMmsEngineMaximumSendSize, maxSize );
     iMaxMmsSize = maxSize;
 
-    CleanupStack::PopAndDestroy(repository);        
+    CleanupStack::PopAndDestroy(repository);
     );
 
     QDEBUG_WRITE("MmsConformanceCheck::MmsConformanceCheck end");
@@ -85,33 +87,33 @@
     bool showNote)
 {
     QDEBUG_WRITE("MmsConformanceCheck::CheckModeForInsert start");
-    HBufC* filePath = S60QConversions::qStringToS60Desc(file);
+    HBufC* filePath = XQConversions::qStringToS60Desc(file);
     if (filePath)
     {
         CleanupStack::PushL(filePath);
 
         CMmsConformance* mmsConformance = CMmsConformance::NewL();
         mmsConformance->CheckCharacterSet(EFalse);
-        
+
         CleanupStack::PushL(mmsConformance);
-        
-        CMsgMediaResolver* mediaResolver = CMsgMediaResolver::NewL();     
+
+        CMsgMediaResolver* mediaResolver = CMsgMediaResolver::NewL();
         mediaResolver->SetCharacterSetRecognition(EFalse);
-        
+
         CleanupStack::PushL(mediaResolver);
-        
+
         RFile fileHandle = mediaResolver->FileHandleL(*filePath);
         CleanupClosePushL(fileHandle);
 
         CMsgMediaInfo* info = mediaResolver->CreateMediaInfoL(fileHandle);
         mediaResolver->ParseInfoDetailsL(info,fileHandle);
-        
+
         TMmsConformance conformance = mmsConformance->MediaConformance(*info);
-        TUint32 confStatus = conformance.iConfStatus;
+        iConfStatus = conformance.iConfStatus;
 
         CleanupStack::PopAndDestroy(4);
 
-        
+
         // In "free" mode user can insert images that are larger by dimensions than allowed by conformance
         if (iCreationMode != EMmsCreationModeRestricted)
         {
@@ -121,22 +123,21 @@
                     | EMmsConfNokTooBig);
 
             // If user answers yes to Guided mode confirmation query he/she moves to free mode
-            if ( (confStatus & i) && ! (confStatus & j))
+            if ( (iConfStatus & i) && ! (iConfStatus & j))
             {
                 if (iCreationMode == EMmsCreationModeFree || info->Protection()
                         & EFileProtSuperDistributable)
                 {
                     // SuperDistribution not checked here
                     // Mask "FreeModeOnly" and "ScalingNeeded" away in free mode
-                    confStatus &= ~EMmsConfNokFreeModeOnly;
-                    confStatus &= ~EMmsConfNokScalingNeeded;
+                    iConfStatus &= ~EMmsConfNokFreeModeOnly;
+                    iConfStatus &= ~EMmsConfNokScalingNeeded;
                 }
-                else if (showNote && launchEditorQuery())
+                else if (showNote)
                 {
-                    // Query accepted.
-                    // Mask "FreeModeOnly" and "ScalingNeeded" away in free mode
-                    confStatus &= ~EMmsConfNokFreeModeOnly;
-                    confStatus &= ~EMmsConfNokScalingNeeded;
+                    HbMessageBox::question(INSERT_QUERY_CONFRM, this,
+                                           SLOT(onDialogInsertMedia(HbAction*)),
+                                           HbMessageBox::Yes | HbMessageBox::No);
                 }
                 else
                 {
@@ -145,16 +146,24 @@
                 }
             }
         }
-        else if (confStatus & EMmsConfNokDRM || confStatus
-                & EMmsConfNokNotEnoughInfo || confStatus
-                & EMmsConfNokNotSupported || confStatus
-                & EMmsConfNokFreeModeOnly || confStatus & EMmsConfNokCorrupt)
+        else if (iConfStatus & EMmsConfNokDRM || iConfStatus
+                & EMmsConfNokNotEnoughInfo || iConfStatus
+                & EMmsConfNokNotSupported || iConfStatus
+                & EMmsConfNokFreeModeOnly || iConfStatus & EMmsConfNokCorrupt)
         {
             // Sanity check
             // "Not conformant" assumed if check fails.
             if(showNote)
             {
-                showPopup(INSERT_ERROR);
+                // For protected objects.
+                if (EFileProtNoProtection != info->Protection())
+                {
+                    showPopup(INSERT_PROTECTED_ERROR);
+                }
+                else
+                {
+                    showPopup(INSERT_ERROR);
+                }
             }
 
             return EInsertNotSupported;
@@ -174,18 +183,20 @@
     UniDataModelLoader* pluginLoader = new UniDataModelLoader();
     UniDataModelPluginInterface* pluginInterface =
             pluginLoader->getDataModelPlugin(ConvergedMessage::Mms);
-    pluginInterface->setMessageId(messageId);
+    int id = pluginInterface->setMessageId(messageId);
 
-    //Check if slide count is greater than 1
-    if (pluginInterface->slideCount() > 1)
+    //Check if invalid id and slide count is greater than 1
+    if ( ( id <= 0 ) ||
+         (pluginInterface->slideCount() > 1) )
     {
         delete pluginLoader;
         return false;
     }
 
-    //Check if message size is inside max mms composition limits 
+    //Check if message size is inside max mms composition limits
     if (pluginInterface->messageSize() > iMaxMmsSize)
     {
+        delete pluginLoader;
         return false;
     }
 
@@ -211,7 +222,6 @@
     if (!retValue)
     {
         delete pluginLoader;
-
         return false;
     }
 
@@ -233,17 +243,23 @@
         }
 
     delete pluginLoader;
-
     return retValue;
 }
 
-// ---------------------------------------------------------
-// MmsConformanceCheck::launchEditorQuery
-// ---------------------------------------------------------
+// -----------------------------------------------------------------------------
+// MmsConformanceCheck::onDialogInsertMedia
+// -----------------------------------------------------------------------------
 //
-bool MmsConformanceCheck::launchEditorQuery()
+void MmsConformanceCheck::onDialogInsertMedia(HbAction* action)
 {
-    return HbMessageBox::question(INSERT_QUERY_CONFRM);
+    HbMessageBox *dlg = qobject_cast<HbMessageBox*> (sender());
+    if (action == dlg->actions().at(0)) {
+        // Query accepted.
+        // Mask "FreeModeOnly" and "ScalingNeeded" away in free mode
+        iConfStatus &= ~EMmsConfNokFreeModeOnly;
+        iConfStatus &= ~EMmsConfNokScalingNeeded;
+    }
+
 }
 
 // -----------------------------------------------------------------------------