Mercurial > libervia-backend
annotate src/plugins/plugin_misc_radiocol.py @ 1955:633b5c21aefd
backend, frontend: messages refactoring (huge commit, not finished):
/!\ database schema has been modified, do a backup before updating
message have been refactored, here are the main changes:
- languages are now handled
- all messages have an uid (internal to SàT)
- message updating is anticipated
- subject is now first class
- new naming scheme is used newMessage => messageNew, getHistory => historyGet, sendMessage => messageSend
- minimal compatibility refactoring in quick_frontend/Primitivus, better refactoring should follow
- threads handling
- delayed messages are saved into history
- info messages may also be saved in history (e.g. to keep track of people joining/leaving a room)
- duplicate messages should be avoided
- historyGet return messages in right order, no need to sort again
- plugins have been updated to follow new features, some of them need to be reworked (e.g. OTR)
- XEP-0203 (Delayed Delivery) is now fully handled in core, the plugin just handle disco and creation of a delay element
- /!\ jp and Libervia are currently broken, as some features of Primitivus
It has been put in one huge commit to avoid breaking messaging between changes.
This is the main part of message refactoring, other commits will follow to take profit of the new features/behaviour.
author | Goffi <goffi@goffi.org> |
---|---|
date | Tue, 24 May 2016 22:11:04 +0200 |
parents | 2daf7b4c6756 |
children | 33c8c4973743 |
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 |
1766 | 5 # Copyright (C) 2009-2016 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_ |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
941
diff
changeset
|
21 from sat.core.log import getLogger |
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
941
diff
changeset
|
22 log = getLogger(__name__) |
450 | 23 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
|
24 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
|
25 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
|
26 from twisted.internet import defer |
765
787ee59dba9c
plugins radiocol, xep-0054: better handling of upload errors:
souliane <souliane@mailoo.org>
parents:
764
diff
changeset
|
27 from sat.core import exceptions |
455
72522263cbc9
plugin RadioCol: basic functionnality working approximately
Goffi <goffi@goffi.org>
parents:
453
diff
changeset
|
28 import os.path |
746
539f278bc265
plugin room_games, radiocol: send the current queue to new players
souliane <souliane@mailoo.org>
parents:
718
diff
changeset
|
29 import copy |
539f278bc265
plugin room_games, radiocol: send the current queue to new players
souliane <souliane@mailoo.org>
parents:
718
diff
changeset
|
30 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
|
31 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
|
32 try: |
94901070478e
plugins: added new MissingModule exceptions to plugins using third party modules
Goffi <goffi@goffi.org>
parents:
1411
diff
changeset
|
33 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
|
34 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
|
35 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
|
36 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
|
37 except ImportError: |
94901070478e
plugins: added new MissingModule exceptions to plugins using third party modules
Goffi <goffi@goffi.org>
parents:
1411
diff
changeset
|
38 raise exceptions.MissingModule(u"Missing module Mutagen, please download/install from https://bitbucket.org/lazka/mutagen") |
450 | 39 |
717
358018c5c398
plugins (games): more factorization and flexibility for launching and joining games:
souliane <souliane@mailoo.org>
parents:
714
diff
changeset
|
40 |
450 | 41 NC_RADIOCOL = 'http://www.goffi.org/protocol/radiocol' |
42 RADIOC_TAG = 'radiocol' | |
43 | |
44 PLUGIN_INFO = { | |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
45 "name": "Radio collective plugin", |
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
46 "import_name": "Radiocol", |
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
47 "type": "Exp", |
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
48 "protocols": [], |
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
|
49 "dependencies": ["XEP-0045", "XEP-0249", "ROOM-GAME"], |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
50 "main": "Radiocol", |
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
51 "handler": "yes", |
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
52 "description": _("""Implementation of radio collective""") |
450 | 53 } |
54 | |
746
539f278bc265
plugin room_games, radiocol: send the current queue to new players
souliane <souliane@mailoo.org>
parents:
718
diff
changeset
|
55 |
539f278bc265
plugin room_games, radiocol: send the current queue to new players
souliane <souliane@mailoo.org>
parents:
718
diff
changeset
|
56 # 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
|
57 QUEUE_TO_START = 2 |
539f278bc265
plugin room_games, radiocol: send the current queue to new players
souliane <souliane@mailoo.org>
parents:
718
diff
changeset
|
58 # 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
|
59 QUEUE_LIMIT = 2 |
fbe7c9118ce4
plugin radiocol: working Radio Collective \o/
Goffi <goffi@goffi.org>
parents:
456
diff
changeset
|
60 |
450 | 61 |
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
|
62 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
|
63 |
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 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
|
65 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
|
66 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
|
67 self.__class__ = type(self.__class__.__name__, (self.__class__, RoomGame, object), {}) |
450 | 68 |
69 def __init__(self, host): | |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
941
diff
changeset
|
70 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
|
71 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
|
72 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
|
73 game_init={'queue': [], 'upload': True, 'playing': None, 'playing_time': 0, 'to_delete': {}}) |
450 | 74 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
|
75 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
|
76 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
|
77 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
|
78 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
|
79 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
|
80 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
|
81 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
|
82 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
|
83 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
|
84 host.bridge.addSignal("radiocolUploadOk", ".plugin", signature='ss') # room_jid, profile |
450 | 85 |
746
539f278bc265
plugin room_games, radiocol: send the current queue to new players
souliane <souliane@mailoo.org>
parents:
718
diff
changeset
|
86 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
|
87 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
|
88 preload_elt.name = 'preload' |
457
fbe7c9118ce4
plugin radiocol: working Radio Collective \o/
Goffi <goffi@goffi.org>
parents:
456
diff
changeset
|
89 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
|
90 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
|
91 # 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
|
92 # 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
|
93 return preload_elt |
fbe7c9118ce4
plugin radiocol: working Radio Collective \o/
Goffi <goffi@goffi.org>
parents:
456
diff
changeset
|
94 |
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
|
95 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
|
96 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
|
97 |
455
72522263cbc9
plugin RadioCol: basic functionnality working approximately
Goffi <goffi@goffi.org>
parents:
453
diff
changeset
|
98 def radiocolSongAdded(self, referee, song_path, profile): |
72522263cbc9
plugin RadioCol: basic functionnality working approximately
Goffi <goffi@goffi.org>
parents:
453
diff
changeset
|
99 """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
|
100 @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
|
101 @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
|
102 @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
|
103 @return: a Deferred instance |
c5a8f602662b
plugin room_game, radiocol: RoomGame.send returns a Deferred.
souliane <souliane@mailoo.org>
parents:
828
diff
changeset
|
104 """ |
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
|
105 # 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
|
106 # be streamed to the backend using XMPP file copy |
72522263cbc9
plugin RadioCol: basic functionnality working approximately
Goffi <goffi@goffi.org>
parents:
453
diff
changeset
|
107 # 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
|
108 # 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
|
109 try: |
901
c238d2c02237
plugin radiocol: add MP3 support
souliane <souliane@mailoo.org>
parents:
849
diff
changeset
|
110 if song_path.lower().endswith('.mp3'): |
c238d2c02237
plugin radiocol: add MP3 support
souliane <souliane@mailoo.org>
parents:
849
diff
changeset
|
111 actual_song = MP3(song_path) |
c238d2c02237
plugin radiocol: add MP3 support
souliane <souliane@mailoo.org>
parents:
849
diff
changeset
|
112 try: |
c238d2c02237
plugin radiocol: add MP3 support
souliane <souliane@mailoo.org>
parents:
849
diff
changeset
|
113 song = EasyID3(song_path) |
c238d2c02237
plugin radiocol: add MP3 support
souliane <souliane@mailoo.org>
parents:
849
diff
changeset
|
114 |
c238d2c02237
plugin radiocol: add MP3 support
souliane <souliane@mailoo.org>
parents:
849
diff
changeset
|
115 class Info(object): |
c238d2c02237
plugin radiocol: add MP3 support
souliane <souliane@mailoo.org>
parents:
849
diff
changeset
|
116 def __init__(self, length): |
c238d2c02237
plugin radiocol: add MP3 support
souliane <souliane@mailoo.org>
parents:
849
diff
changeset
|
117 self.length = length |
c238d2c02237
plugin radiocol: add MP3 support
souliane <souliane@mailoo.org>
parents:
849
diff
changeset
|
118 song.info = Info(actual_song.info.length) |
c238d2c02237
plugin radiocol: add MP3 support
souliane <souliane@mailoo.org>
parents:
849
diff
changeset
|
119 except ID3NoHeaderError: |
c238d2c02237
plugin radiocol: add MP3 support
souliane <souliane@mailoo.org>
parents:
849
diff
changeset
|
120 song = actual_song |
c238d2c02237
plugin radiocol: add MP3 support
souliane <souliane@mailoo.org>
parents:
849
diff
changeset
|
121 else: |
c238d2c02237
plugin radiocol: add MP3 support
souliane <souliane@mailoo.org>
parents:
849
diff
changeset
|
122 song = OggVorbis(song_path) |
c238d2c02237
plugin radiocol: add MP3 support
souliane <souliane@mailoo.org>
parents:
849
diff
changeset
|
123 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
|
124 # 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
|
125 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
|
126 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
|
127 |
714
ecc5a5b34ee1
plugins (games): add a method to send messages more easily
souliane <souliane@mailoo.org>
parents:
712
diff
changeset
|
128 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
|
129 '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
|
130 '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
|
131 '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
|
132 'length': str(song.info.length) |
ecc5a5b34ee1
plugins (games): add a method to send messages more easily
souliane <souliane@mailoo.org>
parents:
712
diff
changeset
|
133 } |
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
|
134 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
|
135 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
|
136 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
|
137 |
457
fbe7c9118ce4
plugin radiocol: working Radio Collective \o/
Goffi <goffi@goffi.org>
parents:
456
diff
changeset
|
138 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
|
139 """"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
|
140 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
|
141 # 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
|
142 # ==> 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
|
143 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
|
144 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
|
145 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
|
146 radio_data['queue'] = [] |
539f278bc265
plugin room_games, radiocol: send the current queue to new players
souliane <souliane@mailoo.org>
parents:
718
diff
changeset
|
147 for filename in radio_data['to_delete']: |
764
d0e809014ea2
plugin radiocol: fix wrong call of deleteFile
souliane <souliane@mailoo.org>
parents:
746
diff
changeset
|
148 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
|
149 radio_data['to_delete'] = {} |
457
fbe7c9118ce4
plugin radiocol: working Radio Collective \o/
Goffi <goffi@goffi.org>
parents:
456
diff
changeset
|
150 queue = radio_data['queue'] |
fbe7c9118ce4
plugin radiocol: working Radio Collective \o/
Goffi <goffi@goffi.org>
parents:
456
diff
changeset
|
151 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
|
152 # 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
|
153 radio_data['playing'] = None |
457
fbe7c9118ce4
plugin radiocol: working Radio Collective \o/
Goffi <goffi@goffi.org>
parents:
456
diff
changeset
|
154 return |
746
539f278bc265
plugin room_games, radiocol: send the current queue to new players
souliane <souliane@mailoo.org>
parents:
718
diff
changeset
|
155 song = queue.pop(0) |
539f278bc265
plugin room_games, radiocol: send the current queue to new players
souliane <souliane@mailoo.org>
parents:
718
diff
changeset
|
156 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
|
157 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
|
158 radio_data['playing'] = song |
215a2cb15e2d
plugin radiocol: sync data includes a "jump to time" info
souliane <souliane@mailoo.org>
parents:
826
diff
changeset
|
159 radio_data['playing_time'] = time.time() |
457
fbe7c9118ce4
plugin radiocol: working Radio Collective \o/
Goffi <goffi@goffi.org>
parents:
456
diff
changeset
|
160 |
fbe7c9118ce4
plugin radiocol: working Radio Collective \o/
Goffi <goffi@goffi.org>
parents:
456
diff
changeset
|
161 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
|
162 # 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
|
163 self.send(room_jid, ('', 'upload_ok'), profile=profile) |
457
fbe7c9118ce4
plugin radiocol: working Radio Collective \o/
Goffi <goffi@goffi.org>
parents:
456
diff
changeset
|
164 radio_data['upload'] = True |
fbe7c9118ce4
plugin radiocol: working Radio Collective \o/
Goffi <goffi@goffi.org>
parents:
456
diff
changeset
|
165 |
fbe7c9118ce4
plugin radiocol: working Radio Collective \o/
Goffi <goffi@goffi.org>
parents:
456
diff
changeset
|
166 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
|
167 # 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
|
168 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
|
169 |
764
d0e809014ea2
plugin radiocol: fix wrong call of deleteFile
souliane <souliane@mailoo.org>
parents:
746
diff
changeset
|
170 def deleteFile(self, filename, radio_data=None): |
d0e809014ea2
plugin radiocol: fix wrong call of deleteFile
souliane <souliane@mailoo.org>
parents:
746
diff
changeset
|
171 """ |
d0e809014ea2
plugin radiocol: fix wrong call of deleteFile
souliane <souliane@mailoo.org>
parents:
746
diff
changeset
|
172 Delete a previously uploaded file. |
d0e809014ea2
plugin radiocol: fix wrong call of deleteFile
souliane <souliane@mailoo.org>
parents:
746
diff
changeset
|
173 @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
|
174 @param radio_data: current game data |
d0e809014ea2
plugin radiocol: fix wrong call of deleteFile
souliane <souliane@mailoo.org>
parents:
746
diff
changeset
|
175 @return: True if the file has been deleted |
d0e809014ea2
plugin radiocol: fix wrong call of deleteFile
souliane <souliane@mailoo.org>
parents:
746
diff
changeset
|
176 """ |
d0e809014ea2
plugin radiocol: fix wrong call of deleteFile
souliane <souliane@mailoo.org>
parents:
746
diff
changeset
|
177 if radio_data: |
d0e809014ea2
plugin radiocol: fix wrong call of deleteFile
souliane <souliane@mailoo.org>
parents:
746
diff
changeset
|
178 try: |
d0e809014ea2
plugin radiocol: fix wrong call of deleteFile
souliane <souliane@mailoo.org>
parents:
746
diff
changeset
|
179 file_to_delete = radio_data['to_delete'][filename] |
d0e809014ea2
plugin radiocol: fix wrong call of deleteFile
souliane <souliane@mailoo.org>
parents:
746
diff
changeset
|
180 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
|
181 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
|
182 return False |
d0e809014ea2
plugin radiocol: fix wrong call of deleteFile
souliane <souliane@mailoo.org>
parents:
746
diff
changeset
|
183 else: |
d0e809014ea2
plugin radiocol: fix wrong call of deleteFile
souliane <souliane@mailoo.org>
parents:
746
diff
changeset
|
184 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
|
185 try: |
539f278bc265
plugin room_games, radiocol: send the current queue to new players
souliane <souliane@mailoo.org>
parents:
718
diff
changeset
|
186 unlink(file_to_delete) |
539f278bc265
plugin room_games, radiocol: send the current queue to new players
souliane <souliane@mailoo.org>
parents:
718
diff
changeset
|
187 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
|
188 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
|
189 return False |
539f278bc265
plugin room_games, radiocol: send the current queue to new players
souliane <souliane@mailoo.org>
parents:
718
diff
changeset
|
190 return True |
455
72522263cbc9
plugin RadioCol: basic functionnality working approximately
Goffi <goffi@goffi.org>
parents:
453
diff
changeset
|
191 |
717
358018c5c398
plugins (games): more factorization and flexibility for launching and joining games:
souliane <souliane@mailoo.org>
parents:
714
diff
changeset
|
192 def room_game_cmd(self, mess_elt, profile): |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
577
diff
changeset
|
193 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
|
194 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
|
195 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
|
196 |
450 | 197 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
|
198 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
|
199 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
|
200 queue = radio_data['queue'] |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
577
diff
changeset
|
201 |
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
|
202 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
|
203 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
|
204 is_player = self.isPlayer(room_jid, nick) |
450 | 205 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
|
206 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
|
207 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
|
208 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
|
209 continue # user is in the room but not playing |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
577
diff
changeset
|
210 |
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
|
211 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
|
212 players = [] |
358018c5c398
plugins (games): more factorization and flexibility for launching and joining games:
souliane <souliane@mailoo.org>
parents:
714
diff
changeset
|
213 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
|
214 players.append(unicode(player)) |
358018c5c398
plugins (games): more factorization and flexibility for launching and joining games:
souliane <souliane@mailoo.org>
parents:
714
diff
changeset
|
215 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
|
216 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
|
217 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
|
218 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
|
219 elif elt.name == 'play': |
fbe7c9118ce4
plugin radiocol: working Radio Collective \o/
Goffi <goffi@goffi.org>
parents:
456
diff
changeset
|
220 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
|
221 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
|
222 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
|
223 elif elt.name == 'no_upload': |
fbe7c9118ce4
plugin radiocol: working Radio Collective \o/
Goffi <goffi@goffi.org>
parents:
456
diff
changeset
|
224 self.host.bridge.radiocolNoUpload(room_jid.userhost(), profile) |
fbe7c9118ce4
plugin radiocol: working Radio Collective \o/
Goffi <goffi@goffi.org>
parents:
456
diff
changeset
|
225 elif elt.name == 'upload_ok': |
fbe7c9118ce4
plugin radiocol: working Radio Collective \o/
Goffi <goffi@goffi.org>
parents:
456
diff
changeset
|
226 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
|
227 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
|
228 # 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
|
229 # 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
|
230 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
|
231 # 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
|
232 # 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
|
233 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
|
234 return |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
577
diff
changeset
|
235 |
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
|
236 # 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
|
237 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
|
238 queue.append(preload_elt) |
457
fbe7c9118ce4
plugin radiocol: working Radio Collective \o/
Goffi <goffi@goffi.org>
parents:
456
diff
changeset
|
239 |
fbe7c9118ce4
plugin radiocol: working Radio Collective \o/
Goffi <goffi@goffi.org>
parents:
456
diff
changeset
|
240 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
|
241 # 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
|
242 self.send(room_jid, ('', 'no_upload'), profile=profile) |
457
fbe7c9118ce4
plugin radiocol: working Radio Collective \o/
Goffi <goffi@goffi.org>
parents:
456
diff
changeset
|
243 radio_data['upload'] = False |
fbe7c9118ce4
plugin radiocol: working Radio Collective \o/
Goffi <goffi@goffi.org>
parents:
456
diff
changeset
|
244 |
714
ecc5a5b34ee1
plugins (games): add a method to send messages more easily
souliane <souliane@mailoo.org>
parents:
712
diff
changeset
|
245 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
|
246 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
|
247 # 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
|
248 # 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
|
249 self.playNext(room_jid, profile) |
450 | 250 else: |
1409
3265a2639182
massive (preventive) addition of 'u' (unicode) before the strings passed to logging functions
souliane <souliane@mailoo.org>
parents:
1396
diff
changeset
|
251 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
|
252 |
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
|
253 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
|
254 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
|
255 elements = [] |
8f335c03eebb
plugins room_games, radiocol, libervia: small changes like refactorization to ease the maintenance
souliane <souliane@mailoo.org>
parents:
827
diff
changeset
|
256 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
|
257 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
|
258 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
|
259 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
|
260 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
|
261 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
|
262 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
|
263 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
|
264 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
|
265 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
|
266 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
|
267 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
|
268 return elements |