Skip to content
Snippets Groups Projects
Commit 691ff10d authored by gnaegi's avatar gnaegi
Browse files

OO-725 make import/export work with description and other repo fields

parent cd41bc99
No related branches found
No related tags found
No related merge requests found
...@@ -40,6 +40,7 @@ import javax.imageio.ImageIO; ...@@ -40,6 +40,7 @@ import javax.imageio.ImageIO;
import org.jcodec.api.FrameGrab; import org.jcodec.api.FrameGrab;
import org.jcodec.common.FileChannelWrapper; import org.jcodec.common.FileChannelWrapper;
import org.olat.core.commons.modules.bc.vfs.OlatRootFolderImpl;
import org.olat.core.commons.services.image.Size; import org.olat.core.commons.services.image.Size;
import org.olat.core.commons.services.taskexecutor.TaskExecutorManager; import org.olat.core.commons.services.taskexecutor.TaskExecutorManager;
import org.olat.core.commons.services.video.MovieService; import org.olat.core.commons.services.video.MovieService;
...@@ -48,6 +49,7 @@ import org.olat.core.logging.Tracing; ...@@ -48,6 +49,7 @@ import org.olat.core.logging.Tracing;
import org.olat.core.util.FileUtils; 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.LocalFolderImpl;
import org.olat.core.util.vfs.VFSContainer; import org.olat.core.util.vfs.VFSContainer;
import org.olat.core.util.vfs.VFSItem; import org.olat.core.util.vfs.VFSItem;
import org.olat.core.util.vfs.VFSLeaf; import org.olat.core.util.vfs.VFSLeaf;
...@@ -60,6 +62,7 @@ import org.olat.modules.video.VideoModule; ...@@ -60,6 +62,7 @@ import org.olat.modules.video.VideoModule;
import org.olat.modules.video.model.VideoMetadata; import org.olat.modules.video.model.VideoMetadata;
import org.olat.modules.video.model.VideoQualityVersion; import org.olat.modules.video.model.VideoQualityVersion;
import org.olat.repository.RepositoryEntry; import org.olat.repository.RepositoryEntry;
import org.olat.repository.RepositoryEntryImportExport;
import org.olat.repository.RepositoryManager; import org.olat.repository.RepositoryManager;
import org.olat.resource.OLATResource; import org.olat.resource.OLATResource;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -73,6 +76,7 @@ import org.springframework.stereotype.Service; ...@@ -73,6 +76,7 @@ import org.springframework.stereotype.Service;
*/ */
@Service("videoManager") @Service("videoManager")
public class VideoManagerImpl implements VideoManager { public class VideoManagerImpl implements VideoManager {
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 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";
...@@ -414,7 +418,12 @@ public class VideoManagerImpl implements VideoManager { ...@@ -414,7 +418,12 @@ public class VideoManagerImpl implements VideoManager {
@Override @Override
public VideoExportMediaResource getVideoExportMediaResource(RepositoryEntry repoEntry) { public VideoExportMediaResource getVideoExportMediaResource(RepositoryEntry repoEntry) {
OLATResource videoResource = repoEntry.getOlatResource(); OLATResource videoResource = repoEntry.getOlatResource();
VFSContainer baseContainer= FileResourceManager.getInstance().getFileResourceRootImpl(videoResource); OlatRootFolderImpl baseContainer= FileResourceManager.getInstance().getFileResourceRootImpl(videoResource);
// 1) dump repo entry metadata to resource folder
LocalFolderImpl repoentryContainer = (LocalFolderImpl)VFSManager.resolveOrCreateContainerFromPath(baseContainer, DIRNAME_REPOENTRY);
RepositoryEntryImportExport importExport = new RepositoryEntryImportExport(repoEntry, repoentryContainer.getBasefile());
importExport.exportDoExportProperties();
// 2) package everything in resource folder to streaming zip resource
VideoExportMediaResource exportResource = new VideoExportMediaResource(baseContainer, repoEntry.getDisplayname()); VideoExportMediaResource exportResource = new VideoExportMediaResource(baseContainer, repoEntry.getDisplayname());
return exportResource; return exportResource;
} }
...@@ -430,6 +439,7 @@ public class VideoManagerImpl implements VideoManager { ...@@ -430,6 +439,7 @@ public class VideoManagerImpl implements VideoManager {
VideoMetadata videoMetadata = (VideoMetadata) XStreamHelper.readObject(XStreamHelper.createXStreamInstance(), metaDataStream); VideoMetadata videoMetadata = (VideoMetadata) XStreamHelper.readObject(XStreamHelper.createXStreamInstance(), metaDataStream);
zipFile.close(); zipFile.close();
if (videoMetadata != null) { if (videoMetadata != null) {
//FIXME:FG load displaytitle from repo.xml
eval.setValid(true); eval.setValid(true);
} }
} catch (Exception e) { } catch (Exception e) {
...@@ -481,22 +491,15 @@ public class VideoManagerImpl implements VideoManager { ...@@ -481,22 +491,15 @@ public class VideoManagerImpl implements VideoManager {
ZipUtil.unzip(exportArchive, baseContainer); ZipUtil.unzip(exportArchive, baseContainer);
exportArchive.delete(); exportArchive.delete();
// 2) update metadata from the repo entry (maybe changed during import // 2) update metadata from the repo entry export
VideoMetadata metaData = readVideoMetadataFile(videoResource); LocalFolderImpl repoentryContainer = (LocalFolderImpl) baseContainer.resolve(DIRNAME_REPOENTRY);
String title = repoEntry.getDisplayname(); if (repoentryContainer != null) {
// boolean dirty = false; RepositoryEntryImportExport importExport = new RepositoryEntryImportExport(repoentryContainer.getBasefile());
// if (title != null && !title.equals(metaData.getTitle())) { importExport.setRepoEntryPropertiesFromImport(repoEntry);
// metaData.setTitle(title); // now delete the import folder, not used anymore
// dirty = true; repoentryContainer.delete();
// } }
// String desc = repoEntry.getDescription();
// if (desc != null && !title.equals(metaData.getDescription())) {
// metaData.setDescription(desc);
// dirty = true;
// }
// if (dirty) {
// writeVideoMetadataFile(metaData, videoResource);
// }
// 3) Set poster image for repo entry // 3) Set poster image for repo entry
VFSContainer masterContainer = getMasterContainer(videoResource); VFSContainer masterContainer = getMasterContainer(videoResource);
VFSLeaf posterImage = (VFSLeaf)masterContainer.resolve(FILENAME_POSTER_JPG); VFSLeaf posterImage = (VFSLeaf)masterContainer.resolve(FILENAME_POSTER_JPG);
......
...@@ -205,7 +205,20 @@ public class RepositoryEntryImportExport { ...@@ -205,7 +205,20 @@ public class RepositoryEntryImportExport {
log.error("", e); log.error("", e);
} }
} }
return setRepoEntryPropertiesFromImport(newEntry);
}
/**
* Update the repo entry property from the current import information in the database
*
* @param newEntry
* @return
*/
public RepositoryEntry setRepoEntryPropertiesFromImport(RepositoryEntry newEntry) {
if(!propertiesLoaded) {
loadConfiguration();
}
RepositoryManager repositoryManager = CoreSpringFactory.getImpl(RepositoryManager.class);
return repositoryManager.setDescriptionAndName(newEntry, newEntry.getDisplayname(), null, return repositoryManager.setDescriptionAndName(newEntry, newEntry.getDisplayname(), null,
repositoryProperties.getAuthors(), repositoryProperties.getDescription(), repositoryProperties.getAuthors(), repositoryProperties.getDescription(),
repositoryProperties.getObjectives(), repositoryProperties.getRequirements(), repositoryProperties.getObjectives(), repositoryProperties.getRequirements(),
......
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