示例#1
0
def livestream(request):
    if is_streaming():
        event = get_streaming_event()
    else:
        event = get_next_streaming_event()

    return render_to_response('www/livestream.html', RequestContext(request, {
        'event': event,
    }))
示例#2
0
def ajax_index_events(request, year=None, week=None):
    today = datetime.date.today()
    week = int(week or today.isocalendar()[1])
    year = int(year or today.year)

    # %Y: year,
    # %W: week of the year (starting with first monday of the year),
    # %w: weekday (0 being sunday)
    start = week_start_date(year, week)
    end = start + relativedelta(days=7)

    # get all events in this week
    # TODO: this will fail for events that last more than a week
    # TODO: for this purpose, we should just use postgres daterange sooner or later.
    q = Event.objects.filter(public=True,
                             start_date__range=(start, end),
                             end_date__range=(start, end))
    events = q.order_by('start_date').all()

    # figure out if we are streaming now
    streaming_event = None
    if week == int(today.isocalendar()[1]) and is_streaming():
        streaming_event = get_streaming_event()

    # TODO: a bug with calculating week number
    prev_week_date = start - relativedelta(days=7)
    next_week_date = start + relativedelta(days=7)
    ret = dict()
    ret['prev_url'] = reverse('ajax_events_week', kwargs=dict(year=prev_week_date.isocalendar()[0], week=prev_week_date.isocalendar()[1]))
    ret['next_url'] = reverse('ajax_events_week', kwargs=dict(year=next_week_date.isocalendar()[0], week=next_week_date.isocalendar()[1]))
    ret['events'] = {}

    dict_events = []

    for event in events:
        d = dict(id=event.id,
                 title=event.title,
                 start_date=ljubljana_tz.localize(event.start_date),
                 end_date=ljubljana_tz.localize(event.end_date),
                 place=event.place.name,
                 url=event.get_absolute_url())
        d['project'] = event.project.verbose_name or event.project.name
        d['announce'] = truncatewords(safe(striptags(event.announce)), 50)
        d['image'] = event.event_image.image.url
        if streaming_event:
            d['is_streaming'] = streaming_event.id == event.id
        else:
            d['is_streaming'] = False
        dict_events.append(d)

    # group by events with the days in a week
    for i, day in enumerate(map(lambda i: start + relativedelta(days=i), range(0, 7))):
        ret['events'][i] = dict(
            date=format_(day, 'D, d. b').capitalize(),
            short_date=format_(day, 'd. n.'),
            events=[],
            is_today=day == today,
        )
        for event in dict_events:
            start_date = datetime.date(event['start_date'].year, event['start_date'].month, event['start_date'].day)
            end_date = datetime.date(event['end_date'].year, event['end_date'].month, event['end_date'].day)
            # TODO: order of events is wrong
            if start_date <= day <= end_date:
                ret['events'][i]['events'].append(event)
                # TODO: note if event hasnt started today

    return HttpResponse(simplejson.dumps(ret, cls=DjangoJSONEncoder),
                        mimetype='application/json')