diff --git a/src/main/java/org/olat/modules/video/VideoFormat.java b/src/main/java/org/olat/modules/video/VideoFormat.java index 3f2177ac4f25f33ac0a2d8f30a45f44443af3564..fabdc68b75779802943508a0099cecd8b677fb6b 100644 --- a/src/main/java/org/olat/modules/video/VideoFormat.java +++ b/src/main/java/org/olat/modules/video/VideoFormat.java @@ -54,6 +54,19 @@ public enum VideoFormat { return mimeType; } + public static VideoFormat secureValueOf(String val) { + if("zip".equals(val)) { + return VideoFormat.mp4;// why was zip a format??? + } + + for(VideoFormat format:values()) { + if(format.name().equals(val)) { + return format; + } + } + return null; + } + public static VideoFormat valueOfFilename(String filename) { String extension = FilenameUtils.getExtension(filename); if("mp4".equalsIgnoreCase(extension) || "m4v".equalsIgnoreCase(extension) || "mov".equalsIgnoreCase(extension)) { 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 480afe1d64bcb8ca2f73aad08a2216d12becbfa8..81a9018d69b5eb4283f8b532ee484bdc08ef7626 100644 --- a/src/main/java/org/olat/modules/video/manager/VideoManagerImpl.java +++ b/src/main/java/org/olat/modules/video/manager/VideoManagerImpl.java @@ -71,7 +71,7 @@ import org.olat.core.util.vfs.VFSItem; import org.olat.core.util.vfs.VFSLeaf; import org.olat.core.util.vfs.VFSManager; import org.olat.core.util.vfs.VFSStatus; -import org.olat.core.util.vfs.filters.VFSItemSuffixFilter; +import org.olat.core.util.vfs.filters.VFSItemFilter; import org.olat.core.util.xml.XStreamHelper; import org.olat.fileresource.FileResourceManager; import org.olat.fileresource.types.ResourceEvaluation; @@ -221,7 +221,7 @@ public class VideoManagerImpl implements VideoManager { @Override public void removeTrack(OLATResource videoResource, String lang){ VFSContainer vfsContainer = getMasterContainer(videoResource); - for (VFSItem item : vfsContainer.getItems(new VFSItemSuffixFilter(new String[]{FILETYPE_SRT}))) { + for (VFSItem item : vfsContainer.getItems(new TrackFilter())) { if (item.getName().contains(lang)) { item.delete(); } @@ -235,7 +235,8 @@ public class VideoManagerImpl implements VideoManager { public Map<String, VFSLeaf> getAllTracks(OLATResource videoResource) { Map<String, VFSLeaf> tracks = new HashMap<>(); VFSContainer vfsContainer = getMasterContainer(videoResource); - for (VFSItem item : vfsContainer.getItems(new VFSItemSuffixFilter(new String[]{FILETYPE_SRT}))) { + List<VFSItem> trackItems = vfsContainer.getItems(new TrackFilter()); + for (VFSItem item : trackItems) { String itemname = item.getName(); String key = itemname.substring(itemname.indexOf('_') + 1, itemname.indexOf('.')); tracks.put(key, resolveFromMasterContainer(videoResource, itemname)); @@ -1161,5 +1162,18 @@ public class VideoManagerImpl implements VideoManager { LocalFileImpl videoFile = (LocalFileImpl) masterContainer.resolve(FILENAME_VIDEO_MP4); return videoFile != null && videoFile.exists(); } - + + private static class TrackFilter implements VFSItemFilter { + @Override + public boolean accept(VFSItem vfsItem) { + if(vfsItem instanceof VFSLeaf) { + String name = vfsItem.getName().toLowerCase(); + int idx = name.lastIndexOf('.'); + if (idx >= 0 && !name.startsWith(".")) { + return VideoManager.FILETYPE_SRT.equals(name.substring(idx + 1)); + } + } + return false; + } + } } diff --git a/src/main/java/org/olat/modules/video/model/VideoMetaImpl.java b/src/main/java/org/olat/modules/video/model/VideoMetaImpl.java index 914841c13d59d7ff010f70a1e307dd90b919a6da..d88a1409d554fdaf0e03b9f62877ba7347da4e87 100644 --- a/src/main/java/org/olat/modules/video/model/VideoMetaImpl.java +++ b/src/main/java/org/olat/modules/video/model/VideoMetaImpl.java @@ -176,7 +176,7 @@ public class VideoMetaImpl implements VideoMeta, Persistable, ModifiedInfo { @Override public VideoFormat getVideoFormat() { if(StringHelper.containsNonWhitespace(format)) { - return VideoFormat.valueOf(format); + return VideoFormat.secureValueOf(format); } return null; }