Skip to content
Snippets Groups Projects
Commit bb740a6d authored by Richard Alam's avatar Richard Alam
Browse files

- get metadata xml

parent 38a63427
No related branches found
No related tags found
No related merge requests found
......@@ -65,6 +65,7 @@ val baz = foo1 map { f =>
baz.size
val playback = xml \ "playback"
val extensions = playback \ "extensions"
val preview = extensions \ "preview"
......
package org.bigbluebutton.api2.domain
case class Extensions(extensions: scala.xml.NodeSeq)
object RecMeta {
def getMeetingId(r: RecMeta): String = {
r.meeting match {
case Some(m) => m.externalId
case None => r.id
}
}
def getInternalId(r: RecMeta): Option[String] = {
r.meeting match {
case Some(m) => Some(m.id)
case None => None
}
}
def getMeetingName(r: RecMeta): String = {
r.meeting match {
case Some(m) => m.name
case None =>
r.meta match {
case Some(m) => m.getOrElse("meetingName", "unknown")
case None => "unknown"
}
}
}
}
case class RecMeta(id: String, state: String, published: Boolean, startTime: Long, endTime: Long,
participants: Int, rawSize: Int, meeting: Option[RecMetaMeeting],
meta: Option[Map[String, String]], playback: Option[RecMetaPlayback])
case class RecMetaMeeting(id: String, externalId: String, name: String, breakout: Boolean)
case class RecMetaPlayback(format: String, link: String, processingTime: Int,
duration: Int, size: Int, extensions: Option[scala.xml.NodeSeq])
case class RecMetaImage(width: String, height: String, alt: String, link: String)
case class RecMetaBreakout(parentId: String, sequence: Int, meetingId: String)
\ No newline at end of file
......@@ -2,6 +2,8 @@ package org.bigbluebutton.api2.util
import java.io.IOException
import org.bigbluebutton.api2.domain.{RecMeta, RecMetaBreakout, RecMetaMeeting, RecMetaPlayback}
import scala.xml.{Elem, NodeSeq, XML}
object RecMetaXmlHelper extends LogHelper {
......@@ -21,7 +23,36 @@ object RecMetaXmlHelper extends LogHelper {
}
}
def getExtensions(playbackXml: Elem): Option[NodeSeq] = {
private def getText(elem: NodeSeq, key: String, default: String): String = {
val res = (elem \ key).text
if (res.isEmpty) default else res
}
private def getValInt(elem: NodeSeq, key: String, default: Int): Int = {
val res = (elem \ key).text
if (res.isEmpty) default else res.toInt
}
private def getValLong(elem: NodeSeq, key: String, default: Long): Long = {
val res = (elem \ key).text
if (res.isEmpty) default else res.toLong
}
def getPlayback(metaXml: Elem): Option[RecMetaPlayback] = {
val playback = metaXml \ "playback"
if (playback.isEmpty) None
else {
val format = getText(playback, "format", "unknown")
val link = getText(playback, "link", "unknown")
val processingTime = getValInt(playback, "processing_time", 0)
val duration = getValInt(playback, "duration", 0)
val size = getValInt(playback, "size", 0)
val extensions = getExtensions(playback)
Some(RecMetaPlayback(format, link, processingTime, duration, size, extensions))
}
}
def getExtensions(playbackXml: NodeSeq): Option[NodeSeq] = {
val extensions = playbackXml \ "extensions"
if (extensions.isEmpty) None
else Some(extensions)
......@@ -42,6 +73,58 @@ object RecMetaXmlHelper extends LogHelper {
} else {
None
}
}
def getMeeting(metaXml: Elem): Option[RecMetaMeeting] = {
val meetingNode = (metaXml \ "meeting")
if (meetingNode.isEmpty) {
None
} else {
val meetingElem = meetingNode(0) // convert from Node to Elem
val id = meetingElem.attribute("id").getOrElse("unknown").toString
val externalId = meetingElem.attribute("externalId").getOrElse("unknown").toString
val name = meetingElem.attribute("name").getOrElse("unknown").toString
val breakout = meetingElem.attribute("breakout").getOrElse("false")
Some(RecMetaMeeting(id, externalId, name, breakout.toString.toBoolean))
}
}
def getBreakout(metaXml: Elem): Option[RecMetaBreakout] = {
val breakoutNode = (metaXml \ "breakout")
if (breakoutNode.isEmpty) {
None
} else {
val breakoutElem = breakoutNode(0) // convert from Node to Elem
val parentId = breakoutElem.attribute("parentMeetingId").getOrElse("unknown").toString
val sequence = breakoutElem.attribute("sequence").getOrElse("0").toString
val meetingId = breakoutElem.attribute("meetingId").getOrElse("unknown").toString
Some(RecMetaBreakout(parentId, sequence.toInt, meetingId))
}
}
def getRecMeta(metaXml: Elem): Option[RecMeta] = {
val id = getText(metaXml, "id", "unknown")
val state = getText(metaXml, "state", "unknown")
val published = getText(metaXml, "published", "true")
val startTime = getValLong(metaXml, "start_time", 0)
val endTime = getValLong(metaXml, "end_time", 0)
val rawSize = getValInt(metaXml, "raw_size", 0)
val participants = getValInt(metaXml, "participants", 0)
val meeting = getMeeting(metaXml)
val meta = getMeta(metaXml)
val playback = getPlayback(metaXml)
Some(RecMeta(id, state, published.toString.toBoolean, startTime, endTime, participants, rawSize,
meeting, meta, playback))
}
def getRecMetaXml(r: RecMeta): Elem = {
val recordIdElem = <recordID>{r.id}</recordID>
val meetingIdElem = <meetingID>{RecMeta.getMeetingId(r)}</meetingID>
val internalId = RecMeta.getInternalId(r)
val buffer = new scala.xml.NodeBuffer
}
}
This diff is collapsed.
......@@ -17,6 +17,7 @@
<meetingId>5bd0e35013bc9761d06f01d4bfd9b4ae1c8df289</meetingId>
<gl-listed>false</gl-listed>
</meta>
<breakout parentMeetingId="f3ffe06acedf425565cc024c8ebe89a6552e8782-1489172964374" sequence="2" meetingId="f2041d123b6a4b994e7ad87ee9d348496a73472c-1489173065780"/>
<breakoutRooms>
<breakoutRoom>32ee8bcccfad34f85c58a12f87fc4268130a4fd3-1489173065780</breakoutRoom>
<breakoutRoom>721d83a3907548734d4a505992ebb94ec1454a91-1489173065780</breakoutRoom>
......
......@@ -25,7 +25,47 @@ class RecMetaXmlHelperTests extends UnitSpec {
}
}
it should "get meeting element" in {
val xml = RecMetaXmlHelper.loadMetadataXml(metaFile)
xml match {
case Some(metaXml) =>
RecMetaXmlHelper.getMeeting(metaXml) match {
case Some(meeting) =>
assert(meeting.id == "b27af2f930d418879550e09c7548d1cdd0be25cf-1504122319984")
assert(meeting.breakout == false)
case None => fail("Failed to get meeting element.")
}
case None => fail("Failed to load metadata.xml")
}
}
it should "get playback element" in {
val xml = RecMetaXmlHelper.loadMetadataXml(metaFile)
xml match {
case Some(metaXml) =>
RecMetaXmlHelper.getPlayback(metaXml) match {
case Some(playback) =>
assert(playback.size == 531235)
assert(playback.extensions.isDefined)
case None => fail("Failed to get playback element.")
}
case None => fail("Failed to load metadata.xml")
}
}
it should "get extensions" in {
val xml =
val xml = RecMetaXmlHelper.loadMetadataXml(metaFile)
xml match {
case Some(metaXml) =>
RecMetaXmlHelper.getMeta(metaXml) match {
case Some(meta) =>
assert(meta.size == 8)
case None => fail("Failed to get extensions element.")
}
case None => fail("Failed to load metadata.xml")
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment