forked from j62/ctbrec
1
0
Fork 0

Fix remaining problems with remote recording

This commit is contained in:
0xboobface 2019-06-01 15:33:47 +02:00
parent a41223397d
commit ebe9d0cf5e
6 changed files with 44 additions and 23 deletions

View File

@ -96,9 +96,6 @@ public class Recording {
}
public long getSizeInByte() {
if (sizeInByte == -1 || getStatus() == State.RECORDING) {
this.sizeInByte = getSize();
}
return sizeInByte;
}
@ -151,9 +148,9 @@ public class Recording {
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((getModel() == null) ? 0 : getModel().hashCode());
result = prime * result + ((getPath() == null) ? 0 : getPath().hashCode());
result = prime * result + ((getStartDate() == null) ? 0 : getStartDate().hashCode());
result = prime * result + ((getStartDate() == null) ? 0 : (int) (getStartDate().toEpochMilli() ^ (getStartDate().toEpochMilli() >>> 32)));
result = prime * result + ((model == null) ? 0 : model.hashCode());
result = prime * result + ((path == null) ? 0 : path.hashCode());
return result;
}
@ -168,20 +165,26 @@ public class Recording {
}
Recording other = (Recording) obj;
if (getModel() == null) {
if (other.getModel() != null)
if (other.getModel() != null) {
return false;
} else if (!getModel().equals(other.getModel()))
}
} else if (!getModel().equals(other.getModel())) {
return false;
}
if (getPath() == null) {
if (other.getPath() != null)
if (other.getPath() != null) {
return false;
} else if (!getPath().equals(other.getPath()))
}
} else if (!getPath().equals(other.getPath())) {
return false;
}
if (getStartDate() == null) {
if (other.getStartDate() != null)
if (other.getStartDate() != null) {
return false;
} else if (!getStartDate().equals(other.getStartDate()))
}
} else if (getStartDate().toEpochMilli() != other.getStartDate().toEpochMilli()) {
return false;
}
return true;
}
@ -205,4 +208,8 @@ public class Recording {
return rec.length();
}
}
public void refresh() {
sizeInByte = getSize();
}
}

View File

@ -232,7 +232,7 @@ public class NextGenLocalRecorder implements Recorder {
rec.setDownload(download);
rec.setPath(download.getPath(model));
rec.setModel(model);
rec.setStartDate(Instant.now());
rec.setStartDate(Instant.ofEpochMilli(System.currentTimeMillis()));
recordingProcesses.put(model, rec);
recordingManager.add(rec);
completionService.submit(() -> {

View File

@ -122,6 +122,10 @@ public class RecordingManager {
}
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);
recording = recordings.get(idx);
@ -150,6 +154,9 @@ public class RecordingManager {
}
public List<Recording> getAll() {
for (Recording recording : recordings) {
recording.refresh();
}
return new ArrayList<>(recordings);
}

View File

@ -22,7 +22,6 @@ import ctbrec.Config;
import ctbrec.Hmac;
import ctbrec.Model;
import ctbrec.Recording;
import ctbrec.UnknownModel;
import ctbrec.event.EventBusHolder;
import ctbrec.event.RecordingStateChangedEvent;
import ctbrec.io.HttpClient;
@ -283,9 +282,8 @@ public class RemoteRecorder implements Recorder {
Recording newRecording = newRecordings.get(idx);
if(newRecording.getStatus() != recording.getStatus()) {
File file = new File(recording.getPath());
Model m = new UnknownModel();
m.setName(newRecording.getModel().getName());
RecordingStateChangedEvent evt = new RecordingStateChangedEvent(file, newRecording.getStatus(), m, recording.getStartDate());
RecordingStateChangedEvent evt = new RecordingStateChangedEvent(file,
newRecording.getStatus(), recording.getModel(), recording.getStartDate());
EventBusHolder.BUS.post(evt);
}
}

View File

@ -184,23 +184,26 @@ public class HlsDownload extends AbstractHlsDownload {
@Override
public void postprocess(Recording recording) {
recording.setStatusWithEvent(State.GENERATING_PLAYLIST, true);
generatePlaylist(recording.getAbsoluteFile());
generatePlaylist(recording);
recording.setStatusWithEvent(State.POST_PROCESSING, true);
super.postprocess(recording);
}
private void generatePlaylist(File recDir) {
private void generatePlaylist(Recording recording) {
File recDir = recording.getAbsoluteFile();
if(!config.getSettings().generatePlaylist) {
return;
}
PlaylistGenerator playlistGenerator = new PlaylistGenerator();
playlistGenerator.addProgressListener(percent -> recording.setProgress(percent));
try {
File playlist = playlistGenerator.generate(recDir);
if(playlist != null) {
playlistGenerator.validate(recDir);
}
recording.setProgress(-1);
} catch (IOException | ParseException e) {
LOG.error("Couldn't generate playlist file", e);
} catch (PlaylistException e) {

View File

@ -44,10 +44,11 @@ public class RecorderServlet extends AbstractCtbrecServlet {
resp.setStatus(SC_OK);
resp.setContentType("application/json");
String json = null;
try {
String json = body(req);
json = body(req);
boolean isRequestAuthenticated = checkAuthentication(req, json);
if(!isRequestAuthenticated) {
if (!isRequestAuthenticated) {
resp.setStatus(SC_UNAUTHORIZED);
String response = "{\"status\": \"error\", \"msg\": \"HMAC does not match\"}";
resp.getWriter().write(response);
@ -61,7 +62,7 @@ public class RecorderServlet extends AbstractCtbrecServlet {
.build();
JsonAdapter<Request> requestAdapter = moshi.adapter(Request.class);
Request request = requestAdapter.fromJson(json);
if(request.action != null) {
if (request.action != null) {
switch (request.action) {
case "start":
LOG.debug("Starting recording for model {} - {}", request.model.getName(), request.model.getUrl());
@ -112,7 +113,9 @@ public class RecorderServlet extends AbstractCtbrecServlet {
List<Recording> recordings = recorder.getRecordings();
for (Iterator<Recording> iterator = recordings.iterator(); iterator.hasNext();) {
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()) {
resp.getWriter().write(',');
}
@ -169,6 +172,9 @@ public class RecorderServlet extends AbstractCtbrecServlet {
String response = "{\"status\": \"error\", \"msg\": \"An unexpected error occured\"}";
resp.getWriter().write(response);
LOG.error("Unexpected error", t);
if (json != null) {
LOG.debug("Request: {}", json);
}
}
}