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
