--- a/src/ldt/ldt/api/ldt/serializers/cinelabserializer.py Wed Nov 07 17:52:14 2012 +0100
+++ b/src/ldt/ldt/api/ldt/serializers/cinelabserializer.py Thu Nov 08 15:27:18 2012 +0100
@@ -7,6 +7,7 @@
from ldt.ldt_utils.utils import generate_uuid
from tastypie.serializers import Serializer
from tastypie.exceptions import NotFound
+import math
import lxml.etree
import logging
@@ -94,6 +95,10 @@
tag_dict = {t["id"]:t["meta"]["dc:title"] for t in cinelab["tags"]}
# We'll also build a annotation-type to media/ensemble dict to simplify the views node building
at_media_dict = {}
+ # We'll also build a dict from annotation id to media/ensemble/decoupage dict to simplify the edits/mashup node building
+ annot_ids_dict = {}
+ # We'll also build a dict from media id to media url dict to simplify the edits/mashup node building
+ media_url_dict = {}
# create a dom
iri = lxml.etree.Element('iri')
@@ -117,8 +122,10 @@
mediaNode.set('src', content.iri_url())
if content.videopath != None :
mediaNode.set('video', content.videopath)
+ media_url_dict[iri_id] = {'url':content.videopath + content.src, 'pos':None}
else:
mediaNode.set('video', settings.STREAM_URL)
+ media_url_dict[iri_id] = {'url':settings.STREAM_URL + content.src, 'pos':None}
mediaNode.set('pict', "")
mediaNode.set('extra', "")
# We add the annotations
@@ -153,6 +160,7 @@
# We get all the annotations for this media and this annotation-type
for a in annotations:
if a["media"]==iri_id and a["meta"]["id-ref"]==at_id:
+ annot_ids_dict[a["id"]] = (iri_id, l["id"], at_id, a["begin"], a["end"], a["color"])
elementNode = lxml.etree.SubElement(elementsNode, 'element')
elementNode.set('id', a["id"])
elementNode.set('begin', str(a["begin"]))
@@ -216,6 +224,69 @@
id_sel = ""
displayNode.set('idsel', id_sel)
+ # Now we build the edit node
+ editsNode = lxml.etree.SubElement(iri, 'edits')
+ i = 0
+ for l in cinelab["lists"]:
+ if l["meta"].has_key("listtype"):
+ if l["meta"]["listtype"]=="mashup":
+ editingNode = lxml.etree.SubElement(editsNode, 'editing')
+ editingNode.set('id', str(i))
+ i += 1
+ editingNode.set('tags', "")
+ titleEd = lxml.etree.SubElement(editingNode, 'title')
+ titleEd.text = l["meta"]["dc:title"]
+ abstractEd = lxml.etree.SubElement(editingNode, 'abstract')
+ abstractEd.text = l["meta"]["dc:description"]
+ editNode = lxml.etree.SubElement(editingNode, 'edit')
+ editNode.set('id', "edit1")
+ editNode.set('tags', "")
+ # We build the 4 nodes (2 are used in reality : edit list and media list
+ eListNode = lxml.etree.SubElement(editNode, 'eList')
+ lxml.etree.SubElement(editNode, 'caption')
+ lxml.etree.SubElement(editNode, 'audio')
+ mListNode = lxml.etree.SubElement(editNode, 'mList')
+ media_pos = 0
+ edit_fulltime = 0
+ for a_id in l["items"]:
+ # the key is the annotation's id
+ iri_id, ens_id, at_id, begin, end, color = annot_ids_dict[a_id]
+ # We check the media's position in media list. If it was not set, we create the mList node
+ if media_url_dict[iri_id]["pos"] is None:
+ media_url_dict[iri_id]["pos"] = media_pos
+ mNode = lxml.etree.SubElement(mListNode, 'm')
+ mNode.set('ref', iri_id)
+ mNode.set('id', str(media_pos))
+ media_pos += 1
+ mNode.set('t', "v")
+ mNode.set('c', color)
+ contentEd = lxml.etree.SubElement(mNode, 'content')
+ contentEd.text = media_url_dict[iri_id]["url"]
+ # We add the annotation/instruction to the eList
+ instNode = lxml.etree.SubElement(eListNode, 'inst')
+ instNode.set('ref', iri_id + "|;|" + ens_id + "|;|" + at_id + "|;||;||;|" + a_id)
+ b = int(math.floor(begin/1000))
+ instNode.set('begin', str(b))
+ e = int(math.floor(end/1000))
+ instNode.set('end', str(e))
+ instNode.set('m', str(media_url_dict[iri_id]["pos"]))
+ instNode.set('v', "100")
+ instNode.set('eBegin', str(edit_fulltime))
+ edit_fulltime = edit_fulltime + e - b
+ instNode.set('eEnd', str(edit_fulltime))
+ instNode.set('trId', "0")
+ instNode.set('trIc', "0")
+ instNode.set('trOd', "0")
+ instNode.set('trOc', "0")
+ # The second empty edit
+ edit2Node = lxml.etree.SubElement(editingNode, 'edit')
+ edit2Node.set('id', "edit2")
+ edit2Node.set('tags', "")
+ lxml.etree.SubElement(edit2Node, 'eList')
+ lxml.etree.SubElement(edit2Node, 'caption')
+ lxml.etree.SubElement(edit2Node, 'audio')
+ lxml.etree.SubElement(edit2Node, 'mList')
+
# This is the end
return iri
\ No newline at end of file