in src/main/java/com/aws/iot/edgeconnectorforkvs/videouploader/callback/UploadCallBack.java [82:119]
private void updateVideoFileStatus(Long timecodeMs) {
boolean isFileUploaded = false;
ListIterator<VideoFile> videoFileIter = videoFiles.listIterator(videoFiles.size());
while (videoFileIter.hasPrevious()) {
VideoFile videoFile = videoFileIter.previous();
if (videoFile.getVideoDate().before(new Date(timecodeMs))) {
if (uploadingFile != null && uploadingFile != videoFile) {
/* When we upload different file, it means the previous one has been uploaded. */
isFileUploaded = true;
uploadedFile = uploadingFile;
uploadedFile.setUploaded(true);
VideoRecordVisitor.markVideoAsUploaded(uploadedFile);
}
uploadingFile = videoFile;
if (isFileUploaded) {
/* Check if any earlier video hasn't been marked as uploaded. It happened when we merge a video
* file that doesn't have any valid fragment. For example, there are videos to be uploaded:
* video_100.mkv,
* video_200.mkv,
* video_300.mkv.
* We may get ACK of fragment timecode 201 and 301. In this case, we need a forward search to
* mark video_100.mkv as an uploaded one.
* */
while (videoFileIter.hasPrevious()) {
VideoFile earlierVideoFile = videoFileIter.previous();
if (!earlierVideoFile.isUploaded()) {
earlierVideoFile.setUploaded(true);
VideoRecordVisitor.markVideoAsUploaded(earlierVideoFile);
update(timecodeMs, earlierVideoFile);
}
}
}
break;
}
}
}