Fix remaining problems with remote recording
This commit is contained in:
parent
a41223397d
commit
ebe9d0cf5e
|
@ -96,9 +96,6 @@ public class Recording {
|
||||||
}
|
}
|
||||||
|
|
||||||
public long getSizeInByte() {
|
public long getSizeInByte() {
|
||||||
if (sizeInByte == -1 || getStatus() == State.RECORDING) {
|
|
||||||
this.sizeInByte = getSize();
|
|
||||||
}
|
|
||||||
return sizeInByte;
|
return sizeInByte;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -151,9 +148,9 @@ public class Recording {
|
||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
final int prime = 31;
|
final int prime = 31;
|
||||||
int result = 1;
|
int result = 1;
|
||||||
result = prime * result + ((getModel() == null) ? 0 : getModel().hashCode());
|
result = prime * result + ((getStartDate() == null) ? 0 : (int) (getStartDate().toEpochMilli() ^ (getStartDate().toEpochMilli() >>> 32)));
|
||||||
result = prime * result + ((getPath() == null) ? 0 : getPath().hashCode());
|
result = prime * result + ((model == null) ? 0 : model.hashCode());
|
||||||
result = prime * result + ((getStartDate() == null) ? 0 : getStartDate().hashCode());
|
result = prime * result + ((path == null) ? 0 : path.hashCode());
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -168,20 +165,26 @@ public class Recording {
|
||||||
}
|
}
|
||||||
Recording other = (Recording) obj;
|
Recording other = (Recording) obj;
|
||||||
if (getModel() == null) {
|
if (getModel() == null) {
|
||||||
if (other.getModel() != null)
|
if (other.getModel() != null) {
|
||||||
return false;
|
return false;
|
||||||
} else if (!getModel().equals(other.getModel()))
|
}
|
||||||
|
} else if (!getModel().equals(other.getModel())) {
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
if (getPath() == null) {
|
if (getPath() == null) {
|
||||||
if (other.getPath() != null)
|
if (other.getPath() != null) {
|
||||||
return false;
|
return false;
|
||||||
} else if (!getPath().equals(other.getPath()))
|
}
|
||||||
|
} else if (!getPath().equals(other.getPath())) {
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
if (getStartDate() == null) {
|
if (getStartDate() == null) {
|
||||||
if (other.getStartDate() != null)
|
if (other.getStartDate() != null) {
|
||||||
return false;
|
return false;
|
||||||
} else if (!getStartDate().equals(other.getStartDate()))
|
}
|
||||||
|
} else if (getStartDate().toEpochMilli() != other.getStartDate().toEpochMilli()) {
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -205,4 +208,8 @@ public class Recording {
|
||||||
return rec.length();
|
return rec.length();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void refresh() {
|
||||||
|
sizeInByte = getSize();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -232,7 +232,7 @@ public class NextGenLocalRecorder implements Recorder {
|
||||||
rec.setDownload(download);
|
rec.setDownload(download);
|
||||||
rec.setPath(download.getPath(model));
|
rec.setPath(download.getPath(model));
|
||||||
rec.setModel(model);
|
rec.setModel(model);
|
||||||
rec.setStartDate(Instant.now());
|
rec.setStartDate(Instant.ofEpochMilli(System.currentTimeMillis()));
|
||||||
recordingProcesses.put(model, rec);
|
recordingProcesses.put(model, rec);
|
||||||
recordingManager.add(rec);
|
recordingManager.add(rec);
|
||||||
completionService.submit(() -> {
|
completionService.submit(() -> {
|
||||||
|
|
|
@ -122,6 +122,10 @@ public class RecordingManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void delete(Recording recording) throws IOException {
|
public void delete(Recording recording) throws IOException {
|
||||||
|
for (Recording rec : recordings) {
|
||||||
|
LOG.debug(rec.toString() + " " + rec.getPath() + " " + recording.equals(rec));
|
||||||
|
}
|
||||||
|
|
||||||
int idx = recordings.indexOf(recording);
|
int idx = recordings.indexOf(recording);
|
||||||
recording = recordings.get(idx);
|
recording = recordings.get(idx);
|
||||||
|
|
||||||
|
@ -150,6 +154,9 @@ public class RecordingManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<Recording> getAll() {
|
public List<Recording> getAll() {
|
||||||
|
for (Recording recording : recordings) {
|
||||||
|
recording.refresh();
|
||||||
|
}
|
||||||
return new ArrayList<>(recordings);
|
return new ArrayList<>(recordings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -22,7 +22,6 @@ import ctbrec.Config;
|
||||||
import ctbrec.Hmac;
|
import ctbrec.Hmac;
|
||||||
import ctbrec.Model;
|
import ctbrec.Model;
|
||||||
import ctbrec.Recording;
|
import ctbrec.Recording;
|
||||||
import ctbrec.UnknownModel;
|
|
||||||
import ctbrec.event.EventBusHolder;
|
import ctbrec.event.EventBusHolder;
|
||||||
import ctbrec.event.RecordingStateChangedEvent;
|
import ctbrec.event.RecordingStateChangedEvent;
|
||||||
import ctbrec.io.HttpClient;
|
import ctbrec.io.HttpClient;
|
||||||
|
@ -283,9 +282,8 @@ public class RemoteRecorder implements Recorder {
|
||||||
Recording newRecording = newRecordings.get(idx);
|
Recording newRecording = newRecordings.get(idx);
|
||||||
if(newRecording.getStatus() != recording.getStatus()) {
|
if(newRecording.getStatus() != recording.getStatus()) {
|
||||||
File file = new File(recording.getPath());
|
File file = new File(recording.getPath());
|
||||||
Model m = new UnknownModel();
|
RecordingStateChangedEvent evt = new RecordingStateChangedEvent(file,
|
||||||
m.setName(newRecording.getModel().getName());
|
newRecording.getStatus(), recording.getModel(), recording.getStartDate());
|
||||||
RecordingStateChangedEvent evt = new RecordingStateChangedEvent(file, newRecording.getStatus(), m, recording.getStartDate());
|
|
||||||
EventBusHolder.BUS.post(evt);
|
EventBusHolder.BUS.post(evt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -184,23 +184,26 @@ public class HlsDownload extends AbstractHlsDownload {
|
||||||
@Override
|
@Override
|
||||||
public void postprocess(Recording recording) {
|
public void postprocess(Recording recording) {
|
||||||
recording.setStatusWithEvent(State.GENERATING_PLAYLIST, true);
|
recording.setStatusWithEvent(State.GENERATING_PLAYLIST, true);
|
||||||
generatePlaylist(recording.getAbsoluteFile());
|
generatePlaylist(recording);
|
||||||
recording.setStatusWithEvent(State.POST_PROCESSING, true);
|
recording.setStatusWithEvent(State.POST_PROCESSING, true);
|
||||||
super.postprocess(recording);
|
super.postprocess(recording);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void generatePlaylist(File recDir) {
|
private void generatePlaylist(Recording recording) {
|
||||||
|
File recDir = recording.getAbsoluteFile();
|
||||||
if(!config.getSettings().generatePlaylist) {
|
if(!config.getSettings().generatePlaylist) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
PlaylistGenerator playlistGenerator = new PlaylistGenerator();
|
PlaylistGenerator playlistGenerator = new PlaylistGenerator();
|
||||||
|
playlistGenerator.addProgressListener(percent -> recording.setProgress(percent));
|
||||||
|
|
||||||
try {
|
try {
|
||||||
File playlist = playlistGenerator.generate(recDir);
|
File playlist = playlistGenerator.generate(recDir);
|
||||||
if(playlist != null) {
|
if(playlist != null) {
|
||||||
playlistGenerator.validate(recDir);
|
playlistGenerator.validate(recDir);
|
||||||
}
|
}
|
||||||
|
recording.setProgress(-1);
|
||||||
} catch (IOException | ParseException e) {
|
} catch (IOException | ParseException e) {
|
||||||
LOG.error("Couldn't generate playlist file", e);
|
LOG.error("Couldn't generate playlist file", e);
|
||||||
} catch (PlaylistException e) {
|
} catch (PlaylistException e) {
|
||||||
|
|
|
@ -44,8 +44,9 @@ public class RecorderServlet extends AbstractCtbrecServlet {
|
||||||
resp.setStatus(SC_OK);
|
resp.setStatus(SC_OK);
|
||||||
resp.setContentType("application/json");
|
resp.setContentType("application/json");
|
||||||
|
|
||||||
|
String json = null;
|
||||||
try {
|
try {
|
||||||
String json = body(req);
|
json = body(req);
|
||||||
boolean isRequestAuthenticated = checkAuthentication(req, json);
|
boolean isRequestAuthenticated = checkAuthentication(req, json);
|
||||||
if (!isRequestAuthenticated) {
|
if (!isRequestAuthenticated) {
|
||||||
resp.setStatus(SC_UNAUTHORIZED);
|
resp.setStatus(SC_UNAUTHORIZED);
|
||||||
|
@ -112,7 +113,9 @@ public class RecorderServlet extends AbstractCtbrecServlet {
|
||||||
List<Recording> recordings = recorder.getRecordings();
|
List<Recording> recordings = recorder.getRecordings();
|
||||||
for (Iterator<Recording> iterator = recordings.iterator(); iterator.hasNext();) {
|
for (Iterator<Recording> iterator = recordings.iterator(); iterator.hasNext();) {
|
||||||
Recording recording = iterator.next();
|
Recording recording = iterator.next();
|
||||||
resp.getWriter().write(recAdapter.toJson(recording));
|
String recJSON = recAdapter.toJson(recording);
|
||||||
|
LOG.debug("Rec: {}", recJSON);
|
||||||
|
resp.getWriter().write(recJSON);
|
||||||
if (iterator.hasNext()) {
|
if (iterator.hasNext()) {
|
||||||
resp.getWriter().write(',');
|
resp.getWriter().write(',');
|
||||||
}
|
}
|
||||||
|
@ -169,6 +172,9 @@ public class RecorderServlet extends AbstractCtbrecServlet {
|
||||||
String response = "{\"status\": \"error\", \"msg\": \"An unexpected error occured\"}";
|
String response = "{\"status\": \"error\", \"msg\": \"An unexpected error occured\"}";
|
||||||
resp.getWriter().write(response);
|
resp.getWriter().write(response);
|
||||||
LOG.error("Unexpected error", t);
|
LOG.error("Unexpected error", t);
|
||||||
|
if (json != null) {
|
||||||
|
LOG.debug("Request: {}", json);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue