diff -r 2a272ef608c4 -r 3507212d340e messagingapp/msgui/unifiedviewer/src/unifiedviewer.cpp --- a/messagingapp/msgui/unifiedviewer/src/unifiedviewer.cpp Tue Aug 03 21:34:40 2010 +0530 +++ b/messagingapp/msgui/unifiedviewer/src/unifiedviewer.cpp Fri Aug 06 23:19:50 2010 +0530 @@ -26,6 +26,7 @@ #include #include #include +#include // USER INCLUDES #include "uniscrollarea.h" @@ -38,6 +39,7 @@ #include "conversationsengine.h" #include "debugtraces.h" #include "nativemessageconsts.h" +#include "mmsconformancecheck.h" // LOCAL CONSTANTS const QString REPLY_ICON("qtg_mono_reply"); @@ -46,6 +48,12 @@ const QString SEND_ICON("qtg_mono_send"); const QString DELETE_ICON("qtg_mono_delete"); +//DB-file +_LIT(KDbFileName, "c:[2002A542]conversations.db"); +// query to see if msg is forwardable +_LIT(KSelectMsgPropertyStmt, " SELECT message_id, msg_property FROM conversation_messages WHERE message_id=:message_id "); + + //LOCALIZED CONSTANTS #define LOC_DELETE_MESSAGE hbTrId("txt_messaging_dialog_delete_message") #define LOC_DELETE_SHARED_MESSAGE hbTrId("txt_messaging_dialog_same_message_exists_in_multip") @@ -54,10 +62,9 @@ // UnifiedViewer::UnifiedViewer // constructor //---------------------------------------------------------------------------- -UnifiedViewer::UnifiedViewer(const qint32 messageId, - int canForwardMessage, +UnifiedViewer::UnifiedViewer(const qint32 messageId, QGraphicsItem *parent) : - MsgBaseView(parent), mForwardMessage(false) + MsgBaseView(parent) { QDEBUG_WRITE("UnifiedViewer contruction start"); @@ -69,8 +76,6 @@ mMessageId = messageId; mViewFeeder = new UniViewerFeeder(mMessageId, this); - if (canForwardMessage > 0) mForwardMessage = true; - mScrollArea = new UniScrollArea(this); this->setWidget(mScrollArea); @@ -127,7 +132,7 @@ } } - if (mForwardMessage) + if (isForwardOk()) { toolbar->addAction(HbIcon(FORWARD_ICON), "", this, SLOT(handleFwdAction())); } @@ -188,7 +193,7 @@ //Creation of toolbar now depends on content createToolBar(); - + QDEBUG_WRITE("UnifiedViewer populateContent END"); } @@ -197,7 +202,7 @@ // @see header file //--------------------------------------------------------------- void UnifiedViewer::handleFwdAction() -{ +{ launchEditor(MsgBaseView::FORWARD_MSG); } @@ -207,7 +212,7 @@ //--------------------------------------------------------------- void UnifiedViewer::handleReplyAction() { - launchEditor(MsgBaseView::REPLY_MSG); + launchEditor(MsgBaseView::REPLY_MSG); } //--------------------------------------------------------------- @@ -236,8 +241,8 @@ void UnifiedViewer::handleDeleteAction() { QString txt = LOC_DELETE_MESSAGE; - - //if mms and out going. check for sharing + + //if mms and out going. check for sharing if((mViewFeeder->msgType() == KSenduiMtmMmsUidValue) && (!mViewFeeder->isIncoming())) { if(mViewFeeder->recipientCount() > 1 ) @@ -245,7 +250,7 @@ txt = LOC_DELETE_SHARED_MESSAGE; } } - + HbMessageBox::question(txt,this,SLOT(onDialogDeleteMsg(int)), HbMessageBox::Delete | HbMessageBox::Cancel); } @@ -321,7 +326,7 @@ } else { - message.setMessageType(ConvergedMessage::Sms); + message.setMessageType(ConvergedMessage::Sms); } QByteArray dataArray; @@ -335,8 +340,51 @@ params << dataArray; params << operation; - + emit switchView(params); } +//--------------------------------------------------------------- +// UnifiedViewer::isForwardOk +// @see header file +//--------------------------------------------------------------- +bool UnifiedViewer::isForwardOk() +{ + bool canForwardMsg = true; + if(mViewFeeder->msgType() == KSenduiMtmMmsUidValue) + { + // open DB + RSqlDatabase sqlDb; + TInt error = sqlDb.Open(KDbFileName); + if(error == KErrNone) + { + RSqlStatement sqlSelectStmt; + CleanupClosePushL(sqlSelectStmt); + sqlSelectStmt.PrepareL(sqlDb,KSelectMsgPropertyStmt); + TInt msgIdIndex = sqlSelectStmt.ParameterIndex(_L(":message_id")); + sqlSelectStmt.BindInt(msgIdIndex, mMessageId); + // read the flag + TInt msgPropertyIndex = + sqlSelectStmt.ColumnIndex(_L("msg_property")); + TInt retValue = 0; + if (sqlSelectStmt.Next() == KSqlAtRow) + { + retValue = static_cast + (sqlSelectStmt.ColumnInt(msgPropertyIndex)); + } + CleanupStack::PopAndDestroy(&sqlSelectStmt); + sqlDb.Close(); + canForwardMsg = (retValue & EPreviewForward)? true:false; + } + else + { + // fall-back plan + MmsConformanceCheck* mmsConformanceCheck = new MmsConformanceCheck; + canForwardMsg = mmsConformanceCheck->validateMsgForForward(mMessageId); + delete mmsConformanceCheck; + } + } + return canForwardMsg; +} + // EOF