diff --git a/common/src/main/java/ctbrec/Recording.java b/common/src/main/java/ctbrec/Recording.java index b61b3e47..9d9be0eb 100644 --- a/common/src/main/java/ctbrec/Recording.java +++ b/common/src/main/java/ctbrec/Recording.java @@ -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(); + } } diff --git a/common/src/main/java/ctbrec/recorder/NextGenLocalRecorder.java b/common/src/main/java/ctbrec/recorder/NextGenLocalRecorder.java index 22c55a75..597e9cd4 100644 --- a/common/src/main/java/ctbrec/recorder/NextGenLocalRecorder.java +++ b/common/src/main/java/ctbrec/recorder/NextGenLocalRecorder.java @@ -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(() -> { diff --git a/common/src/main/java/ctbrec/recorder/RecordingManager.java b/common/src/main/java/ctbrec/recorder/RecordingManager.java index b75f654b..968ae0c0 100644 --- a/common/src/main/java/ctbrec/recorder/RecordingManager.java +++ b/common/src/main/java/ctbrec/recorder/RecordingManager.java @@ -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 getAll() { + for (Recording recording : recordings) { + recording.refresh(); + } return new ArrayList<>(recordings); } diff --git a/common/src/main/java/ctbrec/recorder/RemoteRecorder.java b/common/src/main/java/ctbrec/recorder/RemoteRecorder.java index 0595aa3b..4dd6cb51 100644 --- a/common/src/main/java/ctbrec/recorder/RemoteRecorder.java +++ b/common/src/main/java/ctbrec/recorder/RemoteRecorder.java @@ -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); } } diff --git a/common/src/main/java/ctbrec/recorder/download/HlsDownload.java b/common/src/main/java/ctbrec/recorder/download/HlsDownload.java index 38b28a9a..2f72bb75 100644 --- a/common/src/main/java/ctbrec/recorder/download/HlsDownload.java +++ b/common/src/main/java/ctbrec/recorder/download/HlsDownload.java @@ -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) { diff --git a/server/src/main/java/ctbrec/recorder/server/RecorderServlet.java b/server/src/main/java/ctbrec/recorder/server/RecorderServlet.java index c2aca727..e5500147 100644 --- a/server/src/main/java/ctbrec/recorder/server/RecorderServlet.java +++ b/server/src/main/java/ctbrec/recorder/server/RecorderServlet.java @@ -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 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 recordings = recorder.getRecordings(); for (Iterator 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); + } } }