Skip to content
Snippets Groups Projects
Commit 872b98df authored by Jérémy Quentin's avatar Jérémy Quentin
Browse files

Call and Automate fusion done and seems to work.

parent f879204a
No related branches found
No related tags found
No related merge requests found
......@@ -13,8 +13,7 @@ SET(
main.cpp
sflphone_const.cpp
Account.cpp
AccountList.cpp
Automate.cpp
AccountList.cpp
Call.cpp
CallList.cpp
configurationmanager_interface.cpp
......
#include "Call.h"
#include "callmanager_interface_p.h"
#include "callmanager_interface_singleton.h"
#include "SFLPhone.h"
Call::Call(call_state startState, QString callId)
const call_state Call::stateMap [11][5] =
{
this->automate = new Automate(startState);
this->id = callId;
// ACCEPT REFUSE TRANSFER HOLD RECORD
/*INCOMING */ {CALL_STATE_CURRENT , CALL_STATE_OVER , CALL_STATE_OVER , CALL_STATE_HOLD , CALL_STATE_INCOMING },
/*RINGING */ {CALL_STATE_ERROR , CALL_STATE_OVER , CALL_STATE_ERROR , CALL_STATE_ERROR , CALL_STATE_RINGING },
/*CURRENT */ {CALL_STATE_ERROR , CALL_STATE_OVER , CALL_STATE_TRANSFER , CALL_STATE_HOLD , CALL_STATE_CURRENT },
/*DIALING */ {CALL_STATE_RINGING , CALL_STATE_OVER , CALL_STATE_ERROR , CALL_STATE_ERROR , CALL_STATE_DIALING },
/*HOLD */ {CALL_STATE_ERROR , CALL_STATE_OVER , CALL_STATE_TRANSFER_HOLD , CALL_STATE_CURRENT , CALL_STATE_HOLD },
/*FAILURE */ {CALL_STATE_ERROR , CALL_STATE_OVER , CALL_STATE_ERROR , CALL_STATE_ERROR , CALL_STATE_ERROR },
/*BUSY */ {CALL_STATE_ERROR , CALL_STATE_OVER , CALL_STATE_ERROR , CALL_STATE_ERROR , CALL_STATE_ERROR },
/*TRANSFER */ {CALL_STATE_OVER , CALL_STATE_OVER , CALL_STATE_CURRENT , CALL_STATE_TRANSFER_HOLD , CALL_STATE_TRANSFER },
/*TRANSFER_HOLD */ {CALL_STATE_OVER , CALL_STATE_OVER , CALL_STATE_HOLD , CALL_STATE_TRANSFER , CALL_STATE_TRANSFER_HOLD },
/*OVER */ {CALL_STATE_ERROR , CALL_STATE_ERROR , CALL_STATE_ERROR , CALL_STATE_ERROR , CALL_STATE_ERROR },
/*ERROR */ {CALL_STATE_ERROR , CALL_STATE_ERROR , CALL_STATE_ERROR , CALL_STATE_ERROR , CALL_STATE_ERROR }
};
const function Call::functionMap[11][5] =
{
// ACCEPT REFUSE TRANSFER HOLD RECORD
/*INCOMING */ {&Call::accept , &Call::refuse , &Call::acceptTransf , &Call::acceptHold , &Call::switchRecord },
/*RINGING */ {&Call::nothing , &Call::hangUp , &Call::nothing , &Call::nothing , &Call::switchRecord },
/*CURRENT */ {&Call::nothing , &Call::hangUp , &Call::nothing , &Call::hold , &Call::setRecord },
/*DIALING */ {&Call::call , &Call::nothing , &Call::nothing , &Call::nothing , &Call::switchRecord },
/*HOLD */ {&Call::nothing , &Call::hangUp , &Call::nothing , &Call::unhold , &Call::setRecord },
/*FAILURE */ {&Call::nothing , &Call::hangUp , &Call::nothing , &Call::nothing , &Call::nothing },
/*BUSY */ {&Call::nothing , &Call::hangUp , &Call::nothing , &Call::nothing , &Call::nothing },
/*TRANSFERT */ {&Call::transfer , &Call::hangUp , &Call::nothing , &Call::hold , &Call::setRecord },
/*TRANSFERT_HOLD */ {&Call::transfer , &Call::hangUp , &Call::nothing , &Call::unhold , &Call::setRecord },
/*OVER */ {&Call::nothing , &Call::nothing , &Call::nothing , &Call::nothing , &Call::nothing },
/*ERROR */ {&Call::nothing , &Call::nothing , &Call::nothing , &Call::nothing , &Call::nothing }
};
Call::Call(call_state startState, QString callId)
{
this->callId = callId;
this->item = new QListWidgetItem("");
this->recording = false;
this->currentState = startState;
}
Call::Call(call_state startState, QString callId, QString from, Account & account)
{
this->automate = new Automate(startState);
this->id = callId;
this->callId = callId;
this->item = new QListWidgetItem(from);
this->account = & account;
this->recording = false;
this->currentState = startState;
}
Call::~Call()
{
delete item;
delete automate;
}
Call * Call::buildDialingCall(QString callId)
......@@ -41,15 +79,124 @@ QListWidgetItem * Call::getItem()
call_state Call::getState() const
{
return automate->getCurrentState();
return currentState;
}
call_state Call::action(call_action action, QString number)
{
return automate->action(action, id, number);
call_state previousState = currentState;
//execute the action associated with this transition
(this->*(functionMap[currentState][action]))(number);
//update the state
currentState = stateMap[currentState][action];
qDebug() << "Calling action " << action << " on call with state " << previousState << ". Become " << currentState;
//return the new state
return currentState;
}
QString Call::getCallId()
{
return id;
return callId;
}
call_state Call::getCurrentState() const
{
return currentState;
}
/*************************************************
************* Automate functions *************
*************************************************/
void Call::nothing(QString number)
{
}
void Call::accept(QString number)
{
CallManagerInterface & callManager = CallManagerInterfaceSingleton::getInstance();
qDebug() << "Accepting call. callId : " << callId;
callManager.accept(callId);
}
void Call::refuse(QString number)
{
CallManagerInterface & callManager = CallManagerInterfaceSingleton::getInstance();
qDebug() << "Refusing call. callId : " << callId;
callManager.refuse(callId);
}
void Call::acceptTransf(QString number)
{
CallManagerInterface & callManager = CallManagerInterfaceSingleton::getInstance();
qDebug() << "Accepting call and transfering it to number : " << number << ". callId : " << callId;
callManager.accept(callId);
callManager.transfert(callId, number);
}
void Call::acceptHold(QString number)
{
CallManagerInterface & callManager = CallManagerInterfaceSingleton::getInstance();
qDebug() << "Accepting call and holding it. callId : " << callId;
callManager.accept(callId);
callManager.hold(callId);
}
void Call::hangUp(QString number)
{
CallManagerInterface & callManager = CallManagerInterfaceSingleton::getInstance();
qDebug() << "Hanging up call. callId : " << callId;
callManager.hangUp(callId);
}
void Call::hold(QString number)
{
CallManagerInterface & callManager = CallManagerInterfaceSingleton::getInstance();
qDebug() << "Holding call. callId : " << callId;
callManager.hold(callId);
}
void Call::call(QString number)
{
CallManagerInterface & callManager = CallManagerInterfaceSingleton::getInstance();
QString account = SFLPhone::firstAccount();
qDebug() << "Calling " << number << " with account " << account << ". callId : " << callId;
callManager.placeCall(account, callId, number);
}
void Call::transfer(QString number)
{
CallManagerInterface & callManager = CallManagerInterfaceSingleton::getInstance();
QString account = SFLPhone::firstAccount();
qDebug() << "Transfering call to number : " << number << ". callId : " << callId;
callManager.transfert(callId, number);
}
void Call::unhold(QString number)
{
CallManagerInterface & callManager = CallManagerInterfaceSingleton::getInstance();
qDebug() << "Unholding call. callId : " << callId;
callManager.unhold(callId);
}
void Call::switchRecord(QString number)
{
qDebug() << "Switching record state for call automate. callId : " << callId;
recording = !recording;
}
void Call::setRecord(QString number)
{
CallManagerInterface & callManager = CallManagerInterfaceSingleton::getInstance();
qDebug() << "Setting record for call. callId : " << callId;
callManager.unhold(callId);
}
#ifndef CALL_H
#define CALL_H
#include <QtGui>
#include "Account.h"
#include "Automate.h"
//#include "Account.h"
//typedef call_state;
/** @enum call_state_t
* This enum have all the states a call can take.
*/
typedef enum
{
/** Ringing incoming call */
CALL_STATE_INCOMING,
/** Ringing outgoing call */
CALL_STATE_RINGING,
/** Call to which the user can speak and hear */
CALL_STATE_CURRENT,
/** Call which numbers are being added by the user */
CALL_STATE_DIALING,
/** Call is on hold */
CALL_STATE_HOLD,
/** Call has failed */
CALL_STATE_FAILURE,
/** Call is busy */
CALL_STATE_BUSY,
/** Call is being transfered. During this state, the user can enter the new number. */
CALL_STATE_TRANSFER,
/** Call is on hold for transfer */
CALL_STATE_TRANSFER_HOLD,
/** Call is over and should not be used */
CALL_STATE_OVER,
/** This state should never be reached */
CALL_STATE_ERROR
} call_state;
//class Automate;
/** @enum call_action
* This enum have all the actions you can make on a call.
*/
typedef enum
{
/** Green button, accept or new call or place call or place transfer */
CALL_ACTION_ACCEPT,
/** Red button, refuse or hang up */
CALL_ACTION_REFUSE,
/** Blue button, put into or out of transfer mode where you can type transfer number */
CALL_ACTION_TRANSFER,
/** Blue-green button, hold or unhold the call */
CALL_ACTION_HOLD,
/** Record button, enable or disable recording */
CALL_ACTION_RECORD
} call_action;
class Call;
typedef void (Call::*function)(QString number);
class Call
{
private:
//Call attributes
Account * account;
QString id;
QString callId;
QString from;
QString to;
// HistoryState * historyState;
QTime start;
QTime stop;
QListWidgetItem * item;
Automate * automate;
//Automate * automate;
//Automate attributes
static const call_state stateMap [11][5];
static const function functionMap[11][5];
call_state currentState;
bool recording;
Call(call_state startState, QString callId);
Call(call_state startState, QString callId, QString from, Account & account);
//Automate functions
void nothing(QString number);
void accept(QString number);
void refuse(QString number);
void acceptTransf(QString number);
void acceptHold(QString number);
void hangUp(QString number);
void hold(QString number);
void call(QString number);
void transfer(QString number);
void unhold(QString number);
void switchRecord(QString number);
void setRecord(QString number);
public:
......@@ -31,6 +101,7 @@ public:
call_state getState() const;
QString getCallId();
call_state action(call_action action, QString number = NULL);
call_state getCurrentState() const;
};
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment