From 38d2e301c6bdc8a9a19c9d0fe89f7b8a2dc9d89e Mon Sep 17 00:00:00 2001
From: srosse <stephane.rosse@frentix.com>
Date: Wed, 8 May 2019 10:59:44 +0200
Subject: [PATCH] OO-4051: add delete poster button and check if a poster is
 there

---
 .../org/olat/modules/video/VideoManager.java  |  2 ++
 .../video/manager/VideoManagerImpl.java       | 14 ++++++++-
 .../video/ui/VideoPosterEditController.java   | 31 +++++++++++++------
 .../video/ui/_content/poster_config.html      |  2 +-
 4 files changed, 37 insertions(+), 12 deletions(-)

diff --git a/src/main/java/org/olat/modules/video/VideoManager.java b/src/main/java/org/olat/modules/video/VideoManager.java
index 6f37936e146..b6cddd98240 100644
--- a/src/main/java/org/olat/modules/video/VideoManager.java
+++ b/src/main/java/org/olat/modules/video/VideoManager.java
@@ -84,6 +84,8 @@ public interface VideoManager {
 	 * @param newPosterFile the new poster file
 	 */
 	public void setPosterframeResizeUploadfile(OLATResource videoResource, VFSLeaf newPosterFile);
+	
+	public void deletePosterframe(OLATResource videoResource);
 
 	/**
 	 * get all available Tracks of given videoResource
diff --git a/src/main/java/org/olat/modules/video/manager/VideoManagerImpl.java b/src/main/java/org/olat/modules/video/manager/VideoManagerImpl.java
index 81a9018d69b..14a1e981ba3 100644
--- a/src/main/java/org/olat/modules/video/manager/VideoManagerImpl.java
+++ b/src/main/java/org/olat/modules/video/manager/VideoManagerImpl.java
@@ -191,7 +191,9 @@ public class VideoManagerImpl implements VideoManager {
 				&& posterRes.getHeight() >= videoMetadata.getHeight() 
 				&& posterRes.getWidth() >= videoMetadata.getWidth()) {
 			VFSLeaf oldPosterFile = getPosterframe(videoResource);
-			oldPosterFile.delete();
+			if(oldPosterFile != null) {
+				oldPosterFile.delete();
+			}
 			VFSContainer masterContainer = getMasterContainer(videoResource);
 			LocalFileImpl newPoster = (LocalFileImpl) masterContainer.createChildLeaf(FILENAME_POSTER_JPG);
 			// to shrink image file, resolution ratio needs to be equal, otherwise crop from top left corner
@@ -206,6 +208,16 @@ public class VideoManagerImpl implements VideoManager {
 		}
 	}
 
+	@Override
+	public void deletePosterframe(OLATResource videoResource) {
+		VFSLeaf oldPosterFile = getPosterframe(videoResource);
+		if(oldPosterFile != null) {
+			oldPosterFile.delete();
+		}
+		RepositoryEntry repoEntry = repositoryManager.lookupRepositoryEntry(videoResource, true);
+		repositoryManager.deleteImage(repoEntry);
+	}
+
 	/**
 	 * get a specific subtitle-track of the videoresource
 	 */
diff --git a/src/main/java/org/olat/modules/video/ui/VideoPosterEditController.java b/src/main/java/org/olat/modules/video/ui/VideoPosterEditController.java
index 049c38c7b64..d6265b8cdc4 100644
--- a/src/main/java/org/olat/modules/video/ui/VideoPosterEditController.java
+++ b/src/main/java/org/olat/modules/video/ui/VideoPosterEditController.java
@@ -32,7 +32,6 @@ import org.olat.core.gui.control.Controller;
 import org.olat.core.gui.control.Event;
 import org.olat.core.gui.control.WindowControl;
 import org.olat.core.gui.control.generic.closablewrapper.CloseableModalController;
-import org.olat.core.helpers.Settings;
 import org.olat.core.util.vfs.VFSContainer;
 import org.olat.core.util.vfs.VFSLeaf;
 import org.olat.modules.video.VideoFormat;
@@ -49,6 +48,7 @@ import org.springframework.beans.factory.annotation.Autowired;
  */
 public class VideoPosterEditController extends FormBasicController {
 
+	private FormLink deleteImage;
 	private FormLink uploadImage;
 	private FormLink replaceImage;
 	private FormLayoutContainer displayContainer;
@@ -68,6 +68,7 @@ public class VideoPosterEditController extends FormBasicController {
 		this.videoResource = videoResource;
 		videoMetadata = videoManager.getVideoMetadata(videoResource);
 		initForm(ureq);
+		updatePosterImage(ureq, videoResource);
 	}
 
 	@Override
@@ -79,7 +80,6 @@ public class VideoPosterEditController extends FormBasicController {
 
 		displayContainer.contextPut("hint", translate("video.config.poster.hint"));
 
-		updatePosterImage(ureq, videoResource);
 		displayContainer.setLabel("video.config.poster", null);
 		formLayout.add(displayContainer);
 
@@ -93,6 +93,8 @@ public class VideoPosterEditController extends FormBasicController {
 
 		uploadImage = uifactory.addFormLink("uploadImage", "video.config.poster.upload", null, buttonGroupLayout, Link.BUTTON);
 		uploadImage.setIconLeftCSS("o_icon o_icon_upload o_icon-f");
+		
+		deleteImage = uifactory.addFormLink("deleteImage", "delete", null, buttonGroupLayout, Link.BUTTON);
 	}
 
 	@Override
@@ -103,9 +105,11 @@ public class VideoPosterEditController extends FormBasicController {
 	@Override
 	protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {
 		if (source == replaceImage) {
-			doReplaceVideo(ureq);
+			doReplacePoster(ureq);
 		} else if (source == uploadImage) {
-			doUploadVideo(ureq);
+			doUploadPoster(ureq);
+		} else if (source == deleteImage) {
+			doDeletePoster(ureq);
 		}
 	}
 	@Override
@@ -142,7 +146,7 @@ public class VideoPosterEditController extends FormBasicController {
 		cmc = null;
 	}
 
-	private void doReplaceVideo(UserRequest ureq){
+	private void doReplacePoster(UserRequest ureq){
 		posterSelectionForm = new VideoPosterSelectionForm(ureq, getWindowControl(), videoResource, videoMetadata);
 		listenTo(posterSelectionForm);
 		
@@ -157,7 +161,7 @@ public class VideoPosterEditController extends FormBasicController {
 		}
 	}
 
-	private void doUploadVideo(UserRequest ureq){
+	private void doUploadPoster(UserRequest ureq){
 		posterUploadForm = new VideoPosterUploadForm(ureq, getWindowControl(), videoResource);
 		listenTo(posterUploadForm);
 		
@@ -167,17 +171,24 @@ public class VideoPosterEditController extends FormBasicController {
 		listenTo(cmc);
 		cmc.activate();
 	}
+	
+	private void doDeletePoster(UserRequest ureq){
+		videoManager.deletePosterframe(videoResource);
+		updatePosterImage(ureq, videoResource);
+	}
 
-	private void updatePosterImage(UserRequest ureq, OLATResource video){
+	private boolean updatePosterImage(UserRequest ureq, OLATResource video){
 		VFSLeaf posterFile = videoManager.getPosterframe(video);
 		if(posterFile != null) {
 			VFSContainer masterContainer = posterFile.getParentContainer();
 			VideoMediaMapper mediaMapper = new VideoMediaMapper(masterContainer);
 			String mediaUrl = registerMapper(ureq, mediaMapper);
-			String serverUrl = Settings.createServerURI();
-			displayContainer.contextPut("serverUrl", serverUrl);
 			displayContainer.contextPut("mediaUrl", mediaUrl);
-			displayContainer.setDirty(true);
+		} else {
+			displayContainer.contextRemove("mediaUrl");
 		}
+		displayContainer.setDirty(true);
+		deleteImage.setVisible(posterFile != null);
+		return posterFile != null;
 	}
 }
\ No newline at end of file
diff --git a/src/main/java/org/olat/modules/video/ui/_content/poster_config.html b/src/main/java/org/olat/modules/video/ui/_content/poster_config.html
index 81c96a517d6..e1baff74bae 100644
--- a/src/main/java/org/olat/modules/video/ui/_content/poster_config.html
+++ b/src/main/java/org/olat/modules/video/ui/_content/poster_config.html
@@ -1,2 +1,2 @@
 <div class="o_note">$hint</div>
-<div class="o_video_poster" style="background-image: url('$mediaUrl/poster.jpg')"></div>
+<div class="o_video_poster" style="#if($r.isNotEmpty($mediaUrl)) background-image: url('$mediaUrl/poster.jpg') #end"></div>
-- 
GitLab