You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by so...@apache.org on 2019/02/28 16:31:52 UTC

[openmeetings] 01/01: [OPENMEETINGS-2017] initial attempt to fix Safari permission multimedia issue

This is an automated email from the ASF dual-hosted git repository.

solomax pushed a commit to branch 4.0.x
in repository https://gitbox.apache.org/repos/asf/openmeetings.git

commit 882355bdbbc5856bdf78474b4f04a0911028da5d
Merge: b734c70 b2ca241
Author: Maxim Solodovnik <so...@gmail.com>
AuthorDate: Thu Feb 28 23:31:36 2019 +0700

    [OPENMEETINGS-2017] initial attempt to fix Safari permission multimedia issue

 .../apache/openmeetings/web/room/RoomPanel.html    |  3 +++
 .../apache/openmeetings/web/room/raw-video-util.js | 24 ++++++++++++++++++
 .../apache/openmeetings/web/room/wb/raw-player.js  | 29 ++++++++++++++++++----
 3 files changed, 51 insertions(+), 5 deletions(-)

diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.html
index cbee0d3,cbee0d3..7171b83
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.html
@@@ -87,6 -87,6 +87,9 @@@
  		<div id="quick-confirmation" wicket:message="title:832, data-btn-ok:54, data-btn-cancel:lbl.cancel">
  			<wicket:message key="1419"/>
  		</div>
++		<div id="ask-permission" title="Ask Permission" data-btn-ok="OK">
++			Extra permission is required to play audio/video. Press OK to play video.
++		</div>
  	</div>
  </wicket:panel>
  </html>
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video-util.js
index 679d7c4,679d7c4..2fc635c
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video-util.js
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video-util.js
@@@ -102,6 -102,6 +102,29 @@@ var VideoUtil = (function() 
  			list.push(_getRect(v));
  		}
  	}
++	function _askPermission(callback) {
++		const perm = $('#ask-permission');
++		if (undefined === perm.dialog('instance')) {
++			perm.data('callbacks', [callback]).dialog({
++				appendTo: '.room.holder .room.box'
++				, autoOpen: true
++				, buttons: [
++					{
++						text: perm.data('btn-ok')
++						, click: function() {
++							while (perm.data('callbacks').length > 0) {
++								perm.data('callbacks').pop()();
++							}
++							$(this).dialog('close');
++						}
++					}
++				]
++			});
++		} else if (!perm.dialog('isOpen')) {
++			perm.dialog('open')
++		}
++		perm.data('callbacks').push(callback);
++	}
  
  	self.getVid = _getVid;
  	self.isSharing = _isSharing;
@@@ -112,5 -112,5 +135,6 @@@
  	self.getPos = _getPos;
  	self.container = _container;
  	self.arrange = _arrange;
++	self.askPermission = _askPermission;
  	return self;
  })();
diff --cc openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/raw-player.js
index 2ded739,5407736..809c164
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/raw-player.js
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/raw-player.js
@@@ -200,8 -206,26 +206,21 @@@ var Player = (function() 
  				if (group.status.paused) {
  					video.getElement().pause();
  				} else {
- 					video.getElement().play();
- 					fabric.util.requestAnimFrame(render);
+ 					const prom = video.getElement().play();
+ 					if (prom !== undefined) {
+ 						prom.then(function() {
+ 							fabric.util.requestAnimFrame(render);
+ 						}).catch(function(err) {
+ 							if ('NotAllowedError' === err.name) {
 -								$('<div title="Ask permission">Ask permission</div>').dialog({
 -									buttons: {
 -										"OK": function() {
 -											video.getElement().play();
 -											fabric.util.requestAnimFrame(render);
 -											$(this).dialog('close');
 -										}
 -									}
++								VideoUtil.askPermission(function() {
++									video.getElement().play();
++									fabric.util.requestAnimFrame(render);
+ 								});
+ 							}
+ 						});
+ 					} else {
+ 						fabric.util.requestAnimFrame(render);
+ 					}
  				}
  			}
  			group.setPlayable(wb.getRole());