diff --git a/src/main/java/com/ddf/vodsystem/dto/ProgressTracker.java b/src/main/java/com/ddf/vodsystem/dto/ProgressTracker.java new file mode 100644 index 0000000..4b2fdd6 --- /dev/null +++ b/src/main/java/com/ddf/vodsystem/dto/ProgressTracker.java @@ -0,0 +1,19 @@ +package com.ddf.vodsystem.dto; + +import lombok.Getter; + +@Getter +public class ProgressTracker { + private float progress; + + public ProgressTracker(float initialProgress) { + this.progress = initialProgress; + } + + public void setProgress(float newProgress) { + if (newProgress < 0 || newProgress > 1) { + throw new IllegalArgumentException("Progress must be between 0 and 1"); + } + this.progress = newProgress; + } +} diff --git a/src/main/java/com/ddf/vodsystem/entities/Job.java b/src/main/java/com/ddf/vodsystem/entities/Job.java index 9c828b6..c97b30f 100644 --- a/src/main/java/com/ddf/vodsystem/entities/Job.java +++ b/src/main/java/com/ddf/vodsystem/entities/Job.java @@ -1,8 +1,8 @@ package com.ddf.vodsystem.entities; import java.io.File; -import java.util.concurrent.atomic.AtomicReference; +import com.ddf.vodsystem.dto.ProgressTracker; import com.ddf.vodsystem.dto.VideoMetadata; import org.springframework.security.core.context.SecurityContext; @@ -23,7 +23,7 @@ public class Job { // job status private JobStatus status = JobStatus.NOT_READY; - private AtomicReference progress = new AtomicReference<>(0f); + private ProgressTracker progress = new ProgressTracker(0.0f); public Job(String uuid, File inputFile, File outputFile, VideoMetadata inputVideoMetadata) { this.uuid = uuid; diff --git a/src/main/java/com/ddf/vodsystem/services/EditService.java b/src/main/java/com/ddf/vodsystem/services/EditService.java index b102cc8..820d921 100644 --- a/src/main/java/com/ddf/vodsystem/services/EditService.java +++ b/src/main/java/com/ddf/vodsystem/services/EditService.java @@ -30,7 +30,7 @@ public class EditService { return 1f; } - return job.getProgress().get(); + return job.getProgress().getProgress(); } private void validateClipConfig(VideoMetadata videoMetadata) { diff --git a/src/main/java/com/ddf/vodsystem/services/FfmpegService.java b/src/main/java/com/ddf/vodsystem/services/FfmpegService.java index e85ca4c..d930c43 100644 --- a/src/main/java/com/ddf/vodsystem/services/FfmpegService.java +++ b/src/main/java/com/ddf/vodsystem/services/FfmpegService.java @@ -1,5 +1,6 @@ package com.ddf.vodsystem.services; +import com.ddf.vodsystem.dto.ProgressTracker; import com.ddf.vodsystem.dto.VideoMetadata; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -11,7 +12,6 @@ import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; -import java.util.concurrent.atomic.AtomicReference; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -24,7 +24,7 @@ public class FfmpegService { private static final float BITRATE_MULTIPLIER = 0.9f; private final Pattern timePattern = Pattern.compile("out_time_ms=(\\d+)"); - public void runWithProgress(File inputFile, File outputFile, VideoMetadata videoMetadata, AtomicReference progress) throws IOException, InterruptedException { + public void runWithProgress(File inputFile, File outputFile, VideoMetadata videoMetadata, ProgressTracker progress) throws IOException, InterruptedException { logger.info("Starting FFMPEG process"); List command = buildCommand(inputFile, outputFile, videoMetadata); @@ -45,7 +45,7 @@ public class FfmpegService { } public void run(File inputFile, File outputFile, VideoMetadata videoMetadata) throws IOException, InterruptedException { - runWithProgress(inputFile, outputFile, videoMetadata, new AtomicReference<>(0f)); + runWithProgress(inputFile, outputFile, videoMetadata, new ProgressTracker(0.0f)); } public void generateThumbnail(File inputFile, File outputFile, Float timeInVideo) throws IOException, InterruptedException { @@ -77,7 +77,7 @@ public class FfmpegService { logger.info("Thumbnail generated successfully at {}", outputFile.getAbsolutePath()); } - private void updateJobProgress(Process process, AtomicReference progress, Float length) throws IOException { + private void updateJobProgress(Process process, ProgressTracker progress, Float length) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); String line; @@ -87,7 +87,7 @@ public class FfmpegService { if (matcher.find()) { Float timeInMs = Float.parseFloat(matcher.group(1)) / 1000000f; - progress.set(timeInMs/length); + progress.setProgress(timeInMs/length); } } }