diff -r 0ba996a9b75d -r 613943a21004 btobexprofiles/obexreceiveservices/btmsgviewer/src/btmsgviewer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/btobexprofiles/obexreceiveservices/btmsgviewer/src/btmsgviewer.cpp Tue Aug 31 15:25:10 2010 +0300 @@ -0,0 +1,195 @@ +/* + * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). + * All rights reserved. + * This component and the accompanying materials are made available + * under the terms of "Eclipse Public License v1.0"" + * which accompanies this distribution, and is available + * at the URL "http://www.eclipse.org/legal/epl-v10.html". + * + * Initial Contributors: + * Nokia Corporation - initial contribution. + * + * Contributors: + * + * Description: + * + */ + + +#include "btmsgviewer.h" +#include "apmstd.h" +#include +#include +#include +#include +#include +#include +#include + +const QString KMimeTypeVCard("text/X-vCard"); + + +BTMsgViewer::BTMsgViewer(QObject* parent) +: XQServiceProvider("com.nokia.services.btmsgdispservices.displaymsg", parent), mCurrentRequestIndex(0) + { + publishAll(); + connect(this, SIGNAL(returnValueDelivered()), qApp, SLOT(quit())); + } + +BTMsgViewer::~BTMsgViewer () + { + + } + +void BTMsgViewer::displaymsg( int messageId ) + { + mCurrentRequestIndex = setCurrentRequestAsync(); + CBtMsgViewerUtils* btViewerUtils = 0; + + TRAPD(error, btViewerUtils = CBtMsgViewerUtils::NewL()); + if(isError(error)) + { + if(btViewerUtils) + delete btViewerUtils; + + QVariant retVal(error); + completeRequest(mCurrentRequestIndex, retVal); + return; + } + + HBufC* fileName = 0; + fileName = btViewerUtils->GetMessagePath(messageId, error); + if(isError(error)) + { + if(fileName) + delete fileName; + + delete btViewerUtils; + + QVariant retVal(error); + completeRequest(mCurrentRequestIndex, retVal); + return; + } + + QString attachmentFName = XQConversions::s60DescToQString(fileName->Des()); + QString mimeType = XQConversions::s60Desc8ToQString(btViewerUtils->GetMimeType()->Des()); + delete fileName; + delete btViewerUtils; + + if(mimeType == KMimeTypeVCard) + { + int error = KErrGeneral; + + /*todo: copyVCardToTemp() has to be removed when phonebook updates it's capabilites to + access messages from private folder*/ + QString newfilepath = copyVCardToTemp(attachmentFName); + + QString service("com.nokia.services.phonebookservices"); + QString interface("Fetch"); + QString operation("editCreateNew(QString)"); + XQApplicationManager appManager; + XQAiwRequest* request = appManager.create(service, interface, operation, true); //embedded + if(request) + { + QList args; + args << newfilepath; + request->setArguments(args); + QVariant retValue; + bool res = request->send(retValue); + if (!res) + { + error = request->lastError(); + } + else + { + error = retValue.toInt(); + } + + delete request; + } + + /*todo: copyVCardToTemp() has to be removed when phonebook updates it's capabilites to + access messages from private folder*/ + deleteVCardFromTemp(newfilepath); + + QVariant retVal(error); + completeRequest(mCurrentRequestIndex, retVal); + return; + } + + XQSharableFile sf; + XQAiwRequest* request = 0; + + if (!sf.open(attachmentFName)) { + QVariant retVal(KErrGeneral); + completeRequest(mCurrentRequestIndex, retVal); + return; + } + + // Get handlers + XQApplicationManager appManager; + QList fileHandlers = appManager.list(sf); + if (fileHandlers.count() > 0) { + XQAiwInterfaceDescriptor d = fileHandlers.first(); + request = appManager.create(sf, d); + + if (!request) { + sf.close(); + + QVariant retVal(KErrGeneral); + completeRequest(mCurrentRequestIndex, retVal); + return; + } + } + else { + sf.close(); + + QVariant retVal(KErrGeneral); + completeRequest(mCurrentRequestIndex, retVal); + return; + } + + request->setEmbedded(true); + request->setSynchronous(true); + + // Fill args + QList args; + args << qVariantFromValue(sf); + request->setArguments(args); + + int err = KErrNone; + bool res = request->send(); + if (!res) + { + err = request->lastError(); + } + + // Cleanup + sf.close(); + delete request; + + QVariant retVal(err); + completeRequest(mCurrentRequestIndex, retVal); + return; + } + +bool BTMsgViewer::isError(int aError) + { + return ((aError < KErrNone)?true:false); + } + +QString BTMsgViewer::copyVCardToTemp(const QString& filepath) +{ + QDir tempDir; + QString tempFilePath(QDir::toNativeSeparators(tempDir.tempPath())); + tempFilePath.append(QDir::separator()); + QFileInfo fInfo(filepath); + tempFilePath.append(fInfo.fileName()); + QFile::copy(filepath, tempFilePath); + return tempFilePath; +} + +void BTMsgViewer::deleteVCardFromTemp(const QString& filepath) +{ + QFile::remove(filepath); +}