remove Station model (to much trouble for few advantages); start new player; rename Post.detail_url to Post.url, same for ListItem; move Article into website app; add website.Sound post; work on lists;...

This commit is contained in:
bkfox
2016-06-12 21:34:31 +02:00
parent 13bf57b401
commit c3ae0e012c
18 changed files with 180 additions and 196 deletions

View File

@ -3,6 +3,6 @@ import aircox.liquidsoap.models as models
@admin.register(models.Output)
class OutputAdmin (admin.ModelAdmin):
list_display = ('id', 'type', 'station')
list_display = ('id', 'type')

View File

@ -96,7 +96,7 @@ class Monitor:
# - preload next diffusion's tracks
args = {'start__gt': prev_diff.start } if prev_diff else {}
next_diff = programs.Diffusion \
.get(controller.station, now, now = True,
.get(now, now = True,
type = programs.Diffusion.Type.normal,
sounds__isnull = False,
**args) \
@ -194,30 +194,19 @@ class Command (BaseCommand):
help='write configuration and playlist'
)
group = parser.add_argument_group('selector')
group.add_argument(
'-s', '--station', type=int, action='append',
help='select station(s) with this id'
)
group.add_argument(
'-a', '--all', action='store_true',
help='select all stations'
'-s', '--station', type=str,
default = 'aircox',
help='use this name as station name (default is "aircox")'
)
def handle (self, *args, **options):
# selector
stations = []
if options.get('all'):
stations = programs.Station.objects.filter(active = True)
elif options.get('station'):
stations = programs.Station.objects.filter(
id__in = options.get('station')
)
run = options.get('run')
monitor = options.get('on_air') or options.get('monitor')
self.controllers = [ utils.Controller(station, connector = monitor)
for station in stations ]
self.controller = utils.Controller(
station = options.get('station'),
connector = monitor
)
# actions
if options.get('write') or run:

View File

@ -1,24 +1,19 @@
from enum import Enum, IntEnum
from django.db import models
from django.utils.translation import ugettext as _, ugettext_lazy
import aircox.programs.models as programs
class Output (models.Model):
# Note: we don't translate the names since it is project names.
Type = {
'jack': 0x00,
'alsa': 0x01,
'icecast': 0x02,
}
class Type(IntEnum):
jack = 0x00
alsa = 0x01
icecast = 0x02
station = models.ForeignKey(
programs.Station,
verbose_name = _('station'),
)
type = models.SmallIntegerField(
_('output type'),
choices = [ (y, x) for x,y in Type.items() ],
choices = [ (int(y), _(x)) for x,y in Type.__members__.items() ],
blank = True, null = True
)
settings = models.TextField(

View File

@ -295,12 +295,11 @@ class Controller:
files dir.
"""
self.id = station.slug
self.name = station.name
self.path = os.path.join(settings.AIRCOX_LIQUIDSOAP_MEDIA, station.slug)
self.name = station
self.path = os.path.join(settings.AIRCOX_LIQUIDSOAP_MEDIA,
slugify(station))
self.station = station
self.station.controller = self
self.outputs = models.Output.objects.filter(station = station)
self.outputs = models.Output.objects.all()
self.connector = connector and Connector(self.socket_path)
@ -310,8 +309,7 @@ class Controller:
source.id : source
for source in [
Source(self, program)
for program in programs.Program.objects.filter(station = station,
active = True)
for program in programs.Program.objects.filter(active = True)
if program.stream_set.count()
]
}
@ -370,23 +368,3 @@ class Controller:
file.write(data)
class Monitor:
"""
Monitor multiple controllers.
"""
controllers = None
def __init__(self):
self.controllers = {
controller.id : controller
for controller in [
Controller(station, True)
for station in programs.Station.objects.filter(active = True)
]
}
def update(self):
for controller in self.controllers.values():
controller.update()