diff --git a/src/plugins/plugin_misc_radiocol.py b/src/plugins/plugin_misc_radiocol.py index 371e6b34..3351668e 100755 --- a/src/plugins/plugin_misc_radiocol.py +++ b/src/plugins/plugin_misc_radiocol.py @@ -21,7 +21,8 @@ from logging import debug, info, warning, error from twisted.words.xish import domish from twisted.internet import reactor from twisted.words.protocols.jabber import jid - +from twisted.internet import threads, defer +from sat.core import exceptions import os.path import copy import time @@ -65,7 +66,7 @@ class Radiocol(object): self.host = host host.bridge.addMethod("radiocolLaunch", ".plugin", in_sign='asss', out_sign='', method=self.prepareRoom) host.bridge.addMethod("radiocolCreate", ".plugin", in_sign='sass', out_sign='', method=self.createGame) - host.bridge.addMethod("radiocolSongAdded", ".plugin", in_sign='sss', out_sign='', method=self.radiocolSongAdded) + host.bridge.addMethod("radiocolSongAdded", ".plugin", in_sign='sss', out_sign='', method=self.radiocolSongAdded, async=True) host.bridge.addSignal("radiocolPlayers", ".plugin", signature='ssass') # room_jid, referee, players, profile host.bridge.addSignal("radiocolStarted", ".plugin", signature='ssasais') # room_jid, referee, players, [QUEUE_TO_START, QUEUE_LIMIT], profile host.bridge.addSignal("radiocolSongRejected", ".plugin", signature='sss') # room_jid, reason, profile @@ -94,32 +95,22 @@ class Radiocol(object): # check data. Referee will have to parse the song himself to check it client = self.host.getClient(profile) if not client: - error(_("Can't access profile's data")) - return + raise exceptions.NotConnectedProfileError(_("Can't access profile's data")) try: song = OggVorbis(song_path) except OggVorbisHeaderError: #this file is not ogg vorbis, we reject it self.deleteFile(song_path) # FIXME: same host trick (see note above) - self.host.bridge.radiocolSongRejected(jid.JID(referee).userhost(), - "Uploaded file is not Ogg Vorbis song, only Ogg Vorbis songs are acceptable", profile) - """mess = self.createGameElt(jid.JID(referee)) - reject_elt = mess.firstChildElement().addElement(('','song_rejected')) - reject_elt['sender'] = client.jid - reject_elt['reason'] = "Uploaded file is not Ogg Vorbis song, only Ogg Vorbis songs are acceptable" - #FIXME: add an error code - self.host.profiles[profile].xmlstream.send(mess)""" - return + return defer.fail(exceptions.DataError("Uploaded file is not Ogg Vorbis song, only Ogg Vorbis songs are acceptable")) attrs = {'filename': os.path.basename(song_path), 'title': song.get("title", ["Unknown"])[0], 'artist': song.get("artist", ["Unknown"])[0], 'album': song.get("album", ["Unknown"])[0], 'length': str(song.info.length) } - self.send(jid.JID(referee), ('', 'song_added'), attrs, profile=profile) - radio_data = self.games[jid.JID(referee).userhost()] # FIXME: referee comes from Libervia's client side, it's unsecure radio_data['to_delete'][attrs['filename']] = song_path # FIXME: works only because of the same host trick, see the note under the docstring + return threads.deferToThread(self.send, jid.JID(referee), ('', 'song_added'), attrs, profile=profile) def playNext(self, room_jid, profile): """"Play next song in queue if exists, and put a timer diff --git a/src/plugins/plugin_xep_0054.py b/src/plugins/plugin_xep_0054.py index 89031836..0b933b5c 100755 --- a/src/plugins/plugin_xep_0054.py +++ b/src/plugins/plugin_xep_0054.py @@ -23,6 +23,7 @@ from twisted.internet.defer import inlineCallbacks, returnValue from twisted.words.protocols.jabber import jid from twisted.words.protocols.jabber.xmlstream import IQ from twisted.words.xish import domish +from twisted.python.failure import Failure import os.path from zope.interface import implements @@ -236,7 +237,7 @@ class XEP_0054(object): try: img = Image.open(filepath) except IOError: - raise exceptions.DataError("Can't open image") + return Failure(exceptions.DataError("Can't open image")) if img.size != (64, 64): img = img.resize((64, 64))