forked from j62/ctbrec
Take into account all files of a recording to determine its size
This commit is contained in:
parent
f7b22ff57b
commit
19da3c43bf
|
@ -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() {
|
||||||
|
|
|
@ -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());
|
||||||
|
|
Loading…
Reference in New Issue