diff --git a/src/main/java/org/olat/modules/video/VideoManager.java b/src/main/java/org/olat/modules/video/VideoManager.java index 3bffd0556968ef404fca488bda92e78449dcb7a8..c144865fde4173d57a783a1fd49a48e4d26248a7 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 49c4ced576aba0127e2dc994cafbc542d4dcd04d..c73b6b6e3b0f56ad281f5565f734162657d997a9 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 a5afae527f28b3bd945f98b285329c92c3d73021..5cf4ebaa2a649f68b7aeea0485798b9a9dffd1b3 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 595cced8494c7f29ae0ce7d447522d7f7e6cf47c..1d4edda4201b464b858418e67005494ac0d463e6 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)); + } } }