Repository: openmeetings
Updated Branches:
  refs/heads/4.0.x 118591f57 -> 8bd63418b


[OPENMEETINGS-1776] Wb seems to work with deleted objects as expected


Project: http://git-wip-us.apache.org/repos/asf/openmeetings/repo
Commit: http://git-wip-us.apache.org/repos/asf/openmeetings/commit/8bd63418
Tree: http://git-wip-us.apache.org/repos/asf/openmeetings/tree/8bd63418
Diff: http://git-wip-us.apache.org/repos/asf/openmeetings/diff/8bd63418

Branch: refs/heads/4.0.x
Commit: 8bd63418b3a051c00274b2b8f3a45aee26a2e462
Parents: 118591f
Author: Maxim Solodovnik <[email protected]>
Authored: Sun Dec 10 16:36:37 2017 +0700
Committer: Maxim Solodovnik <[email protected]>
Committed: Sun Dec 10 16:36:37 2017 +0700

----------------------------------------------------------------------
 .../db/dao/file/BaseFileItemDao.java            |   6 +++
 .../db/entity/file/BaseFileItem.java            |   3 +-
 openmeetings-web/pom.xml                        |   2 +-
 .../web/room/RoomResourceReference.java         |  11 +++--
 .../openmeetings/web/room/wb/WbPanel.java       |   5 +-
 .../web/room/wb/WbWebSocketHelper.java          |   2 +-
 .../apache/openmeetings/web/room/wb/player.js   |   2 +-
 .../openmeetings/web/room/wb/tool-util.js       |  22 +++++++++
 .../apache/openmeetings/web/room/wb/wb-board.js |  48 +++++++++++++------
 .../src/main/webapp/default/deleted.jpg         | Bin 2549 -> 0 bytes
 10 files changed, 74 insertions(+), 27 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8bd63418/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/BaseFileItemDao.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/BaseFileItemDao.java
 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/BaseFileItemDao.java
index da47729..27bfba6 100644
--- 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/BaseFileItemDao.java
+++ 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/BaseFileItemDao.java
@@ -52,6 +52,12 @@ public class BaseFileItemDao {
                return list.size() == 1 ? list.get(0) : null;
        }
 
+       public BaseFileItem getAny(Long id) {
+               List<BaseFileItem> list = em.createNamedQuery("getAnyFileById", 
BaseFileItem.class)
+                                       .setParameter("id", id).getResultList();
+               return list.size() == 1 ? list.get(0) : null;
+       }
+
        public void delete(BaseFileItem f) {
                if (f == null || f.getId() == null) {
                        return;

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8bd63418/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/BaseFileItem.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/BaseFileItem.java
 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/BaseFileItem.java
index fddc2f6..0521866 100644
--- 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/BaseFileItem.java
+++ 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/BaseFileItem.java
@@ -58,6 +58,7 @@ import org.simpleframework.xml.Element;
 @Entity
 @NamedQueries({
        @NamedQuery(name = "getFileById", query = "SELECT f FROM BaseFileItem f 
WHERE f.deleted = false AND f.id = :id")
+       , @NamedQuery(name = "getAnyFileById", query = "SELECT f FROM 
BaseFileItem f WHERE f.id = :id")
        , @NamedQuery(name = "getFileByHash", query = "SELECT f FROM 
BaseFileItem f WHERE f.deleted = false AND f.hash = :hash")
        , @NamedQuery(name = "getAllFileItemsForRoom", query = "SELECT f FROM 
BaseFileItem f"
                        + " WHERE f.deleted = false AND f.type <> :folder"
@@ -263,7 +264,7 @@ public abstract class BaseFileItem extends HistoricalEntity 
{
 
        public final File getFile(String ext) {
                File f = null;
-               if (getHash() != null) {
+               if (!isDeleted() && getHash() != null) {
                        File d = new File(getUploadFilesDir(), getHash());
                        switch (getType()) {
                                case WmlFile:

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8bd63418/openmeetings-web/pom.xml
----------------------------------------------------------------------
diff --git a/openmeetings-web/pom.xml b/openmeetings-web/pom.xml
index d838792..d079289 100644
--- a/openmeetings-web/pom.xml
+++ b/openmeetings-web/pom.xml
@@ -154,8 +154,8 @@
                                                                
<jsSourceFile>fabric.js</jsSourceFile>
                                                                
<jsSourceFile>wb-all.js</jsSourceFile>
                                                                
<jsSourceFile>uuid.js</jsSourceFile>
-                                                               
<jsSourceFile>player.js</jsSourceFile>
                                                                
<jsSourceFile>tool-util.js</jsSourceFile>
+                                                               
<jsSourceFile>player.js</jsSourceFile>
                                                                
<jsSourceFile>tool-base.js</jsSourceFile>
                                                                
<jsSourceFile>tool-pointer.js</jsSourceFile>
                                                                
<jsSourceFile>tool-apointer.js</jsSourceFile>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8bd63418/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomResourceReference.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomResourceReference.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomResourceReference.java
index a2da700..ae84cce 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomResourceReference.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomResourceReference.java
@@ -20,7 +20,7 @@ package org.apache.openmeetings.web.room;
 
 import static org.apache.openmeetings.db.dto.room.Whiteboard.ATTR_FILE_ID;
 import static org.apache.openmeetings.db.dto.room.Whiteboard.ATTR_SLIDE;
-import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_JPG;
+import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_PNG;
 import static org.apache.openmeetings.util.OmFileHelper.JPG_MIME_TYPE;
 import static org.apache.openmeetings.util.OmFileHelper.MP4_MIME_TYPE;
 import static org.apache.openmeetings.util.OmFileHelper.PNG_MIME_TYPE;
@@ -79,7 +79,7 @@ public class RoomResourceReference extends 
FileItemResourceReference<FileItem> {
                        default:
                                throw new RuntimeException("Not supported");
                }
-               return mime;
+               return r.isDeleted() ? PNG_MIME_TYPE : mime;
        }
 
        @Override
@@ -98,7 +98,10 @@ public class RoomResourceReference extends 
FileItemResourceReference<FileItem> {
                if (id == null || !ws.isSignedIn() || c == null) {
                        return null;
                }
-               FileItem f = getBean(FileItemDao.class).get(id);
+               FileItem f = (FileItem)getBean(FileItemDao.class).getAny(id);
+               if (f == null) {
+                       return null;
+               }
                String ruid = params.get("ruid").toString();
                String wuid = params.get("wuid").toString();
                if (c.getRoom() != null) {
@@ -121,7 +124,7 @@ public class RoomResourceReference extends 
FileItemResourceReference<FileItem> {
        protected File getFile(FileItem f, String ext) {
                File file = f.getFile(ext);
                if (file == null || !file.exists()) {
-                       file = new File(new File(getOmHome(), "default"), 
String.format("deleted.%s", EXTENSION_JPG));
+                       file = new File(new File(getOmHome(), "default"), 
String.format("deleted.%s", EXTENSION_PNG));
                }
                return file;
        }

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8bd63418/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java
index 63b55e9..3c87934 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java
@@ -58,7 +58,6 @@ import org.apache.commons.codec.binary.Base64;
 import org.apache.directory.api.util.Strings;
 import org.apache.openmeetings.core.data.whiteboard.WhiteboardCache;
 import org.apache.openmeetings.db.dao.file.FileItemDao;
-import org.apache.openmeetings.db.dao.record.RecordingDao;
 import org.apache.openmeetings.db.dto.room.Whiteboard;
 import org.apache.openmeetings.db.dto.room.Whiteboard.ZoomMode;
 import org.apache.openmeetings.db.dto.room.Whiteboards;
@@ -491,9 +490,7 @@ public class WbPanel extends AbstractWbPanel {
                try {
                        final long fid = _file.optLong(ATTR_FILE_ID, -1);
                        if (fid > 0) {
-                               BaseFileItem fi = 
FileItem.Type.Recording.name().equals(_file.optString(ATTR_FILE_TYPE))
-                                               ? 
getBean(RecordingDao.class).get(fid)
-                                               : 
getBean(FileItemDao.class).get(fid);
+                               BaseFileItem fi = 
getBean(FileItemDao.class).getAny(fid);
                                if (fi != null) {
                                        if (consumer != null) {
                                                consumer.accept(fi);

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8bd63418/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbWebSocketHelper.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbWebSocketHelper.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbWebSocketHelper.java
index 207bc99..7d0f2e3 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbWebSocketHelper.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbWebSocketHelper.java
@@ -95,6 +95,7 @@ public class WbWebSocketHelper extends WebSocketHelper {
                final PageParameters pp = new PageParameters()
                                .add("id", fi.getId()).add("uid", c.getUid())
                                .add("ruid", ruid).add("wuid", 
_file.optString("uid"));
+               file.put("deleted", !fi.exists());
                switch (fi.getType()) {
                        case Video:
                                ref = new RoomResourceReference();
@@ -109,7 +110,6 @@ public class WbWebSocketHelper extends WebSocketHelper {
                        case Presentation:
                                ref = new RoomResourceReference();
                                file.put("_src", urlFor(ref, pp));
-                               file.put("deleted", !fi.exists());
                                break;
                        default:
                                ref = new RoomResourceReference();

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8bd63418/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/player.js
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/player.js 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/player.js
index 56adc13..c8bea20 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/player.js
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/player.js
@@ -22,7 +22,7 @@ var Player = (function() {
                        .attr("width", _o.width).attr("height", _o.height)
                        .append($('<source>').attr('type', 
'video/mp4').attr('src', _o._src));
                $('#wb-tab-' + canvas.wbId).append(vid);
-               new fabric.Image.fromURL(_o._poster, function(poster) {
+               fabric.Image.fromURL(_o._poster, function(poster) {
                        poster.scaleX = poster.scaleY = _o.width / 
poster.getOriginalSize().width;
                        const video = new fabric.Image(vid[0], {visible: 
false});
                        if (typeof(_o.status) === 'undefined') {

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8bd63418/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/tool-util.js
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/tool-util.js
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/tool-util.js
index aefe155..1c87054 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/tool-util.js
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/tool-util.js
@@ -32,5 +32,27 @@ var ToolUtil = (function() {
                                s.find('.wb-prop-b, .wb-prop-i, 
.wb-prop-lock-color, .wb-prop-lock-fill').button("disable");
                        }
                }
+               , addDeletedItem: function(canvas, o) {
+                       if ("Presentation" === o.fileType) {
+                               fabric.Image.fromURL(o._src, function(img) {
+                                       const sz = img.getOriginalSize();
+                                       img.width = sz.width;
+                                       img.height = sz.height;
+                                       img.scaleX = img.scaleY = canvas.width 
/ (canvas.getZoom() * sz.width);
+                                       canvas.setBackgroundImage(img, 
canvas.renderAll.bind(canvas));
+                               });
+                       } else {
+                               fabric.Image.fromURL(o._src || o.src, 
function(img) {
+                                       const sz = img.getOriginalSize();
+                                       img.width = sz.width;
+                                       img.height = sz.height;
+                                       img.scaleX = img.scaleY = (o.scaleX || 
1.) * o.width / sz.width;
+                                       img.type = 'image';
+                                       img.videoStatus = function() {};
+                                       canvas.add(img);
+                                       canvas.requestRenderAll();
+                               }, o);
+                       }
+               }
        };
 })();

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8bd63418/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb-board.js
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb-board.js
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb-board.js
index e58623e..72c3aad 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb-board.js
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb-board.js
@@ -268,12 +268,15 @@ var Wb = function() {
        }
        function _findObject(o) {
                let _o = null;
-               canvases[o.slide].forEachObject(function(__o) {
-                       if (!!__o && o.uid === __o.uid) {
-                               _o = __o;
-                               return false;
-                       }
-               });
+               const cnvs = canvases[o.slide];
+               if (!!cnvs) {
+                       cnvs.forEachObject(function(__o) {
+                               if (!!__o && o.uid === __o.uid) {
+                                       _o = __o;
+                                       return false;
+                               }
+                       });
+               }
                return _o;
        }
        function _removeHandler(o) {
@@ -301,17 +304,20 @@ var Wb = function() {
                                break;
                        case 'Presentation':
                        {
-                               const ccount = canvases.length
-                                       , count = _o.deleted ? 1 : _o.count;
-                               for (let i = 0; i < count; ++i) {
+                               const ccount = canvases.length;
+                               for (let i = 0; i < _o.count; ++i) {
                                        if (canvases.length < i + 1) {
                                                addCanvas();
                                        }
                                        const canvas = canvases[i];
-                                       let scale = width / _o.width;
-                                       scale = scale < 1 ? 1 : scale;
-                                       canvas.setBackgroundImage(_o._src + 
"&slide=" + i, canvas.renderAll.bind(canvas)
-                                                       , {scaleX: scale, 
scaleY: scale});
+                                       if (_o.deleted) {
+                                               ToolUtil.addDeletedItem(canvas, 
_o);
+                                       } else {
+                                               let scale = width / _o.width;
+                                               scale = scale < 1 ? 1 : scale;
+                                               
canvas.setBackgroundImage(_o._src + "&slide=" + i, canvas.renderAll.bind(canvas)
+                                                               , {scaleX: 
scale, scaleY: scale});
+                                       }
                                }
                                _updateZoomPanel();
                                if (ccount !== canvases.length) {
@@ -320,6 +326,7 @@ var Wb = function() {
                                                b.data().deactivate();
                                                b.data().activate();
                                        }
+                                       showCurrentSlide();
                                }
                        }
                                break;
@@ -443,7 +450,10 @@ var Wb = function() {
                a.find('.scroll-container 
.canvas-container').each(function(idx) {
                        if (role === PRESENTER) {
                                $(this).show();
-                               a.find('.scroll-container 
.canvas-container')[slide].scrollIntoView();
+                               const cclist = a.find('.scroll-container 
.canvas-container');
+                               if (cclist.length > slide) {
+                                       cclist[slide].scrollIntoView();
+                               }
                        } else {
                                if (idx === slide) {
                                        $(this).show();
@@ -628,9 +638,13 @@ var Wb = function() {
                showCurrentSlide();
        };
        wb.createObj = function(obj) {
-               const arr = [], _arr = Array.isArray(obj) ? obj : [obj];
+               const arr = [], del = [], _arr = Array.isArray(obj) ? obj : 
[obj];
                for (let i = 0; i < _arr.length; ++i) {
                        const o = _arr[i];
+                       if (!!o.deleted && "Presentation" !== o.fileType) {
+                               del.push(o);
+                               continue;
+                       }
                        switch(o.type) {
                                case 'pointer':
                                        APointer().create(canvases[o.slide], o);
@@ -651,6 +665,10 @@ var Wb = function() {
                if (arr.length > 0) {
                        _createObject(arr, _createHandler);
                }
+               for (let i = 0; i < del.length; ++i) {
+                       const o = del[i];
+                       ToolUtil.addDeletedItem(canvases[o.slide], o);
+               }
        };
        wb.load = wb.createObj;
        wb.modifyObj = function(obj) { //TODO need to be unified

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8bd63418/openmeetings-web/src/main/webapp/default/deleted.jpg
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/webapp/default/deleted.jpg 
b/openmeetings-web/src/main/webapp/default/deleted.jpg
deleted file mode 100644
index 932c9bd..0000000
Binary files a/openmeetings-web/src/main/webapp/default/deleted.jpg and 
/dev/null differ

Reply via email to