#41: Logs/À l'antenne: tracks manquantes #49
@ -1,3 +1,5 @@
 | 
			
		||||
import math
 | 
			
		||||
 | 
			
		||||
from django.contrib import admin
 | 
			
		||||
from django.utils.safestring import mark_safe
 | 
			
		||||
from django.utils.translation import gettext_lazy as _
 | 
			
		||||
@ -29,7 +31,7 @@ class SoundInline(admin.TabularInline):
 | 
			
		||||
 | 
			
		||||
    def audio(self, obj):
 | 
			
		||||
        return mark_safe('<audio src="{}" controls></audio>'.format(obj.file.url))
 | 
			
		||||
    audio.short_descripton = _('Audio')
 | 
			
		||||
    audio.short_description = _('Audio')
 | 
			
		||||
 | 
			
		||||
    def get_queryset(self, request):
 | 
			
		||||
        return super().get_queryset(request).available()
 | 
			
		||||
@ -60,7 +62,7 @@ class SoundAdmin(admin.ModelAdmin):
 | 
			
		||||
 | 
			
		||||
    def audio(self, obj):
 | 
			
		||||
        return mark_safe('<audio src="{}" controls></audio>'.format(obj.file.url))
 | 
			
		||||
    audio.short_descripton = _('Audio')
 | 
			
		||||
    audio.short_description = _('Audio')
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@admin.register(Track)
 | 
			
		||||
@ -68,7 +70,7 @@ class TrackAdmin(admin.ModelAdmin):
 | 
			
		||||
    def tag_list(self, obj):
 | 
			
		||||
        return u", ".join(o.name for o in obj.tags.all())
 | 
			
		||||
 | 
			
		||||
    list_display = ['pk', 'artist', 'title', 'tag_list', 'episode', 'sound', 'timestamp']
 | 
			
		||||
    list_display = ['pk', 'artist', 'title', 'tag_list', 'episode', 'sound', 'ts']
 | 
			
		||||
    list_editable = ['artist', 'title']
 | 
			
		||||
    list_filter = ['artist', 'title', 'tags']
 | 
			
		||||
 | 
			
		||||
@ -80,4 +82,15 @@ class TrackAdmin(admin.ModelAdmin):
 | 
			
		||||
 | 
			
		||||
    # TODO on edit: readonly_fields = ['episode', 'sound']
 | 
			
		||||
 | 
			
		||||
    def ts(self, obj):
 | 
			
		||||
        ts = obj.timestamp
 | 
			
		||||
        if ts is None:
 | 
			
		||||
            return ''
 | 
			
		||||
        h = math.floor(ts / 3600)
 | 
			
		||||
        m = math.floor((ts - h) / 60)
 | 
			
		||||
        s = ts-h*3600-m*60
 | 
			
		||||
        return '{:0>2}:{:0>2}:{:0>2}'.format(h,m,s)
 | 
			
		||||
 | 
			
		||||
    ts.short_description = _('timestamp')
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -105,7 +105,8 @@ class SoundFile:
 | 
			
		||||
            self.find_episode(program)
 | 
			
		||||
 | 
			
		||||
        sound.save()
 | 
			
		||||
        if self.info is not None:
 | 
			
		||||
 | 
			
		||||
        # check for playlist
 | 
			
		||||
        self.find_playlist(sound)
 | 
			
		||||
        return sound
 | 
			
		||||
 | 
			
		||||
@ -175,12 +176,12 @@ class SoundFile:
 | 
			
		||||
        """
 | 
			
		||||
        if sound is None:
 | 
			
		||||
            sound = self.sound
 | 
			
		||||
 | 
			
		||||
        if sound.track_set.count():
 | 
			
		||||
        if sound.track_set.count() > 1:
 | 
			
		||||
            return
 | 
			
		||||
 | 
			
		||||
        # import playlist
 | 
			
		||||
        path = os.path.splitext(self.sound.file.path)[0] + '.csv'
 | 
			
		||||
        path_noext, ext = os.path.splitext(self.sound.file.path)
 | 
			
		||||
        path = path_noext + '.csv'
 | 
			
		||||
        if os.path.exists(path):
 | 
			
		||||
            PlaylistImport(path, sound=sound).run()
 | 
			
		||||
        # use metadata
 | 
			
		||||
@ -189,14 +190,18 @@ class SoundFile:
 | 
			
		||||
                self.read_file_info()
 | 
			
		||||
            if self.info.tags:
 | 
			
		||||
                tags = self.info.tags
 | 
			
		||||
                info = '{} ({})'.format(tags.get('album'), tags.get('year')) \
 | 
			
		||||
                    if ('album' and 'year' in tags) else tags.get('album') \
 | 
			
		||||
                    if 'album' in tags else tags.get('year', '')
 | 
			
		||||
 | 
			
		||||
                title, artist, album, year = tuple(
 | 
			
		||||
                    t and ', '.join(t) for t in (
 | 
			
		||||
                        tags.get(k) for k in ('title', 'artist', 'album', 'year'))
 | 
			
		||||
                )
 | 
			
		||||
                title = title or (self.path_info and self.path_info.get('name')) or \
 | 
			
		||||
                            os.path.basename(path_noext)
 | 
			
		||||
                info = '{} ({})'.format(album, year) if album and year else \
 | 
			
		||||
                       album or year or ''
 | 
			
		||||
                track = Track(sound=sound,
 | 
			
		||||
                              position=int(tags.get('tracknumber', 0)),
 | 
			
		||||
                              title=tags.get('title', self.path_info['name']),
 | 
			
		||||
                              artist=tags.get('artist', _('unknown')),
 | 
			
		||||
                              title=title,
 | 
			
		||||
                              artist=artist or _('unknown'),
 | 
			
		||||
                              info=info)
 | 
			
		||||
                track.save()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -126,12 +126,13 @@ class Monitor:
 | 
			
		||||
 | 
			
		||||
    def log(self, **kwargs):
 | 
			
		||||
        """ Create a log using **kwargs, and print info """
 | 
			
		||||
        kwargs.setdefault('station', self.station)
 | 
			
		||||
        kwargs.setdefault('date', tz.now())
 | 
			
		||||
 | 
			
		||||
        if self.__last_log_kwargs == kwargs:
 | 
			
		||||
            return
 | 
			
		||||
 | 
			
		||||
        self.__last_log_kwargs = kwargs
 | 
			
		||||
        kwargs.setdefault('station', self.station)
 | 
			
		||||
        kwargs.setdefault('date', tz.now())
 | 
			
		||||
        log = Log(**kwargs)
 | 
			
		||||
        log.save()
 | 
			
		||||
        log.print()
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user