From: Guillaume Pellerin Date: Wed, 10 Dec 2014 17:06:57 +0000 (+0100) Subject: Merge branch 'dev' into crem2 X-Git-Tag: 1.5.0rc3~4 X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=715171aa145ce6840db8038e3b5885fb399682bf;p=telemeta.git Merge branch 'dev' into crem2 --- 715171aa145ce6840db8038e3b5885fb399682bf diff --cc telemeta/locale/de/LC_MESSAGES/django.po index 43f61522,0a7b4547..29b9bf62 --- a/telemeta/locale/de/LC_MESSAGES/django.po +++ b/telemeta/locale/de/LC_MESSAGES/django.po @@@ -191,10 -203,13 +203,14 @@@ msgstr "Aufnahmesystem msgid "tape thickness (um)" msgstr "Banddicke (um)" + #: models/format.py:82 + msgid "tape vendor" + msgstr "Bandmarke" + #: models/format.py:83 +#, fuzzy msgid "tape reference" -msgstr "Bandreferenz" +msgstr "publizierte Referenzen" #: models/format.py:84 msgid "sticker presence" @@@ -627,19 -611,11 +612,11 @@@ msgstr "Auswahl von SammlerIn msgid "collector as in collection" msgstr "SammlerIn gleich wie bei Sammlung" - #: models/media.py:408 - msgid "digitization date" - msgstr "Datum der Digitalisierung" - - #: models/media.py:409 - msgid "publishing date" - msgstr "Datum der Publikation" - - #: models/media.py:410 + #: models/media.py:392 msgid "creator reference" -msgstr "Referenz von ErzeugerIn" +msgstr "Referenz" - #: models/media.py:411 + #: models/media.py:393 msgid "published references" msgstr "publizierte Referenzen" @@@ -1114,13 -1131,14 +1132,14 @@@ msgid "Administration msgstr "Verwaltung" #: templates/telemeta/admin.html:14 templates/telemeta/admin_general.html:5 - #: templates/telemeta/base.html:130 templates/telemeta/collection_edit.html:20 - #: templates/telemeta/mediaitem_edit.html:21 + #: templates/telemeta/collection_edit.html:36 + #: templates/telemeta/mediaitem_edit.html:87 + #: templates/telemeta/resource_edit.html:38 msgid "General" -msgstr "allgemein" +msgstr "Allgemein" #: templates/telemeta/admin_enumerations.html:6 - #: templates/telemeta/base.html:131 templates/telemeta/enumeration_edit.html:7 + #: templates/telemeta/base.html:120 templates/telemeta/enumeration_edit.html:7 msgid "Enumerations" msgstr "Aufzählung" diff --cc telemeta/templates/telemeta/base.html index 02b89a0c,9510f5fb..7f518ae0 --- a/telemeta/templates/telemeta/base.html +++ b/telemeta/templates/telemeta/base.html @@@ -58,20 -58,14 +58,17 @@@
{% if user.is_authenticated %} - - user - {% trans "Welcome" %}, + user + {% trans "Welcome" %}, + {% if user.first_name or user.last_name %} - {{ user.first_name }} {{ user.last_name }} + {{ user.first_name }} {{ user.last_name }} | {% else %} -{{ user.username }} | + {{ user.username }} +{% endif %} +{% if perms.telemeta.can_view_users_and_profiles %} + | {% trans "Profile" %} {% endif %} - {% if not perms.telemeta.can_not_view_users_and_profiles %} - {% trans "Profile" %} | - {% endif %} {% trans "Help" %} | {% trans "Sign out" %} logout diff --cc telemeta/views/core.py index 82fe1f75,6979598a..58911bc7 --- a/telemeta/views/core.py +++ b/telemeta/views/core.py @@@ -290,3 -278,9 +289,9 @@@ def get_room(content_type=None, id=None room = rooms[0] return room + + def get_kwargs_or_none(key, kwargs): + if key in kwargs.keys(): + return kwargs[key] + else: - return None ++ return None diff --cc telemeta/views/item.py index a5acc696,6c5d69db..82816baa --- a/telemeta/views/item.py +++ b/telemeta/views/item.py @@@ -754,14 -776,174 +779,174 @@@ class ItemAddView(ItemViewMixin, Create class ItemCopyView(ItemAddView): form_class = MediaItemForm - template_name = 'telemeta/mediaitem_add.html' - inlines = [ItemRelatedInline, ItemPerformanceInline, ItemKeywordInline, - ItemFormatInline, ItemIdentifierInline] + template_name = 'telemeta/mediaitem_edit.html' def get_initial(self): - resource = self.model.objects.get(code=self.kwargs['public_id']) - return model_to_dict(resource) + return model_to_dict(self.get_object()) def get_success_url(self): - return reverse_lazy('telemeta-items') + return reverse_lazy('telemeta-item-detail', kwargs={'public_id':self.object.code}) + + def get_context_data(self, **kwargs): + context = super(ItemCopyView, self).get_context_data(**kwargs) + item = self.get_object() + context['item'] = item + context['access'] = get_item_access(item, self.request.user) + context['previous'], context['next'] = self.item_previous_next(item) + #FIXME + context['mime_type'] = 'audio/mp3' + context['export_formats'] = self.get_export_formats() + context['visualizers'] = self.get_graphers() + context['audio_export_enabled'] = self.export_enabled + context['auto_zoom'] = True + return context + + + class ItemDetailView(ItemViewMixin, DetailView): + + template_name = 'telemeta/mediaitem_detail.html' + + def item_analyze(self, item): + analyses = item.analysis.all() + mime_type = '' + + if analyses: + for analysis in analyses: + if not item.approx_duration and analysis.analyzer_id == 'duration': + value = analysis.value + time = value.split(':') + time[2] = time[2].split('.')[0] + time = ':'.join(time) + item.approx_duration = time + item.save() + if analysis.analyzer_id == 'mime_type': + mime_type = analysis.value + else: + analyzers = [] + analyzers_sub = [] + graphers_sub = [] + + source = item.get_source() + if source: + decoder = timeside.decoder.file.FileDecoder(source) + pipe = decoder + + for analyzer in self.value_analyzers: + subpipe = analyzer() + analyzers_sub.append(subpipe) + pipe = pipe | subpipe + + default_grapher = self.get_grapher(self.default_grapher_id) + for size in self.default_grapher_sizes: + width = size.split('x')[0] + height = size.split('x')[1] + image_file = '.'.join([item.public_id, self.default_grapher_id, size.replace('x', '_'), 'png']) + path = self.cache_data.dir + os.sep + image_file + graph = default_grapher(width = int(width), height = int(height)) + graphers_sub.append({'graph' : graph, 'path': path}) + pipe = pipe | graph + + pipe.run() + + for grapher in graphers_sub: + grapher['graph'].watermark('timeside', opacity=.6, margin=(5,5)) + f = open(grapher['path'], 'w') + grapher['graph'].render(grapher['path']) + f.close() + + mime_type = mimetypes.guess_type(source)[0] + analysis = MediaItemAnalysis(item=item, name='MIME type', + analyzer_id='mime_type', unit='', value=mime_type) + analysis.save() + analysis = MediaItemAnalysis(item=item, name='Channels', + analyzer_id='channels', + unit='', value=decoder.input_channels) + analysis.save() + analysis = MediaItemAnalysis(item=item, name='Samplerate', + analyzer_id='samplerate', unit='Hz', + value=unicode(decoder.input_samplerate)) + analysis.save() + analysis = MediaItemAnalysis(item=item, name='Resolution', + analyzer_id='resolution', unit='bits', + value=unicode(decoder.input_width)) + analysis.save() + analysis = MediaItemAnalysis(item=item, name='Duration', + analyzer_id='duration', unit='s', + value=unicode(datetime.timedelta(0,decoder.input_duration))) + analysis.save() + analysis = MediaItemAnalysis(item=item, name='Size', + analyzer_id='size', unit='', value=item.size()) + analysis.save() + + for analyzer in analyzers_sub: + for key in analyzer.results.keys(): + result = analyzer.results[key] + value = result.data_object.value + if value.shape[0] == 1: + value = value[0] + analysis = MediaItemAnalysis(item=item, name=result.name, + analyzer_id=result.id, unit=result.unit, value = unicode(value)) + analysis.save() + + # FIXME: parse tags on first load + # tags = decoder.tags + + self.mime_type = mime_type + def get_context_data(self, **kwargs): + context = super(ItemDetailView, self).get_context_data(**kwargs) + + public_id = get_kwargs_or_none('public_id', self.kwargs) + marker_id = get_kwargs_or_none('marker_id', self.kwargs) + width = get_kwargs_or_none('width', self.kwargs) + height = get_kwargs_or_none('height', self.kwargs) + + # get item with one of its given marker_id + if not public_id and marker_id: + marker = MediaItemMarker.objects.get(public_id=marker_id) + item_id = marker.item_id + item = MediaItem.objects.get(id=item_id) + else: + item = self.get_object() + + access = get_item_access(item, self.request.user) + + previous, next = self.item_previous_next(item) + + self.item_analyze(item) + + #FIXME: use mimetypes.guess_type + if 'quicktime' in self.mime_type: + self.mime_type = 'video/mp4' + + playlists = get_playlists_names(self.request) + related_media = MediaItemRelated.objects.filter(item=item) + check_related_media(related_media) + revisions = Revision.objects.filter(element_type='item', element_id=item.id).order_by('-time') + if revisions: + last_revision = revisions[0] + else: + last_revision = None + + format = '' + if Format.objects.filter(item=item): + format = item.format.get() + + context['item'] = item + context['export_formats'] = self.get_export_formats() + context['visualizers'] = self.get_graphers() + context['auto_zoom'] = self.auto_zoom + context['audio_export_enabled'] = self.export_enabled + context['previous'] = previous + context['next'] = next + context['marker'] = marker_id + context['playlists'] = playlists + context['access'] = access + context['width'] = width + context['height'] = height + context['related_media'] = related_media + context['mime_type'] = self.mime_type + context['last_revision'] = last_revision + context['format'] = format + - return context ++ return context