Merge pull request #404 in FS/freeswitch from ~JONATASOLIVEIRA/freeswitch:bugfix/FS-7977-selecting-the-highest-supported-resolution-isnt-working to master

* commit '880fb810d045458a05f06a4f65353bc61f69ba99':
  FS-7977 - [Verto Communicator] Fixing default resolution and cleaning code
This commit is contained in:
Ítalo Rossi 2015-08-19 15:49:02 -05:00
commit 7ea5dabd0d
6 changed files with 449 additions and 249 deletions

View File

@ -1040,7 +1040,11 @@ var iceTimer;
var checkRes = function (cam, func) { var checkRes = function (cam, func) {
if (resI >= resList.length) { if (resI >= resList.length) {
if (func) return func(); var res = {
'validRes': $.FSRTC.validRes,
'bestResSupported': $.FSRTC.bestResSupported()
};
if (func) return func(res);
return; return;
} }

View File

@ -48,17 +48,18 @@ vertoApp.config(['$routeProvider',
otherwise({ otherwise({
redirectTo: '/login' redirectTo: '/login'
}); });
}]); }
]);
vertoApp.run(['$rootScope', '$location', 'toastr', 'prompt', vertoApp.run(['$rootScope', '$location', 'toastr', 'prompt',
function($rootScope, $location, toastr, prompt) { function($rootScope, $location, toastr, prompt) {
$rootScope.$on('$routeChangeSuccess', function (event, current, previous) { $rootScope.$on('$routeChangeSuccess', function(event, current, previous) {
$rootScope.title = current.$$route.title; $rootScope.title = current.$$route.title;
}); });
$rootScope.safeProtocol = false; $rootScope.safeProtocol = false;
if(window.location.protocol == 'https:') { if (window.location.protocol == 'https:') {
$rootScope.safeProtocol = true; $rootScope.safeProtocol = true;
} }
@ -79,7 +80,7 @@ vertoApp.run(['$rootScope', '$location', 'toastr', 'prompt',
message: message, message: message,
input: true, input: true,
label: label label: label
}).then(function (ret) { }).then(function(ret) {
if (angular.isFunction(callback)) { if (angular.isFunction(callback)) {
callback(ret); callback(ret);
} }
@ -89,4 +90,5 @@ vertoApp.run(['$rootScope', '$location', 'toastr', 'prompt',
}; };
}]); }
]);

View File

@ -2,12 +2,14 @@
/* Controllers */ /* Controllers */
var vertoControllers = angular.module('vertoControllers', ['ui.bootstrap', 'vertoService', 'storageService']); var vertoControllers = angular.module('vertoControllers', ['ui.bootstrap',
'vertoService', 'storageService'
]);
vertoControllers.filter('gravatar', vertoControllers.filter('gravatar',
function() { function() {
return function (email, size) { return function(email, size) {
if (angular.isUndefined(size)) { if (angular.isUndefined(size)) {
size = 40; size = 40;
} }
@ -17,8 +19,11 @@ vertoControllers.filter('gravatar',
}); });
vertoControllers.controller('MainController', ['$scope', '$rootScope', '$location', '$modal', '$timeout', 'verto', 'storage', 'toastr', 'Fullscreen', 'prompt', vertoControllers.controller('MainController', ['$scope', '$rootScope',
function($scope, $rootScope, $location, $modal, $timeout, verto, storage, toastr, Fullscreen, prompt) { '$location', '$modal', '$timeout', 'verto', 'storage', 'toastr',
'Fullscreen', 'prompt',
function($scope, $rootScope, $location, $modal,
$timeout, verto, storage, toastr, Fullscreen, prompt) {
console.debug('Executing MainController.'); console.debug('Executing MainController.');
var myVideo = document.getElementById("webcam"); var myVideo = document.getElementById("webcam");
@ -42,7 +47,7 @@ vertoControllers.controller('MainController', ['$scope', '$rootScope', '$locatio
/** /**
* if user data saved, use stored data for logon * if user data saved, use stored data for logon
*/ */
if(storage.data.ui_connected && storage.data.ws_connected) { if (storage.data.ui_connected && storage.data.ws_connected) {
$scope.verto.data.name = storage.data.name; $scope.verto.data.name = storage.data.name;
$scope.verto.data.email = storage.data.email; $scope.verto.data.email = storage.data.email;
$scope.verto.data.login = storage.data.login; $scope.verto.data.login = storage.data.login;
@ -50,7 +55,7 @@ vertoControllers.controller('MainController', ['$scope', '$rootScope', '$locatio
verto.connect(function(v, connected) { verto.connect(function(v, connected) {
$scope.$apply(function() { $scope.$apply(function() {
if(connected) { if (connected) {
toastr.success('Nice to see you again.', 'Welcome back'); toastr.success('Nice to see you again.', 'Welcome back');
$location.path('/dialpad'); $location.path('/dialpad');
} }
@ -84,7 +89,8 @@ vertoControllers.controller('MainController', ['$scope', '$rootScope', '$locatio
toastr.success('Login successful.', 'Welcome'); toastr.success('Login successful.', 'Welcome');
$location.path('/dialpad'); $location.path('/dialpad');
} else { } else {
toastr.error('There was an error while trying to login. Please try again.', 'Error'); toastr.error('There was an error while trying to login. \
Please try again.', 'Error');
} }
}); });
}; };
@ -114,7 +120,7 @@ vertoControllers.controller('MainController', ['$scope', '$rootScope', '$locatio
verto.hangup(); verto.hangup();
} }
if(verto.data.call) { if (verto.data.call) {
prompt({ prompt({
title: 'Oops, Active Call in Course.', title: 'Oops, Active Call in Course.',
message: 'It seems that you are in a call. Do you want to hang up?' message: 'It seems that you are in a call. Do you want to hang up?'
@ -130,7 +136,7 @@ vertoControllers.controller('MainController', ['$scope', '$rootScope', '$locatio
/** /**
* Shows a modal with the settings. * Shows a modal with the settings.
*/ */
$scope.openModalSettings = function () { $scope.openModalSettings = function() {
var modalInstance = $modal.open({ var modalInstance = $modal.open({
animation: $scope.animationsEnabled, animation: $scope.animationsEnabled,
templateUrl: 'partials/modal_settings.html', templateUrl: 'partials/modal_settings.html',
@ -138,10 +144,10 @@ vertoControllers.controller('MainController', ['$scope', '$rootScope', '$locatio
}); });
modalInstance.result.then( modalInstance.result.then(
function (result) { function(result) {
console.log(result); console.log(result);
}, },
function () { function() {
console.info('Modal dismissed at: ' + new Date()); console.info('Modal dismissed at: ' + new Date());
} }
); );
@ -161,10 +167,10 @@ vertoControllers.controller('MainController', ['$scope', '$rootScope', '$locatio
}); });
modalInstance.result.then( modalInstance.result.then(
function (result) { function(result) {
console.log(result); console.log(result);
}, },
function () { function() {
console.info('Modal dismissed at: ' + new Date()); console.info('Modal dismissed at: ' + new Date());
} }
); );
@ -203,8 +209,8 @@ vertoControllers.controller('MainController', ['$scope', '$rootScope', '$locatio
}; };
$scope.toggleCallHistory = function () { $scope.toggleCallHistory = function() {
if(!$scope.call_history) { if (!$scope.call_history) {
angular.element("#call_history").addClass('active'); angular.element("#call_history").addClass('active');
angular.element("#call-history-wrapper").addClass('active'); angular.element("#call-history-wrapper").addClass('active');
} else { } else {
@ -218,33 +224,33 @@ vertoControllers.controller('MainController', ['$scope', '$rootScope', '$locatio
storage.data.call_history = []; storage.data.call_history = [];
} }
$scope.toggleChat = function () { $scope.toggleChat = function() {
if($scope.chatStatus && $rootScope.activePane == 'chat') { if ($scope.chatStatus && $rootScope.activePane == 'chat') {
$rootScope.chat_counter = 0; $rootScope.chat_counter = 0;
} }
angular.element('#wrapper').toggleClass('toggled'); angular.element('#wrapper').toggleClass('toggled');
$scope.chatStatus = angular.element('#wrapper').hasClass('toggled'); $scope.chatStatus = angular.element('#wrapper').hasClass('toggled');
}; };
$scope.openChat = function () { $scope.openChat = function() {
$scope.chatStatus = false; $scope.chatStatus = false;
angular.element('#wrapper').removeClass('toggled'); angular.element('#wrapper').removeClass('toggled');
}; };
$scope.closeChat = function () { $scope.closeChat = function() {
$scope.chatStatus = true; $scope.chatStatus = true;
angular.element('#wrapper').addClass('toggled'); angular.element('#wrapper').addClass('toggled');
}; };
$scope.goFullscreen = function() { $scope.goFullscreen = function() {
if(storage.data.userStatus != 'connected') { if (storage.data.userStatus != 'connected') {
return; return;
} }
$rootScope.fullscreenEnabled = !Fullscreen.isEnabled(); $rootScope.fullscreenEnabled = !Fullscreen.isEnabled();
if(Fullscreen.isEnabled()) { if (Fullscreen.isEnabled()) {
Fullscreen.cancel(); Fullscreen.cancel();
} else { } else {
Fullscreen.enable( document.getElementsByTagName('body')[0] ); Fullscreen.enable(document.getElementsByTagName('body')[0]);
} }
} }
@ -253,13 +259,13 @@ vertoControllers.controller('MainController', ['$scope', '$rootScope', '$locatio
}); });
$rootScope.$on('call.hangup', function(event, data) { $rootScope.$on('call.hangup', function(event, data) {
if(Fullscreen.isEnabled()) { if (Fullscreen.isEnabled()) {
Fullscreen.cancel(); Fullscreen.cancel();
} }
console.log($scope.chatStatus); console.log($scope.chatStatus);
if(!$scope.chatStatus) { if (!$scope.chatStatus) {
angular.element('#wrapper').toggleClass('toggled'); angular.element('#wrapper').toggleClass('toggled');
$scope.chatStatus = angular.element('#wrapper').hasClass('toggled'); $scope.chatStatus = angular.element('#wrapper').hasClass('toggled');
} }
@ -270,17 +276,17 @@ vertoControllers.controller('MainController', ['$scope', '$rootScope', '$locatio
try { try {
$rootScope.$digest(); $rootScope.$digest();
} catch(e) { } catch (e) {
console.log('not digest'); console.log('not digest');
} }
}); });
$rootScope.$on('page.incall', function (event, data) { $rootScope.$on('page.incall', function(event, data) {
prompt({ prompt({
title: 'Oops, Active Call in Course.', title: 'Oops, Active Call in Course.',
message: 'It seems you were in a call before leaving the last time. Wanna go back to that?' message: 'It seems you were in a call before leaving the last time. Wanna go back to that?'
}).then(function() { }).then(function() {
verto.changeData(storage.data.verto); verto.changeData(angular.fromJson(storage.data.verto));
console.log('redirect to incall page'); console.log('redirect to incall page');
$location.path('/incall'); $location.path('/incall');
}, function() { }, function() {
@ -293,7 +299,7 @@ vertoControllers.controller('MainController', ['$scope', '$rootScope', '$locatio
verto.data.mutedMic = storage.data.mutedMic; verto.data.mutedMic = storage.data.mutedMic;
verto.data.mutedVideo = storage.data.mutedVideo; verto.data.mutedVideo = storage.data.mutedVideo;
if(!storage.data.cur_call) { if (!storage.data.cur_call) {
storage.data.call_start = new Date(); storage.data.call_start = new Date();
} }
storage.data.userStatus = 'connected'; storage.data.userStatus = 'connected';
@ -337,11 +343,21 @@ vertoControllers.controller('MainController', ['$scope', '$rootScope', '$locatio
$scope.answerCall(); $scope.answerCall();
storage.data.called_number = data; storage.data.called_number = data;
storage.data.call_history.unshift({'number': data, 'direction': 'inbound', 'status': true, 'call_start': Date()}); storage.data.call_history.unshift({
'number': data,
'direction': 'inbound',
'status': true,
'call_start': Date()
});
$location.path('/incall'); $location.path('/incall');
}, function() { }, function() {
$scope.declineCall(); $scope.declineCall();
storage.data.call_history.unshift({'number': data, 'direction': 'inbound', 'status': false, 'call_start': Date()}); storage.data.call_history.unshift({
'number': data,
'direction': 'inbound',
'status': false,
'call_start': Date()
});
}); });
}); });
@ -393,7 +409,7 @@ vertoControllers.controller('MainController', ['$scope', '$rootScope', '$locatio
}; };
$scope.screenshare = function() { $scope.screenshare = function() {
if(verto.data.shareCall) { if (verto.data.shareCall) {
verto.screenshareHangup(); verto.screenshareHangup();
return false; return false;
} }
@ -401,7 +417,8 @@ vertoControllers.controller('MainController', ['$scope', '$rootScope', '$locatio
}; };
$scope.play = function() { $scope.play = function() {
var file = $scope.promptInput('Please, enter filename', '', 'File', function(file) { var file = $scope.promptInput('Please, enter filename', '', 'File',
function(file) {
verto.data.conf.play(file); verto.data.conf.play(file);
console.log('play file :', file); console.log('play file :', file);
}); });
@ -413,7 +430,8 @@ vertoControllers.controller('MainController', ['$scope', '$rootScope', '$locatio
}; };
$scope.record = function() { $scope.record = function() {
var file = $scope.promptInput('Please, enter filename', '', 'File', function(file) { var file = $scope.promptInput('Please, enter filename', '', 'File',
function(file) {
verto.data.conf.record(file); verto.data.conf.record(file);
console.log('recording file :', file); console.log('recording file :', file);
}); });
@ -424,18 +442,22 @@ vertoControllers.controller('MainController', ['$scope', '$rootScope', '$locatio
}; };
$scope.snapshot = function() { $scope.snapshot = function() {
var file = $scope.promptInput('Please, enter filename', '', 'File', function(file) { var file = $scope.promptInput('Please, enter filename', '', 'File',
function(file) {
verto.data.conf.snapshot(file); verto.data.conf.snapshot(file);
console.log('snapshot file :', file); console.log('snapshot file :', file);
}); });
}; };
}]); }
]);
vertoControllers.controller('ChatController', ['$scope', '$rootScope', '$http', '$location', '$anchorScroll', '$timeout', 'verto', vertoControllers.controller('ChatController', ['$scope', '$rootScope', '$http',
function($scope, $rootScope, $http, $location, $anchorScroll, $timeout, verto) { '$location', '$anchorScroll', '$timeout', 'verto',
function($scope, $rootScope, $http, $location, $anchorScroll, $timeout,
verto) {
console.debug('Executing ChatController.'); console.debug('Executing ChatController.');
function scrollToChatBottom() { function scrollToChatBottom() {
@ -457,7 +479,7 @@ vertoControllers.controller('ChatController', ['$scope', '$rootScope', '$http',
clearConferenceChat(); clearConferenceChat();
$scope.$watch('activePane', function() { $scope.$watch('activePane', function() {
if($scope.activePane == 'chat') { if ($scope.activePane == 'chat') {
$rootScope.chat_counter = 0; $rootScope.chat_counter = 0;
} }
$rootScope.activePane = $scope.activePane; $rootScope.activePane = $scope.activePane;
@ -468,7 +490,8 @@ vertoControllers.controller('ChatController', ['$scope', '$rootScope', '$http',
console.log('chat.newMessage', data); console.log('chat.newMessage', data);
$scope.$apply(function() { $scope.$apply(function() {
$scope.messages.push(data); $scope.messages.push(data);
if(data.from != verto.data.name && (!$scope.chatStatus || $scope.activePane != 'chat')) { if (data.from != verto.data.name && (!$scope.chatStatus ||
$scope.activePane != 'chat')) {
++$rootScope.chat_counter; ++$rootScope.chat_counter;
} }
$timeout(function() { $timeout(function() {
@ -542,8 +565,9 @@ vertoControllers.controller('ChatController', ['$scope', '$rootScope', '$http',
if (memberIdx < 0) { if (memberIdx < 0) {
console.log('Didn\'t find the member uuid ' + member.uuid); console.log('Didn\'t find the member uuid ' + member.uuid);
} else { } else {
$scope.$apply(function () { $scope.$apply(function() {
console.log('Updating', memberIdx, ' <', $scope.members[memberIdx], '> with <', member, '>'); console.log('Updating', memberIdx, ' <', $scope.members[memberIdx],
'> with <', member, '>');
angular.extend($scope.members[memberIdx], member); angular.extend($scope.members[memberIdx], member);
}); });
} }
@ -612,24 +636,32 @@ vertoControllers.controller('ChatController', ['$scope', '$rootScope', '$http',
var exten = '1800'; var exten = '1800';
verto.data.conf.transfer(memberID, exten); verto.data.conf.transfer(memberID, exten);
}; };
}]); }
]);
vertoControllers.controller('MenuController', ['$scope', '$http', '$location', 'verto', 'storage', vertoControllers.controller('MenuController', ['$scope', '$http', '$location',
'verto', 'storage',
function($scope, $http, $location, verto, storage) { function($scope, $http, $location, verto, storage) {
console.debug('Executing MenuController.'); console.debug('Executing MenuController.');
}]); }
]);
vertoControllers.controller('ModalSettingsController', ['$scope', '$http', '$location', '$modalInstance', 'verto', 'storage', vertoControllers.controller('ModalSettingsController', ['$scope', '$http',
'$location', '$modalInstance', 'verto', 'storage',
function($scope, $http, $location, $modalInstance, verto, storage) { function($scope, $http, $location, $modalInstance, verto, storage) {
console.debug('Executing ModalSettingsController.'); console.debug('Executing ModalSettingsController.');
$scope.verto = storage.data.verto;
$scope.verto = verto;
$scope.verto = angular.fromJson(storage.data.verto);
$scope.storage = storage; $scope.storage = storage;
$scope.ok = function() { $scope.ok = function() {
$modalInstance.close('Ok.'); $modalInstance.close('Ok.');
verto.changeData(storage.data.verto); storage.data.verto = angular.toJson($scope.verto);
verto.changeData($scope.verto);
}; };
$scope.cancel = function() { $scope.cancel = function() {
@ -639,9 +671,11 @@ vertoControllers.controller('ModalSettingsController', ['$scope', '$http', '$loc
$scope.refreshDeviceList = function() { $scope.refreshDeviceList = function() {
verto.refreshDevices(); verto.refreshDevices();
} }
}]); }
]);
vertoControllers.controller('ModalLoginInformationController', ['$scope', '$http', '$location', '$modalInstance', 'verto', 'storage', vertoControllers.controller('ModalLoginInformationController', ['$scope',
'$http', '$location', '$modalInstance', 'verto', 'storage',
function($scope, $http, $location, $modalInstance, verto, storage) { function($scope, $http, $location, $modalInstance, verto, storage) {
console.debug('Executing ModalLoginInformationController.'); console.debug('Executing ModalLoginInformationController.');
@ -656,9 +690,11 @@ vertoControllers.controller('ModalLoginInformationController', ['$scope', '$http
$modalInstance.dismiss('cancel'); $modalInstance.dismiss('cancel');
}; };
}]); }
]);
vertoControllers.controller('LoginController', ['$scope', '$http', '$location', 'verto', vertoControllers.controller('LoginController', ['$scope', '$http', '$location',
'verto',
function($scope, $http, $location, verto) { function($scope, $http, $location, verto) {
$scope.checkBrowser(); $scope.checkBrowser();
@ -667,16 +703,18 @@ vertoControllers.controller('LoginController', ['$scope', '$http', '$location',
*/ */
verto.data.name = $scope.storage.data.name; verto.data.name = $scope.storage.data.name;
verto.data.email = $scope.storage.data.email; verto.data.email = $scope.storage.data.email;
if($scope.storage.data.login != '' && $scope.storage.data.password != '') { if ($scope.storage.data.login != '' && $scope.storage.data.password != '') {
verto.data.login = $scope.storage.data.login; verto.data.login = $scope.storage.data.login;
verto.data.password = $scope.storage.data.password; verto.data.password = $scope.storage.data.password;
} }
console.debug('Executing LoginController.'); console.debug('Executing LoginController.');
}]); }
]);
vertoControllers.controller('DialPadController', ['$rootScope', '$scope', '$http', '$location', 'toastr', 'verto', 'storage', vertoControllers.controller('DialPadController', ['$rootScope', '$scope',
'$http', '$location', 'toastr', 'verto', 'storage',
function($rootScope, $scope, $http, $location, toastr, verto, storage) { function($rootScope, $scope, $http, $location, toastr, verto, storage) {
console.debug('Executing DialPadController.'); console.debug('Executing DialPadController.');
@ -688,7 +726,7 @@ vertoControllers.controller('DialPadController', ['$rootScope', '$scope', '$http
/** /**
* fill dialpad via querystring [?autocall=\d+] * fill dialpad via querystring [?autocall=\d+]
*/ */
if($location.search().autocall) { if ($location.search().autocall) {
$rootScope.dialpadNumber = $location.search().autocall; $rootScope.dialpadNumber = $location.search().autocall;
} }
@ -701,7 +739,7 @@ vertoControllers.controller('DialPadController', ['$rootScope', '$scope', '$http
}; };
$rootScope.transfer = function() { $rootScope.transfer = function() {
if(!$rootScope.dialpadNumber) { if (!$rootScope.dialpadNumber) {
return false; return false;
} }
verto.data.call.transfer($rootScope.dialpadNumber); verto.data.call.transfer($rootScope.dialpadNumber);
@ -714,7 +752,7 @@ vertoControllers.controller('DialPadController', ['$rootScope', '$scope', '$http
storage.data.onHold = false; storage.data.onHold = false;
storage.data.cur_call = 0; storage.data.cur_call = 0;
$rootScope.dialpadNumber = extension; $rootScope.dialpadNumber = extension;
if(!$rootScope.dialpadNumber && storage.data.called_number) { if (!$rootScope.dialpadNumber && storage.data.called_number) {
$rootScope.dialpadNumber = storage.data.called_number; $rootScope.dialpadNumber = storage.data.called_number;
return false; return false;
} else if (!$rootScope.dialpadNumber && !storage.data.called_number) { } else if (!$rootScope.dialpadNumber && !storage.data.called_number) {
@ -734,14 +772,22 @@ vertoControllers.controller('DialPadController', ['$rootScope', '$scope', '$http
verto.call($rootScope.dialpadNumber); verto.call($rootScope.dialpadNumber);
storage.data.called_number = $rootScope.dialpadNumber; storage.data.called_number = $rootScope.dialpadNumber;
storage.data.call_history.unshift({'number': $rootScope.dialpadNumber, 'direction': 'outbound', 'call_start': Date()}); storage.data.call_history.unshift({
'number': $rootScope.dialpadNumber,
'direction': 'outbound',
'call_start': Date()
});
$location.path('/incall'); $location.path('/incall');
} }
}]); }
]);
vertoControllers.controller('InCallController', ['$rootScope', '$scope', '$http', '$location', '$modal', '$timeout', 'toastr', 'verto', 'storage', 'prompt', 'Fullscreen', vertoControllers.controller('InCallController', ['$rootScope', '$scope',
function($rootScope, $scope, $http, $location, $modal, $timeout, toatr, verto, storage, prompt, Fullscreen) { '$http', '$location', '$modal', '$timeout', 'toastr', 'verto', 'storage', 'prompt', 'Fullscreen',
function($rootScope, $scope, $http, $location, $modal, $timeout, toatr,
verto, storage, prompt, Fullscreen) {
console.debug('Executing InCallController.'); console.debug('Executing InCallController.');
$scope.layout = null; $scope.layout = null;
$scope.checkBrowser(); $scope.checkBrowser();
@ -751,7 +797,7 @@ vertoControllers.controller('InCallController', ['$rootScope', '$scope', '$http'
$scope.incall = true; $scope.incall = true;
if(storage.data.videoCall) { if (storage.data.videoCall) {
$scope.callTemplate = 'partials/video_call.html'; $scope.callTemplate = 'partials/video_call.html';
} }
@ -765,7 +811,8 @@ vertoControllers.controller('InCallController', ['$rootScope', '$scope', '$http'
* toggle dialpad in incall page * toggle dialpad in incall page
*/ */
$scope.toggleDialpad = function() { $scope.toggleDialpad = function() {
$scope.openModal('partials/dialpad_widget.html', 'ModalDialpadController'); $scope.openModal('partials/dialpad_widget.html',
'ModalDialpadController');
/* /*
if(!$scope.dialpadTemplate) { if(!$scope.dialpadTemplate) {
@ -809,9 +856,12 @@ vertoControllers.controller('InCallController', ['$rootScope', '$scope', '$http'
$scope.$broadcast('timer-start'); $scope.$broadcast('timer-start');
}, 1000); }, 1000);
}]); }
]);
vertoControllers.controller('ModalDialpadController', ['$scope', '$modalInstance', function($scope, $modalInstance) { vertoControllers.controller('ModalDialpadController', ['$scope',
'$modalInstance',
function($scope, $modalInstance) {
$scope.ok = function() { $scope.ok = function() {
$modalInstance.close('Ok.'); $modalInstance.close('Ok.');
@ -821,16 +871,21 @@ vertoControllers.controller('ModalDialpadController', ['$scope', '$modalInstance
$modalInstance.dismiss('cancel'); $modalInstance.dismiss('cancel');
}; };
}]); }
]);
vertoControllers.controller('BrowserUpgradeController', ['$scope', '$http', '$location', 'verto', 'storage', 'Fullscreen', vertoControllers.controller('BrowserUpgradeController', ['$scope', '$http',
'$location', 'verto', 'storage', 'Fullscreen',
function($scope, $http, $location, verto, storage, Fullscreen) { function($scope, $http, $location, verto, storage, Fullscreen) {
console.debug('Executing BrowserUpgradeController.'); console.debug('Executing BrowserUpgradeController.');
}]); }
]);
vertoControllers.controller('ContributorsController', ['$scope', '$http', 'toastr', function($scope, $http, toastr) { vertoControllers.controller('ContributorsController', ['$scope', '$http',
$http.get(window.location.pathname+'/contributors.txt') 'toastr',
function($scope, $http, toastr) {
$http.get(window.location.pathname + '/contributors.txt')
.success(function(data) { .success(function(data) {
var contributors = []; var contributors = [];
@ -851,4 +906,5 @@ vertoControllers.controller('ContributorsController', ['$scope', '$http', 'toast
.error(function() { .error(function() {
toastr.error('contributors not found.'); toastr.error('contributors not found.');
}); });
}]); }
]);

View File

@ -18,7 +18,7 @@ vertoDirectives.directive('videoTag',
// Moving the video tag to the new place inside the incall page. // Moving the video tag to the new place inside the incall page.
console.log('Moving the video to element.'); console.log('Moving the video to element.');
jQuery('video').removeClass('hide').appendTo(element); jQuery('video').removeClass('hide').appendTo(element);
jQuery('video').css('display','block'); jQuery('video').css('display', 'block');
scope.callActive(); scope.callActive();
element.on('$destroy', function() { element.on('$destroy', function() {
@ -62,19 +62,19 @@ vertoDirectives.directive('showControls',
jQuery('.video-footer').fadeIn('slow'); jQuery('.video-footer').fadeIn('slow');
jQuery('.video-hover-buttons').fadeIn('slow'); jQuery('.video-hover-buttons').fadeIn('slow');
element.parent().bind('mousemove', function() { element.parent().bind('mousemove', function() {
if(Fullscreen.isEnabled()) { if (Fullscreen.isEnabled()) {
clearTimeout(i); clearTimeout(i);
jQuery('.video-footer').fadeIn('slow'); jQuery('.video-footer').fadeIn('slow');
jQuery('.video-hover-buttons').fadeIn(500); jQuery('.video-hover-buttons').fadeIn(500);
i = setTimeout(function () { i = setTimeout(function() {
if(Fullscreen.isEnabled()) { if (Fullscreen.isEnabled()) {
jQuery('.video-footer').fadeOut('slow'); jQuery('.video-footer').fadeOut('slow');
jQuery('.video-hover-buttons').fadeOut(500); jQuery('.video-hover-buttons').fadeOut(500);
} }
}, 3000); }, 3000);
} }
}); });
element.parent().bind('mouseleave', function () { element.parent().bind('mouseleave', function() {
jQuery('.video-footer').fadeIn(); jQuery('.video-footer').fadeIn();
jQuery('.video-hover-buttons').fadeIn(); jQuery('.video-hover-buttons').fadeIn();
}); });
@ -84,4 +84,4 @@ vertoDirectives.directive('showControls',
return { return {
link: link link: link
}; };
}); });

View File

@ -2,7 +2,8 @@
var storageService = angular.module('storageService', ['ngStorage']); var storageService = angular.module('storageService', ['ngStorage']);
storageService.service('storage', ['$rootScope', '$localStorage', 'verto', function($rootScope, $localStorage, verto) { storageService.service('storage', ['$rootScope', '$localStorage', 'verto',
function($rootScope, $localStorage, verto) {
var data = $localStorage; var data = $localStorage;
data.$default({ data.$default({
@ -20,7 +21,7 @@ storageService.service('storage', ['$rootScope', '$localStorage', 'verto', funct
userStatus: 'disconnected', userStatus: 'disconnected',
mutedVideo: false, mutedVideo: false,
mutedMic: false, mutedMic: false,
verto: verto verto: angular.toJson(verto)
}); });
return { return {
@ -32,4 +33,5 @@ storageService.service('storage', ['$rootScope', '$localStorage', 'verto', funct
data.userStatus = 'disconnected'; data.userStatus = 'disconnected';
}, },
}; };
}]); }
]);

View File

@ -2,38 +2,95 @@
/* Controllers */ /* Controllers */
var videoQuality = [ var videoQuality = [{
{id: 'qvga', label: 'QVGA 320x240'}, id: 'qvga',
{id: 'vga', label: 'VGA 640x480'}, label: 'QVGA 320x240',
{id: 'qvga_wide', label: 'QVGA WIDE 320x180'}, width: 320,
{id: 'vga_wide', label: 'VGA WIDE 640x360'}, height: 240
{id: 'hd', label: 'HD 1280x720'}, }, {
{id: 'hhd', label: 'HHD 1920x1080'}, id: 'vga',
]; label: 'VGA 640x480',
width: 640,
height: 480
}, {
id: 'qvga_wide',
label: 'QVGA WIDE 320x180',
width: 320,
height: 180
}, {
id: 'vga_wide',
label: 'VGA WIDE 640x360',
width: 640,
height: 360
}, {
id: 'hd',
label: 'HD 1280x720',
width: 1280,
height: 720
}, {
id: 'hhd',
label: 'HHD 1920x1080',
width: 1920,
height: 1080
}, ];
var videoResolution = { var videoResolution = {
qvga: {width: 320, height: 240}, qvga: {
vga: {width: 640, height: 480}, width: 320,
qvga_wide: {width: 320, height: 180}, height: 240
vga_wide: {width: 640, height: 360}, },
hd: {width: 1280, height: 720}, vga: {
hhd: {width: 1920, height: 1080}, width: 640,
height: 480
},
qvga_wide: {
width: 320,
height: 180
},
vga_wide: {
width: 640,
height: 360
},
hd: {
width: 1280,
height: 720
},
hhd: {
width: 1920,
height: 1080
},
}; };
var bandwidth = [ var bandwidth = [{
{id: '250', label: '250kb'}, id: '250',
{id: '500', label: '500kb'}, label: '250kb'
{id: '1024', label: '1mb'}, }, {
{id: '1536', label: '1.5mb'}, id: '500',
{id: '2048', label: '2mb'}, label: '500kb'
{id: '5120', label: '5mb'}, }, {
{id: '0', label: 'No Limit'}, id: '1024',
{id: 'default', label: 'Server Default'}, label: '1mb'
]; }, {
id: '1536',
label: '1.5mb'
}, {
id: '2048',
label: '2mb'
}, {
id: '5120',
label: '5mb'
}, {
id: '0',
label: 'No Limit'
}, {
id: 'default',
label: 'Server Default'
}, ];
var vertoService = angular.module('vertoService', ['ngCookies']); var vertoService = angular.module('vertoService', ['ngCookies']);
vertoService.service('verto', ['$rootScope', '$cookieStore', '$location', function($rootScope, $cookieStore, $location) { vertoService.service('verto', ['$rootScope', '$cookieStore', '$location',
function($rootScope, $cookieStore, $location) {
var data = { var data = {
// Connection data. // Connection data.
instance: null, instance: null,
@ -72,6 +129,8 @@ vertoService.service('verto', ['$rootScope', '$cookieStore', '$location', functi
incomingBandwidth: $cookieStore.get('verto_demo_incomingBandwidth') || 'default', incomingBandwidth: $cookieStore.get('verto_demo_incomingBandwidth') || 'default',
vidQual: $cookieStore.get('verto_demo_vqual') || 'qvga', vidQual: $cookieStore.get('verto_demo_vqual') || 'qvga',
localVideo: $cookieStore.get('verto_demo_local_video_checked') || false, localVideo: $cookieStore.get('verto_demo_local_video_checked') || false,
bestWidth: '',
bestHeight: '',
selectedVideo: null, selectedVideo: null,
selectedAudio: null, selectedAudio: null,
selectedShare: null selectedShare: null
@ -112,11 +171,24 @@ vertoService.service('verto', ['$rootScope', '$cookieStore', '$location', functi
} }
function getVideoParams() { function getVideoParams() {
var maxWidth, maxHeight;
maxWidth = data.bestWidth;
maxHeight = data.bestHeight;
if(!data.bestWidth) {
maxWidth = videoResolution[data.vidQual].width;
}
if(!data.bestHeight) {
maxHeight = videoResolution[data.vidQual].height;
}
return { return {
minWidth: videoResolution[data.vidQual].width, minWidth: videoResolution[data.vidQual].width,
minHeight: videoResolution[data.vidQual].height, minHeight: videoResolution[data.vidQual].height,
maxWidth: videoResolution[data.vidQual].width, maxWidth: maxWidth,
maxHeight: videoResolution[data.vidQual].height maxHeight: maxHeight
}; };
} }
@ -161,8 +233,14 @@ vertoService.service('verto', ['$rootScope', '$cookieStore', '$location', functi
console.debug('Attempting to refresh the devices.'); console.debug('Attempting to refresh the devices.');
data.videoDevices = [{id: 'none', label: 'No camera'}]; data.videoDevices = [{
data.shareDevices = [{id: 'screen', label: 'Screen'}]; id: 'none',
label: 'No camera'
}];
data.shareDevices = [{
id: 'screen',
label: 'Screen'
}];
data.audioDevices = []; data.audioDevices = [];
data.selectedVideo = 'none'; data.selectedVideo = 'none';
@ -171,10 +249,16 @@ vertoService.service('verto', ['$rootScope', '$cookieStore', '$location', functi
for (var i in jQuery.verto.videoDevices) { for (var i in jQuery.verto.videoDevices) {
var device = jQuery.verto.videoDevices[i]; var device = jQuery.verto.videoDevices[i];
if(!device.label) { if (!device.label) {
data.videoDevices.push({id: 'Camera ' + i, label: 'Camera ' + i}); data.videoDevices.push({
id: 'Camera ' + i,
label: 'Camera ' + i
});
} else { } else {
data.videoDevices.push({id: device.id, label: device.label || device.id}); data.videoDevices.push({
id: device.id,
label: device.label || device.id
});
} }
// Selecting the first source. // Selecting the first source.
@ -182,12 +266,18 @@ vertoService.service('verto', ['$rootScope', '$cookieStore', '$location', functi
data.selectedVideo = device.id; data.selectedVideo = device.id;
} }
if(!device.label) { if (!device.label) {
data.shareDevices.push({id: 'Share Device ' + i, label: 'Share Device ' + i}); data.shareDevices.push({
id: 'Share Device ' + i,
label: 'Share Device ' + i
});
continue; continue;
} }
data.shareDevices.push({id: device.id, label: device.label || device.id}); data.shareDevices.push({
id: device.id,
label: device.label || device.id
});
} }
data.audioDevices = []; data.audioDevices = [];
@ -198,11 +288,17 @@ vertoService.service('verto', ['$rootScope', '$cookieStore', '$location', functi
data.selectedAudio = device.id; data.selectedAudio = device.id;
} }
if(!device.label) { if (!device.label) {
data.audioDevices.push({id: 'Microphone ' + i, label: 'Microphone ' + i}); data.audioDevices.push({
id: 'Microphone ' + i,
label: 'Microphone ' + i
});
continue; continue;
} }
data.audioDevices.push({id: device.id, label: device.label || device.id}); data.audioDevices.push({
id: device.id,
label: device.label || device.id
});
} }
console.debug('Devices were refreshed.'); console.debug('Devices were refreshed.');
@ -230,6 +326,35 @@ vertoService.service('verto', ['$rootScope', '$cookieStore', '$location', functi
} }
}, },
updateResolutions: function(supportedResolutions) {
console.debug('Attempting to sync supported and available resolutions');
var removed = 0;
angular.forEach(videoQuality, function(resolution, id) {
var supported = false;
angular.forEach(supportedResolutions, function(res) {
var width = res[0];
var height = res[1];
if(resolution.width == width && resolution.height == height) {
supported = true;
}
});
if(!supported) {
delete videoQuality[id];
++removed;
}
});
videoQuality.length = videoQuality.length - removed;
this.videoQuality = videoQuality;
this.data.vidQual = videoQuality[videoQuality.length - 1].id;
return videoQuality;
},
/** /**
* Connects to the verto server. Automatically calls `onWSLogin` * Connects to the verto server. Automatically calls `onWSLogin`
* callback set in the verto object. * callback set in the verto object.
@ -268,8 +393,11 @@ vertoService.service('verto', ['$rootScope', '$cookieStore', '$location', functi
data.liveArray = new $.verto.liveArray( data.liveArray = new $.verto.liveArray(
data.instance, pvtData.laChannel, data.instance, pvtData.laChannel,
pvtData.laName, pvtData.laName, {
{subParams: {callID: dialog ? dialog.callID : null}}); subParams: {
callID: dialog ? dialog.callID : null
}
});
data.liveArray.onErr = function(obj, args) { data.liveArray.onErr = function(obj, args) {
console.log('liveArray.onErr', obj, args); console.log('liveArray.onErr', obj, args);
@ -278,7 +406,7 @@ vertoService.service('verto', ['$rootScope', '$cookieStore', '$location', functi
data.liveArray.onChange = function(obj, args) { data.liveArray.onChange = function(obj, args) {
console.log('liveArray.onChange', obj, args); console.log('liveArray.onChange', obj, args);
switch(args.action) { switch (args.action) {
case 'bootObj': case 'bootObj':
$rootScope.$emit('members.boot', args.data); $rootScope.$emit('members.boot', args.data);
break; break;
@ -346,7 +474,10 @@ vertoService.service('verto', ['$rootScope', '$cookieStore', '$location', functi
case $.verto.enum.message.info: case $.verto.enum.message.info:
var body = params.body; var body = params.body;
var from = params.from_msg_name || params.from; var from = params.from_msg_name || params.from;
$rootScope.$emit('chat.newMessage', {from: from, body: body}); $rootScope.$emit('chat.newMessage', {
from: from,
body: body
});
break; break;
default: default:
break; break;
@ -354,9 +485,9 @@ vertoService.service('verto', ['$rootScope', '$cookieStore', '$location', functi
}, },
onDialogState: function(d) { onDialogState: function(d) {
if(!data.call) { if (!data.call) {
data.call = d; data.call = d;
if(d.state.name !== 'ringing') { if (d.state.name !== 'ringing') {
inCall(); inCall();
} }
} }
@ -386,7 +517,7 @@ vertoService.service('verto', ['$rootScope', '$cookieStore', '$location', functi
break; break;
case "destroy": case "destroy":
console.debug('Destroying: ' + d.cause); console.debug('Destroying: ' + d.cause);
if(d.params.screenShare) { if (d.params.screenShare) {
cleanShareCall(that); cleanShareCall(that);
} else { } else {
cleanCall(); cleanCall();
@ -404,7 +535,11 @@ vertoService.service('verto', ['$rootScope', '$cookieStore', '$location', functi
} }
}; };
var init = function() { var init = function(resolutions) {
data.bestWidth = resolutions['bestResSupported'][0];
data.bestHeight = resolutions['bestResSupported'][1];
that.updateResolutions(resolutions['validRes']);
that.refreshVideoResolution(); that.refreshVideoResolution();
@ -535,7 +670,7 @@ vertoService.service('verto', ['$rootScope', '$cookieStore', '$location', functi
}, },
screenshareHangup: function() { screenshareHangup: function() {
if(!data.shareCall) { if (!data.shareCall) {
console.debug('There is no call to hangup.'); console.debug('There is no call to hangup.');
return false; return false;
} }
@ -648,4 +783,5 @@ vertoService.service('verto', ['$rootScope', '$cookieStore', '$location', functi
} }
} }
}; };
}]); }
]);