End cinelab json to ldt xml serializer. Now deserialize edits/mashup.
authorcavaliet
Thu, 08 Nov 2012 15:27:18 +0100
changeset 912 2ad812edbd38
parent 911 9f29dfc4c203
child 914 487fd56607e3
End cinelab json to ldt xml serializer. Now deserialize edits/mashup.
src/ldt/ldt/api/ldt/serializers/cinelabserializer.py
--- 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