forked from j62/ctbrec
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() {
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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(() -> {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue