forked from j62/ctbrec
1
0
Fork 0

Take into account all files of a recording to determine its size

This commit is contained in:
0xb00bface 2021-01-16 15:05:28 +01:00
parent f7b22ff57b
commit 19da3c43bf
2 changed files with 81 additions and 27 deletions

View File

@ -3,6 +3,7 @@ package ctbrec;
import static ctbrec.Recording.State.*; import static ctbrec.Recording.State.*;
import java.io.File; import java.io.File;
import java.io.IOException;
import java.io.Serializable; import java.io.Serializable;
import java.time.Duration; import java.time.Duration;
import java.time.Instant; import java.time.Instant;
@ -13,6 +14,9 @@ import java.util.HashSet;
import java.util.Optional; import java.util.Optional;
import java.util.Set; import java.util.Set;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ctbrec.event.EventBusHolder; import ctbrec.event.EventBusHolder;
import ctbrec.event.RecordingStateChangedEvent; import ctbrec.event.RecordingStateChangedEvent;
import ctbrec.io.IoUtils; import ctbrec.io.IoUtils;
@ -20,6 +24,8 @@ import ctbrec.recorder.download.Download;
import ctbrec.recorder.download.VideoLengthDetector; import ctbrec.recorder.download.VideoLengthDetector;
public class Recording implements Serializable { public class Recording implements Serializable {
private static final transient Logger LOG = LoggerFactory.getLogger(Recording.class);
private String id; private String id;
private Model model; private Model model;
private transient Download download; private transient Download download;
@ -239,20 +245,41 @@ public class Recording implements Serializable {
} }
private long getSize() { private long getSize() {
File rec = getAbsoluteFile(); try {
if (rec.isDirectory()) { Set<File> files = getAllRecordingFiles();
return IoUtils.getDirectorySize(rec); long sum = 0;
for (File file : files) {
if (file.isDirectory()) {
sum += IoUtils.getDirectorySize(file);
} else { } else {
if (!rec.exists()) { if (!file.exists()) {
if (rec.getName().endsWith(".m3u8")) { if (file.getName().endsWith(".m3u8")) {
return IoUtils.getDirectorySize(rec.getParentFile()); sum += IoUtils.getDirectorySize(file.getParentFile());
}
} else { } else {
sum += file.length();
}
}
}
return sum;
} catch (IOException e) {
LOG.error("Couldn't determine recording size", e);
return -1; return -1;
} }
} else {
return rec.length();
} }
private Set<File> getAllRecordingFiles() throws IOException {
Set<File> files = new HashSet<>();
if (absoluteFile != null) {
files.add(absoluteFile.getCanonicalFile());
} }
if (postProcessedFile != null) {
files.add(postProcessedFile.getCanonicalFile());
}
for (String associatedFile : associatedFiles) {
files.add(new File(associatedFile).getCanonicalFile());
}
return files;
} }
public void refresh() { public void refresh() {

View File

@ -1,17 +1,7 @@
package ctbrec.recorder; package ctbrec.recorder;
import com.google.common.eventbus.Subscribe; import static ctbrec.SubsequentAction.*;
import ctbrec.Config; import static ctbrec.event.Event.Type.*;
import ctbrec.Model;
import ctbrec.Recording;
import ctbrec.Recording.State;
import ctbrec.event.*;
import ctbrec.io.HttpClient;
import ctbrec.recorder.download.Download;
import ctbrec.recorder.postprocessing.PostProcessor;
import ctbrec.sites.Site;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
@ -21,14 +11,50 @@ import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException; import java.security.NoSuchAlgorithmException;
import java.time.Instant; import java.time.Instant;
import java.time.ZoneId; import java.time.ZoneId;
import java.util.*; import java.util.ArrayList;
import java.util.concurrent.*; import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.NoSuchElementException;
import java.util.Objects;
import java.util.Optional;
import java.util.UUID;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.Callable;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorCompletionService;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.SynchronousQueue;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.ReentrantLock; import java.util.concurrent.locks.ReentrantLock;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static ctbrec.SubsequentAction.PAUSE; import org.slf4j.Logger;
import static ctbrec.SubsequentAction.REMOVE; import org.slf4j.LoggerFactory;
import static ctbrec.event.Event.Type.MODEL_ONLINE;
import com.google.common.eventbus.Subscribe;
import ctbrec.Config;
import ctbrec.Model;
import ctbrec.Recording;
import ctbrec.Recording.State;
import ctbrec.event.Event;
import ctbrec.event.EventBusHolder;
import ctbrec.event.ModelIsOnlineEvent;
import ctbrec.event.NoSpaceLeftEvent;
import ctbrec.event.RecordingStateChangedEvent;
import ctbrec.io.HttpClient;
import ctbrec.recorder.download.Download;
import ctbrec.recorder.postprocessing.PostProcessor;
import ctbrec.sites.Site;
public class NextGenLocalRecorder implements Recorder { public class NextGenLocalRecorder implements Recorder {
@ -145,6 +171,7 @@ public class NextGenLocalRecorder implements Recorder {
break; break;
} }
} }
recording.refresh();
setRecordingStatus(recording, State.FINISHED); setRecordingStatus(recording, State.FINISHED);
recordingManager.saveRecording(recording); recordingManager.saveRecording(recording);
LOG.info("Post-processing finished for {}", recording.getModel().getName()); LOG.info("Post-processing finished for {}", recording.getModel().getName());