From ea2a9dbcfcc7e5a12aca5ceb351d3b422ec0151e Mon Sep 17 00:00:00 2001
From: gnaegi <none@none>
Date: Tue, 24 May 2016 14:19:47 +0200
Subject: [PATCH] OO-725 support for video and poster caching, using cacheable
 mapper

---
 .../core/gui/control/controller/BasicController.java |  3 +++
 .../java/org/olat/course/nodes/VideoCourseNode.java  |  4 +---
 .../course/nodes/video/VideoPeekviewController.java  | 12 ++++++++++--
 .../modules/video/ui/VideoDisplayController.java     |  8 +++++---
 4 files changed, 19 insertions(+), 8 deletions(-)

diff --git a/src/main/java/org/olat/core/gui/control/controller/BasicController.java b/src/main/java/org/olat/core/gui/control/controller/BasicController.java
index 55cb8d22691..eff380ec3b7 100644
--- a/src/main/java/org/olat/core/gui/control/controller/BasicController.java
+++ b/src/main/java/org/olat/core/gui/control/controller/BasicController.java
@@ -187,6 +187,7 @@ public abstract class BasicController extends DefaultController {
 	 * convenience method: registers a mapper which will be automatically
 	 * deregistered upon dispose of the controller
 	 * 
+	 * @param ureq The user request object
 	 * @param m
 	 *            the mapper that delivers the resources
 	 * @return The mapper base URL
@@ -200,6 +201,8 @@ public abstract class BasicController extends DefaultController {
 	 * convenience method: registers a cacheable mapper which will be
 	 * automatically deregistered upon dispose of the controller
 	 * 
+	 * @param ureq The user request object
+	 * 
 	 * @param cacheableMapperID
 	 *            the mapper ID that is used in the url to identify this mapper.
 	 *            Should be something that is derived from the context or
diff --git a/src/main/java/org/olat/course/nodes/VideoCourseNode.java b/src/main/java/org/olat/course/nodes/VideoCourseNode.java
index a049b34a9e8..bc859caaaa5 100644
--- a/src/main/java/org/olat/course/nodes/VideoCourseNode.java
+++ b/src/main/java/org/olat/course/nodes/VideoCourseNode.java
@@ -154,9 +154,7 @@ public class VideoCourseNode extends AbstractAccessableCourseNode {
 	@Override
 	public Controller createPeekViewRunController(UserRequest ureq, WindowControl wControl, UserCourseEnvironment userCourseEnv,
 			NodeEvaluation ne) {
-		VideoManager videoManager = CoreSpringFactory.getImpl(VideoManager.class);
-		VFSContainer masterFolder = videoManager.getMasterContainer(getReferencedRepositoryEntry().getOlatResource());
-		Controller controller = new VideoPeekviewController(ureq, wControl, masterFolder);
+		Controller controller = new VideoPeekviewController(ureq, wControl, getReferencedRepositoryEntry().getOlatResource());
 		return controller;
 	}
 }
diff --git a/src/main/java/org/olat/course/nodes/video/VideoPeekviewController.java b/src/main/java/org/olat/course/nodes/video/VideoPeekviewController.java
index a735aa33ec9..452b0483bb3 100644
--- a/src/main/java/org/olat/course/nodes/video/VideoPeekviewController.java
+++ b/src/main/java/org/olat/course/nodes/video/VideoPeekviewController.java
@@ -27,7 +27,10 @@ import org.olat.core.gui.control.Event;
 import org.olat.core.gui.control.WindowControl;
 import org.olat.core.gui.control.controller.BasicController;
 import org.olat.core.util.vfs.VFSContainer;
+import org.olat.modules.video.VideoManager;
 import org.olat.modules.video.manager.VideoMediaMapper;
+import org.olat.resource.OLATResource;
+import org.springframework.beans.factory.annotation.Autowired;
 
 /**
  * peekviewcontroller of videomodule
@@ -37,10 +40,15 @@ import org.olat.modules.video.manager.VideoMediaMapper;
  */
 public class VideoPeekviewController  extends BasicController implements Controller{
 
-	public VideoPeekviewController(UserRequest ureq, WindowControl wControl,  VFSContainer posterFolder) {
+	@Autowired
+	private VideoManager videoManager;
+
+	public VideoPeekviewController(UserRequest ureq, WindowControl wControl,  OLATResource videoResource) {
 		super(ureq, wControl);
 		VelocityContainer peekviewVC = createVelocityContainer("peekview");
-		String mediaUrl = registerMapper(ureq, new VideoMediaMapper(posterFolder));
+		VFSContainer posterFolder = videoManager.getMasterContainer(videoResource);
+		String masterMapperId = "master-" + videoResource.getResourceableId();
+		String mediaUrl = registerCacheableMapper(ureq, masterMapperId, new VideoMediaMapper(posterFolder));
 		peekviewVC.contextPut("mediaUrl", mediaUrl);
 		peekviewVC.contextPut("nodeLink", posterFolder);
 		putInitialPanel(peekviewVC);
diff --git a/src/main/java/org/olat/modules/video/ui/VideoDisplayController.java b/src/main/java/org/olat/modules/video/ui/VideoDisplayController.java
index e7375986749..9473c6df14f 100644
--- a/src/main/java/org/olat/modules/video/ui/VideoDisplayController.java
+++ b/src/main/java/org/olat/modules/video/ui/VideoDisplayController.java
@@ -117,11 +117,13 @@ public class VideoDisplayController extends BasicController {
 			mainVC.contextPut("autoplay", autoplay);
 	
 			// Mapper for Video
-			String masterUrl = registerMapper(ureq, new VideoMediaMapper(videoManager.getMasterContainer(entry.getOlatResource())));
+			String masterMapperId = "master-" + entry.getOlatResource().getResourceableId();
+			String masterUrl = registerCacheableMapper(ureq, masterMapperId, new VideoMediaMapper(videoManager.getMasterContainer(entry.getOlatResource())));
 			mainVC.contextPut("masterUrl", masterUrl);
-			// mapper for versions specific because not in same base as the resource itself
+			// Mapper for versions specific because not in same base as the resource itself
+			String transcodingMapperId = "transcoding-" + entry.getOlatResource().getResourceableId();
 			VFSContainer transcodedContainer = videoManager.getTranscodingContainer(entry.getOlatResource());
-			String transcodedUrl = registerMapper(ureq, new VideoMediaMapper(transcodedContainer));
+			String transcodedUrl = registerCacheableMapper(ureq, transcodingMapperId, new VideoMediaMapper(transcodedContainer));
 			mainVC.contextPut("transcodedUrl", transcodedUrl);
 			
 			if ((showComments || showRating) && !ureq.getUserSession().getRoles().isGuestOnly()) {
-- 
GitLab