btobexprofiles/obexreceiveservices/btmsgviewer/src/btmsgviewer.cpp
branchRCL_3
changeset 22 613943a21004
--- /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 <xqaiwrequest.h>
+#include <xqconversions.h>
+#include <apgcli.h>
+#include <QFileInfo>
+#include <QDir>
+#include <QFile>
+#include <hbapplication.h>
+
+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<QVariant> 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<XQAiwInterfaceDescriptor> 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<QVariant> 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);
+}