messagingapp/msgui/msguiutils/src/msgservicelaunchutilprivate.cpp
author hgs
Tue, 05 Oct 2010 13:58:47 +0530
changeset 73 ecf6a73a9186
permissions -rw-r--r--
201039_03
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
73
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
     1
/*
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
     2
 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
     3
 * All rights reserved.
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
     4
 * This component and the accompanying materials are made available
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
     5
 * under the terms of "Eclipse Public License v1.0""
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
     6
 * which accompanies this distribution, and is available
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
     7
 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
     8
 *
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
     9
 * Initial Contributors:
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    10
 * Nokia Corporation - initial contribution.
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    11
 *
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    12
 * Contributors:
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    13
 *
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    14
 * Description:  
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    15
 *
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    16
 */
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    17
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    18
#include <mmsvattachmentmanager.h>
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    19
#include <apgcli.h>
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    20
#include "msgservicelaunchutilprivate.h"
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    21
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    22
const TInt32 KUidMsgTypeBtTInt32 = 0x10009ED5;
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    23
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    24
    
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    25
CMsgServiceLaunchUtilPrivate* CMsgServiceLaunchUtilPrivate::NewL()
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    26
    {
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    27
    CMsgServiceLaunchUtilPrivate* me = new (ELeave) CMsgServiceLaunchUtilPrivate();
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    28
    CleanupStack::PushL(me);
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    29
    me->ConstructL();
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    30
    CleanupStack::Pop(me);
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    31
    return me;
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    32
    }
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    33
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    34
CMsgServiceLaunchUtilPrivate::CMsgServiceLaunchUtilPrivate()
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    35
    {
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    36
    
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    37
    }
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    38
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    39
void CMsgServiceLaunchUtilPrivate::ConstructL()
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    40
    {
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    41
    iMsvSession = CMsvSession::OpenSyncL(*this);
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    42
    }
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    43
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    44
CMsgServiceLaunchUtilPrivate::~CMsgServiceLaunchUtilPrivate()
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    45
    {
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    46
    if ( iMsvSession )
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    47
        {
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    48
        delete iMsvSession;
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    49
        }
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    50
    delete iMimeType;
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    51
    }
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    52
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    53
HBufC* CMsgServiceLaunchUtilPrivate::GetMessagePath(
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    54
        TInt aMessageId, 
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    55
        TInt aError)
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    56
    {
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    57
    HBufC* fileName = NULL;
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    58
    TRAP(aError, fileName = HBufC::NewL(KMaxPath));   
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    59
    if(aError < KErrNone)
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    60
        {
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    61
        return fileName;
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    62
        }
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    63
    
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    64
    TRAP(aError, GetMessagePathL(fileName->Des(), aMessageId));
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    65
    return fileName;
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    66
    }
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    67
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    68
void CMsgServiceLaunchUtilPrivate::GetMessagePathL(
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    69
        TPtr aMsgPath, const TInt aMessageId)
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    70
    {
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    71
    CMsvEntry* messageEntry = iMsvSession->GetEntryL(aMessageId);
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    72
    CleanupStack::PushL(messageEntry); //1st push
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    73
    
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    74
    TMsvEntry entry = messageEntry->Entry();
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    75
    if(entry.MtmData1() == KUidMsgTypeBtTInt32)
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    76
        {
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    77
        CMsvStore* store = messageEntry->ReadStoreL();
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    78
        CleanupStack::PushL(store); //2nd push
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    79
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    80
        //get file handle for the attachment & the complete path of the file
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    81
        RFile attachmentFile;
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    82
        attachmentFile = store->AttachmentManagerL().GetAttachmentFileL(0);
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    83
        CleanupClosePushL(attachmentFile); //3rd push
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    84
        User::LeaveIfError(attachmentFile.FullName(aMsgPath));
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    85
        CleanupStack::PopAndDestroy(&attachmentFile);
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    86
        StoreMessageMimeTypeL(aMsgPath);
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    87
        
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    88
        //mark attachment as Read
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    89
        TMsvEntry attachEntry = messageEntry->Entry();
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    90
        attachEntry.SetUnread(EFalse);
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    91
        messageEntry->ChangeL(attachEntry);
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    92
        
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    93
        CleanupStack::PopAndDestroy(store);
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    94
        CleanupStack::PopAndDestroy(messageEntry);
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    95
        }
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    96
    else
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    97
        {
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    98
        CMsvEntry* attachmentEntry = iMsvSession->GetEntryL((*messageEntry)[0].Id());
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
    99
        CleanupStack::PushL(attachmentEntry); //2nd push
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   100
            
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   101
        CMsvStore* store = attachmentEntry->ReadStoreL();
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   102
        CleanupStack::PushL(store);  //3rd push
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   103
        
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   104
        //get file handle for the attachment & the complete path of the file
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   105
        RFile attachmentFile;
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   106
        attachmentFile = store->AttachmentManagerL().GetAttachmentFileL(0);
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   107
        CleanupClosePushL(attachmentFile);
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   108
        User::LeaveIfError(attachmentFile.FullName(aMsgPath));
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   109
        CleanupStack::PopAndDestroy(&attachmentFile);
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   110
        StoreMessageMimeTypeL(aMsgPath);
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   111
        
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   112
        //mark attachment as Read
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   113
        TMsvEntry attachEntry = attachmentEntry->Entry();
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   114
        attachEntry.SetUnread(EFalse);
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   115
        attachmentEntry->ChangeL(attachEntry);
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   116
        
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   117
        CleanupStack::PopAndDestroy(store);
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   118
        CleanupStack::PopAndDestroy(attachmentEntry);
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   119
        CleanupStack::PopAndDestroy(messageEntry);
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   120
        }
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   121
    }
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   122
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   123
void CMsgServiceLaunchUtilPrivate::HandleSessionEventL(
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   124
        TMsvSessionEvent aEvent, 
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   125
        TAny* aArg1, TAny* aArg2, TAny* aArg3)
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   126
    {
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   127
    (void) aEvent;
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   128
    (void) aArg1;
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   129
    (void) aArg2;
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   130
    (void) aArg3;
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   131
    }
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   132
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   133
void CMsgServiceLaunchUtilPrivate::StoreMessageMimeTypeL(TPtr aMsgPath)
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   134
    {
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   135
    RFs rfs;
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   136
    RFile file;
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   137
    
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   138
    User::LeaveIfError(rfs.Connect());
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   139
    
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   140
    User::LeaveIfError(rfs.ShareProtected());
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   141
    
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   142
    User::LeaveIfError(file.Open(rfs, aMsgPath, EFileShareReadersOrWriters | EFileRead));
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   143
    
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   144
    TDataRecognitionResult dataType;
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   145
    RApaLsSession apaSession;
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   146
    
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   147
    if(apaSession.Connect() == KErrNone)
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   148
        {
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   149
        if (apaSession.RecognizeData(file, dataType) == KErrNone)
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   150
            {
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   151
            if(iMimeType)
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   152
                {
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   153
                delete iMimeType;
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   154
                iMimeType = NULL;
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   155
                }
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   156
        
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   157
            iMimeType = dataType.iDataType.Des8().AllocL();
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   158
            
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   159
            rfs.Close();
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   160
            apaSession.Close();
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   161
            }
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   162
        }
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   163
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   164
    rfs.Close();
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   165
    }
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   166
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   167
HBufC8* CMsgServiceLaunchUtilPrivate::GetMimeType()
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   168
    {
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   169
    return iMimeType;
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   170
    }
ecf6a73a9186 201039_03
hgs
parents:
diff changeset
   171