summaryrefslogtreecommitdiffstats
path: root/pica-client/audiovideocallcontroller.cpp
blob: 9eeb89cb1e4db6aa7c1c6e2044d70d7fb794a2a2 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include "audiovideocallcontroller.h"
#include "globals.h"
#include "skynet.h"
#include <QByteArray>
#include <QDebug>

AudioVideoCallController::AudioVideoCallController(QObject *parent)
 : QObject(parent), callwindow(0), is_active(false)
{
	connect(skynet, SIGNAL(IncomingCall(QByteArray)), this, SLOT(call_from(QByteArray)));
	connect(skynet, SIGNAL(CallFailed(QString)), this, SLOT(call_failed(QString)));
	connect(skynet, SIGNAL(CallAccepted(QByteArray)), this, SLOT(call_accepted(QByteArray)));
	connect(skynet, SIGNAL(CallRejected(QByteArray)), this, SLOT(call_rejected(QByteArray)));
	connect(skynet, SIGNAL(CallHungup(QByteArray)), this, SLOT(call_hungup(QByteArray)));
}

void AudioVideoCallController::call_failed(QString reason)
{
	qDebug() << "Call failed: " << reason << "\n";
}

void AudioVideoCallController::call_accepted(QByteArray peer_id)
{
}

void AudioVideoCallController::call_rejected(QByteArray peer_id)
{
}

void AudioVideoCallController::call_hungup(QByteArray peer_id)
{
}

void AudioVideoCallController::start_call(QByteArray peer_id)
{
	if (callwindow)
	{
		/* call is already in progress */
		return;
	}

	m_peer_id = peer_id;
	callwindow = new CallWindow(peer_id, false);
	connect(callwindow, SIGNAL(start_call_pressed()), this, SLOT(initiate_call()));
	connect(callwindow, SIGNAL(hang_call_pressed()), this, SLOT(end_call()));
	callwindow->show();
}

void AudioVideoCallController::call_from(QByteArray peer_id)
{
	if (callwindow)
	{
		/* HANDLE BUSY CASE!!! */
		/* call is already in progress */
		return;
	}

	m_peer_id = peer_id;
	callwindow = new CallWindow(peer_id, true);
	connect(callwindow, SIGNAL(accept_call_pressed()), this, SLOT(accept_call()));
	connect(callwindow, SIGNAL(hang_call_pressed()), this, SLOT(end_call()));
	callwindow->show();

	/* play ring tone */

}

void AudioVideoCallController::initiate_call()
{
	skynet->StartCall(m_peer_id);
}

void AudioVideoCallController::accept_call()
{
	skynet->AcceptCall(m_peer_id);
}

void AudioVideoCallController::end_call()
{
	if (is_active)
		skynet->HangupCall(m_peer_id);
	else
		skynet->RejectCall(m_peer_id);
}