btobexprofiles/obexreceiveservices/btmsgviewer/src/btmsgviewerutils.cpp
author hgs
Fri, 23 Jul 2010 15:57:13 +0300
changeset 47 9e2a905b887f
parent 42 b72428996822
child 57 5ebadcda06cb
permissions -rw-r--r--
201029_02
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
42
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
 * Copyright (c) 2009 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:  
hgs
parents:
diff changeset
    15
 *
hgs
parents:
diff changeset
    16
 */
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
#include <mmsvattachmentmanager.h>
47
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    19
#include <apgcli.h>
42
hgs
parents:
diff changeset
    20
#include "btmsgviewerutils.h"
hgs
parents:
diff changeset
    21
47
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    22
const TInt32 KUidMsgTypeBtTInt32 = 0x10009ED5;
42
hgs
parents:
diff changeset
    23
47
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    24
    
42
hgs
parents:
diff changeset
    25
CBtMsgViewerUtils* CBtMsgViewerUtils::NewL()
hgs
parents:
diff changeset
    26
    {
hgs
parents:
diff changeset
    27
    CBtMsgViewerUtils* me = new (ELeave) CBtMsgViewerUtils();
hgs
parents:
diff changeset
    28
    CleanupStack::PushL(me);
hgs
parents:
diff changeset
    29
    me->ConstructL();
hgs
parents:
diff changeset
    30
    CleanupStack::Pop(me);
hgs
parents:
diff changeset
    31
    return me;
hgs
parents:
diff changeset
    32
    }
hgs
parents:
diff changeset
    33
hgs
parents:
diff changeset
    34
CBtMsgViewerUtils::CBtMsgViewerUtils()
hgs
parents:
diff changeset
    35
    {
hgs
parents:
diff changeset
    36
    
hgs
parents:
diff changeset
    37
    }
hgs
parents:
diff changeset
    38
hgs
parents:
diff changeset
    39
void CBtMsgViewerUtils::ConstructL()
hgs
parents:
diff changeset
    40
    {
hgs
parents:
diff changeset
    41
    iMsvSession = CMsvSession::OpenSyncL(*this);
hgs
parents:
diff changeset
    42
    }
hgs
parents:
diff changeset
    43
hgs
parents:
diff changeset
    44
CBtMsgViewerUtils::~CBtMsgViewerUtils()
hgs
parents:
diff changeset
    45
    {
hgs
parents:
diff changeset
    46
    if ( iMsvSession )
hgs
parents:
diff changeset
    47
        {
47
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    48
        delete iMsvSession;
42
hgs
parents:
diff changeset
    49
        }
47
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    50
    delete iMimeType;
42
hgs
parents:
diff changeset
    51
    }
hgs
parents:
diff changeset
    52
hgs
parents:
diff changeset
    53
HBufC* CBtMsgViewerUtils::GetMessagePath(TInt aMessageId, TInt aError)
hgs
parents:
diff changeset
    54
    {
hgs
parents:
diff changeset
    55
    HBufC* fileName = NULL;
hgs
parents:
diff changeset
    56
    TRAP(aError, fileName = HBufC::NewL(KMaxPath));   
hgs
parents:
diff changeset
    57
    if(aError < KErrNone)
hgs
parents:
diff changeset
    58
        {
hgs
parents:
diff changeset
    59
        return fileName;
hgs
parents:
diff changeset
    60
        }
hgs
parents:
diff changeset
    61
    
hgs
parents:
diff changeset
    62
    TRAP(aError, GetMessagePathL(fileName->Des(), aMessageId));
hgs
parents:
diff changeset
    63
    return fileName;
hgs
parents:
diff changeset
    64
    }
hgs
parents:
diff changeset
    65
hgs
parents:
diff changeset
    66
void CBtMsgViewerUtils::GetMessagePathL(TPtr aMsgPath, const TInt aMessageId)
hgs
parents:
diff changeset
    67
    {
hgs
parents:
diff changeset
    68
    CMsvEntry* messageEntry = iMsvSession->GetEntryL(aMessageId);
47
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    69
    CleanupStack::PushL(messageEntry); //1st push
42
hgs
parents:
diff changeset
    70
    
47
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    71
    TMsvEntry entry = messageEntry->Entry();
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    72
    if(entry.MtmData1() == KUidMsgTypeBtTInt32)
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    73
        {
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    74
        CMsvStore* store = messageEntry->ReadStoreL();
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    75
        CleanupStack::PushL(store); //2nd push
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    76
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    77
        //get file handle for the attachment & the complete path of the file
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    78
        RFile attachmentFile;
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    79
        attachmentFile = store->AttachmentManagerL().GetAttachmentFileL(0);
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    80
        CleanupClosePushL(attachmentFile); //3rd push
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    81
        User::LeaveIfError(attachmentFile.FullName(aMsgPath));
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    82
        CleanupStack::PopAndDestroy(&attachmentFile);
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    83
        StoreMessageMimeTypeL(aMsgPath);
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    84
        
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    85
        //mark attachment as Read
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    86
        TMsvEntry attachEntry = messageEntry->Entry();
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    87
        attachEntry.SetUnread(EFalse);
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    88
        messageEntry->ChangeL(attachEntry);
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    89
        
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    90
        CleanupStack::PopAndDestroy(store);
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    91
        CleanupStack::PopAndDestroy(messageEntry);
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    92
        }
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    93
    else
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    94
        {
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    95
        CMsvEntry* attachmentEntry = iMsvSession->GetEntryL((*messageEntry)[0].Id());
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    96
        CleanupStack::PushL(attachmentEntry); //2nd push
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    97
            
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    98
        CMsvStore* store = attachmentEntry->ReadStoreL();
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    99
        CleanupStack::PushL(store);  //3rd push
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   100
        
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   101
        //get file handle for the attachment & the complete path of the file
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   102
        RFile attachmentFile;
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   103
        attachmentFile = store->AttachmentManagerL().GetAttachmentFileL(0);
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   104
        CleanupClosePushL(attachmentFile);
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   105
        User::LeaveIfError(attachmentFile.FullName(aMsgPath));
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   106
        CleanupStack::PopAndDestroy(&attachmentFile);
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   107
        StoreMessageMimeTypeL(aMsgPath);
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   108
        
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   109
        //mark attachment as Read
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   110
        TMsvEntry attachEntry = attachmentEntry->Entry();
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   111
        attachEntry.SetUnread(EFalse);
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   112
        attachmentEntry->ChangeL(attachEntry);
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   113
        
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   114
        CleanupStack::PopAndDestroy(store);
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   115
        CleanupStack::PopAndDestroy(attachmentEntry);
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   116
        CleanupStack::PopAndDestroy(messageEntry);
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   117
        }
42
hgs
parents:
diff changeset
   118
    }
hgs
parents:
diff changeset
   119
hgs
parents:
diff changeset
   120
void CBtMsgViewerUtils::HandleSessionEventL(TMsvSessionEvent aEvent, TAny* aArg1, 
hgs
parents:
diff changeset
   121
                                                    TAny* aArg2, TAny* aArg3)
hgs
parents:
diff changeset
   122
    {
hgs
parents:
diff changeset
   123
    (void) aEvent;
hgs
parents:
diff changeset
   124
    (void) aArg1;
hgs
parents:
diff changeset
   125
    (void) aArg2;
hgs
parents:
diff changeset
   126
    (void) aArg3;
hgs
parents:
diff changeset
   127
    }
hgs
parents:
diff changeset
   128
47
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   129
void CBtMsgViewerUtils::StoreMessageMimeTypeL(TPtr aMsgPath)
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   130
    {
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   131
    RFs rfs;
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   132
    RFile file;
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   133
    
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   134
    User::LeaveIfError(rfs.Connect());
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   135
    
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   136
    User::LeaveIfError(rfs.ShareProtected());
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   137
    
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   138
    User::LeaveIfError(file.Open(rfs, aMsgPath, EFileShareReadersOrWriters | EFileRead));
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   139
    
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   140
    TDataRecognitionResult dataType;
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   141
    RApaLsSession apaSession;
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   142
    
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   143
    if(apaSession.Connect() == KErrNone)
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   144
        {
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   145
        if (apaSession.RecognizeData(file, dataType) == KErrNone)
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   146
            {
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   147
            if(iMimeType)
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   148
                {
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   149
                delete iMimeType;
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   150
                iMimeType = NULL;
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   151
                }
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   152
        
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   153
            iMimeType = dataType.iDataType.Des8().AllocL();
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   154
            
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   155
            rfs.Close();
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   156
            apaSession.Close();
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   157
            }
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   158
        }
42
hgs
parents:
diff changeset
   159
47
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   160
    rfs.Close();
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   161
    }
42
hgs
parents:
diff changeset
   162
47
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   163
HBufC8* CBtMsgViewerUtils::GetMimeType()
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   164
    {
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   165
    return iMimeType;
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   166
    }