aircox/website/actions.py

76 lines
2.1 KiB
Python

from django.utils import timezone as tz
from django.utils.translation import ugettext as _, ugettext_lazy
from aircox.cms.actions import Action
import aircox.website.utils as utils
class AddToPlaylist(Action):
"""
Remember a sound and add it into the default playlist. The given
object can be:
- a Diffusion post
- a programs.Sound instance
- an object with an attribute 'sound' used to generate the code
"""
id = 'sound.add'
symbol = ''
title = _('add to the playlist')
code = """
function(sound, item) {
Player.playlist.add(sound);
item.parentNode.removeChild(item)
}
"""
@classmethod
def make_for_diffusions(cl, request, object):
from aircox.website.sections import Player
if object.related.end > tz.make_aware(tz.datetime.now()):
return
archives = object.related.get_archives()
if not archives:
return False
sound = Player.make_sound(object, archives[0])
return cl.to_str(object, **sound)
@classmethod
def make_for_sound(cl, request, object):
from aircox.website.sections import Player
sound = Player.make_sound(None, object)
return cl.to_str(object, **sound)
@classmethod
def test(cl, request, object, in_list):
from aircox.programs.models import Sound
from aircox.website.models import Diffusion
print(object)
if not in_list:
return False
if issubclass(type(object), Diffusion):
return cl.make_for_diffusions(request, object)
if issubclass(type(object), Sound):
return cl.make_for_sound(request, object)
if hasattr(object, 'sound') and object.sound:
return cl.make_for_sound(request, object.sound)
class Play(AddToPlaylist):
"""
Play a sound
"""
id = 'sound.play'
symbol = ''
title = _('listen')
code = """
function(sound) {
sound = Player.playlist.add(sound);
Player.select_playlist(Player.playlist);
Player.select(sound, true);
}
"""