From d04d0ad1f861a1038ae95868205878452e93ec10 Mon Sep 17 00:00:00 2001
From: Johannes Raggam <raggam-nl@adm.at>
Date: Thu, 26 May 2011 17:46:07 +0200
Subject: [PATCH] show show title instead of tracks if show is not musikprogram

---
 nop/templates/nop_form.html | 20 +++++++---
 nop/views.py                | 77 ++++++++++++++++++++++++++++---------
 2 files changed, 73 insertions(+), 24 deletions(-)

diff --git a/nop/templates/nop_form.html b/nop/templates/nop_form.html
index 1144692b..b9be92f6 100644
--- a/nop/templates/nop_form.html
+++ b/nop/templates/nop_form.html
@@ -36,11 +36,21 @@
     <ul>
       {% for track in nowplaying %}
       <li>
-        <small>{{track.datetime}}:</small>
-        <strong>{{track.artist}}</strong> -
-        {{track.title}} -
-        {{track.album}}
-        in der Sendung <em>{{track.showtitle}}</em>
+        {% if track.start or track.show %}
+          <small>
+            {% if track.start %}{{track.start}}{% endif %}
+            {% if track.start and track.show %},{% endif %}
+            {% if track.show %}Sendung {{track.show}}{% endif %}
+            {% if track.artist or track.title or track.album %}:{% endif %}
+          </small>
+        {% endif %}
+        {% if track.artist %}
+          <strong>{{track.artist}}</strong>
+        {% endif %}
+        {% if track.artist and track.title or track.artist and track.album %}|{% endif %}
+        {% if track.title %}{{track.title}}{% endif %}
+        {% if track.title and track.album %}|{% endif %}
+        {% if track.album %}{{track.album}}{% endif %}
       </li>
       {% endfor %}
     </ul>
diff --git a/nop/views.py b/nop/views.py
index 411fb314..1fd78a54 100644
--- a/nop/views.py
+++ b/nop/views.py
@@ -3,11 +3,14 @@ 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
+
 import json
 import time
 from datetime import datetime
 
 DB = 'nop'
+MUSIKPROG_ID = 1 # unmodieriertes musikprogramm
 
 class NopForm(forms.Form):
     date = forms.DateField(
@@ -25,6 +28,9 @@ class NopForm(forms.Form):
                 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]
@@ -35,33 +41,66 @@ def _which(timestamp=None):
     else:
         return Standby
 
+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()
+        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}
+
 
 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
 
-    # reverse sorted. get the first object = last played
-    result = _which().objects.using(DB).all()[0]
-    return {'artist': result.artist, 'title': result.title}
+    artist = None
+    title = None
+    album = None
+    show = _get_show()
+    if show['id'] == MUSIKPROG_ID:
+        # reverse sorted. get the first object = last played
+        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):
-    try:
-        # 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
-
-        result = _which(ts).objects.using(DB).filter(timestamp__lt=ts)[:5]
-        return [{'artist': item.artist, 'title': item.title, 'album': item.album,
-                   'datetime': time.strftime('%Y-%m-%d %H:%M',
-                       time.localtime(item.timestamp//1000000)),
-                   'showtitle': item.showtitle} for item in result]
-    except: # all errors
-        return None
+    #try:
+        #import pdb;pdb.set_trace()
+        show = _get_show(datetime(year, month, day, hour, minute))
+        if show['id'] and show['id'] != MUSIKPROG_ID:
+            return [{'show': show['name'],
+                     'start': show['start'],
+                     'artist': 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
+            result = _which(ts).objects.using(DB).filter(timestamp__lt=ts)[:5]
+            return [{'show': show['name'],
+                     'start': _dtstring(time.localtime(item.timestamp//1000000)),
+                     'artist': item.artist,
+                     'title': item.title,
+                     'album': item.album} for item in result]
+    #except: # all errors
+    #    return None
 
 
 def get_current(request):
-- 
GitLab