--- /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()
+{
+}