76 lines
2.1 KiB
Python
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);
|
|
}
|
|
"""
|
|
|
|
|