32 creator = models.ForeignKey(User, blank=True, null=True, verbose_name=_('media.creator')) |
32 creator = models.ForeignKey(User, blank=True, null=True, verbose_name=_('media.creator')) |
33 description = models.TextField(null=True, blank=True, verbose_name=_('description')) |
33 description = models.TextField(null=True, blank=True, verbose_name=_('description')) |
34 title = models.CharField(max_length=1024, null=True, blank=True, verbose_name=_('title')) |
34 title = models.CharField(max_length=1024, null=True, blank=True, verbose_name=_('title')) |
35 src = models.CharField(max_length=1024, unique=True, verbose_name=_('media.src')) |
35 src = models.CharField(max_length=1024, unique=True, verbose_name=_('media.src')) |
36 |
36 |
|
37 def stream_src(): |
|
38 |
|
39 def fget(self): |
|
40 res_src = self.src.rstrip() |
|
41 if self.videopath and self.videopath.startswith("rtmp://"): |
|
42 extension = res_src.split(".")[-1] |
|
43 res_src = { |
|
44 'flv': lambda s: s, |
|
45 'mp3': lambda s: "%s:%s" %("mp3",res_src[:-4]), |
|
46 'mp4': lambda s: "%s:%s" %("mp4",res_src[:-4]), |
|
47 'f4v': lambda s: "%s:%s" %("mp4",res_src[:-4]), |
|
48 }.get(extension, lambda s:s)(res_src) |
|
49 return res_src |
|
50 stream_src = property(**stream_src()) |
|
51 |
|
52 def save(self, *args, **kwargs): |
|
53 super(Media, self).save(*args, **kwargs) |
|
54 for content in self.content_set.all(): |
|
55 content.sync_iri_file() |
|
56 |
37 def __unicode__(self): |
57 def __unicode__(self): |
38 strings = [] |
58 strings = [] |
39 if self.title: |
59 if self.title: |
40 strings.append(unicode(self.title)) |
60 strings.append(unicode(self.title)) |
41 else: |
61 else: |
42 strings.append(unicode(self.src)) |
62 strings.append(unicode(self.src)) |
43 if self.external_id: |
63 if self.external_id: |
44 strings.append(unicode(self.external_id)) |
64 strings.append(unicode(self.external_id)) |
45 return "|".join(strings) |
65 return "|".join(strings) |
|
66 |
46 |
67 |
47 class Content(models.Model): |
68 class Content(models.Model): |
48 iri_id = models.CharField(max_length=1024, unique=True, default=generate_uuid, verbose_name=_('content.iri_id')) |
69 iri_id = models.CharField(max_length=1024, unique=True, default=generate_uuid, verbose_name=_('content.iri_id')) |
49 iriurl = models.CharField(max_length=1024, verbose_name=_('content.iriurl')) |
70 iriurl = models.CharField(max_length=1024, verbose_name=_('content.iriurl')) |
50 creation_date = models.DateTimeField(auto_now_add=True, verbose_name=_('content.creation_date')) |
71 creation_date = models.DateTimeField(auto_now_add=True, verbose_name=_('content.creation_date')) |
69 super(Content, self).delete() |
90 super(Content, self).delete() |
70 writer = lucene.IndexWriter(STORE, ANALYZER, True, lucene.IndexWriter.MaxFieldLength.UNLIMITED) |
91 writer = lucene.IndexWriter(STORE, ANALYZER, True, lucene.IndexWriter.MaxFieldLength.UNLIMITED) |
71 writer.deleteDocuments(lucene.Term("iri_id", self.iri_id)) |
92 writer.deleteDocuments(lucene.Term("iri_id", self.iri_id)) |
72 writer.commit() |
93 writer.commit() |
73 |
94 |
74 #TODO: better manage the change in .iri name and error scenario (save in temp file + rename |
95 def sync_iri_file(self): |
75 def save(self, *args, **kwargs): |
|
76 |
|
77 # create iri file if needed |
96 # create iri file if needed |
78 created = False |
97 created = False |
79 try: |
98 try: |
80 iri_file_path = self.iri_file_path() |
99 iri_file_path = self.iri_file_path() |
81 if not os.path.exists(iri_file_path): |
100 if not os.path.exists(iri_file_path): |
93 if created: |
112 if created: |
94 if os.path.exists(iri_file_path): |
113 if os.path.exists(iri_file_path): |
95 os.remove(iri_file_path) |
114 os.remove(iri_file_path) |
96 raise e |
115 raise e |
97 |
116 |
|
117 |
|
118 #TODO: better manage the change in .iri name and error scenario (save in temp file + rename |
|
119 def save(self, *args, **kwargs): |
|
120 |
|
121 self.sync_iri_file() |
98 # update it |
122 # update it |
99 super(Content, self).save(*args, **kwargs) |
123 super(Content, self).save(*args, **kwargs) |
100 |
124 |
101 def __unicode__(self): |
125 def __unicode__(self): |
102 return str(self.id) + ": " + self.iri_id |
126 return str(self.id) + ": " + self.iri_id |