From e3dec420fd56a9db93798e549080a89828d46f5b Mon Sep 17 00:00:00 2001
From: 0xb00bface <0xboobface@gmail.com>
Date: Sun, 9 Apr 2023 19:15:34 +0200
Subject: [PATCH] Only update recordings, if they might have been changed

---
 common/src/main/java/ctbrec/Recording.java    | 34 ++++++++++++-------
 .../ctbrec/recorder/NextGenLocalRecorder.java |  1 +
 2 files changed, 23 insertions(+), 12 deletions(-)

diff --git a/common/src/main/java/ctbrec/Recording.java b/common/src/main/java/ctbrec/Recording.java
index 5c7f821d..20d05f1e 100644
--- a/common/src/main/java/ctbrec/Recording.java
+++ b/common/src/main/java/ctbrec/Recording.java
@@ -1,6 +1,11 @@
 package ctbrec;
 
-import static ctbrec.Recording.State.*;
+import ctbrec.event.EventBusHolder;
+import ctbrec.event.RecordingStateChangedEvent;
+import ctbrec.io.IoUtils;
+import ctbrec.recorder.download.Download;
+import ctbrec.recorder.download.VideoLengthDetector;
+import lombok.extern.slf4j.Slf4j;
 
 import java.io.File;
 import java.io.IOException;
@@ -15,17 +20,10 @@ import java.util.Optional;
 import java.util.Set;
 import java.util.concurrent.Callable;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import ctbrec.event.EventBusHolder;
-import ctbrec.event.RecordingStateChangedEvent;
-import ctbrec.io.IoUtils;
-import ctbrec.recorder.download.Download;
-import ctbrec.recorder.download.VideoLengthDetector;
+import static ctbrec.Recording.State.*;
 
+@Slf4j
 public class Recording implements Serializable, Callable<Recording> {
-    private static final transient Logger LOG = LoggerFactory.getLogger(Recording.class);
 
     private String id;
     private Model model;
@@ -44,6 +42,11 @@ public class Recording implements Serializable, Callable<Recording> {
     private File postProcessedFile = null;
     private int selectedResolution = -1;
 
+    /**
+     * Signals, if the recording has been changed and it has to be refreshed
+     */
+    private boolean dirtyFlag = true;
+
     public enum State {
         RECORDING("recording"),
         GENERATING_PLAYLIST("generating playlist"),
@@ -268,7 +271,7 @@ public class Recording implements Serializable, Callable<Recording> {
             }
             return sum;
         } catch (IOException e) {
-            LOG.error("Couldn't determine recording size", e);
+            log.error("Couldn't determine recording size", e);
             return -1;
         }
     }
@@ -288,7 +291,10 @@ public class Recording implements Serializable, Callable<Recording> {
     }
 
     public void refresh() {
-        sizeInByte = getSize();
+        if ((status != FINISHED && status != FAILED) || dirtyFlag) {
+            sizeInByte = getSize();
+            dirtyFlag = false;
+        }
     }
 
     public boolean canBePostProcessed() {
@@ -309,4 +315,8 @@ public class Recording implements Serializable, Callable<Recording> {
                 .findFirst()
                 .map(File::new);
     }
+
+    public void setDirtyFlag(boolean dirtyFlag) {
+        this.dirtyFlag = dirtyFlag;
+    }
 }
diff --git a/common/src/main/java/ctbrec/recorder/NextGenLocalRecorder.java b/common/src/main/java/ctbrec/recorder/NextGenLocalRecorder.java
index 3cd5f201..5badb613 100644
--- a/common/src/main/java/ctbrec/recorder/NextGenLocalRecorder.java
+++ b/common/src/main/java/ctbrec/recorder/NextGenLocalRecorder.java
@@ -182,6 +182,7 @@ public class NextGenLocalRecorder implements Recorder {
     private void submitPostProcessingJob(Recording recording) {
         ppPool.submit(() -> {
             try {
+                recording.setDirtyFlag(true);
                 setRecordingStatus(recording, State.POST_PROCESSING);
                 recording.getDownload().finalizeDownload();
                 recording.refresh();