This repository has been archived on 2023-02-21. You can view files and clone it, but cannot push or open issues or pull requests.
tabellio.pcfviews/tabellio/pcfviews/parlevent.py

64 lines
2.4 KiB
Python

import os
from five import grok
from zope import schema, component
from Products.CMFCore.utils import getToolByName
from plone.registry.interfaces import IRegistry
from tabellio.config.interfaces import ITabellioSettings
import tabellio.agenda.parlevent
class ParlEventBaseView(tabellio.agenda.parlevent.ParlEventBaseView):
def has_stream(self):
return (self.get_stream_url() is not None)
def get_stream_url(self):
settings = component.getUtility(IRegistry).forInterface(ITabellioSettings, False)
if settings.audiofiles_path:
if os.path.exists(os.path.join(settings.audiofiles_path, self.get_stream_name())):
if settings.embedded_audio_player_url:
return settings.embedded_audio_player_url + '?' + self.get_stream_name()
else:
return self.context.absolute_url() + '/ecouter.m3u'
return None
class ParlEventView(ParlEventBaseView):
def get_stream_url(self):
stream_url = ParlEventBaseView.get_stream_url(self)
if stream_url:
return stream_url
if not self.context.is_now():
return None
settings = component.getUtility(IRegistry).forInterface(ITabellioSettings, False)
if settings.embedded_audio_player_url:
return settings.embedded_audio_player_url
else:
return self.context.absolute_url() + '/ecouter.m3u'
def get_stream_name(self):
filename = '%04d%02d%02d%02d-SEAN.mp3' % (
self.context.start.year, self.context.start.month,
self.context.start.day, self.context.start.hour)
return filename
class View(grok.View, ParlEventView):
grok.context(tabellio.agenda.parlevent.IParlEvent)
grok.require('zope2.View')
class M3U(grok.View, ParlEventView):
grok.context(tabellio.agenda.parlevent.IParlEvent)
grok.require('zope2.View')
grok.name('ecouter.m3u')
def render(self):
portal_url = getToolByName(self.context, 'portal_url').getPortalObject().absolute_url()
self.request.response.setHeader('Content-type', 'audio/x-mpegurl')
settings = component.getUtility(IRegistry).forInterface(ITabellioSettings, False)
if self.context.is_now():
return settings.live_stream_url + '\n'
return portal_url + '/mp3/' + self.get_stream_name() + '\n'