summaryrefslogtreecommitdiff
path: root/nop/views.py
diff options
context:
space:
mode:
Diffstat (limited to 'nop/views.py')
-rw-r--r--nop/views.py111
1 files changed, 60 insertions, 51 deletions
diff --git a/nop/views.py b/nop/views.py
index 9e76d2f..9d71379 100644
--- a/nop/views.py
+++ b/nop/views.py
@@ -1,48 +1,50 @@
-# -*- coding: utf-8 -*-
+# coding=utf-8
-from django.core.context_processors import csrf
+from django.core.exceptions import ObjectDoesNotExist, MultipleObjectsReturned
from django.shortcuts import render_to_response
from django.http import HttpResponse
from django import forms
from models import Master, Standby, State
-from program.models import TimeSlot
+from program.models import TimeSlot, Note
import json
import time
from datetime import datetime
DB = 'nop'
-MUSIKPROG_IDS = (1,5,17,34,60,81,89)
- # 1 - unmodieriertes musikprogramm
- # 5 - Abunda Lingva
- ## 12 - aus den freien radios
- # 17 - bumbumtschak
- # 34 - fruehstück A
- # 60 - musikprogramm bunt gemischt
- # 81 - selchfleisch
- # 89 - styrian underground
+
+MUSIKPROG_IDS = (
+ 1, # unmodieriertes musikprogramm
+ 17, # bumbumtschak
+ 203, # Hotel Passage
+ 204, # Radyo Mezopotamya
+ 206, # Abunda Lingva
+ 290 # styrian underground
+)
+
+SPECIAL_PROGRAM_IDS = (
+ 66, # Probebühne
+ 374 # musikprogramm bunt gemischt
+)
+
class NopForm(forms.Form):
date = forms.DateField(
- required=True,
- #initial=datetime.date(datetime.now()), ## static initial specifies
- ## any time but not the
- ## current one
- widget=forms.DateInput(
- format='%Y-%m-%d',
- attrs={'id':'nop_date', 'class':'date'})
- )
+ required=True,
+ widget=forms.DateInput(
+ format='%Y-%m-%d',
+ attrs={'id': 'nop_date', 'class': 'date'}))
time = forms.TimeField(
- required=True,
- #initial=datetime.time(datetime.now()),
- widget=forms.TimeInput(
- format='%H:%M',
- attrs={'id':'nop_time', 'class':'date'})
- )
+ required=True,
+ widget=forms.TimeInput(
+ format='%H:%M',
+ attrs={'id': 'nop_time', 'class': 'date'}))
+
def _dtstring(dt):
return time.strftime('%Y-%m-%d %H:%M', dt)
+
def _which(timestamp=None):
if timestamp:
res = State.objects.using(DB).filter(timestamp__lt=timestamp)[0]
@@ -53,42 +55,49 @@ def _which(timestamp=None):
else:
return Standby
-def _get_show(datetime = None):
+
+def _get_show(datetime=None):
try:
if datetime:
timeslot = TimeSlot.objects.get(start__lte=datetime, end__gt=datetime)
else:
timeslot = TimeSlot.objects.get_or_create_current()
+ except (ObjectDoesNotExist, MultipleObjectsReturned):
+ return {'start': None, 'id': None, 'name': None}
+ else:
+ try:
+ note = timeslot.note
+ except ObjectDoesNotExist:
+ note = None
+
return {'start': _dtstring(timeslot.start.timetuple()),
'id': timeslot.show.id,
- 'name': timeslot.show.name}
- except: # e.g. DoesNotExist
- return {'start': None, 'id': None, 'name': None}
+ 'name': timeslot.show.name,
+ 'note': note}
def _current():
- #current = int(time.time())*1000000
- #time.gmtime(_which().objects.using(DB).all()[6000].timestamp//1000000)
- # select all where timestamp < givenTS, get most recent one -> order DESC
-
artist = None
title = None
album = None
show = _get_show()
- if show['id'] in MUSIKPROG_IDS:
- # reverse sorted. get the first object = last played
+
+ if show['id'] in MUSIKPROG_IDS or (show['id'] in SPECIAL_PROGRAM_IDS and not show['note']):
result = _which().objects.using(DB).all()[0]
artist = result.artist
title = result.title
album = result.album
+
return {'show': show['name'],
'start': show['start'],
'artist': artist,
'title': title,
'album': album}
+
def _bydate(year=None, month=None, day=None, hour=None, minute=None):
show = _get_show(datetime(year, month, day, hour, minute))
+
if show['id'] and show['id'] not in MUSIKPROG_IDS:
return [{'show': show['name'],
'start': show['start'],
@@ -96,13 +105,7 @@ def _bydate(year=None, month=None, day=None, hour=None, minute=None):
'title': None,
'album': None}]
else:
- # tm_year,tm_mon,tm_mday,tm_hour,tm_min,tm_sec,tm_wday,tm_yday,tm_isdst
- ts = int(time.mktime((
- int(year),
- int(month),
- int(day),
- int(hour),
- int(minute),0,0,0,-1))) * 1000000
+ ts = int(time.mktime((int(year), int(month), int(day), int(hour), int(minute), 0, 0, 0, -1))) * 1000000
result = _which(ts).objects.using(DB).filter(timestamp__lt=ts)[:5]
return [{'show': show['name'],
'start': _dtstring(time.localtime(item.timestamp//1000000)),
@@ -110,31 +113,37 @@ def _bydate(year=None, month=None, day=None, hour=None, minute=None):
'title': item.title,
'album': item.album} for item in result]
+
def get_current(request):
response = json.dumps(_current())
return HttpResponse(response, mimetype='application/json')
+
def get(request, year=None, month=None, day=None, hour=None, minute=None):
response = json.dumps(_bydate(year, month, day, hour, minute))
return HttpResponse(response, mimetype='application/json')
+
def nop_form(request):
context = {}
- ## currently no csrf security for nicier forms
- #context.update(csrf(request)) # in django template: {% csrf_token %}
date = None
time = None
- if request.method == 'GET' and\
- ('date' in request.GET or 'time' in request.GET):
+
+ if request.method == 'GET' and ('date' in request.GET or 'time' in request.GET):
form = NopForm(request.GET)
+
if form.is_valid():
date = form.cleaned_data['date']
time = form.cleaned_data['time']
else:
- form = NopForm(initial={'date':datetime.date(datetime.now()),
- 'time':datetime.time(datetime.now())})
- if not date: date = datetime.date(datetime.now())
- if not time: time = datetime.time(datetime.now())
+ form = NopForm(initial={'date': datetime.date(datetime.now()), 'time': datetime.time(datetime.now())})
+
+ if not date:
+ date = datetime.date(datetime.now())
+
+ if not time:
+ time = datetime.time(datetime.now())
+
result = _bydate(date.year, date.month, date.day, time.hour, time.minute)
context['nowplaying'] = result
context['form'] = form