package com.constellio.app.ui.framework.components.viewers.video;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang3.StringUtils;
import com.constellio.app.ui.entities.ContentVersionVO;
import com.constellio.app.ui.framework.components.content.ContentVersionVOResource;
import com.vaadin.ui.CustomComponent;
import com.vaadin.ui.Video;
//import com.kbdunn.vaadin.addons.mediaelement.MediaElementPlayer;
//import com.kbdunn.vaadin.addons.mediaelement.MediaElementPlayerOptions;
//import com.kbdunn.vaadin.addons.mediaelement.PlayedListener;
public class VideoViewer extends CustomComponent {
private static Map<String, File> cache = new HashMap<>();
public static final String[] SUPPORTED_EXTENSIONS = { /*"mp4"*/ };
public VideoViewer(ContentVersionVO contentVersionVO) {
try {
final String fileName = contentVersionVO.getFileName();
final String extension = StringUtils.lowerCase(FilenameUtils.getExtension(fileName));
final int width = 720;
final int height = 480;
// setWidth(width + "px");
// setHeight(height + "px");
boolean useMediaElementPlayer = false;
if (useMediaElementPlayer) {
// String hash = contentVersionVO.getHash();
// File mediaViewerFile = cache.get(hash);
// if (mediaViewerFile == null) {
// IOServices ioServices = ConstellioFactories.getInstance().getIoServicesFactory().newIOServices();
// ContentManager contentManager = ConstellioFactories.getInstance().getModelLayerFactory().getContentManager();
// File tempDir = ioServices.newTemporaryFolder(filename);
// mediaViewerFile = new File(tempDir, filename);
// mediaViewerFile.deleteOnExit();
//
// InputStream in = null;
// OutputStream out = null;
// try {
// in = contentManager.getContentInputStream(hash, getClass() + ".mediaViewerFile");
// out = new FileOutputStream(mediaViewerFile);
// IOUtils.copy(in, out);
// cache.put(hash, mediaViewerFile);
// } catch (FileNotFoundException e) {
// mediaViewerFile = null;
// } catch (IOException e) {
// mediaViewerFile = null;
// } finally {
// IOUtils.closeQuietly(in);
// IOUtils.closeQuietly(out);
// }
// }
// final File mediaViewerFinalFile = mediaViewerFile;
// MediaElementPlayer mediaPlayer = new MediaElementPlayer() {
// @Override
// public void attach() {
// super.attach();
// setSource(new FileResource(mediaViewerFinalFile) {
// @Override
// public String getMIMEType() {
// return getExtraMimeType(extension, super.getMIMEType());
// }
// });
// }
// };
//
// mediaPlayer.addPlayListener(new PlayedListener() {
// @Override
// public void played(MediaElementPlayer player) {
// System.err.println(player.getConnectorId());
// JavaScript javascript = new JavaScript();
// javascript.execute("setTimeout(function() { document.getElementsByTagName('video')[0].src='test'; document.getElementsByTagName('video')[0].style.width='" + width + "px'; document.getElementsByTagName('video')[0].style.height='" + height + "px';}, 1000);");
// }
// });
//
// MediaElementPlayerOptions playerOptions = new MediaElementPlayerOptions();
// playerOptions.setEnableAutosize(true);
// playerOptions.setVideoWidth(width);
// playerOptions.setVideoHeight(height);
// mediaPlayer.setOptions(playerOptions);
// mediaPlayer.setWidth(width + "px");
// mediaPlayer.setHeight(height + "px");
//
// setCompositionRoot(mediaPlayer);
} else {
Video video = new Video();
video.setHtmlContentAllowed(true);
video.setSource(new ContentVersionVOResource(contentVersionVO) {
@Override
public String getMIMEType() {
return getExtraMimeType(extension, super.getMIMEType());
}
});
video.setWidth(width + "px");
video.setHeight(height + "px");
setCompositionRoot(video);
}
} catch (Throwable t) {
// FIXME
t.printStackTrace();
setVisible(false);
}
}
private String getExtraMimeType(String extension, String mimeType) {
if (mimeType == null || !(mimeType.startsWith("video") && !mimeType.equals("application/x-mpegURL"))) {
if ("flv".equals(extension)) {
mimeType = "video/x-flv";
} else if ("ts".equals(extension)) {
mimeType = "video/MP2T";
} else if ("3gp".equals(extension)) {
mimeType = "video/3gp";
} else if ("mov".equals(extension)) {
mimeType = "video/quicktime";
} else if ("avi".equals(extension)) {
mimeType = "video/x-msvideo";
} else if ("wmv".equals(extension)) {
// mimeType = "video/x-ms-wmv";
mimeType = "video/wmv";
} else if ("mkv".equals(extension)) {
mimeType = "video/x-matroska";
}
}
return mimeType;
}
}