]> git.0d.be Git - panikweb.git/blobdiff - panikweb/views.py
Merge branch 'master' of ssh://git.domainepublic.net/panikweb
[panikweb.git] / panikweb / views.py
index e7400d3038d0e03c81ea18ab531bfb8ca97659e2..8ff598f8ef164066dcc7cd5208bb64f94dcca00d 100644 (file)
@@ -1,4 +1,5 @@
 import datetime
+import math
 
 from django.views.generic.base import TemplateView
 
@@ -19,6 +20,120 @@ class ProgramView(TemplateView):
 
 program = ProgramView.as_view()
 
+class TimeCell:
+    emissions = None
+    nonstop = None
+    w = 1
+    h = 1
+
+    def __init__(self, i, j):
+        self.x = i
+        self.y = j
+        self.emissions = []
+
+    def add_emission(self, emission):
+        self.emissions.append(emission)
+
+    def __unicode__(self):
+        if self.emissions:
+            return ', '.join([x.title for x in self.emissions])
+        else:
+            return self.nonstop
+
+    def __eq__(self, other):
+        return (unicode(self) == unicode(other))
+
+
+class Grid(TemplateView):
+    template_name = 'grid.html'
+
+    def get_context_data(self, **kwargs):
+        context = super(Grid, self).get_context_data(**kwargs)
+        schedules = Schedule.objects.all().order_by('datetime')
+
+        nb_lines = 2 * 24 # the cells are half hours
+        grid = []
+
+        times = ['%02d:%02d' % (x/2, x%2*30) for x in range(nb_lines)]
+        # grid starts at 5am
+        times = times[2*5:] + times[:2*5]
+
+        nonstops = [[0, 2, 'Biodiversite'],
+                    [2, 5, 'Reveries'],
+                    [5, 7.5, 'La Panique'],
+                    [7.5, 10, 'Matin tranquille'],
+                    [10, 12, 'Up Beat Tempo'],
+                    [12, 13, 'L\'heure de pointe'],
+                    [13, 16, 'Le Mange Disque'],
+                    [16, 19, 'Hop Bop and co'],
+                    [19, 22, 'Acouphene'],
+                    [22, 24, 'Biodiversite']
+                   ]
+
+        for i in range(nb_lines):
+            grid.append([])
+            for j in range(7):
+                grid[-1].append(TimeCell(i, j))
+
+            nonstop = [x for x in nonstops if i>=x[0]*2 and i<x[1]*2][0]
+            for time_cell in grid[-1]:
+                time_cell.nonstop = nonstop[2]
+
+        for schedule in Schedule.objects.all():
+            row_start = schedule.datetime.hour * 2 + \
+                    int(math.ceil(schedule.datetime.minute / 30))
+            day_no = schedule.get_weekday()
+
+            for step in range(int(math.ceil(schedule.emission.duration / 30))):
+                if grid[row_start+step][day_no] is None:
+                    print 'creating a time cell at', row_start+step, day_no
+                    grid[row_start+step][day_no] = TimeCell()
+                grid[row_start+step][day_no].add_emission(schedule.emission)
+
+
+        # start grid at 5am
+        grid = grid[2*5:] + grid[:2*5]
+
+        # merge adjacent cells
+        for i in range(nb_lines):
+            for j, cell in enumerate(grid[i]):
+                if grid[i][j] is None:
+                    continue
+                t = 1
+                try:
+                    while grid[i][j+t] == cell:
+                        cell.w += 1
+                        grid[i][j+t] = None
+                        t += 1
+                except IndexError:
+                    pass
+            grid[i] = [x for x in grid[i] if x is not None]
+
+        for i in range(nb_lines):
+            grid[i] = [x for x in grid[i] if x is not None]
+            for j, cell in enumerate(grid[i]):
+                if grid[i][j] is None:
+                    continue
+                t = 1
+                try:
+                    while True:
+                        same_cell_below = [(bj, x) for bj, x in enumerate(grid[i+cell.h])
+                                           if x == cell and x.y == cell.y and x.w == cell.w]
+                        if not same_cell_below:
+                            break
+                        bj, same_cell_below = same_cell_below[0]
+                        del grid[i+cell.h][bj]
+                        cell.h += 1
+                except IndexError:
+                    pass
+
+        context['grid'] = grid
+        context['times'] = times
+
+        return context
+
+grid = Grid.as_view()
+
 
 class Home(TemplateView):
     template_name = 'home.html'