Skip to content
Snippets Groups Projects
Commit 058e1d5e authored by srosse's avatar srosse
Browse files

OO-3027: validate the type of file in the upload form for undetitles

parent 145a2e28
No related branches found
No related tags found
No related merge requests found
Showing
with 154 additions and 123 deletions
...@@ -45,6 +45,9 @@ import org.olat.resource.OLATResource; ...@@ -45,6 +45,9 @@ import org.olat.resource.OLATResource;
*/ */
public interface VideoManager { public interface VideoManager {
public static final String FILETYPE_SRT = "srt";
public static final String DOT = "." ;
/** /**
* Checks for video file. * Checks for video file.
* *
......
...@@ -105,14 +105,13 @@ public class VideoManagerImpl implements VideoManager { ...@@ -105,14 +105,13 @@ public class VideoManagerImpl implements VideoManager {
protected static final String DIRNAME_REPOENTRY = "repoentry"; protected static final String DIRNAME_REPOENTRY = "repoentry";
public static final String FILETYPE_MP4 = "mp4"; public static final String FILETYPE_MP4 = "mp4";
private static final String FILETYPE_JPG = "jpg"; private static final String FILETYPE_JPG = "jpg";
private static final String FILETYPE_SRT = "srt";
private static final String FILENAME_POSTER_JPG = "poster.jpg"; private static final String FILENAME_POSTER_JPG = "poster.jpg";
private static final String FILENAME_VIDEO_MP4 = "video.mp4"; private static final String FILENAME_VIDEO_MP4 = "video.mp4";
private static final String FILENAME_CHAPTERS_VTT = "chapters.vtt"; private static final String FILENAME_CHAPTERS_VTT = "chapters.vtt";
private static final String FILENAME_VIDEO_METADATA_XML = "video_metadata.xml"; private static final String FILENAME_VIDEO_METADATA_XML = "video_metadata.xml";
private static final String DIRNAME_MASTER = "master"; private static final String DIRNAME_MASTER = "master";
public static final String TRACK = "track_"; public static final String TRACK = "track_";
public static final String DOT = "." ;
private static final SimpleDateFormat displayDateFormat = new SimpleDateFormat("HH:mm:ss"); private static final SimpleDateFormat displayDateFormat = new SimpleDateFormat("HH:mm:ss");
private static final SimpleDateFormat vttDateFormat = new SimpleDateFormat("HH:mm:ss.SSS"); private static final SimpleDateFormat vttDateFormat = new SimpleDateFormat("HH:mm:ss.SSS");
......
...@@ -26,7 +26,6 @@ import java.util.List; ...@@ -26,7 +26,6 @@ import java.util.List;
import javax.persistence.EntityNotFoundException; import javax.persistence.EntityNotFoundException;
import org.olat.core.commons.persistence.DB; import org.olat.core.commons.persistence.DB;
import org.olat.modules.video.VideoManager;
import org.olat.modules.video.VideoTranscoding; import org.olat.modules.video.VideoTranscoding;
import org.olat.modules.video.model.TranscodingCount; import org.olat.modules.video.model.TranscodingCount;
import org.olat.modules.video.model.VideoTranscodingImpl; import org.olat.modules.video.model.VideoTranscodingImpl;
...@@ -47,8 +46,6 @@ public class VideoTranscodingDAO { ...@@ -47,8 +46,6 @@ public class VideoTranscodingDAO {
@Autowired @Autowired
private DB dbInstance; private DB dbInstance;
@Autowired
private VideoManager videoManager;
/** /**
* Factory method to create and persist new video transcoding objects for a * Factory method to create and persist new video transcoding objects for a
......
...@@ -19,7 +19,6 @@ ...@@ -19,7 +19,6 @@
*/ */
package org.olat.modules.video.ui; package org.olat.modules.video.ui;
import org.olat.core.gui.components.form.flexible.FormUIFactory;
import org.olat.core.gui.components.form.flexible.elements.FormLink; import org.olat.core.gui.components.form.flexible.elements.FormLink;
/** /**
...@@ -37,8 +36,6 @@ public class QualityTableRow { ...@@ -37,8 +36,6 @@ public class QualityTableRow {
private String format; private String format;
private FormLink deleteLink; private FormLink deleteLink;
protected FormUIFactory uifactory = FormUIFactory.getInstance();
/** /**
* *
* @param resolution * @param resolution
......
...@@ -19,7 +19,6 @@ ...@@ -19,7 +19,6 @@
*/ */
package org.olat.modules.video.ui; package org.olat.modules.video.ui;
import org.olat.core.gui.components.form.flexible.FormUIFactory;
import org.olat.core.gui.components.form.flexible.elements.FormLink; import org.olat.core.gui.components.form.flexible.elements.FormLink;
import org.olat.core.util.vfs.VFSLeaf; import org.olat.core.util.vfs.VFSLeaf;
...@@ -32,30 +31,25 @@ import org.olat.core.util.vfs.VFSLeaf; ...@@ -32,30 +31,25 @@ import org.olat.core.util.vfs.VFSLeaf;
*/ */
public class TrackTableRow { public class TrackTableRow {
private String language; private final String language;
private VFSLeaf track; private final VFSLeaf track;
private FormLink deleteLink; private final FormLink deleteLink;
protected FormUIFactory uifactory = FormUIFactory.getInstance();
public TrackTableRow(String language, VFSLeaf track, FormLink deleteLink) { public TrackTableRow(String language, VFSLeaf track, FormLink deleteLink) {
this.language = language; this.language = language;
this.track = track; this.track = track;
this.deleteLink = deleteLink; this.deleteLink = deleteLink;
this.deleteLink.setIconLeftCSS("o_icon o_icon-fw o_icon_delete_item");
} }
public VFSLeaf getTrack(){ public VFSLeaf getTrack() {
return track; return track;
} }
public String getLanguage(){ public String getLanguage() {
return language; return language;
} }
public FormLink getDeleteLink(){ public FormLink getDeleteLink() {
return deleteLink; return deleteLink;
} }
}
} \ No newline at end of file
/**
* <a href="http://www.openolat.org">
* OpenOLAT - Online Learning and Training</a><br>
* <p>
* Licensed under the Apache License, Version 2.0 (the "License"); <br>
* you may not use this file except in compliance with the License.<br>
* You may obtain a copy of the License at the
* <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
* <p>
* Unless required by applicable law or agreed to in writing,<br>
* software distributed under the License is distributed on an "AS IS" BASIS, <br>
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
* See the License for the specific language governing permissions and <br>
* limitations under the License.
* <p>
* Initial code contributed and copyrighted by<br>
* frentix GmbH, http://www.frentix.com
* <p>
*/
package org.olat.modules.video.ui;
import org.olat.core.gui.control.Event;
import org.olat.core.util.vfs.VFSLeaf;
/**
*
* Initial date: 21 sept. 2017<br>
* @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
*
*/
public class TrackUploadEvent extends Event {
private static final long serialVersionUID = -2951558903014424854L;
private final String lang;
private final VFSLeaf track;
public TrackUploadEvent(String lang, VFSLeaf track) {
super("track-upload");
this.lang = lang;
this.track = track;
}
public String getLang() {
return lang;
}
public VFSLeaf getTrack() {
return track;
}
}
...@@ -19,7 +19,6 @@ ...@@ -19,7 +19,6 @@
*/ */
package org.olat.modules.video.ui; package org.olat.modules.video.ui;
import org.olat.core.gui.components.form.flexible.FormUIFactory;
import org.olat.core.gui.components.form.flexible.impl.elements.table.DefaultFlexiTableDataModel; import org.olat.core.gui.components.form.flexible.impl.elements.table.DefaultFlexiTableDataModel;
import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiSortableColumnDef; import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiSortableColumnDef;
import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableColumnModel; import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableColumnModel;
...@@ -34,7 +33,6 @@ import org.olat.core.gui.translator.Translator; ...@@ -34,7 +33,6 @@ import org.olat.core.gui.translator.Translator;
*/ */
public class TranscodingQueueTableModel extends DefaultFlexiTableDataModel<TranscodingQueueTableRow>{ public class TranscodingQueueTableModel extends DefaultFlexiTableDataModel<TranscodingQueueTableRow>{
protected FormUIFactory uifactory = FormUIFactory.getInstance();
private Translator translator; private Translator translator;
public TranscodingQueueTableModel(FlexiTableColumnModel columnModel, Translator translator) { public TranscodingQueueTableModel(FlexiTableColumnModel columnModel, Translator translator) {
super(columnModel); super(columnModel);
......
...@@ -21,7 +21,6 @@ package org.olat.modules.video.ui; ...@@ -21,7 +21,6 @@ package org.olat.modules.video.ui;
import java.util.Date; import java.util.Date;
import org.olat.core.gui.components.form.flexible.FormUIFactory;
import org.olat.core.gui.components.form.flexible.elements.FormLink; import org.olat.core.gui.components.form.flexible.elements.FormLink;
/** /**
...@@ -42,8 +41,6 @@ public class TranscodingQueueTableRow { ...@@ -42,8 +41,6 @@ public class TranscodingQueueTableRow {
private FormLink retranscodeLink; private FormLink retranscodeLink;
private Object[] failureReason; private Object[] failureReason;
protected FormUIFactory uifactory = FormUIFactory.getInstance();
/** /**
* Instantiates a new transcoding queue table row. * Instantiates a new transcoding queue table row.
......
...@@ -19,7 +19,6 @@ ...@@ -19,7 +19,6 @@
*/ */
package org.olat.modules.video.ui; package org.olat.modules.video.ui;
import org.olat.core.gui.components.form.flexible.FormUIFactory;
import org.olat.core.gui.components.form.flexible.impl.elements.table.DefaultFlexiTableDataModel; import org.olat.core.gui.components.form.flexible.impl.elements.table.DefaultFlexiTableDataModel;
import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiSortableColumnDef; import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiSortableColumnDef;
import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableColumnModel; import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableColumnModel;
...@@ -33,7 +32,6 @@ import org.olat.core.gui.translator.Translator; ...@@ -33,7 +32,6 @@ import org.olat.core.gui.translator.Translator;
*/ */
public class TranscodingTableModel extends DefaultFlexiTableDataModel<TranscodingRow>{ public class TranscodingTableModel extends DefaultFlexiTableDataModel<TranscodingRow>{
protected FormUIFactory uifactory = FormUIFactory.getInstance();
private Translator translator; private Translator translator;
public TranscodingTableModel(FlexiTableColumnModel columnModel, Translator translator) { public TranscodingTableModel(FlexiTableColumnModel columnModel, Translator translator) {
super(columnModel); super(columnModel);
......
...@@ -19,7 +19,6 @@ ...@@ -19,7 +19,6 @@
*/ */
package org.olat.modules.video.ui; package org.olat.modules.video.ui;
import org.olat.core.gui.components.form.flexible.FormUIFactory;
import org.olat.core.gui.components.form.flexible.impl.elements.table.DefaultFlexiTableDataModel; import org.olat.core.gui.components.form.flexible.impl.elements.table.DefaultFlexiTableDataModel;
import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiSortableColumnDef; import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiSortableColumnDef;
import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableColumnModel; import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableColumnModel;
...@@ -34,7 +33,6 @@ import org.olat.core.gui.translator.Translator; ...@@ -34,7 +33,6 @@ import org.olat.core.gui.translator.Translator;
*/ */
public class VideoQualityTableModel extends DefaultFlexiTableDataModel<QualityTableRow>{ public class VideoQualityTableModel extends DefaultFlexiTableDataModel<QualityTableRow>{
protected FormUIFactory uifactory = FormUIFactory.getInstance();
private Translator translator; private Translator translator;
public VideoQualityTableModel(FlexiTableColumnModel columnModel, Translator translator) { public VideoQualityTableModel(FlexiTableColumnModel columnModel, Translator translator) {
super(columnModel); super(columnModel);
......
...@@ -20,10 +20,9 @@ ...@@ -20,10 +20,9 @@
package org.olat.modules.video.ui; package org.olat.modules.video.ui;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.List;
import java.util.Map; import java.util.Map;
import org.olat.core.commons.modules.bc.FolderEvent;
import org.olat.core.gui.UserRequest; import org.olat.core.gui.UserRequest;
import org.olat.core.gui.components.form.flexible.FormItem; import org.olat.core.gui.components.form.flexible.FormItem;
import org.olat.core.gui.components.form.flexible.FormItemContainer; import org.olat.core.gui.components.form.flexible.FormItemContainer;
...@@ -58,11 +57,10 @@ public class VideoTrackEditController extends FormBasicController { ...@@ -58,11 +57,10 @@ public class VideoTrackEditController extends FormBasicController {
private VideoTrackUploadForm trackUploadForm; private VideoTrackUploadForm trackUploadForm;
private CloseableModalController cmc; private CloseableModalController cmc;
private Map<String, TrackTableRow> rows; private OLATResource videoResource;
@Autowired @Autowired
private VideoManager videoManager; private VideoManager videoManager;
private OLATResource videoResource;
public VideoTrackEditController(UserRequest ureq, WindowControl wControl, OLATResource videoResource) { public VideoTrackEditController(UserRequest ureq, WindowControl wControl, OLATResource videoResource) {
super(ureq, wControl, LAYOUT_BAREBONE); super(ureq, wControl, LAYOUT_BAREBONE);
...@@ -87,78 +85,82 @@ public class VideoTrackEditController extends FormBasicController { ...@@ -87,78 +85,82 @@ public class VideoTrackEditController extends FormBasicController {
columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(true, TrackTableCols.file.i18nKey(), TrackTableCols.file.ordinal(), true, TrackTableCols.file.name())); columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(true, TrackTableCols.file.i18nKey(), TrackTableCols.file.ordinal(), true, TrackTableCols.file.name()));
columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(TrackTableCols.language.i18nKey(), TrackTableCols.language.ordinal(), true, TrackTableCols.language.name())); columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(TrackTableCols.language.i18nKey(), TrackTableCols.language.ordinal(), true, TrackTableCols.language.name()));
columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(true, TrackTableCols.delete.i18nKey(), TrackTableCols.delete.ordinal(),false, TrackTableCols.delete.name())); columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(true, TrackTableCols.delete.i18nKey(), TrackTableCols.delete.ordinal(),false, TrackTableCols.delete.name()));
tableModel = new VideoTracksTableModel(columnsModel, getTranslator()); tableModel = new VideoTracksTableModel(columnsModel, getLocale());
tableEl = uifactory.addTableElement(getWindowControl(), "tracks", tableModel, getTranslator(), generalCont); tableEl = uifactory.addTableElement(getWindowControl(), "tracks", tableModel, getTranslator(), generalCont);
tableEl.setCustomizeColumns(false); tableEl.setCustomizeColumns(false);
Map<String, VFSLeaf> tracks = videoManager.getAllTracks(videoResource); Map<String, VFSLeaf> tracks = videoManager.getAllTracks(videoResource);
rows = new HashMap<String,TrackTableRow>(tracks.size()); List<TrackTableRow> rows = new ArrayList<>(tracks.size());
if (!tracks.isEmpty()) { for (Map.Entry<String, VFSLeaf> entry : tracks.entrySet()) {
for (Map.Entry<String, VFSLeaf> entry : tracks.entrySet()) { rows.add(forgeRow(entry.getKey(), entry.getValue()));
FormLink delButton = uifactory.addFormLink(entry.getKey(), "deleteTrack", "track.delete", "track.delete", null, Link.BUTTON);
rows.put(entry.getKey(), new TrackTableRow(entry.getKey(), entry.getValue(), delButton));
}
tableModel.setObjects(new ArrayList<TrackTableRow>(rows.values()));
} }
// tableEl.setVisible(!videoManager.getAllTracks(videoResource).isEmpty()); tableModel.setObjects(rows);
tableEl.setVisible(true);
tableEl.setEmtpyTableMessageKey("track.notrack"); tableEl.setEmtpyTableMessageKey("track.notrack");
addButton = uifactory.addFormLink("add.track", generalCont, Link.BUTTON); addButton = uifactory.addFormLink("add.track", generalCont, Link.BUTTON);
} }
@Override private TrackTableRow forgeRow(String language, VFSLeaf track) {
protected boolean validateFormLogic(UserRequest ureq) { FormLink delButton = uifactory.addFormLink("lang_".concat(language), "deleteTrack", "track.delete", "track.delete", null, Link.LINK);
delButton.setIconLeftCSS("o_icon o_icon-fw o_icon_delete_item");
return true; TrackTableRow row = new TrackTableRow(language, track, delButton);
delButton.setUserObject(row);
return row;
} }
@Override @Override
protected void formOK(UserRequest ureq) { protected void formOK(UserRequest ureq) {
//
} }
@Override @Override
protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) { protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {
if (addButton == source) { if (addButton == source) {
doAddTrack(ureq); doAddTrack(ureq);
}else if (source.getComponent() instanceof Link){ } else if (source instanceof FormLink) {
String lang = rows.get(source.getName()).getLanguage(); FormLink link = (FormLink)source;
videoManager.removeTrack(videoResource, lang); if("deleteTrack".equals(link.getCmd())) {
rows.remove(rows.get(source.getName()).getLanguage()); TrackTableRow row = (TrackTableRow)link.getUserObject();
tableModel.setObjects(new ArrayList<TrackTableRow>(rows.values())); videoManager.removeTrack(videoResource, row.getLanguage());
tableEl.reset(); List<TrackTableRow> rows = tableModel.getObjects();
rows.remove(row);
tableModel.setObjects(rows);
tableEl.reset(true, true, true);
}
} }
} }
@Override @Override
public void event(UserRequest ureq, Controller source, Event event) { public void event(UserRequest ureq, Controller source, Event event) {
if(source == trackUploadForm){ if(source == trackUploadForm) {
rows.put(trackUploadForm.getLang(), new TrackTableRow(trackUploadForm.getLang(), (VFSLeaf) ((FolderEvent) event).getItem(), uifactory.addFormLink(trackUploadForm.getLang(),"deleteTrack", "track.delete", "track.delete", null, Link.BUTTON))); if(event instanceof TrackUploadEvent) {
tableModel.setObjects(new ArrayList<TrackTableRow>(rows.values())); TrackUploadEvent fEvent = (TrackUploadEvent)event;
tableEl.reset(); TrackTableRow row = forgeRow(fEvent.getLang(), fEvent.getTrack());
tableEl.setVisible(true); List<TrackTableRow> rows = tableModel.getObjects();
tableEl.setEnabled(true); rows.add(row);
cmc.deactivate(); tableModel.setObjects(rows);
// cleanup tableEl.reset(true, true, true);
removeAsListenerAndDispose(trackUploadForm); }
removeAsListenerAndDispose(cmc);
} else if(event.getCommand() == "CLOSE_MODAL_EVENT"){
cmc.deactivate(); cmc.deactivate();
// cleanup cleanUp();
removeAsListenerAndDispose(trackUploadForm); } else if(cmc == source){
removeAsListenerAndDispose(cmc); cleanUp();
} }
} }
private void cleanUp() {
removeAsListenerAndDispose(trackUploadForm);
removeAsListenerAndDispose(cmc);
trackUploadForm = null;
cmc = null;
}
private void doAddTrack(UserRequest ureq) { private void doAddTrack(UserRequest ureq) {
trackUploadForm = new VideoTrackUploadForm(ureq, getWindowControl(), videoResource); trackUploadForm = new VideoTrackUploadForm(ureq, getWindowControl(), videoResource);
listenTo(trackUploadForm); listenTo(trackUploadForm);
cmc = new CloseableModalController(getWindowControl(), "close", trackUploadForm.getInitialComponent()); cmc = new CloseableModalController(getWindowControl(), "close", trackUploadForm.getInitialComponent());
listenTo(cmc); listenTo(cmc);
cmc.activate(); cmc.activate();
} }
}
} \ No newline at end of file
...@@ -21,14 +21,10 @@ package org.olat.modules.video.ui; ...@@ -21,14 +21,10 @@ package org.olat.modules.video.ui;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import org.apache.commons.io.FilenameUtils;
import org.olat.core.commons.modules.bc.FolderEvent;
import org.olat.core.gui.UserRequest; import org.olat.core.gui.UserRequest;
import org.olat.core.gui.components.form.flexible.FormItemContainer; import org.olat.core.gui.components.form.flexible.FormItemContainer;
import org.olat.core.gui.components.form.flexible.elements.FileElement; import org.olat.core.gui.components.form.flexible.elements.FileElement;
...@@ -36,9 +32,10 @@ import org.olat.core.gui.components.form.flexible.elements.SingleSelection; ...@@ -36,9 +32,10 @@ import org.olat.core.gui.components.form.flexible.elements.SingleSelection;
import org.olat.core.gui.components.form.flexible.impl.FormBasicController; import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer; import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer;
import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.Controller;
import org.olat.core.gui.control.Event;
import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.WindowControl;
import org.olat.core.util.vfs.Quota;
import org.olat.core.util.vfs.VFSContainer; import org.olat.core.util.vfs.VFSContainer;
import org.olat.core.util.vfs.VFSLeaf;
import org.olat.modules.video.VideoManager; import org.olat.modules.video.VideoManager;
import org.olat.modules.video.manager.VideoManagerImpl; import org.olat.modules.video.manager.VideoManagerImpl;
import org.olat.resource.OLATResource; import org.olat.resource.OLATResource;
...@@ -56,17 +53,11 @@ public class VideoTrackUploadForm extends FormBasicController { ...@@ -56,17 +53,11 @@ public class VideoTrackUploadForm extends FormBasicController {
private FileElement fileEl; private FileElement fileEl;
private SingleSelection langsItem; private SingleSelection langsItem;
private long remainingSpace;
private VFSContainer mediaContainer; private VFSContainer mediaContainer;
@Autowired @Autowired
private VideoManager videoManager; private VideoManager videoManager;
private static final Set<String> trackMimeTypes = new HashSet<String>();
static {
trackMimeTypes.add("text/plain");
}
public VideoTrackUploadForm(UserRequest ureq, WindowControl wControl, OLATResource videoResource) { public VideoTrackUploadForm(UserRequest ureq, WindowControl wControl, OLATResource videoResource) {
super(ureq, wControl); super(ureq, wControl);
mediaContainer = videoManager.getMasterContainer(videoResource); mediaContainer = videoManager.getMasterContainer(videoResource);
...@@ -75,13 +66,10 @@ public class VideoTrackUploadForm extends FormBasicController { ...@@ -75,13 +66,10 @@ public class VideoTrackUploadForm extends FormBasicController {
@Override @Override
protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) { protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
remainingSpace = Quota.UNLIMITED; List<String> langs = new ArrayList<>();
List<String> langs = new ArrayList<String>(); List<String> dispLangs = new ArrayList<>();
List<String> dispLangs = new ArrayList<String>();
for(Locale locale : SimpleDateFormat.getAvailableLocales()){ for(Locale locale : SimpleDateFormat.getAvailableLocales()){
if(locale.hashCode()!=0){ if(locale.hashCode() != 0){
langs.add(locale.getLanguage()); langs.add(locale.getLanguage());
dispLangs.add(locale.getDisplayLanguage(getTranslator().getLocale())); dispLangs.add(locale.getDisplayLanguage(getTranslator().getLocale()));
} }
...@@ -90,47 +78,57 @@ public class VideoTrackUploadForm extends FormBasicController { ...@@ -90,47 +78,57 @@ public class VideoTrackUploadForm extends FormBasicController {
List<String> langsWithoutDup = langs.parallelStream().distinct().collect(Collectors.toList()); List<String> langsWithoutDup = langs.parallelStream().distinct().collect(Collectors.toList());
List<String> dispLangsWithoutDup = dispLangs.parallelStream().distinct().collect(Collectors.toList()); List<String> dispLangsWithoutDup = dispLangs.parallelStream().distinct().collect(Collectors.toList());
langsItem = uifactory.addDropdownSingleselect("track.langs", formLayout, langsWithoutDup.toArray(new String[langsWithoutDup.size()]), dispLangsWithoutDup.toArray(new String[dispLangsWithoutDup.size()]), null); langsItem = uifactory.addDropdownSingleselect("track.langs", formLayout,
langsWithoutDup.toArray(new String[langsWithoutDup.size()]),
dispLangsWithoutDup.toArray(new String[dispLangsWithoutDup.size()]), null);
fileEl = uifactory.addFileElement(getWindowControl(), "track.upload", formLayout); fileEl = uifactory.addFileElement(getWindowControl(), "track.upload", formLayout);
// fileEl.limitToMimeType(trackMimeTypes, "video.config.track.error.type", null);
langsItem.setMandatory(true); langsItem.setMandatory(true);
FormLayoutContainer buttonGroupLayout = FormLayoutContainer.createButtonLayout("buttonGroupLayout", getTranslator()); FormLayoutContainer buttonGroupLayout = FormLayoutContainer.createButtonLayout("buttonGroupLayout", getTranslator());
formLayout.add(buttonGroupLayout); formLayout.add(buttonGroupLayout);
buttonGroupLayout.setElementCssClass("o_sel_upload_buttons"); buttonGroupLayout.setElementCssClass("o_sel_upload_buttons");
uifactory.addFormCancelButton("cancel", buttonGroupLayout, ureq, getWindowControl());
uifactory.addFormSubmitButton("track.upload", buttonGroupLayout); uifactory.addFormSubmitButton("track.upload", buttonGroupLayout);
} }
@Override @Override
protected void formOK(UserRequest ureq) { protected boolean validateFormLogic(UserRequest ureq) {
if ( fileEl.isUploadSuccess()) { boolean allOk = true;
if (remainingSpace != -1) {
if (fileEl.getUploadFile().length() / 1024 > remainingSpace) { fileEl.clearError();
fileEl.setErrorKey("QuotaExceeded", null); if (fileEl.isUploadSuccess()) {
fileEl.getUploadFile().delete(); String filename = fileEl.getUploadFileName();
return; if(!filename.endsWith(VideoManager.FILETYPE_SRT)) {
} fileEl.setErrorKey("track.upload.error.filetype", null);
} else { allOk &= false;
String uploadfilename = VideoManagerImpl.TRACK + langsItem.getSelectedKey() + VideoManagerImpl.DOT
+ FilenameUtils.getExtension(fileEl.getUploadFileName());
fileEl.setUploadFileName(uploadfilename);
fireEvent(ureq, new FolderEvent(FolderEvent.UPLOAD_EVENT, fileEl.moveUploadFileTo(mediaContainer)));
} }
} else { } else {
fileEl.setErrorKey("track.upload.error.nofile", null); fileEl.setErrorKey("track.upload.error.nofile", null);
allOk &= false;
} }
return allOk & super.validateFormLogic(ureq);
} }
@Override
protected String getLang(){ protected void formOK(UserRequest ureq) {
return langsItem.getSelectedKey(); if (fileEl.isUploadSuccess()) {
String uploadfilename = VideoManagerImpl.TRACK + langsItem.getSelectedKey()
+ VideoManager.DOT + VideoManager.FILETYPE_SRT;
fileEl.setUploadFileName(uploadfilename);
VFSLeaf track = fileEl.moveUploadFileTo(mediaContainer);
fireEvent(ureq, new TrackUploadEvent(langsItem.getSelectedKey(), track));
}
} }
@Override
protected void formCancelled(UserRequest ureq) {
fireEvent(ureq, Event.CANCELLED_EVENT);
}
@Override @Override
protected void doDispose() { protected void doDispose() {
// nothing to dispose // nothing to dispose
} }
} }
\ No newline at end of file
...@@ -21,10 +21,8 @@ package org.olat.modules.video.ui; ...@@ -21,10 +21,8 @@ package org.olat.modules.video.ui;
import java.util.Locale; import java.util.Locale;
import org.olat.core.gui.components.form.flexible.FormUIFactory;
import org.olat.core.gui.components.form.flexible.impl.elements.table.DefaultFlexiTableDataModel; import org.olat.core.gui.components.form.flexible.impl.elements.table.DefaultFlexiTableDataModel;
import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableColumnModel; import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableColumnModel;
import org.olat.core.gui.translator.Translator;
/** /**
* table-model for to list de available subtitle-tracks in the metadata * table-model for to list de available subtitle-tracks in the metadata
...@@ -35,16 +33,16 @@ import org.olat.core.gui.translator.Translator; ...@@ -35,16 +33,16 @@ import org.olat.core.gui.translator.Translator;
*/ */
public class VideoTracksTableModel extends DefaultFlexiTableDataModel<TrackTableRow>{ public class VideoTracksTableModel extends DefaultFlexiTableDataModel<TrackTableRow>{
protected FormUIFactory uifactory = FormUIFactory.getInstance(); private final Locale locale;
private Translator translator;
public VideoTracksTableModel(FlexiTableColumnModel columnModel, Translator translator) { public VideoTracksTableModel(FlexiTableColumnModel columnModel, Locale locale) {
super(columnModel); super(columnModel);
this.translator = translator; this.locale = locale;
} }
@Override @Override
public VideoTracksTableModel createCopyWithEmptyList() { public VideoTracksTableModel createCopyWithEmptyList() {
return new VideoTracksTableModel(getTableColumnModel(), translator); return new VideoTracksTableModel(getTableColumnModel(), locale);
} }
...@@ -53,7 +51,7 @@ public class VideoTracksTableModel extends DefaultFlexiTableDataModel<TrackTable ...@@ -53,7 +51,7 @@ public class VideoTracksTableModel extends DefaultFlexiTableDataModel<TrackTable
TrackTableRow track = getObject(row); TrackTableRow track = getObject(row);
switch(TrackTableCols.values()[col]) { switch(TrackTableCols.values()[col]) {
case file: return track.getTrack(); case file: return track.getTrack();
case language: return new Locale(track.getLanguage()).getDisplayLanguage(this.translator.getLocale()); case language: return new Locale(track.getLanguage()).getDisplayLanguage(locale);
case delete: return track.getDeleteLink(); case delete: return track.getDeleteLink();
default: return ""; default: return "";
} }
...@@ -74,5 +72,4 @@ public class VideoTracksTableModel extends DefaultFlexiTableDataModel<TrackTable ...@@ -74,5 +72,4 @@ public class VideoTracksTableModel extends DefaultFlexiTableDataModel<TrackTable
return i18nKey; return i18nKey;
} }
} }
} }
\ No newline at end of file
...@@ -27,7 +27,7 @@ number.transcodings.failed=fehlgeschlagen ...@@ -27,7 +27,7 @@ number.transcodings.failed=fehlgeschlagen
poster.error.filetype=F\u00FCr Poster Bild werden nur Bilder vom Typ JPG unterst\u00FCtzt. poster.error.filetype=F\u00FCr Poster Bild werden nur Bilder vom Typ JPG unterst\u00FCtzt.
poster.help=Bild vom Typ JPG. Bitte \u00FCberpr\u00FCfen Sie, ob das Poster genau die gleiche Aufl\u00F6sung hat wie das Originalvideo (gleiche H\u00F6he und Breite in Pixel). poster.help=Bild vom Typ JPG. Bitte \u00FCberpr\u00FCfen Sie, ob das Poster genau die gleiche Aufl\u00F6sung hat wie das Originalvideo (gleiche H\u00F6he und Breite in Pixel).
poster.select=W\u00E4hlen Sie ein Posterbild aus poster.select=W\u00E4hlen Sie ein Posterbild aus
quality.delete=l\u00F6schen quality.delete=L\u00F6schen
quality.master=Master video quality.master=Master video
quality.resolution.1080=1080p Full-HD quality.resolution.1080=1080p Full-HD
quality.resolution.2160=2160p 4K quality.resolution.2160=2160p 4K
...@@ -70,13 +70,14 @@ topnav.video.alt=Bibliothek mit frei verf\u00FCgbaren Lernvideos ...@@ -70,13 +70,14 @@ topnav.video.alt=Bibliothek mit frei verf\u00FCgbaren Lernvideos
track.delete=L\u00F6schen track.delete=L\u00F6schen
track.langs=Sprache track.langs=Sprache
track.notrack=F\u00FCr dieses Video wurden noch keine Untertitel hinterlegt. W\u00E4hlen Sie den Button "$\:add.track" um Untertiteldateien hinzuzuf\u00FCgen. track.notrack=F\u00FCr dieses Video wurden noch keine Untertitel hinterlegt. W\u00E4hlen Sie den Button "$\:add.track" um Untertiteldateien hinzuzuf\u00FCgen.
track.table.header.delete=l\u00F6schen track.table.header.delete=L\u00F6schen
track.table.header.file=Datei track.table.header.file=Datei
track.table.header.language=Sprache track.table.header.language=Sprache
track.table.label=Untertitel track.table.label=Untertitel
track.upload=Hochladen track.upload=Hochladen
track.upload.error.nofile=Bitte w\u00E4hlen Sie eine Datei aus. track.upload.error.nofile=Bitte w\u00E4hlen Sie eine Datei aus.
track.upload.error.nolang=Bitte w\u00E4hlen Sie eine Sprache aus dieser Liste aus track.upload.error.nolang=Bitte w\u00E4hlen Sie eine Sprache aus dieser Liste aus
track.upload.error.filetype=F\u00FCr Untertitel werden nur Datei vom Typ WebVTT mit dem Endung .srt unterst\u00FCtzt.
transcoding.processing=In Bearbeitung transcoding.processing=In Bearbeitung
transcoding.waiting=In Warteschlange transcoding.waiting=In Warteschlange
transcoding.error=Stammdatei besch\u00E4digt transcoding.error=Stammdatei besch\u00E4digt
...@@ -109,7 +110,7 @@ video.config.track.error.type=nur *.vtt and *.srt Dateien sind erlaubt ...@@ -109,7 +110,7 @@ video.config.track.error.type=nur *.vtt and *.srt Dateien sind erlaubt
video.config.track.table.file=Untertitel Datei video.config.track.table.file=Untertitel Datei
video.config.tracks=Verf\u00FCgbare Untertiteldateien video.config.tracks=Verf\u00FCgbare Untertiteldateien
video.config.tracks.table.add=hinzuf\u00FCgen video.config.tracks.table.add=hinzuf\u00FCgen
video.config.tracks.table.delete=l\u00F6schen video.config.tracks.table.delete=L\u00F6schen
video.config.tracks.table.lang=Sprache video.config.tracks.table.lang=Sprache
video.config.width=Breite video.config.width=Breite
video.contact=Kontakt video.contact=Kontakt
......
...@@ -77,6 +77,7 @@ track.table.label=Subtitles ...@@ -77,6 +77,7 @@ track.table.label=Subtitles
track.upload=Upload track.upload=Upload
track.upload.error.nofile=Please select a file. track.upload.error.nofile=Please select a file.
track.upload.error.nolang=Please select a language form the list track.upload.error.nolang=Please select a language form the list
track.upload.error.filetype=For subtitles only files of type WebVTT with the ending .srt are supported.
transcoding.processing=Processing transcoding.processing=Processing
transcoding.waiting=Queuing transcoding.waiting=Queuing
transcoding.error=Master file damaged transcoding.error=Master file damaged
......
...@@ -78,6 +78,7 @@ track.table.label=Sous-titres ...@@ -78,6 +78,7 @@ track.table.label=Sous-titres
track.upload=T\u00E9l\u00E9charger track.upload=T\u00E9l\u00E9charger
track.upload.error.nofile=Choisissez un fichier s'il vous pla\u00EEt. track.upload.error.nofile=Choisissez un fichier s'il vous pla\u00EEt.
track.upload.error.nolang=Choisissez une langue de la liste track.upload.error.nolang=Choisissez une langue de la liste
track.upload.error.filetype=Pour les sous-titres, seuls les fichiers au format WebVTT avec le suffixe .srt sont support\u00E9s.
transcoding.error=Master endommag\u00E9 transcoding.error=Master endommag\u00E9
transcoding.inefficient=Qualit\u00E9 m\u00E9diocre transcoding.inefficient=Qualit\u00E9 m\u00E9diocre
transcoding.processing=En cours transcoding.processing=En cours
......
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