- put captions into temporary file to remove race condition between start of processing and writing contents of file.
This commit is contained in:
parent
7f92b58140
commit
a8b6717c94
@ -4,7 +4,8 @@ import java.io.{ File, FileOutputStream, FileWriter, IOException }
|
||||
import java.nio.channels.Channels
|
||||
import java.nio.charset.StandardCharsets
|
||||
import java.util
|
||||
import java.nio.file.{ Paths, Files }
|
||||
import java.nio.file.{ Files, Paths }
|
||||
|
||||
import com.google.gson.Gson
|
||||
import org.bigbluebutton.api.domain.RecordingMetadata
|
||||
import org.bigbluebutton.api2.RecordingServiceGW
|
||||
@ -14,7 +15,6 @@ import scala.xml.{ Elem, PrettyPrinter, XML }
|
||||
import scala.collection.JavaConverters._
|
||||
import scala.collection.mutable.{ Buffer, ListBuffer, Map }
|
||||
import scala.collection.Iterable
|
||||
|
||||
import java.io.IOException
|
||||
import java.nio.charset.Charset
|
||||
import java.nio.file.Files
|
||||
@ -22,6 +22,8 @@ import java.nio.file.Paths
|
||||
|
||||
import com.google.gson.internal.LinkedTreeMap
|
||||
|
||||
import scala.util.Try
|
||||
|
||||
class RecMetaXmlHelper extends RecordingServiceGW with LogHelper {
|
||||
|
||||
val SUCCESS = "SUCCESS"
|
||||
@ -206,7 +208,7 @@ class RecMetaXmlHelper extends RecordingServiceGW with LogHelper {
|
||||
val mapTrack = it.next()
|
||||
list.add(new Track(
|
||||
// TODO : change this later and provide authenticated/signed URLs to fetch the caption files
|
||||
href = captionBaseUrl + mapTrack.get("lang") + ".vtt",
|
||||
href = captionBaseUrl + mapTrack.get("kind") + "_" + mapTrack.get("lang") + ".vtt",
|
||||
kind = mapTrack.get("kind"),
|
||||
label = mapTrack.get("label"),
|
||||
lang = mapTrack.get("lang"),
|
||||
@ -266,18 +268,25 @@ class RecMetaXmlHelper extends RecordingServiceGW with LogHelper {
|
||||
}
|
||||
}
|
||||
|
||||
def mv(oldName: String, newName: String) =
|
||||
Try(new File(oldName).renameTo(new File(newName))).getOrElse(false)
|
||||
|
||||
def saveTrackInfoFile(trackInfoJson: String, trackInfoFilePath: String): Boolean = {
|
||||
// Need to create intermediate file to prevent race where the file is processed before
|
||||
// contents have been written.
|
||||
val tempTrackInfoFilePath = trackInfoFilePath + ".tmp"
|
||||
|
||||
var result = false
|
||||
val fileWriter = new FileWriter(trackInfoFilePath)
|
||||
val fileWriter = new FileWriter(tempTrackInfoFilePath)
|
||||
try {
|
||||
fileWriter.write(trackInfoJson)
|
||||
result = true
|
||||
} catch {
|
||||
case ioe: IOException =>
|
||||
logger.info("Failed to write caption.json {}", trackInfoFilePath)
|
||||
logger.info("Failed to write caption.json {}", tempTrackInfoFilePath)
|
||||
result = false
|
||||
case ex: Exception =>
|
||||
logger.info("Exception while writing {}", trackInfoFilePath)
|
||||
logger.info("Exception while writing {}", tempTrackInfoFilePath)
|
||||
logger.info("Exception details: {}", ex.getMessage)
|
||||
result = false
|
||||
} finally {
|
||||
@ -285,6 +294,11 @@ class RecMetaXmlHelper extends RecordingServiceGW with LogHelper {
|
||||
fileWriter.close()
|
||||
}
|
||||
|
||||
if (result) {
|
||||
// Rename so that the captions processor will pick up the uploaded captions.
|
||||
result = mv(tempTrackInfoFilePath, trackInfoFilePath)
|
||||
}
|
||||
|
||||
result
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user