seminar.status = 1
seminar.save()
- collections = MediaCollection.objects.filter(code=collection_id)
- if not collections:
- collection = MediaCollection(code=collection_id,title=collection_id)
- collection.save()
- else:
- collection = collections[0]
-
- id = '_'.join([period.name, self.id_incr, collection_id, ext, str(media_rank)])
- item = self.get_item(collection, id)
- item.title = name
-
- id_webm = '_'.join([period.name, self.id_incr, collection_id, 'webm', str(media_rank)])
- items_webm = MediaItem.objects.filter(collection=collection, code=id_webm)
-
-
# cleanup old media
for media in seminar.medias.all():
- if not period.name in media.item.code:
- seminar.medias.remove(media)
+ seminar.medias.remove(media)
- if not item.file == path and not items_webm:
- logger.logger.info(seminar.public_url())
- logger.logger.info(path)
- if not seminar in seminars:
- seminars.append(seminar)
-
- item.file = path
- if os.path.getsize(root+os.sep+filename):
- item.approx_duration = self.get_duration(root+os.sep+filename)
- item.save()
-
- files = os.listdir(root)
- for file in files:
- r_path = dir + os.sep + file
- filename, extension = os.path.splitext(file)
- if extension[1:] in self.image_formats:
- related, c = MediaItemRelated.objects.get_or_create(item=item, file=r_path)
- related.title = 'preview'
- related.set_mime_type()
- related.save()
- logger.logger.info(r_path)
- elif extension[1:] in self.transcoded_formats and not extension[1:] in self.original_format:
- t, c = MediaItemTranscoded.objects.get_or_create(item=item, file=r_path)
- logger.logger.info(r_path)
- elif extension[1:] == 'kdenlive':
- related, c = MediaItemRelated.objects.get_or_create(item=item, file=r_path)
- title, markers = related.parse_markers(from_first_marker=False)
- item.title = title
- item.save()
- logger.logger.info(r_path)
-
- media, c = Media.objects.get_or_create(item=item, course=course, type=ext)
- if c:
- media.set_mime_type()
- media.rank = media_rank
- media.is_published = True
- media.save()
-
- if not media in seminar.medias.all():
- seminar.medias.add(media)
-
- # import previews
- if preview_trigger:
- dir = os.path.abspath(root + '/../preview/' + str(seminar_rank))
- if os.path.exists(dir):
- r_dir = os.sep.join(dir.split(os.sep)[-7:])
- files = os.listdir(dir)
- if files and seminar.media_preview:
- seminar.media_preview.delete()
- code = item.code + '_preview'
- title = item.title + ' (preview)'
- item = self.get_item(collection, code)
- item.title = title
- item.save()
- for file in files:
- r_path = r_dir + os.sep + file
- filename, extension = os.path.splitext(file)
- if extension[1:] in self.original_format and not '.' == filename[0]:
- item.file = r_path
- if os.path.getsize(dir+os.sep+file):
- item.approx_duration = self.get_duration(dir+os.sep+file)
- item.save()
- logger.logger.info(r_path)
- elif extension[1:] in self.transcoded_formats:
- t, c = MediaItemTranscoded.objects.get_or_create(item=item, file=r_path)
- logger.logger.info(r_path)
-
- media = Media(item=item, course=course, type=ext)
- media.set_mime_type()
- media.is_published = True
- media.save()
- seminar.media_preview = media
- seminar.save()
+ # if not item.file == path and not items_webm:
+ logger.logger.info(seminar.public_url())
+ logger.logger.info(path)
+ if not seminar in seminars:
+ seminars.append(seminar)
+
+
+ media, c = Media.objects.get_or_create(course=course,
+ type=ext,
+ file=path,
+ title='main')
+ if c:
+ media.set_mime_type()
+ media.rank = media_rank
+ media.is_published = True
+ media.save()
+
+ if not media in seminar.medias.all():
+ seminar.medias.add(media)
+
+
+ files = os.listdir(root)
+ for file in files:
+ r_path = dir + os.sep + file
+ filename, extension = os.path.splitext(file)
+ if extension[1:] in self.image_formats:
+ media.file = r_path
+ elif extension[1:] in self.transcoded_formats and not extension[1:] in self.original_format:
+ transcoded, c = MediaTranscoded.objects.get_or_create(item=media, file=r_path)
+ elif extension[1:] == 'kdenlive':
+ media.session_file = r_path
+ media.parse_markers(from_first_marker=False)
+ logger.logger.info(r_path)
+ media.save()
+
+ # import previews
+ if preview_trigger:
+ dir = os.path.abspath(root + '/../preview/' + str(seminar_rank))
+ if os.path.exists(dir):
+ r_dir = os.sep.join(dir.split(os.sep)[-7:])
+ files = os.listdir(dir)
+
+ if files and seminar.media_preview:
+ seminar.media_preview.delete()
+
+ media_preview, c = Media.objects.get_or_create(course=course,
+ type=ext,
+ title='preview')
+ if c:
+ media_preview.set_mime_type()
+ media_preview.rank = media_rank
+ media_preview.is_published = True
+ media_preview.save()
+
+ for file in files:
+ r_path = r_dir + os.sep + file
+ filename, extension = os.path.splitext(file)
+ if extension[1:] in self.original_format and not '.' == filename[0]:
+ media_preview.file = r_path
+ logger.logger.info(r_path)
+ elif extension[1:] in self.transcoded_formats:
+ transcoded, c = MediaItemTranscoded.objects.get_or_create(item=media_preview, file=r_path)
+ logger.logger.info(r_path)
+
+ media_preview.save()
+ media_preview.set_mime_type()
+ media_preview.is_published = True
+ media_preview.save()
+ seminar.media_preview = media_preview
+ seminar.save()
for s in seminars:
print('http://' + self.site.domain + reverse('teleforma-seminar-detail', kwargs={'pk': s.id}))
import datetime
import mimetypes
import copy
+import random
from unidecode import unidecode
from django.conf import settings
from teleforma.bbb_utils import bbb, register_web_hook
from teleforma.fields import Duration, DurationField, ShortTextField
+from teleforma.utils.kdenlive import KDEnLiveSession
+
HAS_TELEMETA = False
try:
app_label = 'teleforma'
+def get_random_hash():
+ hash = random.getrandbits(64)
+ return "%016x" % hash
+
def get_n_choices(n):
return [(str(x), str(y)) for x in range(1, n) for y in range(1, n) if x == y]
class Meta(MetaCore):
db_table = app_label + '_media_transcoded'
+
class MediaItemMarker(Model):
"2D marker object : text value vs. time (in seconds)"
readers = ManyToManyField(User, related_name="media", verbose_name=_('readers'),
blank=True)
file = models.FileField(_('file'), upload_to='items/%Y/%m/%d', max_length=1024, null=True, blank=False)
+ session_file = models.FileField(_('session file'), upload_to='items/%Y/%m/%d', max_length=1024, null=True, blank=False)
poster_file = models.FileField(_('poster file'), upload_to='items/%Y/%m/%d', max_length=255, null=True, blank=False)
approx_duration = DurationField(_('approximative duration'))
self.conference.course.save()
self.set_mime_type()
-
def poster_url(self, geometry='640'):
url = ''
if self.poster_file:
url = sorl_default.backend.get_thumbnail(self.poster_file, geometry).url
return url
+ def parse_markers(self, **kwargs):
+ # Parse KDEnLive session
+ if self.session_file:
+ session = KDEnLiveSession(self.file.path)
+ markers = session.markers(**kwargs)
+ for marker in markers:
+ m = MediaItemMarker(item=self)
+ m.public_id = get_random_hash()
+ m.time = float(marker['time'])
+ m.title = marker['comment']
+ m.save()
+ return markers
+
class Meta(MetaCore):
db_table = app_label + '_' + 'media'
ordering = ['rank']