messagingapp/msgui/unifiededitor/src/mmsinsertcheckoperation.cpp
changeset 23 238255e8b033
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/unifiededitor/src/mmsinsertcheckoperation.cpp	Fri Apr 16 14:56:15 2010 +0300
@@ -0,0 +1,155 @@
+/*
+ * Copyright (c) 2009 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: mms creation mode checks
+ *
+ */
+
+
+#include "mmsinsertcheckoperation.h"
+
+#include <MmsConformance.h>
+#include <centralrepository.h>
+#include <mmsconst.h>
+#include <msgmediainfo.h>
+#include <fileprotectionresolver.h>
+
+#include <MsgMediaResolver.h>
+#include <DRMHelper.h>
+#include <MmsEngineInternalCRKeys.h>
+#include <hbmessagebox.h>
+
+#include "s60qconversions.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("Unable to insert. Object format not supported.")
+#define INSERT_QUERY_CONFRM hbTrId("The receiving phone may not support this object. Continue?")
+// -----------------------------------------------------------------------------
+// MmsInsertCheckOperation::MmsInsertCheckOperation
+// -----------------------------------------------------------------------------
+//
+MmsInsertCheckOperation::MmsInsertCheckOperation()
+{
+    QDEBUG_WRITE("MmsInsertCheckOperation::MmsInsertCheckOperation start");
+
+    CRepository* repository = CRepository::NewL(KCRUidMmsEngine);
+    CleanupStack::PushL(repository);
+    TInt creationMode = EMmsCreationModeRestricted;
+    if (repository->Get(KMmsEngineCreationMode, creationMode) == KErrNone) {
+        iCreationMode = creationMode;
+    }
+    CleanupStack::PopAndDestroy(repository);
+
+    iMmsConformance = CMmsConformance::NewL();
+    iMmsConformance->CheckCharacterSet(EFalse);
+    iMediaResolver = CMsgMediaResolver::NewL();
+    iMediaResolver->SetCharacterSetRecognition(EFalse);
+    iDRMHelper = CDRMHelper::NewL();
+
+    QDEBUG_WRITE("MmsInsertCheckOperation::MmsInsertCheckOperation end");
+}
+
+// -----------------------------------------------------------------------------
+// MmsInsertCheckOperation::~MmsInsertCheckOperation
+// -----------------------------------------------------------------------------
+//
+MmsInsertCheckOperation::~MmsInsertCheckOperation()
+{
+    delete iMmsConformance;
+    delete iMediaResolver;
+    delete iDRMHelper;
+}
+
+// ---------------------------------------------------------
+// MmsInsertCheckOperation::CheckModeForInsertL
+// ---------------------------------------------------------
+//
+int MmsInsertCheckOperation::checkModeForInsert(const QString& file)
+{
+    QDEBUG_WRITE("CheckModeForInsert::CheckModeForInsert start");
+    HBufC* filePath = S60QConversions::qStringToS60Desc(file);
+    if (filePath) {
+        CleanupStack::PushL(filePath);
+
+        RFile fileHandle = iMediaResolver->FileHandleL(*filePath);
+        CleanupClosePushL(fileHandle);
+
+        CMsgMediaInfo* info = iMediaResolver->CreateMediaInfoL(fileHandle);
+        info->ParseInfoDetails(fileHandle, *iDRMHelper, *this);
+        CleanupStack::PopAndDestroy(2);
+
+        TMmsConformance conformance = iMmsConformance->MediaConformance(*info);
+        TUint32 confStatus = conformance.iConfStatus;
+
+        // In "free" mode user can insert images that are larger by dimensions than allowed by conformance
+        if (iCreationMode != EMmsCreationModeRestricted) {
+            TInt i = EMmsConfNokFreeModeOnly | EMmsConfNokScalingNeeded | EMmsConfNokTooBig;
+            TInt j = ~(EMmsConfNokFreeModeOnly | EMmsConfNokScalingNeeded | EMmsConfNokTooBig);
+
+            // If user answers yes to Guided mode confirmation query he/she moves to free mode
+            if ((confStatus & i) && !(confStatus & j)) {
+                if (iCreationMode == EMmsCreationModeFree || info->Protection()
+                    & EFileProtSuperDistributable) {
+                    // SuperDistribution not checked here
+                    // Mask "FreeModeOnly" and "ScalingNeeded" away in free mode
+                    confStatus &= ~EMmsConfNokFreeModeOnly;
+                    confStatus &= ~EMmsConfNokScalingNeeded;
+                }
+                else if (launchEditorQuery()) {
+                    // Query accepted.
+                    // Mask "FreeModeOnly" and "ScalingNeeded" away in free mode
+                    confStatus &= ~EMmsConfNokFreeModeOnly;
+                    confStatus &= ~EMmsConfNokScalingNeeded;
+                }
+                else {
+                    //query not accepted. Stop insertion.
+                    return EInsertQueryAbort;
+                }
+            }
+        }
+        else if (confStatus & EMmsConfNokDRM || confStatus & EMmsConfNokNotEnoughInfo || confStatus
+            & EMmsConfNokNotSupported || confStatus & EMmsConfNokFreeModeOnly || confStatus
+            & EMmsConfNokCorrupt) {
+            // Sanity check
+            // "Not conformant" assumed if check fails.     
+            if (iCreationMode == EMmsCreationModeRestricted)
+            HbMessageBox::launchInformationMessageBox(RMODE_INSERT_ERROR);
+            else
+            HbMessageBox::launchInformationMessageBox(INSERT_ERROR);
+            
+            return EInsertNotSupported;
+        }
+        delete info;
+    }
+    QDEBUG_WRITE("CheckModeForInsert::CheckModeForInsert end");
+    return EInsertSuccess;
+}
+
+// ---------------------------------------------------------
+// MmsInsertCheckOperation::launchEditorQuery
+// ---------------------------------------------------------
+//
+bool MmsInsertCheckOperation::launchEditorQuery()
+{
+    return HbMessageBox::launchQuestionMessageBox(INSERT_QUERY_CONFRM);
+}
+
+// -----------------------------------------------------------------------------
+// MmsInsertCheckOperation::MediaInfoParsed
+// -----------------------------------------------------------------------------
+//
+void MmsInsertCheckOperation::MediaInfoParsed()
+{
+}