ADD thumbnail to database (#12)

* ADD thumbnail to database

* ADD thumbnail generation and retrieval functionality

* ADD thumbnail availability check in VideoCard component

* ADD ClipDTO to reduce exposed internals

* REFactor move APIResponse and VideoMetadata to dto package

* REMOVE unused props from VideoCard

* ADD isThumbnailAvailable function
This commit is contained in:
Dylan De Faoite
2025-07-17 23:21:01 +02:00
committed by GitHub
parent 4c49a1daf8
commit 87ad7e3537
26 changed files with 190 additions and 44 deletions

View File

@@ -1,5 +1,6 @@
package com.ddf.vodsystem.services;
import com.ddf.vodsystem.dto.VideoMetadata;
import com.ddf.vodsystem.entities.*;
import java.io.File;
@@ -83,8 +84,20 @@ public class ClipService {
private void persistClip(VideoMetadata videoMetadata, User user, Job job) {
// Move clip from temp to output directory
String fileExtension = directoryService.getFileExtension(job.getOutputFile().getAbsolutePath());
File outputFile = directoryService.getOutputFile(job.getUuid(), fileExtension);
directoryService.copyFile(job.getOutputFile(), outputFile);
File clipOutputDir = directoryService.getUserClipsDir(user.getId());
File clipOutputFile = new File(clipOutputDir, job.getUuid() + "." + fileExtension);
directoryService.copyFile(job.getOutputFile(), clipOutputFile);
File thumbnailOutputDir = directoryService.getUserThumbnailsDir(user.getId());
File thumbnailOutputFile = new File(thumbnailOutputDir, job.getUuid() + ".png");
try {
ffmpegService.generateThumbnail(clipOutputFile, thumbnailOutputFile, 0.0f);
} catch (IOException | InterruptedException e) {
logger.error("Error generating thumbnail for clip: {}", e.getMessage());
Thread.currentThread().interrupt();
}
// Save clip to database
Clip clip = new Clip();
@@ -97,7 +110,8 @@ public class ClipService {
clip.setFps(videoMetadata.getFps());
clip.setDuration(videoMetadata.getEndPoint() - videoMetadata.getStartPoint());
clip.setFileSize(videoMetadata.getFileSize());
clip.setVideoPath(outputFile.getPath());
clip.setVideoPath(clipOutputFile.getPath());
clip.setThumbnailPath(thumbnailOutputFile.getPath());
clipRepository.save(clip);
}