btobexprofiles/obexreceiveservices/btmsgviewer/src/btmsgviewer.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
hgs
parents:
diff changeset
    19
#include "btmsgviewer.h"
hgs
parents:
diff changeset
    20
#include "apmstd.h"
hgs
parents:
diff changeset
    21
#include <xqaiwrequest.h>
47
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    22
#include <xqconversions.h>
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    23
#include <apgcli.h>
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    24
#include <QFileInfo>
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    25
#include <QDir>
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    26
#include <QFile>
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    27
#include <hbapplication.h>
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    28
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    29
const QString KMimeTypeVCard("text/X-vCard");
42
hgs
parents:
diff changeset
    30
hgs
parents:
diff changeset
    31
hgs
parents:
diff changeset
    32
BTMsgViewer::BTMsgViewer(QObject* parent)
47
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    33
: XQServiceProvider("com.nokia.services.btmsgdispservices.displaymsg", parent), mCurrentRequestIndex(0)
42
hgs
parents:
diff changeset
    34
    {    
hgs
parents:
diff changeset
    35
    publishAll();
47
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    36
    connect(this, SIGNAL(returnValueDelivered()), qApp, SLOT(quit()));
42
hgs
parents:
diff changeset
    37
    }
hgs
parents:
diff changeset
    38
hgs
parents:
diff changeset
    39
BTMsgViewer::~BTMsgViewer ()
hgs
parents:
diff changeset
    40
    {
47
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    41
42
hgs
parents:
diff changeset
    42
    }
hgs
parents:
diff changeset
    43
47
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    44
void BTMsgViewer::displaymsg( int messageId )
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    45
    { 
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    46
    mCurrentRequestIndex = setCurrentRequestAsync(); 
42
hgs
parents:
diff changeset
    47
    CBtMsgViewerUtils* btViewerUtils = 0;
hgs
parents:
diff changeset
    48
    
hgs
parents:
diff changeset
    49
    TRAPD(error, btViewerUtils = CBtMsgViewerUtils::NewL());  
hgs
parents:
diff changeset
    50
    if(isError(error))
hgs
parents:
diff changeset
    51
        {
hgs
parents:
diff changeset
    52
        if(btViewerUtils)
hgs
parents:
diff changeset
    53
            delete btViewerUtils;
hgs
parents:
diff changeset
    54
        
47
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    55
        QVariant retVal(error); 
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    56
        completeRequest(mCurrentRequestIndex, retVal);
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    57
        return;
42
hgs
parents:
diff changeset
    58
        }
hgs
parents:
diff changeset
    59
        
hgs
parents:
diff changeset
    60
    HBufC* fileName = 0;
hgs
parents:
diff changeset
    61
    fileName = btViewerUtils->GetMessagePath(messageId, error);
hgs
parents:
diff changeset
    62
    if(isError(error))
hgs
parents:
diff changeset
    63
        {
hgs
parents:
diff changeset
    64
        if(fileName)
hgs
parents:
diff changeset
    65
            delete fileName;
hgs
parents:
diff changeset
    66
        
hgs
parents:
diff changeset
    67
        delete btViewerUtils;
47
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    68
        
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    69
        QVariant retVal(error); 
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    70
        completeRequest(mCurrentRequestIndex, retVal);
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    71
        return;
42
hgs
parents:
diff changeset
    72
        }
hgs
parents:
diff changeset
    73
    
47
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    74
    QString attachmentFName = XQConversions::s60DescToQString(fileName->Des());
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    75
    QString mimeType = XQConversions::s60Desc8ToQString(btViewerUtils->GetMimeType()->Des());
42
hgs
parents:
diff changeset
    76
    delete fileName;
hgs
parents:
diff changeset
    77
    delete btViewerUtils;
47
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    78
    
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    79
    if(mimeType == KMimeTypeVCard)
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    80
        {
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    81
        int error = KErrGeneral;
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    82
        
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    83
        /*todo: copyVCardToTemp() has to be removed when phonebook updates it's capabilites to
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    84
                access messages from private folder*/
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    85
        QString newfilepath = copyVCardToTemp(attachmentFName);
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    86
    
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    87
        QString service("com.nokia.services.phonebookservices");
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    88
        QString interface("Fetch");
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    89
        QString operation("editCreateNew(QString)");
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    90
        XQApplicationManager appManager;
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    91
        XQAiwRequest* request = appManager.create(service, interface, operation, true); //embedded
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    92
        if(request)
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    93
        {
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    94
            QList<QVariant> args;
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    95
            args << newfilepath;
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    96
            request->setArguments(args);
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    97
            QVariant retValue;
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    98
            bool res = request->send(retValue);
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
    99
            if  (!res) 
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   100
                {
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   101
                error = request->lastError();
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   102
                }
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   103
            else
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   104
                {
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   105
                error = retValue.toInt();
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   106
                }
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   107
            
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   108
            delete request;
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   109
        }
42
hgs
parents:
diff changeset
   110
47
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   111
        /*todo: copyVCardToTemp() has to be removed when phonebook updates it's capabilites to
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   112
                access messages from private folder*/        
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   113
        deleteVCardFromTemp(newfilepath);
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   114
        
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   115
        QVariant retVal(error); 
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   116
        completeRequest(mCurrentRequestIndex, retVal);
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   117
        return;
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   118
        }
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   119
    
42
hgs
parents:
diff changeset
   120
    XQSharableFile sf;
hgs
parents:
diff changeset
   121
    XQAiwRequest* request = 0;
hgs
parents:
diff changeset
   122
hgs
parents:
diff changeset
   123
    if (!sf.open(attachmentFName)) {
47
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   124
    QVariant retVal(KErrGeneral); 
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   125
    completeRequest(mCurrentRequestIndex, retVal);
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   126
    return;
42
hgs
parents:
diff changeset
   127
    }
hgs
parents:
diff changeset
   128
hgs
parents:
diff changeset
   129
    // Get handlers
hgs
parents:
diff changeset
   130
    XQApplicationManager appManager;
hgs
parents:
diff changeset
   131
    QList<XQAiwInterfaceDescriptor> fileHandlers = appManager.list(sf);
hgs
parents:
diff changeset
   132
    if (fileHandlers.count() > 0) {
hgs
parents:
diff changeset
   133
        XQAiwInterfaceDescriptor d = fileHandlers.first();
hgs
parents:
diff changeset
   134
        request = appManager.create(sf, d);
hgs
parents:
diff changeset
   135
hgs
parents:
diff changeset
   136
        if (!request) {
hgs
parents:
diff changeset
   137
            sf.close();
47
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   138
            
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   139
            QVariant retVal(KErrGeneral); 
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   140
            completeRequest(mCurrentRequestIndex, retVal);
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   141
            return;
42
hgs
parents:
diff changeset
   142
        }
hgs
parents:
diff changeset
   143
    }
hgs
parents:
diff changeset
   144
    else {
hgs
parents:
diff changeset
   145
        sf.close();
47
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   146
        
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   147
        QVariant retVal(KErrGeneral); 
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   148
        completeRequest(mCurrentRequestIndex, retVal);
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   149
        return;
42
hgs
parents:
diff changeset
   150
    }
hgs
parents:
diff changeset
   151
hgs
parents:
diff changeset
   152
    request->setEmbedded(true);
hgs
parents:
diff changeset
   153
    request->setSynchronous(true);
hgs
parents:
diff changeset
   154
hgs
parents:
diff changeset
   155
    // Fill args
hgs
parents:
diff changeset
   156
    QList<QVariant> args;
hgs
parents:
diff changeset
   157
    args << qVariantFromValue(sf);
hgs
parents:
diff changeset
   158
    request->setArguments(args);
hgs
parents:
diff changeset
   159
47
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   160
    int err = KErrNone;
42
hgs
parents:
diff changeset
   161
    bool res = request->send();
hgs
parents:
diff changeset
   162
    if  (!res) 
hgs
parents:
diff changeset
   163
        {
47
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   164
        err = request->lastError();
42
hgs
parents:
diff changeset
   165
        }
hgs
parents:
diff changeset
   166
hgs
parents:
diff changeset
   167
    // Cleanup
hgs
parents:
diff changeset
   168
    sf.close();
hgs
parents:
diff changeset
   169
    delete request;
hgs
parents:
diff changeset
   170
    
47
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   171
    QVariant retVal(err); 
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   172
    completeRequest(mCurrentRequestIndex, retVal);
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   173
    return;
42
hgs
parents:
diff changeset
   174
    }
hgs
parents:
diff changeset
   175
hgs
parents:
diff changeset
   176
bool BTMsgViewer::isError(int aError)
hgs
parents:
diff changeset
   177
    {
hgs
parents:
diff changeset
   178
    return ((aError < KErrNone)?true:false);
hgs
parents:
diff changeset
   179
    }
47
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   180
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   181
QString BTMsgViewer::copyVCardToTemp(const QString& filepath)
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   182
{
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   183
    QDir tempDir;
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   184
    QString tempFilePath(QDir::toNativeSeparators(tempDir.tempPath()));
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   185
    tempFilePath.append(QDir::separator());
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   186
    QFileInfo fInfo(filepath);
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   187
    tempFilePath.append(fInfo.fileName());
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   188
    QFile::copy(filepath, tempFilePath);
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   189
    return tempFilePath;
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   190
}
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   191
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   192
void BTMsgViewer::deleteVCardFromTemp(const QString& filepath)
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   193
{
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   194
    QFile::remove(filepath);
9e2a905b887f 201029_02
hgs
parents: 42
diff changeset
   195
}