1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/movim_ynh.git synced 2024-09-03 19:46:19 +02:00
movim_ynh/sources/app/widgets/Visio/Visio.php
2015-08-19 11:28:28 +02:00

231 lines
6.4 KiB
PHP

<?php
/**
* @package Widgets
*
* @file Visio.php
* This file is part of Movim.
*
* @brief A jabber chat widget.
*
* @author Timothée Jaussoin
*
* See COPYING for licensing information.
*/
//require_once(APP_PATH . "widgets/ChatExt/ChatExt.php");
use Moxl\Xec\Action\Jingle\SessionInitiate;
use Moxl\Xec\Action\Jingle\SessionTerminate;
class Visio extends WidgetBase
{
function load()
{
$this->addcss('visio.css');
$this->addjs('visio.js');
$this->addjs('adapter.js');
$this->addjs('webrtc.js');
$this->addjs('turn.js');
$this->registerEvent('jinglesessioninitiate', 'onSessionInitiate');
$this->registerEvent('jingle_sessioninitiate_erroritemnotfound', 'onInitiationError');
$this->registerEvent('jingle_sessioninitiate_errorunexpectedrequest', 'onInitiationError');
$this->registerEvent('jinglesessionterminate', 'onSessionTerminate');
$this->registerEvent('jinglesessionaccept', 'onSessionAccept');
$this->registerEvent('jingletransportinfo', 'onTransportInfo');
$this->registerEvent('jinglecreationsuccess', 'onCreationSuccess');
}
function onInitiationError() {
RPC::call('sendTerminate');
RPC::call('terminate');
}
function onSessionInitiate($jingle) {
$jts = new \JingletoSDP($jingle);
$sdp = $jts->generate();
$cd = new \Modl\ContactDAO();
$contact = $cd->get(cleanJid((string)$jingle->attributes()->initiator));
if(!isset($contact))
$contact = new Modl\Contact;
if($sdp) {
RPC::call(
'movim_desktop_notification',
$contact->getTrueName(),
$this->__('visio.calling'),
$contact->getPhoto('m'));
//RPC::call('Popup.setJid', (string)$jingle->attributes()->initiator);
RPC::call('onOffer', $sdp);
}
}
function onSessionAccept($jingle) {
$jts = new \JingletoSDP($jingle);
$sdp = $jts->generate();
$sid = $jts->getSessionId();
RPC::call('onAccept', $sdp);
$s = Session::start('movim');
$s->set('jingleSid', $sid);
}
function onTransportInfo($jingle) {
$jts = new \JingletoSDP($jingle);
RPC::call('onCandidate', $jts->generate(), $jts->media);
}
function onSessionTerminate($jingle) {
$message = '';
switch($jingle->reason->children()->getName()) {
case 'success':
$message = $this->__('visio.hung_up');
break;
case 'busy':
$message = $this->__('visio.busy');
break;
case 'decline':
$message = $this->__('visio.declined');
break;
case 'unsupported-transports':
break;
case 'failed-transport':
break;
case 'unsupported-applications':
break;
case 'failed-application':
$message = $this->__('visio.remote_incompatible');
break;
case 'incompatible-parameters':
break;
default:
$message = $this->__('visio.unknown_error');
break;
}
RPC::call('terminate');
RPC::call('movim_fill', 'status', $message);
}
function ajaxSendProposal($proposal) {
$p = json_decode($proposal);
$sd = Sessionx::start();
$stj = new SDPtoJingle(
$p->sdp,
$this->user->getLogin().'/'.$sd->resource,
$p->jid.'/'.$p->resource,
'session-initiate');
$r = new SessionInitiate;
$r->setTo($p->jid.'/'.$p->resource)
->setOffer($stj->generate())
->request();
$sid = $stj->getSessionId();
$s = Session::start('movim');
$s->set('jingleSid', $sid);
}
function ajaxSendAcceptance($proposal) {
$p = json_decode($proposal);
$sd = Sessionx::start();
$stj = new SDPtoJingle(
$p->sdp,
$this->user->getLogin().'/'.$sd->resource,
$p->jid.'/'.$p->resource,
'session-accept');
$r = new SessionInitiate;
$r->setTo($p->jid.'/'.$p->resource)
->setOffer($stj->generate())
->request();
}
function ajaxSendSessionTerminate($jid, $resource, $reason = null) {
$s = Session::start();
$jingleSid = $s->get("jingleSid");
$r = new SessionTerminate;
$r->setTo($jid.'/'.$resource);
$r->setJingleSid($jingleSid);
if(isset($reason))
$r->setReason($reason);
$r->request();
}
function ajaxSendCandidate($candidate) {
$p = json_decode($candidate);
$sd = Sessionx::start();
$sdp =
'm='.$p->mid."\n".
$p->sdp;
$stj = new SDPtoJingle(
$sdp,
$this->user->getLogin().'/'.$sd->resource,
$p->jid.'/'.$p->resource,
'transport-info');
$r = new SessionInitiate;
$r->setTo($p->jid.'/'.$p->resource)
->setOffer($stj->generate())
->request();
}
function ajaxGetContact($jid)
{
$cd = new \Modl\ContactDAO();
$contact = $cd->get($jid);
$contactview = $this->tpl();
$contactview->assign('contact', $contact);
RPC::call('movim_fill', 'avatar', $contactview->draw('_visio_contact', true));
}
function display()
{
//if(isset($_GET['f'])) {
// list($jid, $resource) = explode('/', htmlentities($_GET['f']));
$json = requestURL('https://computeengineondemand.appspot.com/turn?username=93773443&key=4080218913', 1);
$this->view->assign('turn_list' , $json);
/* $cd = new \Modl\ContactDAO();
$contact = $cd->get($jid);
if(!$contact)
$contact = new modl\Contact();
$this->view->assign('avatar',$contact->getPhoto('l'));
$this->view->assign('name' ,$contact->getTrueName());
$this->view->assign('jid' ,$jid);
$this->view->assign('resource' ,$resource);
}*/
}
}