diff --git a/aircox/admin/sound.py b/aircox/admin/sound.py
index 7dff945..34012de 100644
--- a/aircox/admin/sound.py
+++ b/aircox/admin/sound.py
@@ -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(''.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(''.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')
+
diff --git a/aircox/management/commands/sounds_monitor.py b/aircox/management/commands/sounds_monitor.py
index 6810c87..b3e9a15 100755
--- a/aircox/management/commands/sounds_monitor.py
+++ b/aircox/management/commands/sounds_monitor.py
@@ -105,8 +105,9 @@ class SoundFile:
self.find_episode(program)
sound.save()
- if self.info is not None:
- self.find_playlist(sound)
+
+ # check for playlist
+ self.find_playlist(sound)
return sound
def read_path(self):
@@ -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()
diff --git a/aircox_streamer/management/commands/streamer.py b/aircox_streamer/management/commands/streamer.py
index a9b3801..ed64d1d 100755
--- a/aircox_streamer/management/commands/streamer.py
+++ b/aircox_streamer/management/commands/streamer.py
@@ -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()
diff --git a/aircox_streamer/urls.py b/aircox_streamer/urls.py
index 7724652..c3014b5 100644
--- a/aircox_streamer/urls.py
+++ b/aircox_streamer/urls.py
@@ -1,5 +1,5 @@
from django.contrib import admin
-from django.utils.translation import ugettext_lazy as _
+from django.utils.translation import gettext_lazy as _
from . import viewsets
from aircox.viewsets import SoundViewSet
diff --git a/aircox_streamer/views.py b/aircox_streamer/views.py
index ad8d2dd..e71b386 100644
--- a/aircox_streamer/views.py
+++ b/aircox_streamer/views.py
@@ -1,4 +1,4 @@
-from django.utils.translation import ugettext_lazy as _
+from django.utils.translation import gettext_lazy as _
from django.views.generic import TemplateView
from aircox.views.admin import AdminMixin