From e20bf8c6cb7f9ec067fd079898aa69e82f9045ce Mon Sep 17 00:00:00 2001 From: Pranam Lashkari Date: Fri, 8 Sep 2023 05:44:13 +0800 Subject: [PATCH] browser: notify user for unsupported video detect if video is able to play via checking if any frames are decoded, in other cases(i.e: file not found or corrupted file) check for the errors in source and video Signed-off-by: Pranam Lashkari Change-Id: I22bfc836a98ec0eb2caa58b89332b2531d69d18f --- browser/src/layer/vector/SVGGroup.js | 42 ++++++++++++++++++++++++ browser/src/map/handler/Map.SlideShow.js | 6 ++++ 2 files changed, 48 insertions(+) diff --git a/browser/src/layer/vector/SVGGroup.js b/browser/src/layer/vector/SVGGroup.js index f347f95940af7..c19bb92d9ae06 100644 --- a/browser/src/layer/vector/SVGGroup.js +++ b/browser/src/layer/vector/SVGGroup.js @@ -3,6 +3,8 @@ * L.SVGGroup */ +/* global _ */ + L.SVGGroup = L.Layer.extend({ options: { @@ -78,6 +80,46 @@ L.SVGGroup = L.Layer.extend({ var point = this._map.latLngToLayerPoint(this._bounds.getNorthWest()); svgLastChild.setAttribute('x', point.x); svgLastChild.setAttribute('y', point.y); + + var videos = svgLastChild.getElementsByTagName('video'); + this.addVideoSupportHandlers(videos); + }, + + addVideoSupportHandlers: function(videos) { + var that = this; + + if (videos) { // slide show may have more than one video and it does not require any selection + for (var i = 0; i < videos.length; i++) { + var video = videos[i]; + var source = video.getElementsByTagName('source')[0]; + if (video.networkState === 3) { // 3 = NETWORK_NO_SOURCE = No HTMLMediaElement src found + this.showUnsupportedVideoWarning(); + break; + } + + video.addEventListener('playing', function() { + window.setTimeout(function() { + if (video.webkitDecodedFrameCount === 0) { + that.showUnsupportedVideoWarning(); + } + }, 1000); + }); + + video.addEventListener('error', function() { + that.showUnsupportedVideoWarning(); + }); + + source.addEventListener('error', function() { + that.showUnsupportedVideoWarning(); + }); + } + } + + }, + + showUnsupportedVideoWarning: function() { + var videoWarning = _('Document contains unsupported video'); + L.Map.THIS.uiManager.showSnackbar(videoWarning); }, addEmbeddedSVG: function (svgString) { diff --git a/browser/src/map/handler/Map.SlideShow.js b/browser/src/map/handler/Map.SlideShow.js index 44b1bbf7108b8..1566697c3870b 100644 --- a/browser/src/map/handler/Map.SlideShow.js +++ b/browser/src/map/handler/Map.SlideShow.js @@ -115,6 +115,12 @@ L.Map.SlideShow = L.Handler.extend({ var separator = (this._slideURL.indexOf('?') === -1) ? '?' : '&'; this._slideShow.src = this._slideURL + separator + 'StartSlideNumber=' + this._startSlideNumber; this._slideShow.contentWindow.focus(); + + var that = this; + this._slideShow.addEventListener('load', function() { + var videos = that._slideShow.contentWindow.document.getElementsByTagName('video'); + L.SVGGroup.prototype.addVideoSupportHandlers(videos); + }); }, _processSlideshowLinks: function() {