Mercurial > libervia-backend
annotate src/plugins/plugin_misc_radiocol.py @ 2444:30278ea1ca7c
plugin XEP-0060: added node watching methods to bridge:
new methods psNodeWatchAdd and psNodeWatchRemove allows to set a watch for the time of the session on one node, to have a signal called when something change on this node.
This signal (psEventRaw) send raw data (raw XML), in opposition to psEvent which is there to send high level data (e.g. parsed blog data).
Those method are primarely there to let frontends manage local cache for pubsub nodes.
author | Goffi <goffi@goffi.org> |
---|---|
date | Sun, 19 Nov 2017 16:51:39 +0100 |
parents | 8b37a62336c3 |
children | 0046283a285d |
rev | line source |
---|---|
1934
2daf7b4c6756
use of /usr/bin/env instead of /usr/bin/python in shebang
Goffi <goffi@goffi.org>
parents:
1766
diff
changeset
|
1 #!/usr/bin/env python2 |
450 | 2 # -*- coding: utf-8 -*- |
3 | |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
594
diff
changeset
|
4 # SAT plugin for managing Radiocol |
2414
8b37a62336c3
misc: date update (yes it's a bit late :p )
Goffi <goffi@goffi.org>
parents:
2145
diff
changeset
|
5 # Copyright (C) 2009-2017 Jérôme Poisson (goffi@goffi.org) |
450 | 6 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
594
diff
changeset
|
7 # This program is free software: you can redistribute it and/or modify |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
594
diff
changeset
|
8 # it under the terms of the GNU Affero General Public License as published by |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
594
diff
changeset
|
9 # the Free Software Foundation, either version 3 of the License, or |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
594
diff
changeset
|
10 # (at your option) any later version. |
450 | 11 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
594
diff
changeset
|
12 # This program is distributed in the hope that it will be useful, |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
594
diff
changeset
|
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
594
diff
changeset
|
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
594
diff
changeset
|
15 # GNU Affero General Public License for more details. |
450 | 16 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
594
diff
changeset
|
17 # You should have received a copy of the GNU Affero General Public License |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
594
diff
changeset
|
18 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
450 | 19 |
901
c238d2c02237
plugin radiocol: add MP3 support
souliane <souliane@mailoo.org>
parents:
849
diff
changeset
|
20 from sat.core.i18n import _, D_ |
2145
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
21 from sat.core.constants import Const as C |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
941
diff
changeset
|
22 from sat.core.log import getLogger |
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
941
diff
changeset
|
23 log = getLogger(__name__) |
450 | 24 from twisted.words.xish import domish |
577
593331663b80
plugin radiocol: songs are deleted once played (Q&D need to be reworked once file are properly transfered to server)
Goffi <goffi@goffi.org>
parents:
572
diff
changeset
|
25 from twisted.internet import reactor |
593331663b80
plugin radiocol: songs are deleted once played (Q&D need to be reworked once file are properly transfered to server)
Goffi <goffi@goffi.org>
parents:
572
diff
changeset
|
26 from twisted.words.protocols.jabber import jid |
849
c5a8f602662b
plugin room_game, radiocol: RoomGame.send returns a Deferred.
souliane <souliane@mailoo.org>
parents:
828
diff
changeset
|
27 from twisted.internet import defer |
765
787ee59dba9c
plugins radiocol, xep-0054: better handling of upload errors:
souliane <souliane@mailoo.org>
parents:
764
diff
changeset
|
28 from sat.core import exceptions |
455
72522263cbc9
plugin RadioCol: basic functionnality working approximately
Goffi <goffi@goffi.org>
parents:
453
diff
changeset
|
29 import os.path |
746
539f278bc265
plugin room_games, radiocol: send the current queue to new players
souliane <souliane@mailoo.org>
parents:
718
diff
changeset
|
30 import copy |
539f278bc265
plugin room_games, radiocol: send the current queue to new players
souliane <souliane@mailoo.org>
parents:
718
diff
changeset
|
31 import time |
577
593331663b80
plugin radiocol: songs are deleted once played (Q&D need to be reworked once file are properly transfered to server)
Goffi <goffi@goffi.org>
parents:
572
diff
changeset
|
32 from os import unlink |
1542
94901070478e
plugins: added new MissingModule exceptions to plugins using third party modules
Goffi <goffi@goffi.org>
parents:
1411
diff
changeset
|
33 try: |
94901070478e
plugins: added new MissingModule exceptions to plugins using third party modules
Goffi <goffi@goffi.org>
parents:
1411
diff
changeset
|
34 from mutagen.oggvorbis import OggVorbis, OggVorbisHeaderError |
94901070478e
plugins: added new MissingModule exceptions to plugins using third party modules
Goffi <goffi@goffi.org>
parents:
1411
diff
changeset
|
35 from mutagen.mp3 import MP3, HeaderNotFoundError |
94901070478e
plugins: added new MissingModule exceptions to plugins using third party modules
Goffi <goffi@goffi.org>
parents:
1411
diff
changeset
|
36 from mutagen.easyid3 import EasyID3 |
94901070478e
plugins: added new MissingModule exceptions to plugins using third party modules
Goffi <goffi@goffi.org>
parents:
1411
diff
changeset
|
37 from mutagen.id3 import ID3NoHeaderError |
94901070478e
plugins: added new MissingModule exceptions to plugins using third party modules
Goffi <goffi@goffi.org>
parents:
1411
diff
changeset
|
38 except ImportError: |
94901070478e
plugins: added new MissingModule exceptions to plugins using third party modules
Goffi <goffi@goffi.org>
parents:
1411
diff
changeset
|
39 raise exceptions.MissingModule(u"Missing module Mutagen, please download/install from https://bitbucket.org/lazka/mutagen") |
450 | 40 |
717
358018c5c398
plugins (games): more factorization and flexibility for launching and joining games:
souliane <souliane@mailoo.org>
parents:
714
diff
changeset
|
41 |
450 | 42 NC_RADIOCOL = 'http://www.goffi.org/protocol/radiocol' |
43 RADIOC_TAG = 'radiocol' | |
44 | |
45 PLUGIN_INFO = { | |
2145
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
46 C.PI_NAME: "Radio collective plugin", |
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
47 C.PI_IMPORT_NAME: "Radiocol", |
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
48 C.PI_TYPE: "Exp", |
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
49 C.PI_PROTOCOLS: [], |
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
50 C.PI_DEPENDENCIES: ["XEP-0045", "XEP-0249", "ROOM-GAME"], |
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
51 C.PI_MAIN: "Radiocol", |
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
52 C.PI_HANDLER: "yes", |
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
53 C.PI_DESCRIPTION: _("""Implementation of radio collective""") |
450 | 54 } |
55 | |
746
539f278bc265
plugin room_games, radiocol: send the current queue to new players
souliane <souliane@mailoo.org>
parents:
718
diff
changeset
|
56 |
539f278bc265
plugin room_games, radiocol: send the current queue to new players
souliane <souliane@mailoo.org>
parents:
718
diff
changeset
|
57 # Number of songs needed in the queue before we start playing |
539f278bc265
plugin room_games, radiocol: send the current queue to new players
souliane <souliane@mailoo.org>
parents:
718
diff
changeset
|
58 QUEUE_TO_START = 2 |
539f278bc265
plugin room_games, radiocol: send the current queue to new players
souliane <souliane@mailoo.org>
parents:
718
diff
changeset
|
59 # Maximum number of songs in the queue (the song being currently played doesn't count) |
457
fbe7c9118ce4
plugin radiocol: working Radio Collective \o/
Goffi <goffi@goffi.org>
parents:
456
diff
changeset
|
60 QUEUE_LIMIT = 2 |
fbe7c9118ce4
plugin radiocol: working Radio Collective \o/
Goffi <goffi@goffi.org>
parents:
456
diff
changeset
|
61 |
450 | 62 |
718
074970227bc0
plugin tools: turn src/plugin/games.py into a plugin and move it to src/plugins/plugin_misc_room_game.py
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
63 class Radiocol(object): |
074970227bc0
plugin tools: turn src/plugin/games.py into a plugin and move it to src/plugins/plugin_misc_room_game.py
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
64 |
074970227bc0
plugin tools: turn src/plugin/games.py into a plugin and move it to src/plugins/plugin_misc_room_game.py
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
65 def inheritFromRoomGame(self, host): |
074970227bc0
plugin tools: turn src/plugin/games.py into a plugin and move it to src/plugins/plugin_misc_room_game.py
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
66 global RoomGame |
074970227bc0
plugin tools: turn src/plugin/games.py into a plugin and move it to src/plugins/plugin_misc_room_game.py
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
67 RoomGame = host.plugins["ROOM-GAME"].__class__ |
074970227bc0
plugin tools: turn src/plugin/games.py into a plugin and move it to src/plugins/plugin_misc_room_game.py
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
68 self.__class__ = type(self.__class__.__name__, (self.__class__, RoomGame, object), {}) |
450 | 69 |
70 def __init__(self, host): | |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
941
diff
changeset
|
71 log.info(_("Radio collective initialization")) |
718
074970227bc0
plugin tools: turn src/plugin/games.py into a plugin and move it to src/plugins/plugin_misc_room_game.py
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
72 self.inheritFromRoomGame(host) |
074970227bc0
plugin tools: turn src/plugin/games.py into a plugin and move it to src/plugins/plugin_misc_room_game.py
souliane <souliane@mailoo.org>
parents:
717
diff
changeset
|
73 RoomGame._init_(self, host, PLUGIN_INFO, (NC_RADIOCOL, RADIOC_TAG), |
1359
83127a4c89ce
plugins room_game, quiz, radiocol, tarot: use JID instead of unicode in many methods + class attributes
souliane <souliane@mailoo.org>
parents:
1257
diff
changeset
|
74 game_init={'queue': [], 'upload': True, 'playing': None, 'playing_time': 0, 'to_delete': {}}) |
450 | 75 self.host = host |
1359
83127a4c89ce
plugins room_game, quiz, radiocol, tarot: use JID instead of unicode in many methods + class attributes
souliane <souliane@mailoo.org>
parents:
1257
diff
changeset
|
76 host.bridge.addMethod("radiocolLaunch", ".plugin", in_sign='asss', out_sign='', method=self._prepareRoom, async=True) |
83127a4c89ce
plugins room_game, quiz, radiocol, tarot: use JID instead of unicode in many methods + class attributes
souliane <souliane@mailoo.org>
parents:
1257
diff
changeset
|
77 host.bridge.addMethod("radiocolCreate", ".plugin", in_sign='sass', out_sign='', method=self._createGame) |
1730
8d7d0fbad773
plugin misc_radiocol: the smaller fix in the world (1 character!)
souliane <souliane@mailoo.org>
parents:
1542
diff
changeset
|
78 host.bridge.addMethod("radiocolSongAdded", ".plugin", in_sign='sss', out_sign='', method=self._radiocolSongAdded, async=True) |
717
358018c5c398
plugins (games): more factorization and flexibility for launching and joining games:
souliane <souliane@mailoo.org>
parents:
714
diff
changeset
|
79 host.bridge.addSignal("radiocolPlayers", ".plugin", signature='ssass') # room_jid, referee, players, profile |
746
539f278bc265
plugin room_games, radiocol: send the current queue to new players
souliane <souliane@mailoo.org>
parents:
718
diff
changeset
|
80 host.bridge.addSignal("radiocolStarted", ".plugin", signature='ssasais') # room_jid, referee, players, [QUEUE_TO_START, QUEUE_LIMIT], profile |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
81 host.bridge.addSignal("radiocolSongRejected", ".plugin", signature='sss') # room_jid, reason, profile |
903
c3fdf187a73a
plugin radiocol: preload signal also contains the uploader nickname
souliane <souliane@mailoo.org>
parents:
901
diff
changeset
|
82 host.bridge.addSignal("radiocolPreload", ".plugin", signature='ssssssss') # room_jid, timestamp, filename, title, artist, album, profile |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
83 host.bridge.addSignal("radiocolPlay", ".plugin", signature='sss') # room_jid, filename, profile |
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
84 host.bridge.addSignal("radiocolNoUpload", ".plugin", signature='ss') # room_jid, profile |
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
85 host.bridge.addSignal("radiocolUploadOk", ".plugin", signature='ss') # room_jid, profile |
450 | 86 |
746
539f278bc265
plugin room_games, radiocol: send the current queue to new players
souliane <souliane@mailoo.org>
parents:
718
diff
changeset
|
87 def __create_preload_elt(self, sender, song_added_elt): |
539f278bc265
plugin room_games, radiocol: send the current queue to new players
souliane <souliane@mailoo.org>
parents:
718
diff
changeset
|
88 preload_elt = copy.deepcopy(song_added_elt) |
539f278bc265
plugin room_games, radiocol: send the current queue to new players
souliane <souliane@mailoo.org>
parents:
718
diff
changeset
|
89 preload_elt.name = 'preload' |
457
fbe7c9118ce4
plugin radiocol: working Radio Collective \o/
Goffi <goffi@goffi.org>
parents:
456
diff
changeset
|
90 preload_elt['sender'] = sender |
746
539f278bc265
plugin room_games, radiocol: send the current queue to new players
souliane <souliane@mailoo.org>
parents:
718
diff
changeset
|
91 preload_elt['timestamp'] = str(time.time()) |
539f278bc265
plugin room_games, radiocol: send the current queue to new players
souliane <souliane@mailoo.org>
parents:
718
diff
changeset
|
92 # attributes filename, title, artist, album, length have been copied |
539f278bc265
plugin room_games, radiocol: send the current queue to new players
souliane <souliane@mailoo.org>
parents:
718
diff
changeset
|
93 # XXX: the frontend should know the temporary directory where file is put |
457
fbe7c9118ce4
plugin radiocol: working Radio Collective \o/
Goffi <goffi@goffi.org>
parents:
456
diff
changeset
|
94 return preload_elt |
fbe7c9118ce4
plugin radiocol: working Radio Collective \o/
Goffi <goffi@goffi.org>
parents:
456
diff
changeset
|
95 |
1411
8767c0bb7d48
plugin radiocol: radiocolSongAdded now gets a JID as argument, add _radiocolSongAdded working with unicode for bridge calls
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
96 def _radiocolSongAdded(self, referee_s, song_path, profile): |
8767c0bb7d48
plugin radiocol: radiocolSongAdded now gets a JID as argument, add _radiocolSongAdded working with unicode for bridge calls
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
97 return self.radiocolSongAdded(jid.JID(referee_s), song_path, profile) |
8767c0bb7d48
plugin radiocol: radiocolSongAdded now gets a JID as argument, add _radiocolSongAdded working with unicode for bridge calls
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
98 |
455
72522263cbc9
plugin RadioCol: basic functionnality working approximately
Goffi <goffi@goffi.org>
parents:
453
diff
changeset
|
99 def radiocolSongAdded(self, referee, song_path, profile): |
72522263cbc9
plugin RadioCol: basic functionnality working approximately
Goffi <goffi@goffi.org>
parents:
453
diff
changeset
|
100 """This method is called by libervia when a song has been uploaded |
1411
8767c0bb7d48
plugin radiocol: radiocolSongAdded now gets a JID as argument, add _radiocolSongAdded working with unicode for bridge calls
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
101 @param referee (jid.JID): JID of the referee in the room (room userhost + '/' + nick) |
8767c0bb7d48
plugin radiocol: radiocolSongAdded now gets a JID as argument, add _radiocolSongAdded working with unicode for bridge calls
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
102 @param song_path (unicode): absolute path of the song added |
8767c0bb7d48
plugin radiocol: radiocolSongAdded now gets a JID as argument, add _radiocolSongAdded working with unicode for bridge calls
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
103 @param profile_key (unicode): %(doc_profile_key)s |
849
c5a8f602662b
plugin room_game, radiocol: RoomGame.send returns a Deferred.
souliane <souliane@mailoo.org>
parents:
828
diff
changeset
|
104 @return: a Deferred instance |
c5a8f602662b
plugin room_game, radiocol: RoomGame.send returns a Deferred.
souliane <souliane@mailoo.org>
parents:
828
diff
changeset
|
105 """ |
1359
83127a4c89ce
plugins room_game, quiz, radiocol, tarot: use JID instead of unicode in many methods + class attributes
souliane <souliane@mailoo.org>
parents:
1257
diff
changeset
|
106 # XXX: this is a Q&D way for the proof of concept. In the future, the song should |
455
72522263cbc9
plugin RadioCol: basic functionnality working approximately
Goffi <goffi@goffi.org>
parents:
453
diff
changeset
|
107 # be streamed to the backend using XMPP file copy |
72522263cbc9
plugin RadioCol: basic functionnality working approximately
Goffi <goffi@goffi.org>
parents:
453
diff
changeset
|
108 # Here we cheat because we know we are on the same host, and we don't |
72522263cbc9
plugin RadioCol: basic functionnality working approximately
Goffi <goffi@goffi.org>
parents:
453
diff
changeset
|
109 # check data. Referee will have to parse the song himself to check it |
72522263cbc9
plugin RadioCol: basic functionnality working approximately
Goffi <goffi@goffi.org>
parents:
453
diff
changeset
|
110 try: |
901
c238d2c02237
plugin radiocol: add MP3 support
souliane <souliane@mailoo.org>
parents:
849
diff
changeset
|
111 if song_path.lower().endswith('.mp3'): |
c238d2c02237
plugin radiocol: add MP3 support
souliane <souliane@mailoo.org>
parents:
849
diff
changeset
|
112 actual_song = MP3(song_path) |
c238d2c02237
plugin radiocol: add MP3 support
souliane <souliane@mailoo.org>
parents:
849
diff
changeset
|
113 try: |
c238d2c02237
plugin radiocol: add MP3 support
souliane <souliane@mailoo.org>
parents:
849
diff
changeset
|
114 song = EasyID3(song_path) |
c238d2c02237
plugin radiocol: add MP3 support
souliane <souliane@mailoo.org>
parents:
849
diff
changeset
|
115 |
c238d2c02237
plugin radiocol: add MP3 support
souliane <souliane@mailoo.org>
parents:
849
diff
changeset
|
116 class Info(object): |
c238d2c02237
plugin radiocol: add MP3 support
souliane <souliane@mailoo.org>
parents:
849
diff
changeset
|
117 def __init__(self, length): |
c238d2c02237
plugin radiocol: add MP3 support
souliane <souliane@mailoo.org>
parents:
849
diff
changeset
|
118 self.length = length |
c238d2c02237
plugin radiocol: add MP3 support
souliane <souliane@mailoo.org>
parents:
849
diff
changeset
|
119 song.info = Info(actual_song.info.length) |
c238d2c02237
plugin radiocol: add MP3 support
souliane <souliane@mailoo.org>
parents:
849
diff
changeset
|
120 except ID3NoHeaderError: |
c238d2c02237
plugin radiocol: add MP3 support
souliane <souliane@mailoo.org>
parents:
849
diff
changeset
|
121 song = actual_song |
c238d2c02237
plugin radiocol: add MP3 support
souliane <souliane@mailoo.org>
parents:
849
diff
changeset
|
122 else: |
c238d2c02237
plugin radiocol: add MP3 support
souliane <souliane@mailoo.org>
parents:
849
diff
changeset
|
123 song = OggVorbis(song_path) |
c238d2c02237
plugin radiocol: add MP3 support
souliane <souliane@mailoo.org>
parents:
849
diff
changeset
|
124 except (OggVorbisHeaderError, HeaderNotFoundError): |
1359
83127a4c89ce
plugins room_game, quiz, radiocol, tarot: use JID instead of unicode in many methods + class attributes
souliane <souliane@mailoo.org>
parents:
1257
diff
changeset
|
125 # this file is not ogg vorbis nor mp3, we reject it |
746
539f278bc265
plugin room_games, radiocol: send the current queue to new players
souliane <souliane@mailoo.org>
parents:
718
diff
changeset
|
126 self.deleteFile(song_path) # FIXME: same host trick (see note above) |
901
c238d2c02237
plugin radiocol: add MP3 support
souliane <souliane@mailoo.org>
parents:
849
diff
changeset
|
127 return defer.fail(exceptions.DataError(D_("The uploaded file has been rejected, only Ogg Vorbis and MP3 songs are accepted."))) |
c238d2c02237
plugin radiocol: add MP3 support
souliane <souliane@mailoo.org>
parents:
849
diff
changeset
|
128 |
714
ecc5a5b34ee1
plugins (games): add a method to send messages more easily
souliane <souliane@mailoo.org>
parents:
712
diff
changeset
|
129 attrs = {'filename': os.path.basename(song_path), |
ecc5a5b34ee1
plugins (games): add a method to send messages more easily
souliane <souliane@mailoo.org>
parents:
712
diff
changeset
|
130 'title': song.get("title", ["Unknown"])[0], |
ecc5a5b34ee1
plugins (games): add a method to send messages more easily
souliane <souliane@mailoo.org>
parents:
712
diff
changeset
|
131 'artist': song.get("artist", ["Unknown"])[0], |
ecc5a5b34ee1
plugins (games): add a method to send messages more easily
souliane <souliane@mailoo.org>
parents:
712
diff
changeset
|
132 'album': song.get("album", ["Unknown"])[0], |
ecc5a5b34ee1
plugins (games): add a method to send messages more easily
souliane <souliane@mailoo.org>
parents:
712
diff
changeset
|
133 'length': str(song.info.length) |
ecc5a5b34ee1
plugins (games): add a method to send messages more easily
souliane <souliane@mailoo.org>
parents:
712
diff
changeset
|
134 } |
1411
8767c0bb7d48
plugin radiocol: radiocolSongAdded now gets a JID as argument, add _radiocolSongAdded working with unicode for bridge calls
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
135 radio_data = self.games[referee.userhostJID()] # FIXME: referee comes from Libervia's client side, it's unsecure |
714
ecc5a5b34ee1
plugins (games): add a method to send messages more easily
souliane <souliane@mailoo.org>
parents:
712
diff
changeset
|
136 radio_data['to_delete'][attrs['filename']] = song_path # FIXME: works only because of the same host trick, see the note under the docstring |
1411
8767c0bb7d48
plugin radiocol: radiocolSongAdded now gets a JID as argument, add _radiocolSongAdded working with unicode for bridge calls
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
137 return self.send(referee, ('', 'song_added'), attrs, profile=profile) |
455
72522263cbc9
plugin RadioCol: basic functionnality working approximately
Goffi <goffi@goffi.org>
parents:
453
diff
changeset
|
138 |
457
fbe7c9118ce4
plugin radiocol: working Radio Collective \o/
Goffi <goffi@goffi.org>
parents:
456
diff
changeset
|
139 def playNext(self, room_jid, profile): |
746
539f278bc265
plugin room_games, radiocol: send the current queue to new players
souliane <souliane@mailoo.org>
parents:
718
diff
changeset
|
140 """"Play next song in queue if exists, and put a timer |
457
fbe7c9118ce4
plugin radiocol: working Radio Collective \o/
Goffi <goffi@goffi.org>
parents:
456
diff
changeset
|
141 which trigger after the song has been played to play next one""" |
1359
83127a4c89ce
plugins room_game, quiz, radiocol, tarot: use JID instead of unicode in many methods + class attributes
souliane <souliane@mailoo.org>
parents:
1257
diff
changeset
|
142 # TODO: songs need to be erased once played or found invalids |
577
593331663b80
plugin radiocol: songs are deleted once played (Q&D need to be reworked once file are properly transfered to server)
Goffi <goffi@goffi.org>
parents:
572
diff
changeset
|
143 # ==> unlink done the Q&D way with the same host trick (see above) |
1359
83127a4c89ce
plugins room_game, quiz, radiocol, tarot: use JID instead of unicode in many methods + class attributes
souliane <souliane@mailoo.org>
parents:
1257
diff
changeset
|
144 radio_data = self.games[room_jid] |
746
539f278bc265
plugin room_games, radiocol: send the current queue to new players
souliane <souliane@mailoo.org>
parents:
718
diff
changeset
|
145 if len(radio_data['players']) == 0: |
1409
3265a2639182
massive (preventive) addition of 'u' (unicode) before the strings passed to logging functions
souliane <souliane@mailoo.org>
parents:
1396
diff
changeset
|
146 log.debug(_(u'No more participants in the radiocol: cleaning data')) |
746
539f278bc265
plugin room_games, radiocol: send the current queue to new players
souliane <souliane@mailoo.org>
parents:
718
diff
changeset
|
147 radio_data['queue'] = [] |
539f278bc265
plugin room_games, radiocol: send the current queue to new players
souliane <souliane@mailoo.org>
parents:
718
diff
changeset
|
148 for filename in radio_data['to_delete']: |
764
d0e809014ea2
plugin radiocol: fix wrong call of deleteFile
souliane <souliane@mailoo.org>
parents:
746
diff
changeset
|
149 self.deleteFile(filename, radio_data) |
746
539f278bc265
plugin room_games, radiocol: send the current queue to new players
souliane <souliane@mailoo.org>
parents:
718
diff
changeset
|
150 radio_data['to_delete'] = {} |
457
fbe7c9118ce4
plugin radiocol: working Radio Collective \o/
Goffi <goffi@goffi.org>
parents:
456
diff
changeset
|
151 queue = radio_data['queue'] |
fbe7c9118ce4
plugin radiocol: working Radio Collective \o/
Goffi <goffi@goffi.org>
parents:
456
diff
changeset
|
152 if not queue: |
1359
83127a4c89ce
plugins room_game, quiz, radiocol, tarot: use JID instead of unicode in many methods + class attributes
souliane <souliane@mailoo.org>
parents:
1257
diff
changeset
|
153 # nothing left to play, we need to wait for uploads |
827
215a2cb15e2d
plugin radiocol: sync data includes a "jump to time" info
souliane <souliane@mailoo.org>
parents:
826
diff
changeset
|
154 radio_data['playing'] = None |
457
fbe7c9118ce4
plugin radiocol: working Radio Collective \o/
Goffi <goffi@goffi.org>
parents:
456
diff
changeset
|
155 return |
746
539f278bc265
plugin room_games, radiocol: send the current queue to new players
souliane <souliane@mailoo.org>
parents:
718
diff
changeset
|
156 song = queue.pop(0) |
539f278bc265
plugin room_games, radiocol: send the current queue to new players
souliane <souliane@mailoo.org>
parents:
718
diff
changeset
|
157 filename, length = song['filename'], float(song['length']) |
714
ecc5a5b34ee1
plugins (games): add a method to send messages more easily
souliane <souliane@mailoo.org>
parents:
712
diff
changeset
|
158 self.send(room_jid, ('', 'play'), {'filename': filename}, profile=profile) |
827
215a2cb15e2d
plugin radiocol: sync data includes a "jump to time" info
souliane <souliane@mailoo.org>
parents:
826
diff
changeset
|
159 radio_data['playing'] = song |
215a2cb15e2d
plugin radiocol: sync data includes a "jump to time" info
souliane <souliane@mailoo.org>
parents:
826
diff
changeset
|
160 radio_data['playing_time'] = time.time() |
457
fbe7c9118ce4
plugin radiocol: working Radio Collective \o/
Goffi <goffi@goffi.org>
parents:
456
diff
changeset
|
161 |
fbe7c9118ce4
plugin radiocol: working Radio Collective \o/
Goffi <goffi@goffi.org>
parents:
456
diff
changeset
|
162 if not radio_data['upload'] and len(queue) < QUEUE_LIMIT: |
1359
83127a4c89ce
plugins room_game, quiz, radiocol, tarot: use JID instead of unicode in many methods + class attributes
souliane <souliane@mailoo.org>
parents:
1257
diff
changeset
|
163 # upload is blocked and we now have resources to get more, we reactivate it |
714
ecc5a5b34ee1
plugins (games): add a method to send messages more easily
souliane <souliane@mailoo.org>
parents:
712
diff
changeset
|
164 self.send(room_jid, ('', 'upload_ok'), profile=profile) |
457
fbe7c9118ce4
plugin radiocol: working Radio Collective \o/
Goffi <goffi@goffi.org>
parents:
456
diff
changeset
|
165 radio_data['upload'] = True |
fbe7c9118ce4
plugin radiocol: working Radio Collective \o/
Goffi <goffi@goffi.org>
parents:
456
diff
changeset
|
166 |
fbe7c9118ce4
plugin radiocol: working Radio Collective \o/
Goffi <goffi@goffi.org>
parents:
456
diff
changeset
|
167 reactor.callLater(length, self.playNext, room_jid, profile) |
1359
83127a4c89ce
plugins room_game, quiz, radiocol, tarot: use JID instead of unicode in many methods + class attributes
souliane <souliane@mailoo.org>
parents:
1257
diff
changeset
|
168 # we wait more than the song length to delete the file, to manage poorly reactive networks/clients |
764
d0e809014ea2
plugin radiocol: fix wrong call of deleteFile
souliane <souliane@mailoo.org>
parents:
746
diff
changeset
|
169 reactor.callLater(length + 90, self.deleteFile, filename, radio_data) # FIXME: same host trick (see above) |
746
539f278bc265
plugin room_games, radiocol: send the current queue to new players
souliane <souliane@mailoo.org>
parents:
718
diff
changeset
|
170 |
764
d0e809014ea2
plugin radiocol: fix wrong call of deleteFile
souliane <souliane@mailoo.org>
parents:
746
diff
changeset
|
171 def deleteFile(self, filename, radio_data=None): |
d0e809014ea2
plugin radiocol: fix wrong call of deleteFile
souliane <souliane@mailoo.org>
parents:
746
diff
changeset
|
172 """ |
d0e809014ea2
plugin radiocol: fix wrong call of deleteFile
souliane <souliane@mailoo.org>
parents:
746
diff
changeset
|
173 Delete a previously uploaded file. |
d0e809014ea2
plugin radiocol: fix wrong call of deleteFile
souliane <souliane@mailoo.org>
parents:
746
diff
changeset
|
174 @param filename: filename to delete, or full filepath if radio_data is None |
d0e809014ea2
plugin radiocol: fix wrong call of deleteFile
souliane <souliane@mailoo.org>
parents:
746
diff
changeset
|
175 @param radio_data: current game data |
d0e809014ea2
plugin radiocol: fix wrong call of deleteFile
souliane <souliane@mailoo.org>
parents:
746
diff
changeset
|
176 @return: True if the file has been deleted |
d0e809014ea2
plugin radiocol: fix wrong call of deleteFile
souliane <souliane@mailoo.org>
parents:
746
diff
changeset
|
177 """ |
d0e809014ea2
plugin radiocol: fix wrong call of deleteFile
souliane <souliane@mailoo.org>
parents:
746
diff
changeset
|
178 if radio_data: |
d0e809014ea2
plugin radiocol: fix wrong call of deleteFile
souliane <souliane@mailoo.org>
parents:
746
diff
changeset
|
179 try: |
d0e809014ea2
plugin radiocol: fix wrong call of deleteFile
souliane <souliane@mailoo.org>
parents:
746
diff
changeset
|
180 file_to_delete = radio_data['to_delete'][filename] |
d0e809014ea2
plugin radiocol: fix wrong call of deleteFile
souliane <souliane@mailoo.org>
parents:
746
diff
changeset
|
181 except KeyError: |
1409
3265a2639182
massive (preventive) addition of 'u' (unicode) before the strings passed to logging functions
souliane <souliane@mailoo.org>
parents:
1396
diff
changeset
|
182 log.error(_(u"INTERNAL ERROR: can't find full path of the song to delete")) |
764
d0e809014ea2
plugin radiocol: fix wrong call of deleteFile
souliane <souliane@mailoo.org>
parents:
746
diff
changeset
|
183 return False |
d0e809014ea2
plugin radiocol: fix wrong call of deleteFile
souliane <souliane@mailoo.org>
parents:
746
diff
changeset
|
184 else: |
d0e809014ea2
plugin radiocol: fix wrong call of deleteFile
souliane <souliane@mailoo.org>
parents:
746
diff
changeset
|
185 file_to_delete = filename |
746
539f278bc265
plugin room_games, radiocol: send the current queue to new players
souliane <souliane@mailoo.org>
parents:
718
diff
changeset
|
186 try: |
539f278bc265
plugin room_games, radiocol: send the current queue to new players
souliane <souliane@mailoo.org>
parents:
718
diff
changeset
|
187 unlink(file_to_delete) |
539f278bc265
plugin room_games, radiocol: send the current queue to new players
souliane <souliane@mailoo.org>
parents:
718
diff
changeset
|
188 except OSError: |
1409
3265a2639182
massive (preventive) addition of 'u' (unicode) before the strings passed to logging functions
souliane <souliane@mailoo.org>
parents:
1396
diff
changeset
|
189 log.error(_(u"INTERNAL ERROR: can't find %s on the file system" % file_to_delete)) |
746
539f278bc265
plugin room_games, radiocol: send the current queue to new players
souliane <souliane@mailoo.org>
parents:
718
diff
changeset
|
190 return False |
539f278bc265
plugin room_games, radiocol: send the current queue to new players
souliane <souliane@mailoo.org>
parents:
718
diff
changeset
|
191 return True |
455
72522263cbc9
plugin RadioCol: basic functionnality working approximately
Goffi <goffi@goffi.org>
parents:
453
diff
changeset
|
192 |
717
358018c5c398
plugins (games): more factorization and flexibility for launching and joining games:
souliane <souliane@mailoo.org>
parents:
714
diff
changeset
|
193 def room_game_cmd(self, mess_elt, profile): |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
577
diff
changeset
|
194 from_jid = jid.JID(mess_elt['from']) |
1359
83127a4c89ce
plugins room_game, quiz, radiocol, tarot: use JID instead of unicode in many methods + class attributes
souliane <souliane@mailoo.org>
parents:
1257
diff
changeset
|
195 room_jid = from_jid.userhostJID() |
83127a4c89ce
plugins room_game, quiz, radiocol, tarot: use JID instead of unicode in many methods + class attributes
souliane <souliane@mailoo.org>
parents:
1257
diff
changeset
|
196 nick = self.host.plugins["XEP-0045"].getRoomNick(room_jid, profile) |
826
71f8e996f765
plugins radiocol_tarot: do not process received messages for MUC users that are actually not playing the game + fix for testing purpose
souliane <souliane@mailoo.org>
parents:
825
diff
changeset
|
197 |
450 | 198 radio_elt = mess_elt.firstChildElement() |
1359
83127a4c89ce
plugins room_game, quiz, radiocol, tarot: use JID instead of unicode in many methods + class attributes
souliane <souliane@mailoo.org>
parents:
1257
diff
changeset
|
199 radio_data = self.games[room_jid] |
717
358018c5c398
plugins (games): more factorization and flexibility for launching and joining games:
souliane <souliane@mailoo.org>
parents:
714
diff
changeset
|
200 if 'queue' in radio_data: |
358018c5c398
plugins (games): more factorization and flexibility for launching and joining games:
souliane <souliane@mailoo.org>
parents:
714
diff
changeset
|
201 queue = radio_data['queue'] |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
577
diff
changeset
|
202 |
1359
83127a4c89ce
plugins room_game, quiz, radiocol, tarot: use JID instead of unicode in many methods + class attributes
souliane <souliane@mailoo.org>
parents:
1257
diff
changeset
|
203 from_referee = self.isReferee(room_jid, from_jid.resource) |
83127a4c89ce
plugins room_game, quiz, radiocol, tarot: use JID instead of unicode in many methods + class attributes
souliane <souliane@mailoo.org>
parents:
1257
diff
changeset
|
204 to_referee = self.isReferee(room_jid, jid.JID(mess_elt['to']).user) |
83127a4c89ce
plugins room_game, quiz, radiocol, tarot: use JID instead of unicode in many methods + class attributes
souliane <souliane@mailoo.org>
parents:
1257
diff
changeset
|
205 is_player = self.isPlayer(room_jid, nick) |
450 | 206 for elt in radio_elt.elements(): |
746
539f278bc265
plugin room_games, radiocol: send the current queue to new players
souliane <souliane@mailoo.org>
parents:
718
diff
changeset
|
207 if not from_referee and not (to_referee and elt.name == 'song_added'): |
539f278bc265
plugin room_games, radiocol: send the current queue to new players
souliane <souliane@mailoo.org>
parents:
718
diff
changeset
|
208 continue # sender must be referee, expect when a song is submitted |
826
71f8e996f765
plugins radiocol_tarot: do not process received messages for MUC users that are actually not playing the game + fix for testing purpose
souliane <souliane@mailoo.org>
parents:
825
diff
changeset
|
209 if not is_player and (elt.name not in ('started', 'players')): |
71f8e996f765
plugins radiocol_tarot: do not process received messages for MUC users that are actually not playing the game + fix for testing purpose
souliane <souliane@mailoo.org>
parents:
825
diff
changeset
|
210 continue # user is in the room but not playing |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
577
diff
changeset
|
211 |
826
71f8e996f765
plugins radiocol_tarot: do not process received messages for MUC users that are actually not playing the game + fix for testing purpose
souliane <souliane@mailoo.org>
parents:
825
diff
changeset
|
212 if elt.name in ('started', 'players'): # new game created and/or players list updated |
717
358018c5c398
plugins (games): more factorization and flexibility for launching and joining games:
souliane <souliane@mailoo.org>
parents:
714
diff
changeset
|
213 players = [] |
358018c5c398
plugins (games): more factorization and flexibility for launching and joining games:
souliane <souliane@mailoo.org>
parents:
714
diff
changeset
|
214 for player in elt.elements(): |
358018c5c398
plugins (games): more factorization and flexibility for launching and joining games:
souliane <souliane@mailoo.org>
parents:
714
diff
changeset
|
215 players.append(unicode(player)) |
358018c5c398
plugins (games): more factorization and flexibility for launching and joining games:
souliane <souliane@mailoo.org>
parents:
714
diff
changeset
|
216 signal = self.host.bridge.radiocolStarted if elt.name == 'started' else self.host.bridge.radiocolPlayers |
746
539f278bc265
plugin room_games, radiocol: send the current queue to new players
souliane <souliane@mailoo.org>
parents:
718
diff
changeset
|
217 signal(room_jid.userhost(), from_jid.full(), players, [QUEUE_TO_START, QUEUE_LIMIT], profile) |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
218 elif elt.name == 'preload': # a song is in queue and must be preloaded |
903
c3fdf187a73a
plugin radiocol: preload signal also contains the uploader nickname
souliane <souliane@mailoo.org>
parents:
901
diff
changeset
|
219 self.host.bridge.radiocolPreload(room_jid.userhost(), elt['timestamp'], elt['filename'], elt['title'], elt['artist'], elt['album'], elt['sender'], profile) |
457
fbe7c9118ce4
plugin radiocol: working Radio Collective \o/
Goffi <goffi@goffi.org>
parents:
456
diff
changeset
|
220 elif elt.name == 'play': |
fbe7c9118ce4
plugin radiocol: working Radio Collective \o/
Goffi <goffi@goffi.org>
parents:
456
diff
changeset
|
221 self.host.bridge.radiocolPlay(room_jid.userhost(), elt['filename'], profile) |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
222 elif elt.name == 'song_rejected': # a song has been refused |
577
593331663b80
plugin radiocol: songs are deleted once played (Q&D need to be reworked once file are properly transfered to server)
Goffi <goffi@goffi.org>
parents:
572
diff
changeset
|
223 self.host.bridge.radiocolSongRejected(room_jid.userhost(), elt['reason'], profile) |
457
fbe7c9118ce4
plugin radiocol: working Radio Collective \o/
Goffi <goffi@goffi.org>
parents:
456
diff
changeset
|
224 elif elt.name == 'no_upload': |
fbe7c9118ce4
plugin radiocol: working Radio Collective \o/
Goffi <goffi@goffi.org>
parents:
456
diff
changeset
|
225 self.host.bridge.radiocolNoUpload(room_jid.userhost(), profile) |
fbe7c9118ce4
plugin radiocol: working Radio Collective \o/
Goffi <goffi@goffi.org>
parents:
456
diff
changeset
|
226 elif elt.name == 'upload_ok': |
fbe7c9118ce4
plugin radiocol: working Radio Collective \o/
Goffi <goffi@goffi.org>
parents:
456
diff
changeset
|
227 self.host.bridge.radiocolUploadOk(room_jid.userhost(), profile) |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
228 elif elt.name == 'song_added': # a song has been added |
1359
83127a4c89ce
plugins room_game, quiz, radiocol, tarot: use JID instead of unicode in many methods + class attributes
souliane <souliane@mailoo.org>
parents:
1257
diff
changeset
|
229 # FIXME: we are KISS for the proof of concept: every song is added, to a limit of 3 in queue. |
457
fbe7c9118ce4
plugin radiocol: working Radio Collective \o/
Goffi <goffi@goffi.org>
parents:
456
diff
changeset
|
230 # Need to manage some sort of rules to allow peoples to send songs |
fbe7c9118ce4
plugin radiocol: working Radio Collective \o/
Goffi <goffi@goffi.org>
parents:
456
diff
changeset
|
231 if len(queue) >= QUEUE_LIMIT: |
1359
83127a4c89ce
plugins room_game, quiz, radiocol, tarot: use JID instead of unicode in many methods + class attributes
souliane <souliane@mailoo.org>
parents:
1257
diff
changeset
|
232 # there are already too many songs in queue, we reject this one |
83127a4c89ce
plugins room_game, quiz, radiocol, tarot: use JID instead of unicode in many methods + class attributes
souliane <souliane@mailoo.org>
parents:
1257
diff
changeset
|
233 # FIXME: add an error code |
746
539f278bc265
plugin room_games, radiocol: send the current queue to new players
souliane <souliane@mailoo.org>
parents:
718
diff
changeset
|
234 self.send(from_jid, ('', 'song_rejected'), {'reason': "Too many songs in queue"}, profile=profile) |
457
fbe7c9118ce4
plugin radiocol: working Radio Collective \o/
Goffi <goffi@goffi.org>
parents:
456
diff
changeset
|
235 return |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
577
diff
changeset
|
236 |
1359
83127a4c89ce
plugins room_game, quiz, radiocol, tarot: use JID instead of unicode in many methods + class attributes
souliane <souliane@mailoo.org>
parents:
1257
diff
changeset
|
237 # The song is accepted and added in queue |
746
539f278bc265
plugin room_games, radiocol: send the current queue to new players
souliane <souliane@mailoo.org>
parents:
718
diff
changeset
|
238 preload_elt = self.__create_preload_elt(from_jid.resource, elt) |
539f278bc265
plugin room_games, radiocol: send the current queue to new players
souliane <souliane@mailoo.org>
parents:
718
diff
changeset
|
239 queue.append(preload_elt) |
457
fbe7c9118ce4
plugin radiocol: working Radio Collective \o/
Goffi <goffi@goffi.org>
parents:
456
diff
changeset
|
240 |
fbe7c9118ce4
plugin radiocol: working Radio Collective \o/
Goffi <goffi@goffi.org>
parents:
456
diff
changeset
|
241 if len(queue) >= QUEUE_LIMIT: |
1359
83127a4c89ce
plugins room_game, quiz, radiocol, tarot: use JID instead of unicode in many methods + class attributes
souliane <souliane@mailoo.org>
parents:
1257
diff
changeset
|
242 # We are at the limit, we refuse new upload until next play |
714
ecc5a5b34ee1
plugins (games): add a method to send messages more easily
souliane <souliane@mailoo.org>
parents:
712
diff
changeset
|
243 self.send(room_jid, ('', 'no_upload'), profile=profile) |
457
fbe7c9118ce4
plugin radiocol: working Radio Collective \o/
Goffi <goffi@goffi.org>
parents:
456
diff
changeset
|
244 radio_data['upload'] = False |
fbe7c9118ce4
plugin radiocol: working Radio Collective \o/
Goffi <goffi@goffi.org>
parents:
456
diff
changeset
|
245 |
714
ecc5a5b34ee1
plugins (games): add a method to send messages more easily
souliane <souliane@mailoo.org>
parents:
712
diff
changeset
|
246 self.send(room_jid, preload_elt, profile=profile) |
746
539f278bc265
plugin room_games, radiocol: send the current queue to new players
souliane <souliane@mailoo.org>
parents:
718
diff
changeset
|
247 if not radio_data['playing'] and len(queue) == QUEUE_TO_START: |
539f278bc265
plugin room_games, radiocol: send the current queue to new players
souliane <souliane@mailoo.org>
parents:
718
diff
changeset
|
248 # We have not started playing yet, and we have QUEUE_TO_START |
539f278bc265
plugin room_games, radiocol: send the current queue to new players
souliane <souliane@mailoo.org>
parents:
718
diff
changeset
|
249 # songs in queue. We can now start the party :) |
457
fbe7c9118ce4
plugin radiocol: working Radio Collective \o/
Goffi <goffi@goffi.org>
parents:
456
diff
changeset
|
250 self.playNext(room_jid, profile) |
450 | 251 else: |
1409
3265a2639182
massive (preventive) addition of 'u' (unicode) before the strings passed to logging functions
souliane <souliane@mailoo.org>
parents:
1396
diff
changeset
|
252 log.error(_(u'Unmanaged game element: %s') % elt.name) |
746
539f278bc265
plugin room_games, radiocol: send the current queue to new players
souliane <souliane@mailoo.org>
parents:
718
diff
changeset
|
253 |
1359
83127a4c89ce
plugins room_game, quiz, radiocol, tarot: use JID instead of unicode in many methods + class attributes
souliane <souliane@mailoo.org>
parents:
1257
diff
changeset
|
254 def getSyncDataForPlayer(self, room_jid, nick): |
83127a4c89ce
plugins room_game, quiz, radiocol, tarot: use JID instead of unicode in many methods + class attributes
souliane <souliane@mailoo.org>
parents:
1257
diff
changeset
|
255 game_data = self.games[room_jid] |
828
8f335c03eebb
plugins room_games, radiocol, libervia: small changes like refactorization to ease the maintenance
souliane <souliane@mailoo.org>
parents:
827
diff
changeset
|
256 elements = [] |
8f335c03eebb
plugins room_games, radiocol, libervia: small changes like refactorization to ease the maintenance
souliane <souliane@mailoo.org>
parents:
827
diff
changeset
|
257 if game_data['playing']: |
8f335c03eebb
plugins room_games, radiocol, libervia: small changes like refactorization to ease the maintenance
souliane <souliane@mailoo.org>
parents:
827
diff
changeset
|
258 preload = copy.deepcopy(game_data['playing']) |
8f335c03eebb
plugins room_games, radiocol, libervia: small changes like refactorization to ease the maintenance
souliane <souliane@mailoo.org>
parents:
827
diff
changeset
|
259 current_time = game_data['playing_time'] + 1 if self.testing else time.time() |
8f335c03eebb
plugins room_games, radiocol, libervia: small changes like refactorization to ease the maintenance
souliane <souliane@mailoo.org>
parents:
827
diff
changeset
|
260 preload['filename'] += '#t=%.2f' % (current_time - game_data['playing_time']) |
8f335c03eebb
plugins room_games, radiocol, libervia: small changes like refactorization to ease the maintenance
souliane <souliane@mailoo.org>
parents:
827
diff
changeset
|
261 elements.append(preload) |
8f335c03eebb
plugins room_games, radiocol, libervia: small changes like refactorization to ease the maintenance
souliane <souliane@mailoo.org>
parents:
827
diff
changeset
|
262 play = domish.Element(('', 'play')) |
8f335c03eebb
plugins room_games, radiocol, libervia: small changes like refactorization to ease the maintenance
souliane <souliane@mailoo.org>
parents:
827
diff
changeset
|
263 play['filename'] = preload['filename'] |
8f335c03eebb
plugins room_games, radiocol, libervia: small changes like refactorization to ease the maintenance
souliane <souliane@mailoo.org>
parents:
827
diff
changeset
|
264 elements.append(play) |
8f335c03eebb
plugins room_games, radiocol, libervia: small changes like refactorization to ease the maintenance
souliane <souliane@mailoo.org>
parents:
827
diff
changeset
|
265 if len(game_data['queue']) > 0: |
8f335c03eebb
plugins room_games, radiocol, libervia: small changes like refactorization to ease the maintenance
souliane <souliane@mailoo.org>
parents:
827
diff
changeset
|
266 elements.extend(copy.deepcopy(game_data['queue'])) |
8f335c03eebb
plugins room_games, radiocol, libervia: small changes like refactorization to ease the maintenance
souliane <souliane@mailoo.org>
parents:
827
diff
changeset
|
267 if len(game_data['queue']) == QUEUE_LIMIT: |
8f335c03eebb
plugins room_games, radiocol, libervia: small changes like refactorization to ease the maintenance
souliane <souliane@mailoo.org>
parents:
827
diff
changeset
|
268 elements.append(domish.Element(('', 'no_upload'))) |
8f335c03eebb
plugins room_games, radiocol, libervia: small changes like refactorization to ease the maintenance
souliane <souliane@mailoo.org>
parents:
827
diff
changeset
|
269 return elements |