You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
212 lines
6.7 KiB
212 lines
6.7 KiB
/**
|
|
*
|
|
* @copyright Copyright (c) 2018, Daniel Calviño Sánchez (danxuliu@gmail.com)
|
|
*
|
|
* @license GNU AGPL version 3 or any later version
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU Affero General Public License as
|
|
* published by the Free Software Foundation, either version 3 of the
|
|
* License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU Affero General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Affero General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*
|
|
*/
|
|
|
|
(function(OCA) {
|
|
'use strict';
|
|
|
|
OCA.Talk = OCA.Talk || {};
|
|
OCA.Talk.PublicShareAuth = {
|
|
|
|
init: function() {
|
|
var self = this;
|
|
|
|
this.setupRequestPasswordButton();
|
|
this.setupLayoutForTalkSidebar();
|
|
|
|
this.setupSignalingEventHandlers();
|
|
|
|
$('#request-password-button').click(function() {
|
|
$('.request-password-wrapper + .error-message').hide();
|
|
|
|
$('#request-password-button').prop('disabled', 'true');
|
|
|
|
$('.request-password-wrapper .icon')
|
|
.removeClass('icon-confirm-white')
|
|
.addClass('icon-loading-small-dark');
|
|
|
|
self.requestPassword();
|
|
});
|
|
},
|
|
|
|
setupRequestPasswordButton: function() {
|
|
// "submit-wrapper" is used to mimic the login button and thus get
|
|
// automatic colouring of the confirm icon by the Theming app
|
|
$('main').append('<div id="submit-wrapper" class="request-password-wrapper">' +
|
|
' <input id="request-password-button" class="primary" type="button" value="' + t('spreed', 'Request password') + '" >' +
|
|
' <div class="icon icon-confirm-white"></div>' +
|
|
'</div>');
|
|
},
|
|
|
|
setupLayoutForTalkSidebar: function() {
|
|
$('body').append('<div id="notification-container"><div id="notification"></div></div>');
|
|
|
|
$('body').append('<div id="content"></div>');
|
|
$('#content').append($('.wrapper'));
|
|
$('#content').append($('footer'));
|
|
|
|
$('body').append('<div id="talk-sidebar" class="disappear"></div>');
|
|
$('#talk-sidebar').append('<div id="emptycontent"><div id="emptycontent-icon" class="icon-loading"></div><h2></h2><p></p></div>');
|
|
$('#talk-sidebar').append('<div id="call-container"></div>');
|
|
$('#call-container').append('<div id="videos"><div id="localVideoContainer" class="videoView videoContainer"></div></div>');
|
|
$('#call-container').append('<div id="screens"></div>');
|
|
|
|
$('#localVideoContainer').append(
|
|
'<video id="localVideo"></video>' +
|
|
'<div class="avatar-container hidden">' +
|
|
' <div class="avatar"></div>' +
|
|
'</div>' +
|
|
'<div class="nameIndicator">' +
|
|
'</div>');
|
|
|
|
OCA.SpreedMe.app.mainCallElementSelector = '#talk-sidebar';
|
|
|
|
OCA.SpreedMe.app._emptyContentView.destroy();
|
|
OCA.SpreedMe.app._emptyContentView = new OCA.SpreedMe.Views.EmptyContentView({
|
|
el: '#talk-sidebar > #emptycontent'
|
|
});
|
|
|
|
$('#localVideoContainer .nameIndicator').replaceWith(OCA.SpreedMe.app._mediaControlsView.$el);
|
|
|
|
OCA.SpreedMe.app.registerLocalVideoButtonHandlers();
|
|
|
|
$('body').addClass('talk-sidebar-enabled');
|
|
},
|
|
|
|
requestPassword: function() {
|
|
var self = this;
|
|
|
|
var shareToken = $('#sharingToken').val();
|
|
|
|
if (this.hideTalkSidebarTimeout) {
|
|
clearTimeout(this.hideTalkSidebarTimeout);
|
|
delete this.hideTalkSidebarTimeout;
|
|
}
|
|
|
|
$.ajax({
|
|
url: OC.linkToOCS('apps/spreed/api/v1', 2) + 'publicshareauth',
|
|
type: 'POST',
|
|
data: {
|
|
shareToken: shareToken,
|
|
},
|
|
beforeSend: function(request) {
|
|
request.setRequestHeader('Accept', 'application/json');
|
|
},
|
|
success: function(ocsResponse) {
|
|
self.setupRoom(ocsResponse.ocs.data.token);
|
|
},
|
|
error: function() {
|
|
$('.request-password-wrapper .icon')
|
|
.removeClass('icon-loading-small-dark')
|
|
.addClass('icon-confirm-white');
|
|
$('#request-password-button').prop('disabled', '');
|
|
|
|
var errorMessage = $('.request-password-wrapper + .error-message');
|
|
if (errorMessage.length > 0) {
|
|
errorMessage.show();
|
|
} else {
|
|
$('.request-password-wrapper').after('<p class="warning error-message hidden">' + t('spreed', 'Error requesting the password.') + '</p>');
|
|
}
|
|
}
|
|
});
|
|
},
|
|
|
|
setupSignalingEventHandlers: function() {
|
|
var self = this;
|
|
|
|
OCA.SpreedMe.app.signaling.on('joinRoom', function(joinedRoomToken) {
|
|
if (OCA.SpreedMe.app.token !== joinedRoomToken) {
|
|
return;
|
|
}
|
|
|
|
OCA.SpreedMe.app.signaling.syncRooms().then(function() {
|
|
OCA.SpreedMe.app._chatView.$el.appendTo('#talk-sidebar');
|
|
OCA.SpreedMe.app._chatView.setTooltipContainer($('body'));
|
|
|
|
OCA.SpreedMe.app._emptyContentView.setActiveRoom(OCA.SpreedMe.app.activeRoom);
|
|
|
|
OCA.SpreedMe.app.setPageTitle(OCA.SpreedMe.app.activeRoom.get('displayName'));
|
|
|
|
OCA.SpreedMe.app._messageCollection.setRoomToken(OCA.SpreedMe.app.activeRoom.get('token'));
|
|
OCA.SpreedMe.app._messageCollection.receiveMessages();
|
|
|
|
// Ensure that the elements are shown, as they could have
|
|
// been hidden if the password was already requested and
|
|
// that conversation ended in this same page.
|
|
$('#videos').show();
|
|
$('#screens').show();
|
|
|
|
self.showTalkSidebar();
|
|
|
|
OCA.SpreedMe.app.connection.joinCall(joinedRoomToken);
|
|
});
|
|
});
|
|
|
|
OCA.SpreedMe.app.signaling.on('leaveRoom', function(leftRoomToken) {
|
|
if (OCA.SpreedMe.app.token !== leftRoomToken) {
|
|
return;
|
|
}
|
|
|
|
self.leaveRoom();
|
|
});
|
|
},
|
|
|
|
setupRoom: function(token) {
|
|
OCA.SpreedMe.app.activeRoom = new OCA.SpreedMe.Models.Room({token: token});
|
|
OCA.SpreedMe.app.signaling.setRoom(OCA.SpreedMe.app.activeRoom);
|
|
|
|
OCA.SpreedMe.app.token = token;
|
|
OCA.SpreedMe.app.signaling.joinRoom(token);
|
|
},
|
|
|
|
leaveRoom: function() {
|
|
$('.request-password-wrapper .icon')
|
|
.removeClass('icon-loading-small-dark')
|
|
.addClass('icon-confirm-white');
|
|
$('#request-password-button').prop('disabled', '');
|
|
|
|
this.hideTalkSidebarTimeout = setTimeout(this.hideTalkSidebar, 5000);
|
|
},
|
|
|
|
showTalkSidebar: function() {
|
|
$('#talk-sidebar').removeClass('disappear');
|
|
},
|
|
|
|
hideTalkSidebar: function() {
|
|
$('#talk-sidebar').addClass('disappear');
|
|
|
|
delete this.hideTalkSidebarTimeout;
|
|
},
|
|
};
|
|
|
|
OCA.SpreedMe.app = new OCA.Talk.Application();
|
|
|
|
OCA.SpreedMe.app.on('start', function() {
|
|
OCA.Talk.PublicShareAuth.init();
|
|
});
|
|
|
|
// Unlike in the regular Talk app when Talk is embedded the signaling
|
|
// settings are not initially included in the HTML, so they need to be
|
|
// explicitly loaded before starting the app.
|
|
OCA.Talk.Signaling.loadSettings().then(function() {
|
|
OCA.SpreedMe.app.start();
|
|
});
|
|
|
|
})(OCA);
|