logsui/logsengine/src/logscall.cpp
changeset 0 4a5361db8937
child 2 7119b73b84d6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/logsui/logsengine/src/logscall.cpp	Tue May 04 12:39:37 2010 +0300
@@ -0,0 +1,215 @@
+/*
+* 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:
+*
+*/
+
+//USER
+#include "logscall.h"
+#include "logsmodel.h"
+#include "logsevent.h"
+#include "logslogger.h"
+#include "logseventdata.h"
+
+//SYSTEM
+#include <QVariant>
+#include <xqservicerequest.h>
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+LogsCall::LogsCall(LogsEvent& event) 
+    : QObject(), mDefaultCall( TypeLogsCallNotAvailable )
+{
+    if ( event.logsEventData() ) {
+        mServiceId = event.logsEventData()->serviceId();
+    }
+
+    if (event.eventType() == LogsEvent::TypeVoIPCall ) {
+        mCalls.append(LogsCall::TypeLogsVoIPCall);
+        if ( event.logsEventData() && event.logsEventData()->isCsCompatible()){
+            mCalls.append(LogsCall::TypeLogsVoiceCall);
+            mCalls.append(LogsCall::TypeLogsVideoCall);
+        }
+    } else if (event.eventType() == LogsEvent::TypeVoiceCall || 
+               event.eventType() == LogsEvent::TypeVideoCall ) {
+        mCalls.append(LogsCall::TypeLogsVoiceCall);
+        mCalls.append(LogsCall::TypeLogsVideoCall);
+    }
+    
+    if (event.eventType() == LogsEvent::TypeVoiceCall){
+        mDefaultCall = TypeLogsVoiceCall;
+    } else if (event.eventType() == LogsEvent::TypeVideoCall) {
+        mDefaultCall = TypeLogsVideoCall;
+    } else if (event.eventType() == LogsEvent::TypeVoIPCall) {
+        mDefaultCall = TypeLogsVoIPCall;
+    }
+    mNumber = event.getNumberForCalling();
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+LogsCall::LogsCall(unsigned int contactId, const QString& number) 
+    : QObject(), mDefaultCall( TypeLogsCallNotAvailable ), mServiceId(0)
+{
+    Q_UNUSED(contactId);
+    mNumber = number;
+    
+    if ( mNumber.length() > 0 ) {
+        mCalls.append(LogsCall::TypeLogsVoiceCall);
+        mCalls.append(LogsCall::TypeLogsVideoCall);
+        mDefaultCall = TypeLogsVoiceCall;
+    }
+}
+
+// -----------------------------------------------------------------------------
+// LogsCall::~LogsCall
+// -----------------------------------------------------------------------------
+//
+LogsCall::~LogsCall()
+{
+    LOGS_QDEBUG( "logs [ENG] <-> LogsCall::~LogsCall()" )
+}
+
+// ----------------------------------------------------------------------------
+// LogsCall::isAllowedCallType
+// ----------------------------------------------------------------------------
+//
+bool LogsCall::isAllowedCallType()
+{
+    LOGS_QDEBUG( "logs [ENG] <-> LogsCall::isAllowedCallType()" )
+    return (mCalls.count() > 0);
+}
+    
+// ----------------------------------------------------------------------------
+// LogsCall::allowedCallTypes
+// Voip call not possible at the moment. However, if voip event is CS
+// compatible, voice and video call are allowed.
+// ----------------------------------------------------------------------------
+//
+QList<LogsCall::CallType> LogsCall::allowedCallTypes()
+{
+    LOGS_QDEBUG( "logs [ENG] <-> LogsCall::allowedCallTypes()" )
+    
+    return mCalls;
+}    
+
+// ----------------------------------------------------------------------------
+//
+// ----------------------------------------------------------------------------
+//
+LogsCall::CallType LogsCall::defaultCallType()
+{
+    return mDefaultCall;
+}
+
+// ----------------------------------------------------------------------------
+//
+// ----------------------------------------------------------------------------
+//
+void LogsCall::callToNumber(LogsCall::CallType callType, const QString& number,
+        unsigned int serviceId)
+{
+    LOGS_QDEBUG_2( "logs [ENG] -> LogsCall::callToNumber(), type", callType )
+        
+    if (callType == TypeLogsVoiceCall) {
+        createcall("com.nokia.services.telephony", "dial(QString)", number, false);
+    } else if (callType == TypeLogsVideoCall) {
+        createcall("com.nokia.services.telephony", "dialVideo(QString)", number, false);
+    } else if (callType == TypeLogsVoIPCall){
+        if ( serviceId ){
+        
+            // Service id should(?) be used with every call type. If logs entry
+            // is from xsp with video call support, then the executed
+            // video call should be mapped to the right xsp?
+            // also contact must be passed if available if change service is
+            // provided (no point change service and try to call service specific
+            // uri with another service)?
+            createCallWithService("com.nokia.services.telephony", 
+                "dialVoipService(QString,int)", number, false, serviceId);
+        }
+        else {
+            // This is likely to fail as long as telephony does not
+            // offer any kind of service selection. Normally voip call
+            // should always have service id set but if it's missing
+            // for some reason, then this provides call failure UI.
+            createcall("com.nokia.services.telephony", 
+                "dialVoip(QString)", number, false);
+        }
+    }
+    LOGS_QDEBUG( "logs [ENG] <- LogsCall::callToNumber()" )
+}
+
+// ----------------------------------------------------------------------------
+//
+// ----------------------------------------------------------------------------
+//
+void LogsCall::call(LogsCall::CallType callType)
+{
+    LOGS_QDEBUG_2( "logs [ENG] -> LogsCall::call(), type", callType )
+    
+    callToNumber(callType, mNumber, mServiceId);
+    
+    LOGS_QDEBUG( "logs [ENG] <- LogsCall::call()" )
+}
+
+// ----------------------------------------------------------------------------
+//
+// ----------------------------------------------------------------------------
+//
+void LogsCall::initiateCallback()
+{
+    LOGS_QDEBUG( "logs [ENG] -> LogsCall::initiateCallback()" )
+    
+    if (mDefaultCall != TypeLogsCallNotAvailable ){
+        call(mDefaultCall);
+    }
+    LOGS_QDEBUG( "logs [ENG] <- LogsCall::initiateCallback()" )
+}
+
+// ----------------------------------------------------------------------------
+// LogsCall::createcall
+// ----------------------------------------------------------------------------
+//
+void LogsCall::createcall(QString service, QString type, QString num, bool sync)
+{
+    LOGS_QDEBUG_2( "logs [ENG] -> LogsCall::createcall(), num", num )
+    XQServiceRequest snd(service, type, sync);
+    snd << num;
+    QVariant retValue;
+    snd.send(retValue);
+    LOGS_QDEBUG( "logs [ENG] <- LogsCall::createcall()" )
+}
+
+// ----------------------------------------------------------------------------
+// LogsCall::createCallWithService
+// ----------------------------------------------------------------------------
+//
+void LogsCall::createCallWithService(QString service, QString type, QString num, 
+        bool sync, unsigned int serviceId )
+{
+    LOGS_QDEBUG_2( "logs [ENG] -> LogsCall::createCallWithService(), num", num )
+    LOGS_QDEBUG_2( "logs [ENG] -> LogsCall::createCallWithService(), num", serviceId )
+    XQServiceRequest snd(service, type, sync);
+    snd << num << serviceId;
+    QVariant retValue;
+    snd.send(retValue);
+    LOGS_QDEBUG( "logs [ENG] <- LogsCall::createCallWithService()" )
+}
+
+// End of file
+