Skip to content
Snippets Groups Projects
Commit 0d848db4 authored by gnaegi's avatar gnaegi
Browse files

OO-725 implement copy of resource, beautify caption chooser, fix controller...

OO-725 implement copy of resource, beautify caption chooser, fix controller leak, reload transcoding list on segment change
parent 7cbeeac1
No related branches found
No related tags found
No related merge requests found
Showing
with 70 additions and 18 deletions
...@@ -171,4 +171,11 @@ public interface VideoManager { ...@@ -171,4 +171,11 @@ public interface VideoManager {
*/ */
public abstract void updateVersion(OLATResource video, VideoQualityVersion updatedVersion); public abstract void updateVersion(OLATResource video, VideoQualityVersion updatedVersion);
/**
* Copy video resource to identical new video resource.
* @param sourceResource the existing video resource
* @param targetResource the empty new resource
*/
public abstract void copyVideo(OLATResource sourceResource, OLATResource targetResource);
} }
\ No newline at end of file
...@@ -114,10 +114,7 @@ public class VideoExportMediaResource implements MediaResource { ...@@ -114,10 +114,7 @@ public class VideoExportMediaResource implements MediaResource {
String names = relativeFile.toString(); String names = relativeFile.toString();
if(!attrs.isDirectory()) { if(!attrs.isDirectory()) {
// do not include poster proposal images // add everything that belongs to resource to zip
if (names.contains("proposalPosters")) {
return FileVisitResult.SKIP_SUBTREE;
}
zout.putNextEntry(new ZipEntry(names)); zout.putNextEntry(new ZipEntry(names));
try(InputStream in=Files.newInputStream(file)) { try(InputStream in=Files.newInputStream(file)) {
......
...@@ -45,6 +45,7 @@ import org.olat.core.commons.services.taskexecutor.TaskExecutorManager; ...@@ -45,6 +45,7 @@ import org.olat.core.commons.services.taskexecutor.TaskExecutorManager;
import org.olat.core.commons.services.video.MovieService; import org.olat.core.commons.services.video.MovieService;
import org.olat.core.logging.OLog; import org.olat.core.logging.OLog;
import org.olat.core.logging.Tracing; import org.olat.core.logging.Tracing;
import org.olat.core.util.FileUtils;
import org.olat.core.util.ZipUtil; import org.olat.core.util.ZipUtil;
import org.olat.core.util.vfs.LocalFileImpl; import org.olat.core.util.vfs.LocalFileImpl;
import org.olat.core.util.vfs.VFSContainer; import org.olat.core.util.vfs.VFSContainer;
...@@ -590,5 +591,16 @@ public class VideoManagerImpl implements VideoManager { ...@@ -590,5 +591,16 @@ public class VideoManagerImpl implements VideoManager {
XStreamHelper.writeObject(XStreamHelper.createXStreamInstance(), optimizedMetadataFile, versions); XStreamHelper.writeObject(XStreamHelper.createXStreamInstance(), optimizedMetadataFile, versions);
} }
@Override
public void copyVideo(OLATResource sourceResource, OLATResource targetResource) {
// 1) Copy files on disk
File sourceFileroot = FileResourceManager.getInstance().getFileResourceRootImpl(sourceResource).getBasefile();
File targetFileroot = FileResourceManager.getInstance().getFileResourceRootImpl(targetResource).getBasefile();
FileUtils.copyDirContentsToDir(sourceFileroot, targetFileroot, false, "copyVideoResource");
// 2) Trigger transcoding in background
if (videoModule.isTranscodingEnabled()) {
startTranscodingProcess(targetResource);
}
}
} }
...@@ -41,7 +41,13 @@ public class VideoMediaMapper implements Mapper { ...@@ -41,7 +41,13 @@ public class VideoMediaMapper implements Mapper {
public MediaResource handle(String relPath, HttpServletRequest request) { public MediaResource handle(String relPath, HttpServletRequest request) {
VFSItem mediaFile = mediaBase.resolve(relPath); VFSItem mediaFile = mediaBase.resolve(relPath);
if (mediaFile instanceof VFSLeaf && !relPath.endsWith("xml")){ if (mediaFile instanceof VFSLeaf && !relPath.endsWith("xml")){
return new VFSMediaResource((VFSLeaf)mediaFile); VFSMediaResource res = new VFSMediaResource((VFSLeaf)mediaFile);
if (relPath.toLowerCase().endsWith("srt")) {
// SRT caption files are supposed to be UTF-8, see
// https://en.wikipedia.org/wiki/SubRip#Text_encoding
res.setEncoding("utf-8");
}
return res;
} else { } else {
return new NotFoundMediaResource(relPath); return new NotFoundMediaResource(relPath);
} }
......
...@@ -105,6 +105,7 @@ public class VideoSettingsController extends BasicController { ...@@ -105,6 +105,7 @@ public class VideoSettingsController extends BasicController {
private void doOpenMetaDataConfig(UserRequest ureq) { private void doOpenMetaDataConfig(UserRequest ureq) {
if(metaDataController == null) { if(metaDataController == null) {
metaDataController = new VideoMetaDataEditFormController(ureq, getWindowControl(), entry.getOlatResource()); metaDataController = new VideoMetaDataEditFormController(ureq, getWindowControl(), entry.getOlatResource());
listenTo(metaDataController);
} }
mainVC.put("segmentCmp", metaDataController.getInitialComponent()); mainVC.put("segmentCmp", metaDataController.getInitialComponent());
} }
...@@ -112,6 +113,7 @@ public class VideoSettingsController extends BasicController { ...@@ -112,6 +113,7 @@ public class VideoSettingsController extends BasicController {
private void doOpenPosterConfig(UserRequest ureq) { private void doOpenPosterConfig(UserRequest ureq) {
if(posterEditController == null) { if(posterEditController == null) {
posterEditController = new VideoPosterEditController(ureq, getWindowControl(), entry.getOlatResource()); posterEditController = new VideoPosterEditController(ureq, getWindowControl(), entry.getOlatResource());
listenTo(posterEditController);
} }
mainVC.put("segmentCmp", posterEditController.getInitialComponent()); mainVC.put("segmentCmp", posterEditController.getInitialComponent());
} }
...@@ -119,14 +121,17 @@ public class VideoSettingsController extends BasicController { ...@@ -119,14 +121,17 @@ public class VideoSettingsController extends BasicController {
private void doOpenTrackConfig(UserRequest ureq) { private void doOpenTrackConfig(UserRequest ureq) {
if(trackEditController == null) { if(trackEditController == null) {
trackEditController = new VideoTrackEditController(ureq, getWindowControl(), entry.getOlatResource()); trackEditController = new VideoTrackEditController(ureq, getWindowControl(), entry.getOlatResource());
listenTo(trackEditController);
} }
mainVC.put("segmentCmp", trackEditController.getInitialComponent()); mainVC.put("segmentCmp", trackEditController.getInitialComponent());
} }
private void doOpenQualityConfig(UserRequest ureq) { private void doOpenQualityConfig(UserRequest ureq) {
if(qualityEditController == null) { if(qualityEditController != null) {
qualityEditController = new VideoQualityTableFormController(ureq, getWindowControl(), entry); removeAsListenerAndDispose(qualityEditController);
} }
qualityEditController = new VideoQualityTableFormController(ureq, getWindowControl(), entry);
listenTo(qualityEditController);
mainVC.put("segmentCmp", qualityEditController.getInitialComponent()); mainVC.put("segmentCmp", qualityEditController.getInitialComponent());
} }
......
...@@ -48,7 +48,6 @@ import org.olat.core.util.coordinate.LockResult; ...@@ -48,7 +48,6 @@ import org.olat.core.util.coordinate.LockResult;
import org.olat.core.util.vfs.LocalFileImpl; import org.olat.core.util.vfs.LocalFileImpl;
import org.olat.core.util.vfs.VFSLeaf; import org.olat.core.util.vfs.VFSLeaf;
import org.olat.course.assessment.AssessmentMode; import org.olat.course.assessment.AssessmentMode;
import org.olat.fileresource.FileResourceManager;
import org.olat.fileresource.types.FileResource; import org.olat.fileresource.types.FileResource;
import org.olat.fileresource.types.ResourceEvaluation; import org.olat.fileresource.types.ResourceEvaluation;
import org.olat.fileresource.types.VideoFileResource; import org.olat.fileresource.types.VideoFileResource;
...@@ -206,9 +205,8 @@ public class VideoHandler extends FileHandler { ...@@ -206,9 +205,8 @@ public class VideoHandler extends FileHandler {
RepositoryEntry target) { RepositoryEntry target) {
OLATResource sourceResource = source.getOlatResource(); OLATResource sourceResource = source.getOlatResource();
OLATResource targetResource = target.getOlatResource(); OLATResource targetResource = target.getOlatResource();
File sourceFileroot = FileResourceManager.getInstance().getFileResourceRootImpl(sourceResource).getBasefile(); VideoManager videoManager = CoreSpringFactory.getImpl(VideoManager.class);
File targetFileroot = FileResourceManager.getInstance().getFileResourceRootImpl(targetResource).getBasefile(); videoManager.copyVideo(sourceResource, targetResource);
FileUtils.copyDirContentsToDir(sourceFileroot, targetFileroot, false, "copy");
return target; return target;
} }
......
...@@ -45,8 +45,10 @@ ...@@ -45,8 +45,10 @@
} }
/* beautify source chooser plugin, remove radio button */
.mejs-controls .mejs-sourcechooser-button .mejs-sourcechooser-selector { .mejs-controls .mejs-sourcechooser-button .mejs-sourcechooser-selector {
visibility: visible !important; visibility: visible !important;
width: 160px;
ul li { ul li {
label { label {
font-weight: normal; font-weight: normal;
...@@ -68,3 +70,28 @@ ...@@ -68,3 +70,28 @@
} }
} }
} }
/* beautify track plugin, remove radio button */
.mejs-controls .mejs-captions-button .mejs-captions-selector {
right: -26px;
ul li {
label {
font-weight: normal;
&:hover {
color: #eee;
}
.type {
display: none;
}
}
input {
/* hide ugly input radio button */
visibility: hidden;
margin: 0;
width: 0;
&:checked+label {
color: $brand-danger;
}
}
}
}
\ No newline at end of file
This diff is collapsed.
source diff could not be displayed: it is too large. Options to address this: view the blob.
This diff is collapsed.
This diff is collapsed.
source diff could not be displayed: it is too large. Options to address this: view the blob.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment