From b3318dc31c4afad59df6af784470b3dce8a4b824 Mon Sep 17 00:00:00 2001 From: fkiefer <none@none> Date: Wed, 16 Nov 2016 10:53:03 +0100 Subject: [PATCH] OO-2246 update videometadata with new expeditureOfWork, backup retrieve duration from master video file --- .../java/org/olat/modules/video/VideoManager.java | 8 ++++++++ .../modules/video/manager/VideoManagerImpl.java | 8 ++++++++ .../video/ui/VideoChapterEditController.java | 12 +++++++++--- .../video/ui/VideoResourceEditController.java | 13 ++++++++++++- 4 files changed, 37 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/olat/modules/video/VideoManager.java b/src/main/java/org/olat/modules/video/VideoManager.java index 3bffd055696..c144865fde4 100644 --- a/src/main/java/org/olat/modules/video/VideoManager.java +++ b/src/main/java/org/olat/modules/video/VideoManager.java @@ -289,4 +289,12 @@ public interface VideoManager { * @param olatResource the video resource */ public abstract void saveChapters(List<VideoChapterTableRow> chapters, OLATResource olatResource); + + /** + * Gets the video duration. + * + * @param OLATResource videoResource + * @return the video duration + */ + public abstract long getVideoDuration(OLATResource videoResource); } \ No newline at end of file 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 49c4ced576a..c73b6b6e3b0 100644 --- a/src/main/java/org/olat/modules/video/manager/VideoManagerImpl.java +++ b/src/main/java/org/olat/modules/video/manager/VideoManagerImpl.java @@ -722,5 +722,13 @@ public class VideoManagerImpl implements VideoManager { } } } + + @Override + public long getVideoDuration (OLATResource videoResource){ + VFSContainer masterContainer = getMasterContainer(videoResource); + VFSLeaf video = (VFSLeaf) masterContainer.resolve(FILENAME_VIDEO_MP4); + long duration = movieService.getDuration(video, FILETYPE_MP4); + return duration; + } } diff --git a/src/main/java/org/olat/modules/video/ui/VideoChapterEditController.java b/src/main/java/org/olat/modules/video/ui/VideoChapterEditController.java index a5afae527f2..5cf4ebaa2a6 100644 --- a/src/main/java/org/olat/modules/video/ui/VideoChapterEditController.java +++ b/src/main/java/org/olat/modules/video/ui/VideoChapterEditController.java @@ -253,9 +253,15 @@ public class VideoChapterEditController extends FormBasicController { previousChapter.setEnd(currentChapter.getBegin()); } else { long durationLong = duration != null ? (long) Float.parseFloat(duration) * 1000 : 0; - Date durationDate = new Date(durationLong); - //if duration of the resource is not yet available, set end of last chapter equal to begin - previousChapter.setEnd(durationLong != 0 ? durationDate : previousChapter.getBegin()); + // duration may hold no value, backup ask videoManager + if (durationLong == 0){ + Date endOfMovie = new Date(videoManager.getVideoDuration(entry.getOlatResource())); + previousChapter.setEnd(endOfMovie); + }else{ + Date durationDate = new Date(durationLong); + previousChapter.setEnd(durationDate); + } + } } } diff --git a/src/main/java/org/olat/modules/video/ui/VideoResourceEditController.java b/src/main/java/org/olat/modules/video/ui/VideoResourceEditController.java index 595cced8494..1d4edda4201 100644 --- a/src/main/java/org/olat/modules/video/ui/VideoResourceEditController.java +++ b/src/main/java/org/olat/modules/video/ui/VideoResourceEditController.java @@ -24,6 +24,7 @@ import java.util.HashSet; import java.util.List; import java.util.Set; +import org.olat.core.commons.services.video.MovieService; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.form.flexible.FormItemContainer; import org.olat.core.gui.components.form.flexible.elements.FileElement; @@ -33,6 +34,7 @@ import org.olat.core.gui.components.form.flexible.impl.FormEvent; import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer; import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.WindowControl; +import org.olat.core.util.Formatter; import org.olat.core.util.vfs.VFSContainer; import org.olat.core.util.vfs.VFSLeaf; import org.olat.core.util.vfs.VFSManager; @@ -60,11 +62,14 @@ public class VideoResourceEditController extends FormBasicController { private VFSContainer vfsContainer; private OLATResource videoResource; + private RepositoryEntry entry; @Autowired private VideoManager videoManager; @Autowired private VideoModule videoModule; + @Autowired + private MovieService movieService; private StaticTextElement typeEl; private FileElement uploadFileEl; @@ -72,6 +77,7 @@ public class VideoResourceEditController extends FormBasicController { public VideoResourceEditController(UserRequest ureq, WindowControl wControl, RepositoryEntry entry){ super(ureq, wControl); + this.entry = entry; this.videoResource = entry.getOlatResource(); vfsContainer = videoManager.getMasterContainer(videoResource); @@ -108,7 +114,12 @@ public class VideoResourceEditController extends FormBasicController { if (uploadFileEl.getUploadSize() > 0 && uploadFile.exists()){ video.delete(); VFSLeaf uploadVideo = vfsContainer.createChildLeaf(VIDEO_RESOURCE); - VFSManager.copyContent(uploadFile, uploadVideo); + VFSManager.copyContent(uploadFile, uploadVideo); + // update video duration + long duration = movieService.getDuration(uploadVideo, "mp4"); + if (duration != -1) { + entry.setExpenditureOfWork(Formatter.formatTimecode(duration)); + } } } -- GitLab