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 2017/03/28 03:19:17 UTC

svn commit: r1789036 [2/2] - in /openmeetings/application: branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/ branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/file/ branches/3.2.x/open...

Modified: openmeetings/application/trunk/openmeetings-util/src/main/java/org/apache/openmeetings/util/process/ProcessHelper.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-util/src/main/java/org/apache/openmeetings/util/process/ProcessHelper.java?rev=1789036&r1=1789035&r2=1789036&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-util/src/main/java/org/apache/openmeetings/util/process/ProcessHelper.java (original)
+++ openmeetings/application/trunk/openmeetings-util/src/main/java/org/apache/openmeetings/util/process/ProcessHelper.java Tue Mar 28 03:19:16 2017
@@ -20,14 +20,11 @@ package org.apache.openmeetings.util.pro
 
 import static java.nio.charset.StandardCharsets.UTF_8;
 
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
 import java.util.HashMap;
 import java.util.Map;
-import java.util.concurrent.TimeoutException;
+import java.util.concurrent.TimeUnit;
 
+import org.apache.commons.io.IOUtils;
 import org.apache.openmeetings.util.OpenmeetingsVariables;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
@@ -35,49 +32,6 @@ import org.slf4j.Logger;
 public class ProcessHelper {
 	public static final Logger log = Red5LoggerFactory.getLogger(ProcessHelper.class, OpenmeetingsVariables.webAppRootKey);
 
-	private static class Worker extends Thread {
-		private final Process process;
-		private Integer exitCode;
-
-		private Worker(Process process) {
-			this.process = process;
-		}
-
-		@Override
-		public void run() {
-			try {
-				exitCode = process.waitFor();
-			} catch (InterruptedException ignore) {
-				return;
-			}
-		}
-	}
-
-	private static class StreamWatcher extends Thread {
-		public StringBuilder output;
-		private final InputStream is;
-		private final BufferedReader br;
-
-		private StreamWatcher(Process process, boolean isError) {
-			output = new StringBuilder();
-			is = isError ? process.getErrorStream() : process.getInputStream();
-			br = new BufferedReader(new InputStreamReader(is, UTF_8));
-		}
-
-		@Override
-		public void run() {
-			try {
-				String line = br.readLine();
-				while (line != null) {
-					output.append(line).append('\n');
-					line = br.readLine();
-				}
-			} catch (IOException ioexception) {
-				return;
-			}
-		}
-	}
-
 	public static ConverterProcessResult executeScriptWindows(String process, String[] argv) {
 		try {
 			String[] cmd = new String[argv.length + 2];
@@ -119,13 +73,14 @@ public class ProcessHelper {
 	}
 
 	public static ConverterProcessResult executeScript(String process, String[] argv, Map<? extends String, ? extends String> env) {
-		ConverterProcessResult returnMap = new ConverterProcessResult();
-		returnMap.setProcess(process);
+		ConverterProcessResult res = new ConverterProcessResult();
+		res.setProcess(process);
 		debugCommandStart(process, argv);
 
+		Process proc = null;
 		try {
-			returnMap.setCommand(getCommand(argv));
-			returnMap.setOut("");
+			res.setCommand(getCommand(argv));
+			res.setOut("");
 
 			// By using the process Builder we have access to modify the
 			// environment variables
@@ -133,56 +88,29 @@ public class ProcessHelper {
 			ProcessBuilder pb = new ProcessBuilder(argv);
 			pb.environment().putAll(env);
 
-			Process proc = pb.start();
+			proc = pb.start();
 
 			// 20-minute timeout for command execution
 			// FFMPEG conversion of Recordings may take a real long time until
 			// its finished
-			long timeout = 60000 * 20;
-
-			StreamWatcher errorWatcher = new StreamWatcher(proc, true);
-			Worker worker = new Worker(proc);
-			StreamWatcher inputWatcher = new StreamWatcher(proc, false);
-			errorWatcher.start();
-			inputWatcher.start();
-			worker.start();
-
-			try {
-				worker.join(timeout);
-				if (worker.exitCode != null) {
-					returnMap.setExitCode(worker.exitCode);
-					log.debug("exitVal: " + worker.exitCode);
-					returnMap.setError(errorWatcher.output.toString());
-				} else {
-					returnMap.setException("timeOut");
-					returnMap.setError(errorWatcher.output.toString());
-					returnMap.setExitCode(-1);
-
-					throw new TimeoutException();
-				}
-			} catch (InterruptedException ex) {
-				worker.interrupt();
-				errorWatcher.interrupt();
-				inputWatcher.interrupt();
-				Thread.currentThread().interrupt();
-
-				returnMap.setError(ex.getMessage());
-				returnMap.setExitCode(-1);
-
-				throw ex;
-			} finally {
-				proc.destroy();
-			}
+			proc.waitFor(20, TimeUnit.MINUTES);
 
+			res.setExitCode(proc.exitValue());
+			res.setOut(IOUtils.toString(proc.getInputStream(), UTF_8));
+			res.setError(IOUtils.toString(proc.getErrorStream(), UTF_8));
 		} catch (Throwable t) {
 			log.error("executeScript", t);
-			returnMap.setError(t.getMessage());
-			returnMap.setException(t.toString());
-			returnMap.setExitCode(-1);
+			res.setError(t.getMessage());
+			res.setException(t.toString());
+			res.setExitCode(-1);
+		} finally {
+			if (proc != null) {
+				proc.destroy();
+			}
 		}
 
 		debugCommandEnd(process);
-		return returnMap;
+		return res;
 	}
-
 }
+

Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupForm.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupForm.java?rev=1789036&r1=1789035&r2=1789036&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupForm.java (original)
+++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupForm.java Tue Mar 28 03:19:16 2017
@@ -27,7 +27,7 @@ import static org.apache.openmeetings.we
 
 import java.io.File;
 
-import org.apache.openmeetings.core.converter.GenerateImage;
+import org.apache.openmeetings.core.converter.ImageConverter;
 import org.apache.openmeetings.db.dao.user.GroupDao;
 import org.apache.openmeetings.db.dao.user.GroupUserDao;
 import org.apache.openmeetings.db.entity.user.Group;
@@ -71,7 +71,7 @@ public class GroupForm extends AdminBase
 
 		@Override
 		protected void processImage(StoredFile sf, File f) throws Exception {
-			getBean(GenerateImage.class).resize(f, getGroupLogo(GroupForm.this.getModelObject().getId(), false), null, 28);
+			getBean(ImageConverter.class).resize(f, getGroupLogo(GroupForm.this.getModelObject().getId(), false), null, 28);
 		}
 
 		@Override

Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/UploadableProfileImagePanel.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/UploadableProfileImagePanel.java?rev=1789036&r1=1789035&r2=1789036&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/UploadableProfileImagePanel.java (original)
+++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/UploadableProfileImagePanel.java Tue Mar 28 03:19:16 2017
@@ -23,7 +23,7 @@ import static org.apache.openmeetings.we
 
 import java.io.File;
 
-import org.apache.openmeetings.core.converter.GenerateImage;
+import org.apache.openmeetings.core.converter.ImageConverter;
 import org.apache.openmeetings.util.StoredFile;
 
 public class UploadableProfileImagePanel extends UploadableImagePanel {
@@ -37,7 +37,7 @@ public class UploadableProfileImagePanel
 
 	@Override
 	protected void processImage(StoredFile sf, File f) throws Exception {
-		getBean(GenerateImage.class).convertImageUserProfile(f, userId, sf.isAsIs());
+		getBean(ImageConverter.class).convertImageUserProfile(f, userId, sf.isAsIs());
 	}
 
 	@Override

Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java?rev=1789036&r1=1789035&r2=1789036&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java (original)
+++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java Tue Mar 28 03:19:16 2017
@@ -42,6 +42,7 @@ import org.apache.openmeetings.util.OmFi
 import org.apache.openmeetings.web.room.RoomPanel;
 import org.apache.openmeetings.web.room.RoomResourceReference;
 import org.apache.openmeetings.web.user.record.JpgRecordingResourceReference;
+import org.apache.openmeetings.web.user.record.Mp4RecordingResourceReference;
 import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.behavior.AttributeAppender;
@@ -64,6 +65,10 @@ import com.github.openjson.JSONObject;
 
 public class WbPanel extends Panel {
 	private static final long serialVersionUID = 1L;
+	private static final int UPLOAD_WB_LEFT = 0;
+	private static final int UPLOAD_WB_TOP = 0;
+	private static final int DEFAULT_WIDTH = 640;
+	private static final int DEFAULT_HEIGHT = 480;
 	public static final String FUNC_ACTION = "wbAction";
 	public static final String PARAM_ACTION = "action";
 	public static final String PARAM_OBJ = "obj";
@@ -266,22 +271,28 @@ public class WbPanel extends Panel {
 		return _file;
 	}
 	private JSONObject addFileUrl(String ruid, JSONObject _file, FileItem fi, Client c) {
-		final PageParameters pp = new PageParameters();
+		JSONObject file = new JSONObject(_file, JSONObject.getNames(_file)); //FIXME TODO openjson 1.0.2
 		final FileSystemResourceReference ref;
-		pp.add("id", fi.getId()).add("ruid", ruid).add("wuid", _file.optString("uid"));
+		final PageParameters pp = new PageParameters()
+				.add("id", fi.getId()).add("uid", c.getUid())
+				.add("ruid", ruid).add("wuid", _file.optString("uid"));
 		switch (fi.getType()) {
 			case Video:
-				pp.add("preview", true);
 				ref = new RoomResourceReference();
+				file.put("_src", urlFor(ref, pp));
+				file.put("_poster", urlFor(ref, new PageParameters(pp).add("preview", true)));
 				break;
 			case Recording:
-				ref = new JpgRecordingResourceReference();
+				ref = new Mp4RecordingResourceReference();
+				file.put("_src", urlFor(ref, pp));
+				file.put("_poster", urlFor(new JpgRecordingResourceReference(), pp));
 				break;
 			default:
 				ref = new RoomResourceReference();
+				file.put("src", urlFor(ref, pp));
 				break;
 		}
-		return new JSONObject(_file, JSONObject.getNames(_file)).put("src", urlFor(ref, pp.add("uid", c.getUid())));  //FIXME TODO openjson 1.0.2
+		return file;
 	}
 
 	/*
@@ -317,7 +328,7 @@ public class WbPanel extends Panel {
 
 	public void sendFileToWb(FileItem fi, boolean clean) {
 		if (isVisible() && fi.getId() != null && FileItem.Type.Folder != fi.getType()) {
-			//FIXME TODO WmlFile special handling
+			//FIXME TODO WmlFile/Chart special handling
 			Whiteboards wbs = getBean(WhiteboardCache.class).get(roomId);
 			String wuid = UUID.randomUUID().toString();
 			Whiteboard wb = wbs.getWhiteboards().values().iterator().next(); //TODO active
@@ -326,10 +337,10 @@ public class WbPanel extends Panel {
 					.put("fileId", fi.getId())
 					.put("fileType", fi.getType().name())
 					.put("type", "image")
-					.put("left", 0) //FIXME TODO constant
-					.put("top", 0) //FIXME TODO constant
-					.put("width", 800/*fi.getWidth()*/) //FIXME TODO check null
-					.put("height", 600/*fi.getHeight()*/) //FIXME TODO constant
+					.put("left", UPLOAD_WB_LEFT)
+					.put("top", UPLOAD_WB_TOP)
+					.put("width", fi.getWidth() == null ? DEFAULT_WIDTH : fi.getWidth())
+					.put("height", fi.getHeight() == null ? DEFAULT_HEIGHT : fi.getHeight())
 					//,"angle":32.86
 					//,"crossOrigin":""
 					.put("uid", wuid)
@@ -345,7 +356,7 @@ public class WbPanel extends Panel {
 					, (o, c) -> {
 							return o.put("func", String.format("WbArea.%s(%s);"
 									, Action.createObj.name()
-									, getObjWbJson(wb.getId(), addFileUrl(ruid, file, fi, c)).toString()) //FIXME TODO openjson 1.0.2
+									, getObjWbJson(wb.getId(), addFileUrl(ruid, file, fi, c)).toString())
 								).toString();
 						}
 					);

Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb.js
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb.js?rev=1789036&r1=1789035&r2=1789036&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb.js (original)
+++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb.js Tue Mar 28 03:19:16 2017
@@ -616,7 +616,6 @@ var Wb = function() {
 			wbId: wbId
 			, obj: json
 		}));
-		//console.log('Wb Object Created', json, o);
 	};
 	var objAddedHandler = function (e) {
 		var o = e.target;
@@ -635,8 +634,14 @@ var Wb = function() {
 			wbId: wbId
 			, obj: toOmJson(o)
 		}));
-		//console.log('Object Modified', o);
 	};
+	var objSelectedHandler = function (e) {
+		var o = e.target;
+		s.find('.wb-dim-x').val(o.left);
+		s.find('.wb-dim-y').val(o.top);
+		s.find('.wb-dim-w').val(o.width);
+		s.find('.wb-dim-h').val(o.height);
+	}
 	var pathCreatedHandler = function (o) {
 		o.path.uid = UUID.generate();
 		wbObjCreatedHandler(o.path);
@@ -657,10 +662,12 @@ var Wb = function() {
 			t = a.find('.tools'), c = a.find('canvas'), s = a.find(".wb-settings");
 			c.attr('id', 'can-' + tid);
 			canvas = new fabric.Canvas(c.attr('id'));
+			canvas.wbId = _wbId;
 			//TODO create via WS canvas:cleared
 			canvas.on({
 				'object:added': objAddedHandler
 				, 'object:modified': objModifiedHandler
+				, 'object:selected': objSelectedHandler
 				, 'path:created': pathCreatedHandler
 				//, 'text:editing:exited': textEditedHandler
 				//, 'text:changed': textChangedHandler
@@ -746,7 +753,16 @@ var WbArea = (function() {
 		canvas.add(_o);
 	}
 	function _createHandler(canvas, _o) {
-		canvas.add(_o);
+		if ('Video' === _o.fileType || 'Recording' === _o.fileType) {
+			var vid = $('<video>').hide().attr('id', 'video-' + _o.uid).attr('poster', _o._poster + '&preview=true')
+				.append($('<source>').attr('type', 'video/mp4').attr('src', _o._src))
+			$('#wb-tab-' + canvas.wbId).append(vid);
+			//canvas.add(new fabric.Image(vid[0], _o));
+			canvas.add(new fabric.Image(vid[0], {}));
+			//vid.toJSON(['uid', 'fileId', 'fileType']);
+		} else {
+			canvas.add(_o);
+		}
 	}
 	function _findObject(canvas, uid) {
 		var _o = {};
@@ -832,6 +848,12 @@ var WbArea = (function() {
 				break;
 			default:
 				_createObject(canvas, [o], _createHandler);
+				if ('Video' === o.fileType || 'Recording' === o.fileType) {
+					fabric.util.requestAnimFrame(function render() {
+						canvas.renderAll();
+						fabric.util.requestAnimFrame(render);
+					});
+				}
 				break;
 		}
 	};
@@ -871,11 +893,9 @@ var WbArea = (function() {
 	self.resize = function(posX, w, h) {
 		if (!container) return;
 		var hh = h - 5;
-		container.width(w).css('left', posX	 + "px");
-		area.width(w);
+		container.width(w).height(h).css('left', posX + "px");
+		area.width(w).height(hh);
 
-		container.height(h);
-		area.height(hh);
 		var wbTabs = area.find(".tabs.ui-tabs");
 		wbTabs.height(hh);
 		var tabPanels = wbTabs.find(".ui-tabs-panel");
@@ -899,6 +919,7 @@ $(function() {
 				}
 			}
 		} catch (err) {
+			console.log(err);
 			//no-op
 		}
 	});

Modified: openmeetings/application/trunk/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml?rev=1789036&r1=1789035&r2=1789036&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml (original)
+++ openmeetings/application/trunk/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml Tue Mar 28 03:19:16 2017
@@ -7,16 +7,16 @@
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
   with the License.  You may obtain a copy of the License at
-  
+
       http://www.apache.org/licenses/LICENSE-2.0
-  
+
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
-  
+
 -->
 <beans xmlns="http://www.springframework.org/schema/beans"
 	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
@@ -198,9 +198,8 @@
 	<bean id="omCalendarDao" class="org.apache.openmeetings.db.dao.calendar.OmCalendarDao" />
 
 	<!-- No Interface -->
-	<bean id="generateImage" class="org.apache.openmeetings.core.converter.GenerateImage" />
-	<bean id="generateThumbs" class="org.apache.openmeetings.core.converter.GenerateThumbs" />
-	<bean id="generatePDF" class="org.apache.openmeetings.core.documents.GeneratePDF" />
+	<bean id="imageConverter" class="org.apache.openmeetings.core.converter.ImageConverter" />
+	<bean id="documentConverter" class="org.apache.openmeetings.core.converter.DocumentConverter" />
 	<bean id="smsHandler" class="org.apache.openmeetings.core.mail.SMSHandler" />
 	<bean id="importInitvalues" class="org.apache.openmeetings.installation.ImportInitvalues" />
 	<bean id="generateSWF" class="org.apache.openmeetings.core.converter.GenerateSWF" />