messagingapp/msgappfw/plugins/previewplugin/src/ccspreviewpluginhandler.cpp
author hgs
Tue, 05 Oct 2010 13:58:47 +0530
changeset 73 ecf6a73a9186
parent 67 fc91263aee62
permissions -rw-r--r--
201039_03
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
37
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
 * Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
 * All rights reserved.
hgs
parents:
diff changeset
     4
 * This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
 * under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
 * which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
 *
hgs
parents:
diff changeset
     9
 * Initial Contributors:
hgs
parents:
diff changeset
    10
 * Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
 *
hgs
parents:
diff changeset
    12
 * Contributors:
hgs
parents:
diff changeset
    13
 *
hgs
parents:
diff changeset
    14
 * Description:  CS Preview Plugin Handler, This class creates and updates sqlite based db
hgs
parents:
diff changeset
    15
 *                with the message-preview data.
hgs
parents:
diff changeset
    16
 *
hgs
parents:
diff changeset
    17
 */
hgs
parents:
diff changeset
    18
// USER INCLUDES
hgs
parents:
diff changeset
    19
#include "ccspreviewpluginhandler.h"
hgs
parents:
diff changeset
    20
#include "UniObject.h"
48
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
    21
#include "msgbiouids.h"
37
hgs
parents:
diff changeset
    22
// SYSTEM INCLUDES
48
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
    23
#include <bioscmds.h>
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
    24
#include <biocmtm.h>
37
hgs
parents:
diff changeset
    25
#include <mmsclient.h>
hgs
parents:
diff changeset
    26
#include <mtclreg.h>
hgs
parents:
diff changeset
    27
#include <msvids.h>
hgs
parents:
diff changeset
    28
#include <e32const.h>
hgs
parents:
diff changeset
    29
#include <SendUiConsts.h>
hgs
parents:
diff changeset
    30
#include <utf.h>
hgs
parents:
diff changeset
    31
#include <centralrepository.h>
hgs
parents:
diff changeset
    32
#include <MmsConformance.h>
hgs
parents:
diff changeset
    33
#include <mmsconst.h>
hgs
parents:
diff changeset
    34
#include <msgmediainfo.h>
hgs
parents:
diff changeset
    35
#include <MsgMediaResolver.h>
hgs
parents:
diff changeset
    36
#include <fileprotectionresolver.h>
hgs
parents:
diff changeset
    37
#include <MmsEngineInternalCRKeys.h>
56
f42d9a78f435 201033_02
hgs
parents: 48
diff changeset
    38
#include <imageconversion.h>
37
hgs
parents:
diff changeset
    39
//CONSTANTS
hgs
parents:
diff changeset
    40
//DB-file
hgs
parents:
diff changeset
    41
_LIT(KDbFileName, "c:[2002A542]conversations.db");
hgs
parents:
diff changeset
    42
//Encoding
hgs
parents:
diff changeset
    43
_LIT(KEncodingStmnt,"PRAGMA encoding=\"UTF-8\"");
hgs
parents:
diff changeset
    44
//Size
hgs
parents:
diff changeset
    45
_LIT(KCacheSizeStmnt,"PRAGMA default_cache_size = 1024");
hgs
parents:
diff changeset
    46
// Create table query statement
hgs
parents:
diff changeset
    47
_LIT(KSqlCreateStmt, "CREATE TABLE IF NOT EXISTS conversation_messages ( message_id  INTEGER PRIMARY KEY, msg_processingstate INTEGER DEFAULT 0, subject TEXT(100), body_text TEXT(160), preview_path TEXT, msg_property INTEGER, preview_icon BLOB DEFAULT NULL ) " );
hgs
parents:
diff changeset
    48
//Create an empty record for the given message id
hgs
parents:
diff changeset
    49
_LIT(KSqlBasicInsertStmt, "INSERT OR REPLACE INTO conversation_messages ( message_id ) VALUES( :message_id )");
hgs
parents:
diff changeset
    50
//Insert without bitmap query
hgs
parents:
diff changeset
    51
_LIT(KSqlInsertStmt, "INSERT OR REPLACE INTO conversation_messages ( message_id, msg_processingstate, subject, body_text, preview_path, msg_property ) VALUES( :message_id, :msg_processingstate, :subject, :body_text, :preview_path,  :msg_property )");
hgs
parents:
diff changeset
    52
//update processing-state flag of a message
hgs
parents:
diff changeset
    53
_LIT(KSqlUpdateProcessingStateStmt, "UPDATE conversation_messages SET msg_processingstate=:msg_processingstate WHERE message_id=:message_id " );
hgs
parents:
diff changeset
    54
//update with bitmap query
hgs
parents:
diff changeset
    55
_LIT(KSqlUpdateBitmapStmt, "UPDATE conversation_messages SET preview_icon=:preview_icon WHERE message_id=:message_id " );
hgs
parents:
diff changeset
    56
// query to see if msg is under process at the moment
hgs
parents:
diff changeset
    57
_LIT(KSelectProcessingStateStmt, " SELECT message_id, msg_processingstate FROM conversation_messages WHERE message_id=:message_id ");
hgs
parents:
diff changeset
    58
// Remove record from conversation_messages table.
hgs
parents:
diff changeset
    59
_LIT(KRemoveMsgStmnt,"DELETE FROM conversation_messages WHERE message_id=:message_id");
48
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
    60
//Insert vcard meta-daa query
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
    61
_LIT(KSqlInsertBioMsgStmt, "INSERT OR REPLACE INTO conversation_messages ( message_id, msg_processingstate, preview_path ) VALUES( :message_id, :msg_processingstate, :preview_path )");
37
hgs
parents:
diff changeset
    62
hgs
parents:
diff changeset
    63
const TInt KDefaultMaxSize = 300 * 1024;
hgs
parents:
diff changeset
    64
//Preview thumbnail size
56
f42d9a78f435 201033_02
hgs
parents: 48
diff changeset
    65
const TInt KWidth = 24 * 6.7;
f42d9a78f435 201033_02
hgs
parents: 48
diff changeset
    66
const TInt KHeight = 24 * 6.7;
37
hgs
parents:
diff changeset
    67
hgs
parents:
diff changeset
    68
// NOTE:- DRAFTS ENTRIES ARE NOT HANDLED IN THE PLUGIN
hgs
parents:
diff changeset
    69
hgs
parents:
diff changeset
    70
// ============================== MEMBER FUNCTIONS ============================
hgs
parents:
diff changeset
    71
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
    72
// CCsPreviewPluginHandler::NewL
hgs
parents:
diff changeset
    73
// Two Phase Construction
hgs
parents:
diff changeset
    74
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
    75
//
hgs
parents:
diff changeset
    76
CCsPreviewPluginHandler* CCsPreviewPluginHandler::NewL(
hgs
parents:
diff changeset
    77
    CCsPreviewPlugin *aMsgObserver)
hgs
parents:
diff changeset
    78
{
hgs
parents:
diff changeset
    79
    PRINT ( _L("Enter CCsMsgHandler::NewL") );
hgs
parents:
diff changeset
    80
hgs
parents:
diff changeset
    81
    CCsPreviewPluginHandler* self = new (ELeave) CCsPreviewPluginHandler();
hgs
parents:
diff changeset
    82
    CleanupStack::PushL(self);
hgs
parents:
diff changeset
    83
    self->ConstructL(aMsgObserver);
hgs
parents:
diff changeset
    84
    CleanupStack::Pop(self);
hgs
parents:
diff changeset
    85
hgs
parents:
diff changeset
    86
    PRINT ( _L("End CCsPreviewPluginHandler::NewL") );
hgs
parents:
diff changeset
    87
hgs
parents:
diff changeset
    88
    return self;
hgs
parents:
diff changeset
    89
}
hgs
parents:
diff changeset
    90
hgs
parents:
diff changeset
    91
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
    92
// CCsPreviewPluginHandler::~CCsPreviewPluginHandler
hgs
parents:
diff changeset
    93
// Destructor
hgs
parents:
diff changeset
    94
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
    95
//
hgs
parents:
diff changeset
    96
CCsPreviewPluginHandler::~CCsPreviewPluginHandler()
hgs
parents:
diff changeset
    97
{
hgs
parents:
diff changeset
    98
    PRINT ( _L("Enter CCsPreviewPluginHandler::~CCsPreviewPluginHandler") );
hgs
parents:
diff changeset
    99
hgs
parents:
diff changeset
   100
    iSqlDb.Close();
hgs
parents:
diff changeset
   101
    iThumbnailRequestArray.Close();
hgs
parents:
diff changeset
   102
    ifsSession.Close();
hgs
parents:
diff changeset
   103
hgs
parents:
diff changeset
   104
    if (iMmsMtm)
hgs
parents:
diff changeset
   105
    {
hgs
parents:
diff changeset
   106
        delete iMmsMtm;
hgs
parents:
diff changeset
   107
        iMmsMtm = NULL;
hgs
parents:
diff changeset
   108
    }
hgs
parents:
diff changeset
   109
48
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   110
    if (iBioClientMtm)
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   111
        {
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   112
        delete iBioClientMtm;
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   113
        iBioClientMtm = NULL;
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   114
        }
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   115
37
hgs
parents:
diff changeset
   116
    if (iMtmRegistry)
hgs
parents:
diff changeset
   117
    {
hgs
parents:
diff changeset
   118
        delete iMtmRegistry;
hgs
parents:
diff changeset
   119
        iMtmRegistry = NULL;
hgs
parents:
diff changeset
   120
    }
hgs
parents:
diff changeset
   121
hgs
parents:
diff changeset
   122
    if (iSession)
hgs
parents:
diff changeset
   123
    {
hgs
parents:
diff changeset
   124
        delete iSession;
hgs
parents:
diff changeset
   125
        iSession = NULL;
hgs
parents:
diff changeset
   126
    }
hgs
parents:
diff changeset
   127
hgs
parents:
diff changeset
   128
    if (iThumbnailManager)
hgs
parents:
diff changeset
   129
    {
hgs
parents:
diff changeset
   130
        delete iThumbnailManager;
hgs
parents:
diff changeset
   131
        iThumbnailManager = NULL;
hgs
parents:
diff changeset
   132
    }
hgs
parents:
diff changeset
   133
hgs
parents:
diff changeset
   134
    PRINT ( _L("End CCsPreviewPluginHandler::~CCsPreviewPluginHandler") );
hgs
parents:
diff changeset
   135
}
hgs
parents:
diff changeset
   136
hgs
parents:
diff changeset
   137
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   138
// CCsMsgHandler::ConstructL
hgs
parents:
diff changeset
   139
// Two Phase Construction
hgs
parents:
diff changeset
   140
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   141
//
hgs
parents:
diff changeset
   142
void CCsPreviewPluginHandler::ConstructL(CCsPreviewPlugin *aMsgObserver)
hgs
parents:
diff changeset
   143
{
hgs
parents:
diff changeset
   144
    PRINT ( _L("Enter CCsPreviewPluginHandler::ConstructL") );
hgs
parents:
diff changeset
   145
hgs
parents:
diff changeset
   146
    iMsgObserver = aMsgObserver;
hgs
parents:
diff changeset
   147
hgs
parents:
diff changeset
   148
    //file session connect
hgs
parents:
diff changeset
   149
    User::LeaveIfError(ifsSession.Connect());
hgs
parents:
diff changeset
   150
hgs
parents:
diff changeset
   151
    //create msv session
hgs
parents:
diff changeset
   152
    iSession = CMsvSession::OpenSyncL(*this);
hgs
parents:
diff changeset
   153
hgs
parents:
diff changeset
   154
    //create mtm registry
hgs
parents:
diff changeset
   155
    iMtmRegistry = CClientMtmRegistry::NewL(*iSession);
hgs
parents:
diff changeset
   156
hgs
parents:
diff changeset
   157
    //create mms client mtm
hgs
parents:
diff changeset
   158
    iMmsMtm = static_cast<CMmsClientMtm*> (iMtmRegistry-> NewMtmL(
48
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   159
            KSenduiMtmMmsUid));
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   160
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   161
    // create biomsg client mtm
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   162
    iBioClientMtm = static_cast<CBIOClientMtm*> (iMtmRegistry->NewMtmL(
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   163
            KSenduiMtmBioUid));
37
hgs
parents:
diff changeset
   164
hgs
parents:
diff changeset
   165
    //create thumbnail manager
hgs
parents:
diff changeset
   166
    iThumbnailManager = CThumbnailManager::NewL(*this);
hgs
parents:
diff changeset
   167
hgs
parents:
diff changeset
   168
    // open DB
hgs
parents:
diff changeset
   169
    TInt error = iSqlDb.Open(KDbFileName);
hgs
parents:
diff changeset
   170
hgs
parents:
diff changeset
   171
    PRINT1 ( _L("End CCsPreviewPluginHandler::ConstructL open DB file error=%d"), error );
hgs
parents:
diff changeset
   172
hgs
parents:
diff changeset
   173
    // if not found, create DB
hgs
parents:
diff changeset
   174
    if (error == KErrNotFound)
hgs
parents:
diff changeset
   175
    {
hgs
parents:
diff changeset
   176
        //create sqlite-DB
hgs
parents:
diff changeset
   177
        TSecurityPolicy defaultPolicy(TSecurityPolicy::EAlwaysPass);
hgs
parents:
diff changeset
   178
        RSqlSecurityPolicy securityPolicy;
hgs
parents:
diff changeset
   179
        securityPolicy.Create(defaultPolicy);
hgs
parents:
diff changeset
   180
hgs
parents:
diff changeset
   181
        // TODO, setting UID security policy
hgs
parents:
diff changeset
   182
        //TSecurityPolicy readPolicy(ECapabilityReadUserData);  
hgs
parents:
diff changeset
   183
        //securityPolicy.SetDbPolicy(RSqlSecurityPolicy::EReadPolicy, readPolicy);
hgs
parents:
diff changeset
   184
hgs
parents:
diff changeset
   185
        iSqlDb.Create(KDbFileName, securityPolicy);
hgs
parents:
diff changeset
   186
hgs
parents:
diff changeset
   187
        //Create the table inside DB
hgs
parents:
diff changeset
   188
        iSqlDb.Exec(KSqlCreateStmt);
hgs
parents:
diff changeset
   189
        iSqlDb.Exec(KEncodingStmnt);
hgs
parents:
diff changeset
   190
        iSqlDb.Exec(KCacheSizeStmnt);
hgs
parents:
diff changeset
   191
    }
hgs
parents:
diff changeset
   192
    else
hgs
parents:
diff changeset
   193
    {
hgs
parents:
diff changeset
   194
        User::LeaveIfError(error);
hgs
parents:
diff changeset
   195
    }
hgs
parents:
diff changeset
   196
hgs
parents:
diff changeset
   197
    //get the max size of mms from the repository
hgs
parents:
diff changeset
   198
    TRAP_IGNORE(
hgs
parents:
diff changeset
   199
            CRepository* repository = CRepository::NewL(KCRUidMmsEngine);
hgs
parents:
diff changeset
   200
            CleanupStack::PushL(repository);
hgs
parents:
diff changeset
   201
hgs
parents:
diff changeset
   202
            //Fetch and set max mms composition size
hgs
parents:
diff changeset
   203
            TInt maxSize = KDefaultMaxSize;
hgs
parents:
diff changeset
   204
            repository->Get( KMmsEngineMaximumSendSize, maxSize );
hgs
parents:
diff changeset
   205
            iMaxMmsSize = maxSize;
hgs
parents:
diff changeset
   206
hgs
parents:
diff changeset
   207
            //Fetch and set creation mode
hgs
parents:
diff changeset
   208
            TInt creationMode = EMmsCreationModeRestricted;
hgs
parents:
diff changeset
   209
            repository->Get(KMmsEngineCreationMode, creationMode);
hgs
parents:
diff changeset
   210
            iCreationMode = creationMode;
hgs
parents:
diff changeset
   211
hgs
parents:
diff changeset
   212
            CleanupStack::PopAndDestroy(repository);
hgs
parents:
diff changeset
   213
    );
hgs
parents:
diff changeset
   214
    PRINT ( _L("End CCsPreviewPluginHandler::ConstructL") );
hgs
parents:
diff changeset
   215
}
hgs
parents:
diff changeset
   216
hgs
parents:
diff changeset
   217
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   218
// CCsPreviewPluginHandler::CCsPreviewPluginHandler
hgs
parents:
diff changeset
   219
// Two Phase Construction
hgs
parents:
diff changeset
   220
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   221
//
hgs
parents:
diff changeset
   222
CCsPreviewPluginHandler::CCsPreviewPluginHandler()
hgs
parents:
diff changeset
   223
{
hgs
parents:
diff changeset
   224
}
hgs
parents:
diff changeset
   225
hgs
parents:
diff changeset
   226
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   227
// CCsPreviewPluginHandler::HandleSessionEventL
hgs
parents:
diff changeset
   228
// Implemented for MMsvSessionObserver
hgs
parents:
diff changeset
   229
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   230
//
hgs
parents:
diff changeset
   231
void CCsPreviewPluginHandler::HandleSessionEventL(TMsvSessionEvent aEvent,
hgs
parents:
diff changeset
   232
    TAny* aArg1, TAny* aArg2, TAny* /*aArg3*/)
hgs
parents:
diff changeset
   233
{
hgs
parents:
diff changeset
   234
    PRINT1 ( _L("Enter CCsPreviewPluginHandler::HandleSessionEventL aEvent=%d"),aEvent );
hgs
parents:
diff changeset
   235
hgs
parents:
diff changeset
   236
    CMsvEntrySelection* selection = NULL;
hgs
parents:
diff changeset
   237
    TMsvId parent;
hgs
parents:
diff changeset
   238
hgs
parents:
diff changeset
   239
    //args
hgs
parents:
diff changeset
   240
    if (aArg1 == NULL || aArg2 == NULL)
hgs
parents:
diff changeset
   241
    {
hgs
parents:
diff changeset
   242
        PRINT ( _L("Enter CCsPreviewPluginHandler::HandleSessionEventL arguments invalid"));
hgs
parents:
diff changeset
   243
        return;
hgs
parents:
diff changeset
   244
    }
hgs
parents:
diff changeset
   245
hgs
parents:
diff changeset
   246
    //start, processing the event
hgs
parents:
diff changeset
   247
    selection = (CMsvEntrySelection*) aArg1;
hgs
parents:
diff changeset
   248
    parent = *(TMsvId*) aArg2;
hgs
parents:
diff changeset
   249
hgs
parents:
diff changeset
   250
    //Drafts not handled
hgs
parents:
diff changeset
   251
    if (KMsvDraftEntryIdValue == parent)
hgs
parents:
diff changeset
   252
    {
hgs
parents:
diff changeset
   253
        return;
hgs
parents:
diff changeset
   254
    }
hgs
parents:
diff changeset
   255
hgs
parents:
diff changeset
   256
    switch (aEvent)
hgs
parents:
diff changeset
   257
    {
hgs
parents:
diff changeset
   258
        case EMsvEntriesChanged:
hgs
parents:
diff changeset
   259
        case EMsvEntriesMoved:
hgs
parents:
diff changeset
   260
        {
hgs
parents:
diff changeset
   261
            HandleEventL(selection);
hgs
parents:
diff changeset
   262
        }
hgs
parents:
diff changeset
   263
        break;
hgs
parents:
diff changeset
   264
hgs
parents:
diff changeset
   265
        case EMsvEntriesDeleted:
hgs
parents:
diff changeset
   266
        {
hgs
parents:
diff changeset
   267
            for (TInt i = 0; i < selection->Count(); i++)
hgs
parents:
diff changeset
   268
            {
hgs
parents:
diff changeset
   269
                RSqlStatement sqlDeleteStmt;
hgs
parents:
diff changeset
   270
                CleanupClosePushL(sqlDeleteStmt);
hgs
parents:
diff changeset
   271
                sqlDeleteStmt.PrepareL(iSqlDb, KRemoveMsgStmnt);
hgs
parents:
diff changeset
   272
hgs
parents:
diff changeset
   273
                TInt messageIdIndex = sqlDeleteStmt.ParameterIndex(_L(
hgs
parents:
diff changeset
   274
                    ":message_id"));
hgs
parents:
diff changeset
   275
                User::LeaveIfError(sqlDeleteStmt.BindInt(messageIdIndex, selection->At(i)));
hgs
parents:
diff changeset
   276
hgs
parents:
diff changeset
   277
                User::LeaveIfError(sqlDeleteStmt.Exec());
hgs
parents:
diff changeset
   278
                CleanupStack::PopAndDestroy(&sqlDeleteStmt);
hgs
parents:
diff changeset
   279
            }
hgs
parents:
diff changeset
   280
        }
hgs
parents:
diff changeset
   281
        break;
hgs
parents:
diff changeset
   282
    }
hgs
parents:
diff changeset
   283
hgs
parents:
diff changeset
   284
    PRINT ( _L("Exit CCsPreviewPluginHandler::HandleSessionEventL") );
hgs
parents:
diff changeset
   285
}
hgs
parents:
diff changeset
   286
hgs
parents:
diff changeset
   287
// ---------------------------------------------------------------------
hgs
parents:
diff changeset
   288
// CCsPreviewPluginHandler::HandleEvent
hgs
parents:
diff changeset
   289
// Handle events
hgs
parents:
diff changeset
   290
// ---------------------------------------------------------------------
hgs
parents:
diff changeset
   291
//
hgs
parents:
diff changeset
   292
void CCsPreviewPluginHandler::HandleEventL(CMsvEntrySelection* aSelection)
hgs
parents:
diff changeset
   293
{
48
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   294
    PRINT ( _L("Enter CCsPreviewPluginHandler::HandleEvent start.") );
37
hgs
parents:
diff changeset
   295
hgs
parents:
diff changeset
   296
    TMsvEntry entry;
hgs
parents:
diff changeset
   297
    TMsvId service;
hgs
parents:
diff changeset
   298
    TInt error = KErrNone;
hgs
parents:
diff changeset
   299
hgs
parents:
diff changeset
   300
    for (TInt i = 0; i < aSelection->Count(); i++)
hgs
parents:
diff changeset
   301
    {
hgs
parents:
diff changeset
   302
        error = iSession->GetEntry(aSelection->At(i), service, entry);
hgs
parents:
diff changeset
   303
48
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   304
        if ((KErrNone == error) && !entry.InPreparation() && entry.Visible())
37
hgs
parents:
diff changeset
   305
        {
hgs
parents:
diff changeset
   306
            PRINT ( _L("Enter CCsPreviewPluginHandler::HandleEvent for loop started.") );
48
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   307
            if ((KSenduiMtmMmsUidValue == entry.iMtm.iUid))
37
hgs
parents:
diff changeset
   308
                {
48
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   309
                HandleMMSEntryL(entry);
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   310
                }
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   311
            else if ((KSenduiMtmSmsUidValue == entry.iMtm.iUid) || (KSenduiMtmBioUidValue == entry.iMtm.iUid))
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   312
                {
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   313
                if ((KMsgBioUidVCard.iUid == entry.iBioType))
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   314
                    {                 
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   315
                    HandleVCardEntryL(entry);
37
hgs
parents:
diff changeset
   316
                    }
hgs
parents:
diff changeset
   317
                }
hgs
parents:
diff changeset
   318
            }
48
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   319
        }//end for loop
37
hgs
parents:
diff changeset
   320
48
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   321
    PRINT ( _L("Exit CCsPreviewPluginHandler::HandleEvent end.") );
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   322
    }
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   323
// -----------------------------------------------------------------------------
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   324
// CCsPreviewPluginHandler::HandleMMSEntryL()
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   325
// 
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   326
// -----------------------------------------------------------------------------
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   327
//
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   328
void CCsPreviewPluginHandler::HandleMMSEntryL(const TMsvEntry& aEntry)
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   329
    {
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   330
    PRINT ( _L("Enter CCsPreviewPluginHandler::HandleMMSEntry start.") );
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   331
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   332
    TInt msgId = aEntry.Id();
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   333
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   334
    // check if the msg is already under processing Or processed
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   335
    if (EPreviewMsgNotProcessed != msgProcessingState(msgId))
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   336
        {
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   337
        // skip processing this event for the given message
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   338
        return;
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   339
        }
56
f42d9a78f435 201033_02
hgs
parents: 48
diff changeset
   340
    
48
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   341
    // start processing message, set flag
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   342
    setMsgProcessingState(msgId, EPreviewMsgProcessing);
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   343
56
f42d9a78f435 201033_02
hgs
parents: 48
diff changeset
   344
f42d9a78f435 201033_02
hgs
parents: 48
diff changeset
   345
    TRAPD( err,
f42d9a78f435 201033_02
hgs
parents: 48
diff changeset
   346
            {        
48
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   347
    // update db with message preview data
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   348
    RSqlStatement sqlInsertStmt;
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   349
    CleanupClosePushL(sqlInsertStmt);
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   350
    sqlInsertStmt.PrepareL(iSqlDb, KSqlInsertStmt);
56
f42d9a78f435 201033_02
hgs
parents: 48
diff changeset
   351
    
48
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   352
    // parse message
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   353
    iMmsMtm->SwitchCurrentEntryL(msgId);
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   354
    iMmsMtm->LoadMessageL();
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   355
73
ecf6a73a9186 201039_03
hgs
parents: 67
diff changeset
   356
    CUniDataModel* uniDataModel = CUniDataModel::NewL(ifsSession, *iMmsMtm);
ecf6a73a9186 201039_03
hgs
parents: 67
diff changeset
   357
    CleanupStack::PushL(uniDataModel);
ecf6a73a9186 201039_03
hgs
parents: 67
diff changeset
   358
    uniDataModel->RestoreL(*this, ETrue);
56
f42d9a78f435 201033_02
hgs
parents: 48
diff changeset
   359
    
48
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   360
    //msg property
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   361
    TInt msgProperty = 0;
73
ecf6a73a9186 201039_03
hgs
parents: 67
diff changeset
   362
    if (uniDataModel->AttachmentList().Count() > 0)
48
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   363
        {
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   364
        msgProperty |= EPreviewAttachment;
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   365
        }
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   366
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   367
    //check for msg forward
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   368
    //Validate if the mms msg can be forwarded or not
73
ecf6a73a9186 201039_03
hgs
parents: 67
diff changeset
   369
    if (ValidateMsgForForward(uniDataModel))
48
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   370
        {
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   371
        msgProperty |= EPreviewForward;
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   372
        }
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   373
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   374
    TPtrC videoPath;
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   375
    TPtrC imagePath;
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   376
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   377
    // preview parsing
73
ecf6a73a9186 201039_03
hgs
parents: 67
diff changeset
   378
    TInt slideCount = uniDataModel->SmilModel().SlideCount();
48
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   379
    TBool isBodyTextSet = EFalse;
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   380
    TBool isImageSet = EFalse;
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   381
    TBool isAudioSet = EFalse;
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   382
    TBool isVideoSet = EFalse;
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   383
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   384
    for (int i = 0; i < slideCount; i++)
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   385
        {
73
ecf6a73a9186 201039_03
hgs
parents: 67
diff changeset
   386
        int slideobjcount = uniDataModel->SmilModel().SlideObjectCount(i);
48
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   387
        for (int j = 0; j < slideobjcount; j++)
37
hgs
parents:
diff changeset
   388
            {
73
ecf6a73a9186 201039_03
hgs
parents: 67
diff changeset
   389
            CUniObject *obj = uniDataModel->SmilModel(). GetObjectByIndex(i,
48
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   390
                    j);
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   391
            CMsgMediaInfo *mediaInfo = obj->MediaInfo();
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   392
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   393
            TPtrC8 mimetype = obj->MimeType();
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   394
            TMsvAttachmentId attachId = obj->AttachmentId();
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   395
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   396
            //bodytext
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   397
            if (!isBodyTextSet
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   398
                    && (mimetype.Find(_L8("text")) != KErrNotFound))
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   399
                {
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   400
                //bind bodytext into statement
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   401
                BindBodyText(sqlInsertStmt, attachId);
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   402
                isBodyTextSet = ETrue;
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   403
                }
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   404
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   405
            //image parsing
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   406
            if (!isVideoSet && !isImageSet && (mimetype.Find(_L8("image"))
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   407
                    != KErrNotFound))
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   408
                {
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   409
                //get thumbnail for this image
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   410
                isImageSet = ETrue;
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   411
                imagePath.Set(mediaInfo->FullFilePath());
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   412
                msgProperty |= EPreviewImage;
37
hgs
parents:
diff changeset
   413
48
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   414
                if (EFileProtNoProtection != mediaInfo->Protection())
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   415
                    {
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   416
                    msgProperty |= EPreviewProtectedImage;
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   417
                    }
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   418
                if (mediaInfo->Corrupt())
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   419
                    {
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   420
                    msgProperty |= EPreviewCorruptedImage;
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   421
                    }
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   422
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   423
                if (!(EPreviewProtectedImage & msgProperty)
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   424
                        && !(EPreviewCorruptedImage & msgProperty))
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   425
                    {
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   426
                    //Generate thumbnail for non protected,
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   427
                    //non corrupted image.
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   428
                    GetThumbNailL(attachId, mimetype, msgId);
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   429
                    }
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   430
                }
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   431
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   432
            //audio content
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   433
            if (!isVideoSet && !isAudioSet && (mimetype.Find(_L8("audio"))
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   434
                    != KErrNotFound))
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   435
                {
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   436
                isAudioSet = ETrue;
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   437
                msgProperty |= EPreviewAudio;
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   438
                if (EFileProtNoProtection != mediaInfo->Protection())
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   439
                    {
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   440
                    msgProperty |= EPreviewProtectedAudio;
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   441
                    }
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   442
                if (mediaInfo->Corrupt())
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   443
                    {
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   444
                    msgProperty |= EPreviewCorruptedAudio;
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   445
                    }
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   446
                }
37
hgs
parents:
diff changeset
   447
48
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   448
            //video content
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   449
            if (!(isImageSet || isAudioSet) && !isVideoSet && (mimetype.Find(
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   450
                    _L8("video")) != KErrNotFound))
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   451
                {
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   452
                videoPath.Set(mediaInfo->FullFilePath());
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   453
                isVideoSet = ETrue;
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   454
                msgProperty |= EPreviewVideo;
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   455
                if (EFileProtNoProtection != mediaInfo->Protection())
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   456
                    {
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   457
                    msgProperty |= EPreviewProtectedVideo;
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   458
                    }
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   459
                if (mediaInfo->Corrupt())
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   460
                    {
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   461
                    msgProperty |= EPreviewCorruptedVideo;
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   462
                    }
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   463
                }
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   464
            }
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   465
        }
37
hgs
parents:
diff changeset
   466
48
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   467
    //set preview path
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   468
    TInt previewPathIndex = sqlInsertStmt.ParameterIndex(_L(
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   469
            ":preview_path"));
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   470
    if (isVideoSet)
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   471
        {
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   472
        User::LeaveIfError(
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   473
                sqlInsertStmt.BindText(previewPathIndex, videoPath));
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   474
        }
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   475
    else if (isImageSet)
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   476
        {
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   477
        User::LeaveIfError(
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   478
                sqlInsertStmt.BindText(previewPathIndex, imagePath));
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   479
        }
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   480
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   481
    //msg_id
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   482
    TInt msgIdIndex = sqlInsertStmt.ParameterIndex(_L(":message_id"));
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   483
    User::LeaveIfError(sqlInsertStmt.BindInt(msgIdIndex, msgId));
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   484
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   485
    //subjext
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   486
    TInt subjectIndex = sqlInsertStmt.ParameterIndex(_L(":subject"));
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   487
    User::LeaveIfError(sqlInsertStmt.BindText(subjectIndex,
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   488
            iMmsMtm->SubjectL()));
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   489
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   490
    //msg_property
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   491
    TInt msgPropertyIndex = sqlInsertStmt.ParameterIndex(_L(
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   492
            ":msg_property"));
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   493
    User::LeaveIfError(sqlInsertStmt.BindInt(msgPropertyIndex, msgProperty));
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   494
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   495
    //msg_processingstate
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   496
    TInt msgProcessingStateIndex = sqlInsertStmt.ParameterIndex(
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   497
            _L(":msg_processingstate"));
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   498
    User::LeaveIfError(sqlInsertStmt.BindInt(msgProcessingStateIndex,
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   499
            EPreviewMsgProcessed));
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   500
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   501
    //execute sql stament
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   502
    User::LeaveIfError(sqlInsertStmt.Exec());
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   503
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   504
    //cleanup
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   505
    CleanupStack::PopAndDestroy(2, &sqlInsertStmt);
56
f42d9a78f435 201033_02
hgs
parents: 48
diff changeset
   506
            }); //TRAP
f42d9a78f435 201033_02
hgs
parents: 48
diff changeset
   507
    
f42d9a78f435 201033_02
hgs
parents: 48
diff changeset
   508
    if( err != KErrNone )
f42d9a78f435 201033_02
hgs
parents: 48
diff changeset
   509
        {
f42d9a78f435 201033_02
hgs
parents: 48
diff changeset
   510
        setMsgProcessingState(msgId, EPreviewMsgNotProcessed);
f42d9a78f435 201033_02
hgs
parents: 48
diff changeset
   511
        }
48
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   512
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   513
    PRINT ( _L("Enter CCsPreviewPluginHandler::HandleMMSEntry end.") );
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   514
    }
37
hgs
parents:
diff changeset
   515
48
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   516
// -----------------------------------------------------------------------------
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   517
// CCsPreviewPluginHandler::HandleVCardEntryL()
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   518
// 
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   519
// -----------------------------------------------------------------------------
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   520
//
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   521
void CCsPreviewPluginHandler::HandleVCardEntryL(const TMsvEntry& aEntry)
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   522
    {
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   523
    PRINT ( _L("Enter CCsPreviewPluginHandler::HandleBioMsgEntry start.") );
37
hgs
parents:
diff changeset
   524
48
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   525
    TMsvId msgId = aEntry.Id();   
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   526
    
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   527
    // check if the msg is already under processing Or processed
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   528
    TInt msgProcessState = EPreviewMsgNotProcessed;
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   529
    msgProcessState = msgProcessingState(msgId);
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   530
    if (EPreviewMsgProcessed == msgProcessState)
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   531
        {
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   532
        return;
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   533
        }
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   534
    //get attachments
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   535
    CMsvEntry* cMsvEntry = CMsvEntry::NewL(iBioClientMtm->Session(), msgId,
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   536
               TMsvSelectionOrdering());
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   537
    
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   538
    CleanupStack::PushL(cMsvEntry);
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   539
    CMsvStore* store = cMsvEntry->ReadStoreL();
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   540
    CleanupStack::PushL(store);
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   541
    MMsvAttachmentManager& attachMan = store->AttachmentManagerL();
37
hgs
parents:
diff changeset
   542
48
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   543
    TInt attachmentCount = attachMan.AttachmentCount();
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   544
    if (attachmentCount)
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   545
        {
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   546
        // get attachment file path
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   547
        RFile file = attachMan.GetAttachmentFileL(0);
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   548
        CleanupClosePushL(file);
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   549
        TFileName fullName;
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   550
        User::LeaveIfError(file.FullName(fullName));
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   551
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   552
        // update db with meta-data
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   553
        RSqlStatement sqlInsertStmt;
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   554
        CleanupClosePushL(sqlInsertStmt);
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   555
        sqlInsertStmt.PrepareL(iSqlDb, KSqlInsertBioMsgStmt);
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   556
       
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   557
        //msg_id
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   558
        TInt msgIdIndex = sqlInsertStmt.ParameterIndex(_L(":message_id"));
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   559
        User::LeaveIfError(sqlInsertStmt.BindInt(msgIdIndex, msgId));
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   560
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   561
        //set attachment path
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   562
        TInt previewPathIndex = sqlInsertStmt.ParameterIndex(_L(
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   563
                ":preview_path"));
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   564
        User::LeaveIfError(sqlInsertStmt.BindText(previewPathIndex, fullName));
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   565
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   566
        //msg_processingstate
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   567
        TInt msgProcessingStateIndex = sqlInsertStmt.ParameterIndex(
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   568
                _L(":msg_processingstate"));
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   569
        User::LeaveIfError(sqlInsertStmt.BindInt(msgProcessingStateIndex,
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   570
                EPreviewMsgProcessed));
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   571
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   572
        //execute sql stament
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   573
        User::LeaveIfError(sqlInsertStmt.Exec());
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   574
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   575
        //cleanup
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   576
        CleanupStack::PopAndDestroy(&sqlInsertStmt);
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   577
        CleanupStack::PopAndDestroy(&file);
37
hgs
parents:
diff changeset
   578
        }
48
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   579
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   580
    CleanupStack::PopAndDestroy(2, cMsvEntry);//cMsvEntry,store
37
hgs
parents:
diff changeset
   581
48
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   582
    PRINT ( _L("Enter CCsPreviewPluginHandler::HandleBioMsgEntry End.") );
4f501b74aeb1 201029_02
hgs
parents: 37
diff changeset
   583
    }
37
hgs
parents:
diff changeset
   584
hgs
parents:
diff changeset
   585
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   586
// CCsPreviewPluginHandler::RestoreReady()
hgs
parents:
diff changeset
   587
// 
hgs
parents:
diff changeset
   588
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   589
//
hgs
parents:
diff changeset
   590
void CCsPreviewPluginHandler::RestoreReady(TInt /*aParseResult*/, TInt /*aError*/)
hgs
parents:
diff changeset
   591
{
hgs
parents:
diff changeset
   592
hgs
parents:
diff changeset
   593
}
hgs
parents:
diff changeset
   594
hgs
parents:
diff changeset
   595
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   596
// CCsPreviewPluginHandler::ThumbnailReady()
hgs
parents:
diff changeset
   597
// 
hgs
parents:
diff changeset
   598
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   599
//
hgs
parents:
diff changeset
   600
void CCsPreviewPluginHandler::ThumbnailReady(TInt aError,
hgs
parents:
diff changeset
   601
    MThumbnailData& aThumbnail, TThumbnailRequestId aId)
hgs
parents:
diff changeset
   602
{
hgs
parents:
diff changeset
   603
    // This function must not leave.
hgs
parents:
diff changeset
   604
    if (!aError)
hgs
parents:
diff changeset
   605
    {
hgs
parents:
diff changeset
   606
        PRINT ( _L("CCsPreviewPluginHandler::ThumbnailReady received.") );
hgs
parents:
diff changeset
   607
        TInt err;
hgs
parents:
diff changeset
   608
        TRAP(err, HandleThumbnailReadyL(aThumbnail, aId));
hgs
parents:
diff changeset
   609
        PRINT1 ( _L("CCsPreviewPluginHandler::ThumbnailReady handling error= %d."), err );
hgs
parents:
diff changeset
   610
    }
hgs
parents:
diff changeset
   611
    else
hgs
parents:
diff changeset
   612
    {
hgs
parents:
diff changeset
   613
        // An error occurred while getting the thumbnail.
hgs
parents:
diff changeset
   614
        PRINT1 ( _L("End CCsPreviewPluginHandler::ThumbnailReady error= %d."), aError );
hgs
parents:
diff changeset
   615
    }
hgs
parents:
diff changeset
   616
}
hgs
parents:
diff changeset
   617
hgs
parents:
diff changeset
   618
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   619
// CCsPreviewPluginHandler::ThumbnailPreviewReady()
hgs
parents:
diff changeset
   620
// callback
hgs
parents:
diff changeset
   621
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   622
//
hgs
parents:
diff changeset
   623
void CCsPreviewPluginHandler::ThumbnailPreviewReady(
hgs
parents:
diff changeset
   624
    MThumbnailData& /*aThumbnail*/, TThumbnailRequestId /*aId*/)
hgs
parents:
diff changeset
   625
{
hgs
parents:
diff changeset
   626
hgs
parents:
diff changeset
   627
}
hgs
parents:
diff changeset
   628
hgs
parents:
diff changeset
   629
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   630
// CCsPreviewPluginHandler::HandleThumbnailReadyL()
hgs
parents:
diff changeset
   631
// 
hgs
parents:
diff changeset
   632
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   633
//
hgs
parents:
diff changeset
   634
void CCsPreviewPluginHandler::HandleThumbnailReadyL(MThumbnailData& aThumbnail,
hgs
parents:
diff changeset
   635
    TThumbnailRequestId aId)
hgs
parents:
diff changeset
   636
{
hgs
parents:
diff changeset
   637
    //match response to request
hgs
parents:
diff changeset
   638
    ThumbnailRequestData tempObj;
hgs
parents:
diff changeset
   639
    tempObj.iRequestId = aId;
hgs
parents:
diff changeset
   640
hgs
parents:
diff changeset
   641
    TInt index = iThumbnailRequestArray.Find(tempObj,
hgs
parents:
diff changeset
   642
        CCsPreviewPluginHandler::CompareByRequestId);
hgs
parents:
diff changeset
   643
    if (index < 0)
hgs
parents:
diff changeset
   644
    {
hgs
parents:
diff changeset
   645
        PRINT ( _L("End CCsPreviewPluginHandler::HandleThumbnailReady request match not found.") );
hgs
parents:
diff changeset
   646
        return;
hgs
parents:
diff changeset
   647
    }
hgs
parents:
diff changeset
   648
hgs
parents:
diff changeset
   649
    // get msg-id corresponding to the request-id
hgs
parents:
diff changeset
   650
    TInt msgId = iThumbnailRequestArray[index].iMsgId;
hgs
parents:
diff changeset
   651
    //remove the request from requestarray
hgs
parents:
diff changeset
   652
    iThumbnailRequestArray.Remove(index);
hgs
parents:
diff changeset
   653
hgs
parents:
diff changeset
   654
    // get bitmap
hgs
parents:
diff changeset
   655
    CFbsBitmap* bitmap = aThumbnail.Bitmap();
hgs
parents:
diff changeset
   656
hgs
parents:
diff changeset
   657
    // sql-statment to set preview-icon
hgs
parents:
diff changeset
   658
    RSqlStatement sqlInsertStmt;
hgs
parents:
diff changeset
   659
    CleanupClosePushL(sqlInsertStmt);
hgs
parents:
diff changeset
   660
    sqlInsertStmt.PrepareL(iSqlDb, KSqlUpdateBitmapStmt);
hgs
parents:
diff changeset
   661
hgs
parents:
diff changeset
   662
    TInt msgIdIndex = sqlInsertStmt.ParameterIndex(_L(":message_id"));
hgs
parents:
diff changeset
   663
    TInt previewIconIndex = sqlInsertStmt.ParameterIndex(_L(":preview_icon"));
hgs
parents:
diff changeset
   664
hgs
parents:
diff changeset
   665
    User::LeaveIfError(sqlInsertStmt.BindInt(msgIdIndex, msgId));
hgs
parents:
diff changeset
   666
hgs
parents:
diff changeset
   667
    RSqlParamWriteStream previewIconStream;
hgs
parents:
diff changeset
   668
    CleanupClosePushL(previewIconStream);
hgs
parents:
diff changeset
   669
hgs
parents:
diff changeset
   670
    //bind data
hgs
parents:
diff changeset
   671
    User::LeaveIfError(previewIconStream.BindBinary(sqlInsertStmt, previewIconIndex));
hgs
parents:
diff changeset
   672
    bitmap->ExternalizeL(previewIconStream);
hgs
parents:
diff changeset
   673
    previewIconStream.CommitL();
hgs
parents:
diff changeset
   674
hgs
parents:
diff changeset
   675
    //execute the statent
hgs
parents:
diff changeset
   676
    User::LeaveIfError(sqlInsertStmt.Exec());
hgs
parents:
diff changeset
   677
hgs
parents:
diff changeset
   678
    CleanupStack::PopAndDestroy(2,&sqlInsertStmt);//sqlInsertStmt,previewIconStream
hgs
parents:
diff changeset
   679
}
hgs
parents:
diff changeset
   680
hgs
parents:
diff changeset
   681
TBool CCsPreviewPluginHandler::ValidateMsgForForward(CUniDataModel* aUniDataModel)
hgs
parents:
diff changeset
   682
{
hgs
parents:
diff changeset
   683
    TBool retValue = ETrue;
hgs
parents:
diff changeset
   684
hgs
parents:
diff changeset
   685
    //1. Check the slide count more than 1
hgs
parents:
diff changeset
   686
    if (aUniDataModel->SmilModel().SlideCount() > 1)
hgs
parents:
diff changeset
   687
    {
hgs
parents:
diff changeset
   688
        retValue = EFalse;
hgs
parents:
diff changeset
   689
        return retValue;
hgs
parents:
diff changeset
   690
    }
hgs
parents:
diff changeset
   691
hgs
parents:
diff changeset
   692
    //2. message sixe check
hgs
parents:
diff changeset
   693
    //Fetch and set max mms composition size
hgs
parents:
diff changeset
   694
    if (iMmsMtm->MessageSize() > iMaxMmsSize)
hgs
parents:
diff changeset
   695
    {
hgs
parents:
diff changeset
   696
        retValue = EFalse;
hgs
parents:
diff changeset
   697
        return retValue;
hgs
parents:
diff changeset
   698
    }
hgs
parents:
diff changeset
   699
hgs
parents:
diff changeset
   700
    //3. If there is restricted content then return false
hgs
parents:
diff changeset
   701
    RArray<TMsvAttachmentId>* pathList = GetSlideAttachmentIds(
hgs
parents:
diff changeset
   702
            0, 
hgs
parents:
diff changeset
   703
            aUniDataModel);
hgs
parents:
diff changeset
   704
    
hgs
parents:
diff changeset
   705
    CleanupStack::PushL(pathList);
hgs
parents:
diff changeset
   706
hgs
parents:
diff changeset
   707
    for (int i = 0; i < pathList->Count(); i++)
hgs
parents:
diff changeset
   708
    {
hgs
parents:
diff changeset
   709
        TMsvAttachmentId aId = (*pathList)[i];
hgs
parents:
diff changeset
   710
        CMsvStore * store = iMmsMtm->Entry().ReadStoreL();
hgs
parents:
diff changeset
   711
        CleanupStack::PushL(store);
hgs
parents:
diff changeset
   712
        MMsvAttachmentManager& attachMan = store->AttachmentManagerL();
hgs
parents:
diff changeset
   713
        RFile fileHandle = attachMan.GetAttachmentFileL(aId);
hgs
parents:
diff changeset
   714
        //close the store
hgs
parents:
diff changeset
   715
        CleanupStack::PopAndDestroy(store);
hgs
parents:
diff changeset
   716
hgs
parents:
diff changeset
   717
        if (CheckModeForInsertL(fileHandle) != EInsertSuccess)
hgs
parents:
diff changeset
   718
        {
hgs
parents:
diff changeset
   719
            retValue = EFalse;
hgs
parents:
diff changeset
   720
            break;
hgs
parents:
diff changeset
   721
        }
hgs
parents:
diff changeset
   722
    }
hgs
parents:
diff changeset
   723
hgs
parents:
diff changeset
   724
    if (retValue == EFalse)
hgs
parents:
diff changeset
   725
    {
hgs
parents:
diff changeset
   726
        CleanupStack::PopAndDestroy(pathList);
hgs
parents:
diff changeset
   727
        return retValue;
hgs
parents:
diff changeset
   728
    }
hgs
parents:
diff changeset
   729
hgs
parents:
diff changeset
   730
    CleanupStack::Pop(pathList);
hgs
parents:
diff changeset
   731
    delete pathList;
hgs
parents:
diff changeset
   732
    pathList = NULL;
hgs
parents:
diff changeset
   733
hgs
parents:
diff changeset
   734
    //4. check the same case for all attachments
hgs
parents:
diff changeset
   735
    pathList = GetAttachmentIdList(aUniDataModel);
hgs
parents:
diff changeset
   736
    CleanupStack::PushL(pathList);
hgs
parents:
diff changeset
   737
hgs
parents:
diff changeset
   738
    for (int i = 0; i < pathList->Count(); i++)
hgs
parents:
diff changeset
   739
    {
hgs
parents:
diff changeset
   740
        TMsvAttachmentId aId = (*pathList)[i];
hgs
parents:
diff changeset
   741
        CMsvStore * store = iMmsMtm->Entry().ReadStoreL();
hgs
parents:
diff changeset
   742
        CleanupStack::PushL(store);
hgs
parents:
diff changeset
   743
        MMsvAttachmentManager& attachMan = store->AttachmentManagerL();
hgs
parents:
diff changeset
   744
        RFile fileHandle = attachMan.GetAttachmentFileL(aId);
hgs
parents:
diff changeset
   745
        //close the store
hgs
parents:
diff changeset
   746
        CleanupStack::PopAndDestroy(store);
hgs
parents:
diff changeset
   747
        
hgs
parents:
diff changeset
   748
        if (CheckModeForInsertL(fileHandle) != EInsertSuccess)
hgs
parents:
diff changeset
   749
        {
hgs
parents:
diff changeset
   750
            retValue = EFalse;
hgs
parents:
diff changeset
   751
            break;
hgs
parents:
diff changeset
   752
        }
hgs
parents:
diff changeset
   753
    }
hgs
parents:
diff changeset
   754
hgs
parents:
diff changeset
   755
    CleanupStack::PopAndDestroy(pathList);
hgs
parents:
diff changeset
   756
    return retValue;
hgs
parents:
diff changeset
   757
}
hgs
parents:
diff changeset
   758
hgs
parents:
diff changeset
   759
RArray<TMsvAttachmentId>*
hgs
parents:
diff changeset
   760
CCsPreviewPluginHandler::GetSlideAttachmentIds(TInt aSlideNum,
hgs
parents:
diff changeset
   761
                                        CUniDataModel* aUniDataModel)
hgs
parents:
diff changeset
   762
{
hgs
parents:
diff changeset
   763
    TInt slideObjectCount =
hgs
parents:
diff changeset
   764
            aUniDataModel->SmilModel().SlideObjectCount(aSlideNum);
hgs
parents:
diff changeset
   765
hgs
parents:
diff changeset
   766
    RArray<TMsvAttachmentId> *attachmentIdList = new (ELeave) RArray<
hgs
parents:
diff changeset
   767
            TMsvAttachmentId> ();
hgs
parents:
diff changeset
   768
    for (TInt i = 0; i < slideObjectCount; i++)
hgs
parents:
diff changeset
   769
    {
hgs
parents:
diff changeset
   770
        CUniObject *obj =
hgs
parents:
diff changeset
   771
                aUniDataModel->SmilModel().GetObjectByIndex(aSlideNum, i);
hgs
parents:
diff changeset
   772
        attachmentIdList->Append(obj->AttachmentId());
hgs
parents:
diff changeset
   773
    }
hgs
parents:
diff changeset
   774
    return attachmentIdList;
hgs
parents:
diff changeset
   775
}
hgs
parents:
diff changeset
   776
hgs
parents:
diff changeset
   777
RArray<TMsvAttachmentId>*
hgs
parents:
diff changeset
   778
CCsPreviewPluginHandler::GetAttachmentIdList(CUniDataModel* aUniDataModel)
hgs
parents:
diff changeset
   779
{
hgs
parents:
diff changeset
   780
    TInt attcount = aUniDataModel->AttachmentList().Count();
hgs
parents:
diff changeset
   781
    RArray<TMsvAttachmentId> *attachmentIdList = new (ELeave) RArray<
hgs
parents:
diff changeset
   782
            TMsvAttachmentId> ();
hgs
parents:
diff changeset
   783
hgs
parents:
diff changeset
   784
    for (TInt i = 0; i < attcount; i++)
hgs
parents:
diff changeset
   785
    {
hgs
parents:
diff changeset
   786
        CUniObject *obj = aUniDataModel->AttachmentList().GetByIndex(i);
hgs
parents:
diff changeset
   787
hgs
parents:
diff changeset
   788
        attachmentIdList->AppendL(obj->AttachmentId());
hgs
parents:
diff changeset
   789
    }
hgs
parents:
diff changeset
   790
    return attachmentIdList;
hgs
parents:
diff changeset
   791
}
hgs
parents:
diff changeset
   792
hgs
parents:
diff changeset
   793
TInt CCsPreviewPluginHandler::CheckModeForInsertL(RFile aFileHandle)
hgs
parents:
diff changeset
   794
{
hgs
parents:
diff changeset
   795
    CleanupClosePushL(aFileHandle);
hgs
parents:
diff changeset
   796
hgs
parents:
diff changeset
   797
    CMmsConformance* mmsConformance = CMmsConformance::NewL();
hgs
parents:
diff changeset
   798
    mmsConformance->CheckCharacterSet(EFalse);
hgs
parents:
diff changeset
   799
hgs
parents:
diff changeset
   800
    CleanupStack::PushL(mmsConformance);
hgs
parents:
diff changeset
   801
hgs
parents:
diff changeset
   802
    CMsgMediaResolver* mediaResolver = CMsgMediaResolver::NewL();
hgs
parents:
diff changeset
   803
    mediaResolver->SetCharacterSetRecognition(EFalse);
hgs
parents:
diff changeset
   804
hgs
parents:
diff changeset
   805
    CleanupStack::PushL(mediaResolver);
hgs
parents:
diff changeset
   806
hgs
parents:
diff changeset
   807
    CMsgMediaInfo* info = mediaResolver->CreateMediaInfoL(aFileHandle);
hgs
parents:
diff changeset
   808
    mediaResolver->ParseInfoDetailsL(info, aFileHandle);
hgs
parents:
diff changeset
   809
hgs
parents:
diff changeset
   810
    TMmsConformance conformance = mmsConformance->MediaConformance(*info);
hgs
parents:
diff changeset
   811
    iConfStatus = conformance.iConfStatus;
hgs
parents:
diff changeset
   812
hgs
parents:
diff changeset
   813
    CleanupStack::PopAndDestroy(3);
hgs
parents:
diff changeset
   814
hgs
parents:
diff changeset
   815
    // In "free" mode user can insert images that are larger by dimensions than allowed by conformance
hgs
parents:
diff changeset
   816
    if (iCreationMode != EMmsCreationModeRestricted)
hgs
parents:
diff changeset
   817
    {
hgs
parents:
diff changeset
   818
        TInt i = EMmsConfNokFreeModeOnly | EMmsConfNokScalingNeeded
hgs
parents:
diff changeset
   819
                | EMmsConfNokTooBig;
hgs
parents:
diff changeset
   820
        TInt j = ~ (EMmsConfNokFreeModeOnly | EMmsConfNokScalingNeeded
hgs
parents:
diff changeset
   821
                | EMmsConfNokTooBig);
hgs
parents:
diff changeset
   822
hgs
parents:
diff changeset
   823
        // If user answers yes to Guided mode confirmation query he/she moves to free mode
hgs
parents:
diff changeset
   824
        if ( (iConfStatus & i) && ! (iConfStatus & j))
hgs
parents:
diff changeset
   825
        {
hgs
parents:
diff changeset
   826
            if (iCreationMode == EMmsCreationModeFree || info->Protection()
hgs
parents:
diff changeset
   827
                    & EFileProtSuperDistributable)
hgs
parents:
diff changeset
   828
            {
hgs
parents:
diff changeset
   829
                // SuperDistribution not checked here
hgs
parents:
diff changeset
   830
                // Mask "FreeModeOnly" and "ScalingNeeded" away in free mode
hgs
parents:
diff changeset
   831
                iConfStatus &= ~EMmsConfNokFreeModeOnly;
hgs
parents:
diff changeset
   832
                iConfStatus &= ~EMmsConfNokScalingNeeded;
hgs
parents:
diff changeset
   833
            }
hgs
parents:
diff changeset
   834
            else
hgs
parents:
diff changeset
   835
            {
hgs
parents:
diff changeset
   836
                delete info;
hgs
parents:
diff changeset
   837
                //query not accepted. Stop insertion.
hgs
parents:
diff changeset
   838
                return EInsertQueryAbort;
hgs
parents:
diff changeset
   839
            }
hgs
parents:
diff changeset
   840
        }
hgs
parents:
diff changeset
   841
    }
hgs
parents:
diff changeset
   842
    else if (iConfStatus & EMmsConfNokDRM || iConfStatus
hgs
parents:
diff changeset
   843
            & EMmsConfNokNotEnoughInfo || iConfStatus & EMmsConfNokNotSupported
hgs
parents:
diff changeset
   844
            || iConfStatus & EMmsConfNokFreeModeOnly || iConfStatus
hgs
parents:
diff changeset
   845
            & EMmsConfNokCorrupt)
hgs
parents:
diff changeset
   846
    {
hgs
parents:
diff changeset
   847
        delete info;
hgs
parents:
diff changeset
   848
        return EInsertNotSupported;
hgs
parents:
diff changeset
   849
    }
hgs
parents:
diff changeset
   850
hgs
parents:
diff changeset
   851
    delete info;
hgs
parents:
diff changeset
   852
    return EInsertSuccess;
hgs
parents:
diff changeset
   853
}
hgs
parents:
diff changeset
   854
hgs
parents:
diff changeset
   855
//-----------------------------------------------------------------------------
hgs
parents:
diff changeset
   856
// CCsPreviewPluginHandler::CompareByRequestId
hgs
parents:
diff changeset
   857
// Compare to conversation entry object based on Entry Ids
hgs
parents:
diff changeset
   858
//----------------------------------------------------------------------------
hgs
parents:
diff changeset
   859
TBool CCsPreviewPluginHandler::CompareByRequestId(
hgs
parents:
diff changeset
   860
    const ThumbnailRequestData& aFirst, const ThumbnailRequestData& aSecond)
hgs
parents:
diff changeset
   861
{
hgs
parents:
diff changeset
   862
    if (aFirst.iRequestId == aSecond.iRequestId)
hgs
parents:
diff changeset
   863
        return ETrue;
hgs
parents:
diff changeset
   864
hgs
parents:
diff changeset
   865
    return EFalse;
hgs
parents:
diff changeset
   866
}
hgs
parents:
diff changeset
   867
hgs
parents:
diff changeset
   868
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   869
// CCsPreviewPluginHandler::BindBodyText()
hgs
parents:
diff changeset
   870
// 
hgs
parents:
diff changeset
   871
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   872
//
hgs
parents:
diff changeset
   873
void CCsPreviewPluginHandler::BindBodyText(RSqlStatement& sqlStmt,
hgs
parents:
diff changeset
   874
    TMsvAttachmentId attachmentId)
hgs
parents:
diff changeset
   875
{
hgs
parents:
diff changeset
   876
    //get file handle from attachmnet manager.
hgs
parents:
diff changeset
   877
    CMsvStore * store = iMmsMtm->Entry().ReadStoreL();
hgs
parents:
diff changeset
   878
    CleanupStack::PushL(store);
hgs
parents:
diff changeset
   879
    MMsvAttachmentManager& attachMan = store->AttachmentManagerL();
hgs
parents:
diff changeset
   880
    RFile file = attachMan.GetAttachmentFileL(attachmentId);
hgs
parents:
diff changeset
   881
    CleanupClosePushL(file);
hgs
parents:
diff changeset
   882
hgs
parents:
diff changeset
   883
    //read file contents to buffer
67
fc91263aee62 201037_04
hgs
parents: 56
diff changeset
   884
    TInt length = 0;
37
hgs
parents:
diff changeset
   885
    file.Size(length);
hgs
parents:
diff changeset
   886
    HBufC8* bodyText = HBufC8::NewLC(length);
hgs
parents:
diff changeset
   887
    TPtr8 textBuffer = bodyText->Des();
hgs
parents:
diff changeset
   888
    file.Read(textBuffer);
hgs
parents:
diff changeset
   889
hgs
parents:
diff changeset
   890
    // convert from HBufC8 to HBufC16
hgs
parents:
diff changeset
   891
    HBufC16 *text16 = HBufC16::NewLC(textBuffer.Length());
hgs
parents:
diff changeset
   892
    TPtr16 textPtr16 = text16->Des();
hgs
parents:
diff changeset
   893
    CnvUtfConverter::ConvertToUnicodeFromUtf8(textPtr16, textBuffer);
hgs
parents:
diff changeset
   894
hgs
parents:
diff changeset
   895
    //set bodytext in the sql statement
hgs
parents:
diff changeset
   896
    TInt bodyTextIndex = sqlStmt.ParameterIndex(_L(":body_text"));
hgs
parents:
diff changeset
   897
    sqlStmt.BindText(bodyTextIndex, textPtr16);
hgs
parents:
diff changeset
   898
hgs
parents:
diff changeset
   899
    CleanupStack::PopAndDestroy(4, store); //store,file, bodyText, text16
hgs
parents:
diff changeset
   900
}
hgs
parents:
diff changeset
   901
hgs
parents:
diff changeset
   902
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   903
// CCsPreviewPluginHandler::GetThumbNailL()
hgs
parents:
diff changeset
   904
// 
hgs
parents:
diff changeset
   905
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   906
//
hgs
parents:
diff changeset
   907
void CCsPreviewPluginHandler::GetThumbNailL(TMsvAttachmentId attachmentId,
hgs
parents:
diff changeset
   908
    TDesC8& mimeType, TMsvId msgId)
hgs
parents:
diff changeset
   909
{
hgs
parents:
diff changeset
   910
hgs
parents:
diff changeset
   911
    // Create Thumbnail object source representing a path to a file
hgs
parents:
diff changeset
   912
    HBufC* mimeInfo = HBufC::NewLC(mimeType.Length());
hgs
parents:
diff changeset
   913
    mimeInfo->Des().Copy(mimeType);
hgs
parents:
diff changeset
   914
hgs
parents:
diff changeset
   915
    CMsvStore * store = iMmsMtm->Entry().ReadStoreL();
hgs
parents:
diff changeset
   916
    CleanupStack::PushL(store);
hgs
parents:
diff changeset
   917
hgs
parents:
diff changeset
   918
    //get file handle from attachment manager.
hgs
parents:
diff changeset
   919
    MMsvAttachmentManager& attachMan = store->AttachmentManagerL();
hgs
parents:
diff changeset
   920
    RFile file = attachMan.GetAttachmentFileL(attachmentId);
hgs
parents:
diff changeset
   921
    CleanupClosePushL(file);
hgs
parents:
diff changeset
   922
56
f42d9a78f435 201033_02
hgs
parents: 48
diff changeset
   923
    //Find if the image is portrait image (or) landscape image
f42d9a78f435 201033_02
hgs
parents: 48
diff changeset
   924
    CImageDecoder *decoder =  CImageDecoder::FileNewL(file,mimeType,ContentAccess::EUnknown);
f42d9a78f435 201033_02
hgs
parents: 48
diff changeset
   925
    CleanupStack::PushL(decoder);
f42d9a78f435 201033_02
hgs
parents: 48
diff changeset
   926
    TSize size(0,0);
f42d9a78f435 201033_02
hgs
parents: 48
diff changeset
   927
       
f42d9a78f435 201033_02
hgs
parents: 48
diff changeset
   928
    TFrameInfo info = decoder->FrameInfo();
f42d9a78f435 201033_02
hgs
parents: 48
diff changeset
   929
    
f42d9a78f435 201033_02
hgs
parents: 48
diff changeset
   930
    size = info.iOverallSizeInPixels;
f42d9a78f435 201033_02
hgs
parents: 48
diff changeset
   931
    
f42d9a78f435 201033_02
hgs
parents: 48
diff changeset
   932
    CleanupStack::PopAndDestroy(decoder);
f42d9a78f435 201033_02
hgs
parents: 48
diff changeset
   933
   
f42d9a78f435 201033_02
hgs
parents: 48
diff changeset
   934
    TReal32 newLength = 0;
f42d9a78f435 201033_02
hgs
parents: 48
diff changeset
   935
    
f42d9a78f435 201033_02
hgs
parents: 48
diff changeset
   936
    if(size.iWidth >= size.iHeight)
f42d9a78f435 201033_02
hgs
parents: 48
diff changeset
   937
    {
f42d9a78f435 201033_02
hgs
parents: 48
diff changeset
   938
        //TODO replace with hb-param-graphic-size-image-portrait * value of un in pixcels
f42d9a78f435 201033_02
hgs
parents: 48
diff changeset
   939
        if(size.iWidth < KWidth)
f42d9a78f435 201033_02
hgs
parents: 48
diff changeset
   940
        {
f42d9a78f435 201033_02
hgs
parents: 48
diff changeset
   941
            iThumbnailManager->SetThumbnailSizeL(size);    
f42d9a78f435 201033_02
hgs
parents: 48
diff changeset
   942
        }
f42d9a78f435 201033_02
hgs
parents: 48
diff changeset
   943
        else
f42d9a78f435 201033_02
hgs
parents: 48
diff changeset
   944
        {
f42d9a78f435 201033_02
hgs
parents: 48
diff changeset
   945
            newLength = (KWidth * size.iHeight) /size.iWidth;
f42d9a78f435 201033_02
hgs
parents: 48
diff changeset
   946
            iThumbnailManager->SetThumbnailSizeL(TSize(KWidth, newLength));
f42d9a78f435 201033_02
hgs
parents: 48
diff changeset
   947
        }
f42d9a78f435 201033_02
hgs
parents: 48
diff changeset
   948
    }
f42d9a78f435 201033_02
hgs
parents: 48
diff changeset
   949
    else
f42d9a78f435 201033_02
hgs
parents: 48
diff changeset
   950
    {        
f42d9a78f435 201033_02
hgs
parents: 48
diff changeset
   951
        //TODO replace with hb-param-graphic-size-image-portrait * value of un in pixcels
f42d9a78f435 201033_02
hgs
parents: 48
diff changeset
   952
        if(size.iHeight < KHeight)
f42d9a78f435 201033_02
hgs
parents: 48
diff changeset
   953
        {
f42d9a78f435 201033_02
hgs
parents: 48
diff changeset
   954
            iThumbnailManager->SetThumbnailSizeL(size);    
f42d9a78f435 201033_02
hgs
parents: 48
diff changeset
   955
        }
f42d9a78f435 201033_02
hgs
parents: 48
diff changeset
   956
        else
f42d9a78f435 201033_02
hgs
parents: 48
diff changeset
   957
        {
f42d9a78f435 201033_02
hgs
parents: 48
diff changeset
   958
            newLength = (KHeight * size.iWidth) / size.iHeight;
f42d9a78f435 201033_02
hgs
parents: 48
diff changeset
   959
            iThumbnailManager->SetThumbnailSizeL(TSize(newLength, KHeight));    
f42d9a78f435 201033_02
hgs
parents: 48
diff changeset
   960
        }
f42d9a78f435 201033_02
hgs
parents: 48
diff changeset
   961
    }
f42d9a78f435 201033_02
hgs
parents: 48
diff changeset
   962
f42d9a78f435 201033_02
hgs
parents: 48
diff changeset
   963
    //Scale the image
f42d9a78f435 201033_02
hgs
parents: 48
diff changeset
   964
    iThumbnailManager->SetFlagsL(CThumbnailManager::ECropToAspectRatio);
f42d9a78f435 201033_02
hgs
parents: 48
diff changeset
   965
f42d9a78f435 201033_02
hgs
parents: 48
diff changeset
   966
    //optimize for performace
f42d9a78f435 201033_02
hgs
parents: 48
diff changeset
   967
    iThumbnailManager->SetQualityPreferenceL(
f42d9a78f435 201033_02
hgs
parents: 48
diff changeset
   968
        CThumbnailManager::EOptimizeForQuality);
f42d9a78f435 201033_02
hgs
parents: 48
diff changeset
   969
37
hgs
parents:
diff changeset
   970
    CThumbnailObjectSource* source = CThumbnailObjectSource::NewLC(
hgs
parents:
diff changeset
   971
        (RFile64&) file, mimeInfo->Des());
hgs
parents:
diff changeset
   972
hgs
parents:
diff changeset
   973
    // Issue the request for thumbnail creation
hgs
parents:
diff changeset
   974
    ThumbnailRequestData reqObject;
hgs
parents:
diff changeset
   975
    reqObject.iMsgId = msgId;
hgs
parents:
diff changeset
   976
    reqObject.iRequestId = iThumbnailManager->GetThumbnailL(*source);
hgs
parents:
diff changeset
   977
    iThumbnailRequestArray.Append(reqObject);
hgs
parents:
diff changeset
   978
hgs
parents:
diff changeset
   979
    CleanupStack::PopAndDestroy(4, mimeInfo);//mimeInfo,store,file,source
hgs
parents:
diff changeset
   980
}
hgs
parents:
diff changeset
   981
hgs
parents:
diff changeset
   982
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   983
// CCsPreviewPluginHandler::msgProcessingState
hgs
parents:
diff changeset
   984
// 
hgs
parents:
diff changeset
   985
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   986
//
hgs
parents:
diff changeset
   987
TInt CCsPreviewPluginHandler::msgProcessingState(TMsvId aMsgId)
hgs
parents:
diff changeset
   988
{
hgs
parents:
diff changeset
   989
    TInt retState = EPreviewMsgNotProcessed;
hgs
parents:
diff changeset
   990
hgs
parents:
diff changeset
   991
    // sql-statement to check if msg's under processing flag is set or not
hgs
parents:
diff changeset
   992
    RSqlStatement sqlSelectStmt;
hgs
parents:
diff changeset
   993
    CleanupClosePushL(sqlSelectStmt);
hgs
parents:
diff changeset
   994
    sqlSelectStmt.PrepareL(iSqlDb,KSelectProcessingStateStmt);
hgs
parents:
diff changeset
   995
hgs
parents:
diff changeset
   996
    TInt msgIdIndex = sqlSelectStmt.ParameterIndex(_L(":message_id"));
hgs
parents:
diff changeset
   997
    User::LeaveIfError(sqlSelectStmt.BindInt(msgIdIndex, aMsgId));
hgs
parents:
diff changeset
   998
hgs
parents:
diff changeset
   999
    // read the flag
hgs
parents:
diff changeset
  1000
    TInt msgProcessingStateIndex = sqlSelectStmt.ColumnIndex(_L("msg_processingstate"));
hgs
parents:
diff changeset
  1001
    if (sqlSelectStmt.Next() == KSqlAtRow)
hgs
parents:
diff changeset
  1002
    {
hgs
parents:
diff changeset
  1003
         retState = static_cast<TInt>(sqlSelectStmt.ColumnInt(msgProcessingStateIndex));
hgs
parents:
diff changeset
  1004
    }
hgs
parents:
diff changeset
  1005
    else
hgs
parents:
diff changeset
  1006
    {
hgs
parents:
diff changeset
  1007
        // this is first event for this msgid, hence record doesn't exist
hgs
parents:
diff changeset
  1008
        // create an empty record, so that we can set & use flags
hgs
parents:
diff changeset
  1009
        RSqlStatement sqlBasicInsertStmt;
hgs
parents:
diff changeset
  1010
        CleanupClosePushL(sqlBasicInsertStmt);
hgs
parents:
diff changeset
  1011
        sqlBasicInsertStmt.PrepareL(iSqlDb, KSqlBasicInsertStmt);
hgs
parents:
diff changeset
  1012
        TInt index_msgid = sqlBasicInsertStmt.ParameterIndex(_L(":message_id"));
hgs
parents:
diff changeset
  1013
        User::LeaveIfError(sqlBasicInsertStmt.BindInt(index_msgid, aMsgId));
hgs
parents:
diff changeset
  1014
        User::LeaveIfError(sqlBasicInsertStmt.Exec());
hgs
parents:
diff changeset
  1015
        CleanupStack::PopAndDestroy(&sqlBasicInsertStmt);
hgs
parents:
diff changeset
  1016
    }
hgs
parents:
diff changeset
  1017
    // cleanup
hgs
parents:
diff changeset
  1018
    CleanupStack::PopAndDestroy(&sqlSelectStmt);
hgs
parents:
diff changeset
  1019
    return retState;
hgs
parents:
diff changeset
  1020
}
hgs
parents:
diff changeset
  1021
hgs
parents:
diff changeset
  1022
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1023
// CCsPreviewPluginHandler::setMsgProcessingState
hgs
parents:
diff changeset
  1024
// 
hgs
parents:
diff changeset
  1025
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1026
//
hgs
parents:
diff changeset
  1027
void CCsPreviewPluginHandler::setMsgProcessingState(TMsvId aMsgId, TInt aState)
hgs
parents:
diff changeset
  1028
{
hgs
parents:
diff changeset
  1029
    // sql-statment to set/reset msg's under processing flag
hgs
parents:
diff changeset
  1030
    RSqlStatement sqlUpdateStmt;
hgs
parents:
diff changeset
  1031
    CleanupClosePushL(sqlUpdateStmt);
hgs
parents:
diff changeset
  1032
    sqlUpdateStmt.PrepareL(iSqlDb, KSqlUpdateProcessingStateStmt);
hgs
parents:
diff changeset
  1033
hgs
parents:
diff changeset
  1034
    TInt msgIdIndex = sqlUpdateStmt.ParameterIndex(_L(":message_id"));
hgs
parents:
diff changeset
  1035
    User::LeaveIfError(sqlUpdateStmt.BindInt(msgIdIndex, aMsgId));
hgs
parents:
diff changeset
  1036
hgs
parents:
diff changeset
  1037
    // bind data
hgs
parents:
diff changeset
  1038
    TInt msgProcessingStateIndex = sqlUpdateStmt.ParameterIndex(_L(":msg_processingstate"));
hgs
parents:
diff changeset
  1039
    User::LeaveIfError(sqlUpdateStmt.BindInt(msgProcessingStateIndex, aState));
hgs
parents:
diff changeset
  1040
hgs
parents:
diff changeset
  1041
    // execute the statement
hgs
parents:
diff changeset
  1042
    User::LeaveIfError(sqlUpdateStmt.Exec());
hgs
parents:
diff changeset
  1043
    // cleanup
hgs
parents:
diff changeset
  1044
    CleanupStack::PopAndDestroy(&sqlUpdateStmt);
hgs
parents:
diff changeset
  1045
}
hgs
parents:
diff changeset
  1046
hgs
parents:
diff changeset
  1047
// End of file
hgs
parents:
diff changeset
  1048