homescreenapp/hsutils/src/hsimagehandlingclient.cpp
changeset 90 3ac3aaebaee5
child 95 32e56106abf2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreenapp/hsutils/src/hsimagehandlingclient.cpp	Mon Sep 20 10:19:07 2010 +0300
@@ -0,0 +1,211 @@
+/*
+* Copyright (c) 2010 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:  Photos image handling client.
+*
+*/
+
+
+#include "hsimagehandlingclient.h"
+
+#include <QDir>
+#include <QDebug>
+#include <QVariant>
+#ifdef Q_OS_SYMBIAN
+#include <xqaiwinterfacedescriptor.h>
+#include <xqaiwdecl.h>
+#endif // Q_OS_SYMBIAN
+#ifdef FF_IMAGE_EDITOR
+#include <photoeditor_highway.hrh>
+#endif //FF_IMAGE_EDITOR
+
+#ifdef COVERAGE_MEASUREMENT
+#pragma CTC SKIP
+#endif //COVERAGE_MEASUREMENT
+
+
+/*!
+    \class HsImageHandlingClient
+    \ingroup group_hsutils
+    \brief 
+*/
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+#ifdef Q_OS_SYMBIAN
+HsImageHandlingClient::HsImageHandlingClient(QObject *parent)
+  : QObject(parent),
+    mReq(0)
+{
+}
+#else
+HsImageHandlingClient::HsImageHandlingClient(QObject *parent)
+  : QObject(parent)
+{
+}
+#endif // Q_OS_SYMBIAN
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+HsImageHandlingClient::~HsImageHandlingClient()
+{
+#ifdef Q_OS_SYMBIAN
+    delete mReq;
+#endif // Q_OS_SYMBIAN
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void HsImageHandlingClient::fetch()
+{
+#ifdef Q_OS_SYMBIAN
+    qDebug() << "HsImageHandlingClient::fetch START";
+
+    if (mReq) {
+        delete mReq;
+        mReq = 0;
+    }
+
+    mReq = mAppMgr.create(XQI_IMAGE_FETCH, XQOP_IMAGE_FETCH, false);
+    if (mReq) {        
+        connect(mReq, SIGNAL(requestOk(const QVariant&)), this, SLOT(handleOk(const QVariant&)));
+        connect(mReq, SIGNAL(requestError(int,const QString&)), this, SLOT(handleError(int,const QString&)));
+    } else {
+        qCritical() << "HsImageHandlingClient::fetch -> Create request failed";
+        return;
+    }
+
+    if (!(mReq)->send()) {
+        qCritical() << "HsImageHandlingClient::fetch -> Send failed" << mReq->lastErrorMessage();;
+    }
+
+    qDebug() << "HsImageHandlingClient::fetch END";
+#endif // Q_OS_SYMBIAN
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void HsImageHandlingClient::edit(const QString &imagePath)
+{
+#ifdef Q_OS_SYMBIAN
+    qDebug() << "HsImageHandlingClient::edit START";
+    
+    const QString service = QLatin1String("PhotoEditor");
+    const QString interface = QLatin1String("com.nokia.symbian.imageeditor");
+    const QString operation = QLatin1String("view(QString,int)");
+
+   //Connect to service provider
+    if(mReq == NULL){
+        mReq = mAppMgr.create(service, interface, operation, true);
+        mReq->setEmbedded(true);
+        mReq->setSynchronous(false);
+    }
+    
+    if(mReq == NULL){
+        return;
+    } 
+
+    if (mReq) {        
+        connect(mReq, SIGNAL(requestOk(const QVariant&)), this, SLOT(handleEditorOk(const QVariant&)));
+        connect(mReq, SIGNAL(requestError(int,const QString&)), this, SLOT(handleEditorError(int,const QString&)));
+    } else {
+        qCritical() << "HsImageHandlingClient::edit -> Create request failed";
+        return;
+    }
+    QList<QVariant> args;
+    args << imagePath;
+    args << EEditorHighwayWallpaperCrop;
+    mReq->setArguments(args);
+    if (!(mReq)->send()) {
+        qCritical() << "HsImageHandlingClient::edit -> Send failed" << mReq->lastErrorMessage();;
+    }
+
+    qDebug() << "HsImageHandlingClient::edit END";
+#endif // Q_OS_SYMBIAN
+}
+
+// Aiw request responses
+void HsImageHandlingClient::handleOk(const QVariant &result)
+{
+#ifdef Q_OS_SYMBIAN
+    // disconnect error signal as it will give -4999 (EConnectionClosed) error afterwards even though image
+    // is fetched successfully
+    disconnect(mReq, SIGNAL(requestError(int,const QString&)), this, SLOT(handleError(int,const QString&)));
+
+    XQAiwRequest *request = static_cast<XQAiwRequest *>(sender());
+    int implementationId=-1;
+    implementationId = (request->descriptor().property(XQAiwInterfaceDescriptor::ImplementationId)).toInt();
+
+    if (result.canConvert<QString>()) {
+        qDebug("HsImageHandlingClient::%x:handleOk result=%s,%s",
+               implementationId,
+               result.typeName(),
+               qPrintable(result.value<QString>()));
+
+        emit fetchCompleted(result.value<QString>());
+    } else if (result.canConvert<QStringList>()) {
+        QStringList resultList = result.value<QStringList>();
+	    if (resultList.size() > 0) {
+	        //for debug
+	        QString msg = QString("HsImageHandlingClient::handleOk, size=")+QString::number( resultList.size() )+QString("\n");
+	        for (int i(0), size(resultList.size()); i < size; ++i) {
+                msg += QString::number(i) + QString(":") + resultList[i] + QString("\n");
+	        }
+	        qDebug()<<msg;
+		}
+        emit fetchCompleted(resultList[0]);
+	} else {
+        qCritical("AppMgrClient::%x:handleOk result=%s. Not displayable",
+            implementationId,
+            result.typeName());
+        emit fetchFailed(-1, QString());
+    }
+#else
+	Q_UNUSED(result)
+#endif // Q_OS_SYMBIAN
+}
+
+void HsImageHandlingClient::handleError(int errorCode, const QString &errorMessage)
+{
+#ifdef Q_OS_SYMBIAN
+    XQAiwRequest *request = static_cast<XQAiwRequest *>(sender());
+    int implementationId = -1;
+    implementationId = (request->descriptor().property(XQAiwInterfaceDescriptor::ImplementationId)).toInt();
+
+    qCritical("HsImageHandlingClient::%x:handleError code=%d, errorMessage:%s",
+        implementationId, errorCode, qPrintable(errorMessage));
+    emit fetchFailed(errorCode, errorMessage);
+#else
+	Q_UNUSED(errorCode)
+	Q_UNUSED(errorMessage)
+#endif // Q_OS_SYMBIAN
+}
+
+void HsImageHandlingClient::handleEditorOk(const QVariant& result)
+{
+    Q_UNUSED(result)
+    emit editorCompleted();
+}
+
+void HsImageHandlingClient::handleEditorError(int errorCode,
+                                             const QString& errorMessage)
+{
+    emit editorFailed(errorCode, errorMessage);
+}
+#ifdef COVERAGE_MEASUREMENT
+#pragma CTC ENDSKIP
+#endif //COVERAGE_MEASUREMENT