core: plugins refactored according to bridge + updatedValue now use profile

This commit is contained in:
Goffi 2011-07-06 01:06:18 +02:00
commit ad29111416
15 changed files with 164 additions and 155 deletions

View file

@ -21,12 +21,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
from bridge_frontend import BridgeFrontend
import dbus, dbus.glib
from logging import debug
from logging import debug, error
const_INT_PREFIX = "org.goffi.SAT" #Interface prefix
const_OBJ_PATH = '/org/goffi/SAT/bridge'
const_COMM_SUFFIX = ".communication"
const_REQ_SUFFIX = ".request"
const_CORE_SUFFIX = ".core"
const_PLUGIN_SUFFIX = ".plugin"
class BridgeExceptionNoService(Exception):
pass
@ -37,194 +37,196 @@ class DBusBridgeFrontend(BridgeFrontend):
self.sessions_bus = dbus.SessionBus()
self.db_object = self.sessions_bus.get_object(const_INT_PREFIX,
const_OBJ_PATH)
self.db_comm_iface = dbus.Interface(self.db_object,
dbus_interface=const_INT_PREFIX + const_COMM_SUFFIX)
self.db_req_iface = dbus.Interface(self.db_object,
dbus_interface=const_INT_PREFIX + const_REQ_SUFFIX)
self.db_core_iface = dbus.Interface(self.db_object,
dbus_interface=const_INT_PREFIX + const_CORE_SUFFIX)
self.db_plugin_iface = dbus.Interface(self.db_object,
dbus_interface=const_INT_PREFIX + const_PLUGIN_SUFFIX)
except dbus.exceptions.DBusException,e:
if e._dbus_error_name=='org.freedesktop.DBus.Error.ServiceUnknown':
raise BridgeExceptionNoService
else:
raise e
#props = self.db_comm_iface.getProperties()
#props = self.db_core_iface.getProperties()
def register(self, functionName, handler, iface="communication"):
if iface == "communication":
self.db_comm_iface.connect_to_signal(functionName, handler)
elif iface == "request":
self.db_req_iface.connect_to_signal(functionName, handler)
def register(self, functionName, handler, iface="core"):
if iface == "core":
self.db_core_iface.connect_to_signal(functionName, handler)
elif iface == "plugin":
self.db_plugin_iface.connect_to_signal(functionName, handler)
else:
error(_('Unknown interface'))
def addContact(self, entity, profile_key="@DEFAULT@"):
return self.db_comm_iface.addContact(entity, profile_key)
return self.db_core_iface.addContact(entity, profile_key)
def asyncConnect(self, profile_key="@DEFAULT@", callback=None, errback=None):
return self.db_comm_iface.asyncConnect(profile_key, reply_handler=callback, error_handler=errback)
return self.db_core_iface.asyncConnect(profile_key, reply_handler=callback, error_handler=errback)
def callMenu(self, category, name, menu_type, profile_key):
return unicode(self.db_req_iface.callMenu(category, name, menu_type, profile_key))
return unicode(self.db_core_iface.callMenu(category, name, menu_type, profile_key))
def confirmationAnswer(self, id, accepted, data):
return self.db_req_iface.confirmationAnswer(id, accepted, data)
return self.db_core_iface.confirmationAnswer(id, accepted, data)
def connect(self, profile_key="@DEFAULT@"):
return self.db_comm_iface.connect(profile_key)
return self.db_core_iface.connect(profile_key)
def createProfile(self, profile):
return self.db_req_iface.createProfile(profile)
return self.db_core_iface.createProfile(profile)
def delContact(self, entity, profile_key="@DEFAULT@"):
return self.db_comm_iface.delContact(entity, profile_key)
return self.db_core_iface.delContact(entity, profile_key)
def deleteProfile(self, profile):
return self.db_req_iface.deleteProfile(profile)
return self.db_core_iface.deleteProfile(profile)
def disconnect(self, profile_key="@DEFAULT@"):
return self.db_comm_iface.disconnect(profile_key)
return self.db_core_iface.disconnect(profile_key)
def getConfig(self, section, name):
return unicode(self.db_comm_iface.getConfig(section, name))
return unicode(self.db_core_iface.getConfig(section, name))
def getContacts(self, profile_key="@DEFAULT@"):
return self.db_comm_iface.getContacts(profile_key)
return self.db_core_iface.getContacts(profile_key)
def getHistory(self, from_jid, to_jid, size):
return self.db_comm_iface.getHistory(from_jid, to_jid, size)
return self.db_core_iface.getHistory(from_jid, to_jid, size)
def getMenuHelp(self, category, name, menu_type):
return unicode(self.db_req_iface.getMenuHelp(category, name, menu_type))
return unicode(self.db_core_iface.getMenuHelp(category, name, menu_type))
def getMenus(self, ):
return self.db_req_iface.getMenus()
return self.db_core_iface.getMenus()
def getParamA(self, name, category, attribute="value", profile_key="@DEFAULT@"):
return unicode(self.db_comm_iface.getParamA(name, category, attribute, profile_key))
return unicode(self.db_core_iface.getParamA(name, category, attribute, profile_key))
def getParams(self, profile_key="@DEFAULT@"):
return unicode(self.db_comm_iface.getParams(profile_key))
return unicode(self.db_core_iface.getParams(profile_key))
def getParamsCategories(self, ):
return self.db_comm_iface.getParamsCategories()
return self.db_core_iface.getParamsCategories()
def getParamsForCategory(self, category, profile_key="@DEFAULT@"):
return unicode(self.db_comm_iface.getParamsForCategory(category, profile_key))
return unicode(self.db_core_iface.getParamsForCategory(category, profile_key))
def getParamsUI(self, profile_key="@DEFAULT@"):
return unicode(self.db_comm_iface.getParamsUI(profile_key))
return unicode(self.db_core_iface.getParamsUI(profile_key))
def getPresenceStatus(self, profile_key="@DEFAULT@"):
return self.db_comm_iface.getPresenceStatus(profile_key)
return self.db_core_iface.getPresenceStatus(profile_key)
def getProfileName(self, profile_key="@DEFAULT@"):
return unicode(self.db_req_iface.getProfileName(profile_key))
return unicode(self.db_core_iface.getProfileName(profile_key))
def getProfilesList(self, ):
return self.db_req_iface.getProfilesList()
return self.db_core_iface.getProfilesList()
def getProgress(self, id):
return self.db_req_iface.getProgress(id)
return self.db_core_iface.getProgress(id)
def getVersion(self, ):
return unicode(self.db_req_iface.getVersion())
return unicode(self.db_core_iface.getVersion())
def getWaitingSub(self, profile_key="@DEFAULT@"):
return self.db_comm_iface.getWaitingSub(profile_key)
return self.db_core_iface.getWaitingSub(profile_key)
def isConnected(self, profile_key="@DEFAULT@"):
return self.db_comm_iface.isConnected(profile_key)
return self.db_core_iface.isConnected(profile_key)
def launchAction(self, action_type, data, profile_key="@DEFAULT@"):
return unicode(self.db_req_iface.launchAction(action_type, data, profile_key))
return unicode(self.db_core_iface.launchAction(action_type, data, profile_key))
def registerNewAccount(self, login, password, email, host, port=5222):
return unicode(self.db_comm_iface.registerNewAccount(login, password, email, host, port))
return unicode(self.db_core_iface.registerNewAccount(login, password, email, host, port))
def sendMessage(self, to_jid, message, subject='', mess_type="chat", profile_key="@DEFAULT@"):
return self.db_comm_iface.sendMessage(to_jid, message, subject, mess_type, profile_key)
return self.db_core_iface.sendMessage(to_jid, message, subject, mess_type, profile_key)
def setParam(self, name, value, category, profile_key="@DEFAULT@"):
return self.db_comm_iface.setParam(name, value, category, profile_key)
return self.db_core_iface.setParam(name, value, category, profile_key)
def setPresence(self, to_jid='', show='', priority=0, statuses={}, profile_key="@DEFAULT@"):
return self.db_comm_iface.setPresence(to_jid, show, priority, statuses, profile_key)
return self.db_core_iface.setPresence(to_jid, show, priority, statuses, profile_key)
def subscription(self, sub_type, entity, profile_key="@DEFAULT@"):
return self.db_comm_iface.subscription(sub_type, entity, profile_key)
return self.db_core_iface.subscription(sub_type, entity, profile_key)
def updateContact(self, entity, name, groups, profile_key="@DEFAULT@"):
return self.db_comm_iface.updateContact(entity, name, groups, profile_key)
return self.db_core_iface.updateContact(entity, name, groups, profile_key)
#methods from plugins
def getRoomJoined(self, profile_key='@DEFAULT@'):
return self.db_comm_iface.getRoomJoined(profile_key)
return self.db_plugin_iface.getRoomJoined(profile_key)
def getRoomSubjects(self, profile_key='@DEFAULT@'):
return self.db_comm_iface.getRoomSubjects(profile_key)
return self.db_plugin_iface.getRoomSubjects(profile_key)
def joinMUC(self, service, roomId, nick, profile_key='@DEFAULT@'):
return self.db_comm_iface.joinMUC(service, roomId, nick, profile_key)
return self.db_plugin_iface.joinMUC(service, roomId, nick, profile_key)
def tarotGameLaunch(self, players, profile_key='@DEFAULT@'):
return self.db_comm_iface.tarotGameLaunch(players, profile_key)
return self.db_plugin_iface.tarotGameLaunch(players, profile_key)
def tarotGameCreate(self, room_jid, players, profile_key='@DEFAULT@'):
return self.db_comm_iface.tarotGameCreate(room_jid, players, profile_key)
return self.db_plugin_iface.tarotGameCreate(room_jid, players, profile_key)
def tarotGameReady(self, player, referee, profile_key='@DEFAULT@'):
return self.db_comm_iface.tarotGameReady(player, referee, profile_key)
return self.db_plugin_iface.tarotGameReady(player, referee, profile_key)
def tarotGameContratChoosed(self, player, referee, contrat, profile_key='@DEFAULT@'):
return self.db_comm_iface.tarotGameContratChoosed(player, referee, contrat, profile_key)
return self.db_plugin_iface.tarotGameContratChoosed(player, referee, contrat, profile_key)
def tarotGamePlayCards(self, player, referee, cards, profile_key='@DEFAULT@'):
return self.db_comm_iface.tarotGamePlayCards(player, referee, cards, profile_key)
return self.db_plugin_iface.tarotGamePlayCards(player, referee, cards, profile_key)
def quizGameLaunch(self, players, profile_key='@DEFAULT@'):
return self.db_comm_iface.quizGameLaunch(players, profile_key)
return self.db_plugin_iface.quizGameLaunch(players, profile_key)
def quizGameCreate(self, room_jid, players, profile_key='@DEFAULT@'):
return self.db_comm_iface.quizGameCreate(room_jid, players, profile_key)
return self.db_plugin_iface.quizGameCreate(room_jid, players, profile_key)
def quizGameReady(self, player, referee, profile_key='@DEFAULT@'):
return self.db_comm_iface.quizGameReady(player, referee, profile_key)
return self.db_plugin_iface.quizGameReady(player, referee, profile_key)
def quizGameAnswer(self, player, referee, answer, profile_key='@DEFAULT@'):
return self.db_comm_iface.quizGameAnswer(player, referee, answer, profile_key)
return self.db_plugin_iface.quizGameAnswer(player, referee, answer, profile_key)
def sendFile(self, to, path, profile_key='@DEFAULT@'):
return self.db_comm_iface.sendFile(to, path, profile_key)
return self.db_plugin_iface.sendFile(to, path, profile_key)
def findGateways(self, target, profile_key='@DEFAULT@'):
return self.db_comm_iface.findGateways(target, profile_key)
return self.db_plugin_iface.findGateways(target, profile_key)
def getCard(self, target, profile_key='@DEFAULT@'):
return self.db_comm_iface.getCard(target, profile_key)
return self.db_plugin_iface.getCard(target, profile_key)
def getCardCache(self, target):
return self.db_comm_iface.getCardCache(target)
return self.db_plugin_iface.getCardCache(target)
def getAvatarFile(self, hash):
return self.db_comm_iface.getAvatarFile(hash)
return self.db_plugin_iface.getAvatarFile(hash)
def in_band_register(self, target, profile_key='@DEFAULT@'):
return self.db_comm_iface.in_band_register(target, profile_key)
return self.db_plugin_iface.in_band_register(target, profile_key)
def gatewayRegister(self, action, target, data, profile_key='@DEFAULT@'):
if data == None:
data = [('', '')] #XXX: we have to do this awful hack because python dbus need to guess the signature
return self.db_req_iface.gatewayRegister(action, target, data, profile_key)
return self.db_plugin_iface.gatewayRegister(action, target, data, profile_key)
def getLastMicroblogs(self, jid, max_items, profile_key='@DEFAULT@', callback=None, errback=None):
return self.db_comm_iface.getLastMicroblogs(jid, max_items, profile_key, reply_handler=callback, error_handler=errback)
return self.db_plugin_iface.getLastMicroblogs(jid, max_items, profile_key, reply_handler=callback, error_handler=errback)
def getMblogNodes(self, profile_key='@DEFAULT@', callback=None, errback=None):
return self.db_comm_iface.getMblogNodes(profile_key, reply_handler=callback, error_handler=errback)
return self.db_plugin_iface.getMblogNodes(profile_key, reply_handler=callback, error_handler=errback)
def sendGroupBlog(self, groups, message, profile_key='@DEFAULT@'):
return self.db_comm_iface.sendGroupBlog(groups, message, profile_key)
return self.db_plugin_iface.sendGroupBlog(groups, message, profile_key)
def sendPersonalEvent(self, event_type, data, profile_key='@DEFAULT@'):
return self.db_comm_iface.sendPersonalEvent(event_type, data, profile_key)
return self.db_plugin_iface.sendPersonalEvent(event_type, data, profile_key)
def setMicroblogAccess(self, access="presence", profile_key='@DEFAULT@', callback=None, errback=None):
return self.db_comm_iface.setMicroblogAccess(access, profile_key, reply_handler=callback, error_handler=errback)
return self.db_plugin_iface.setMicroblogAccess(access, profile_key, reply_handler=callback, error_handler=errback)

View file

@ -51,33 +51,33 @@ class QuickApp():
self.bridge.register("newMessage", self.newMessage)
self.bridge.register("newAlert", self.newAlert)
self.bridge.register("presenceUpdate", self.presenceUpdate)
self.bridge.register("roomJoined", self.roomJoined)
self.bridge.register("roomUserJoined", self.roomUserJoined)
self.bridge.register("roomUserLeft", self.roomUserLeft)
self.bridge.register("roomNewSubject", self.roomNewSubject)
self.bridge.register("tarotGameStarted", self.tarotGameStarted)
self.bridge.register("tarotGameNew", self.tarotGameNew)
self.bridge.register("tarotGameChooseContrat", self.tarotChooseContrat)
self.bridge.register("tarotGameShowCards", self.tarotShowCards)
self.bridge.register("tarotGameYourTurn", self.tarotMyTurn)
self.bridge.register("tarotGameScore", self.tarotScore)
self.bridge.register("tarotGameCardsPlayed", self.tarotCardsPlayed)
self.bridge.register("tarotGameInvalidCards", self.tarotInvalidCards)
self.bridge.register("quizGameStarted", self.quizGameStarted)
self.bridge.register("quizGameNew", self.quizGameNew)
self.bridge.register("quizGameQuestion", self.quizGameQuestion)
self.bridge.register("quizGamePlayerBuzzed", self.quizGamePlayerBuzzed)
self.bridge.register("quizGamePlayerSays", self.quizGamePlayerSays)
self.bridge.register("quizGameAnswerResult", self.quizGameAnswerResult)
self.bridge.register("quizGameTimerExpired", self.quizGameTimerExpired)
self.bridge.register("quizGameTimerRestarted", self.quizGameTimerRestarted)
self.bridge.register("subscribe", self.subscribe)
self.bridge.register("paramUpdate", self.paramUpdate)
self.bridge.register("contactDeleted", self.contactDeleted)
self.bridge.register("updatedValue", self.updatedValue, "request")
self.bridge.register("askConfirmation", self.askConfirmation, "request")
self.bridge.register("actionResult", self.actionResult, "request")
self.bridge.register("actionResultExt", self.actionResult, "request")
self.bridge.register("updatedValue", self.updatedValue)
self.bridge.register("askConfirmation", self.askConfirmation)
self.bridge.register("actionResult", self.actionResult)
self.bridge.register("actionResultExt", self.actionResult)
self.bridge.register("roomJoined", self.roomJoined, "plugin")
self.bridge.register("roomUserJoined", self.roomUserJoined, "plugin")
self.bridge.register("roomUserLeft", self.roomUserLeft, "plugin")
self.bridge.register("roomNewSubject", self.roomNewSubject, "plugin")
self.bridge.register("tarotGameStarted", self.tarotGameStarted, "plugin")
self.bridge.register("tarotGameNew", self.tarotGameNew, "plugin")
self.bridge.register("tarotGameChooseContrat", self.tarotChooseContrat, "plugin")
self.bridge.register("tarotGameShowCards", self.tarotShowCards, "plugin")
self.bridge.register("tarotGameYourTurn", self.tarotMyTurn, "plugin")
self.bridge.register("tarotGameScore", self.tarotScore, "plugin")
self.bridge.register("tarotGameCardsPlayed", self.tarotCardsPlayed, "plugin")
self.bridge.register("tarotGameInvalidCards", self.tarotInvalidCards, "plugin")
self.bridge.register("quizGameStarted", self.quizGameStarted, "plugin")
self.bridge.register("quizGameNew", self.quizGameNew, "plugin")
self.bridge.register("quizGameQuestion", self.quizGameQuestion, "plugin")
self.bridge.register("quizGamePlayerBuzzed", self.quizGamePlayerBuzzed, "plugin")
self.bridge.register("quizGamePlayerSays", self.quizGamePlayerSays, "plugin")
self.bridge.register("quizGameAnswerResult", self.quizGameAnswerResult, "plugin")
self.bridge.register("quizGameTimerExpired", self.quizGameTimerExpired, "plugin")
self.bridge.register("quizGameTimerRestarted", self.quizGameTimerRestarted, "plugin")
self.current_action_ids = set()
self.current_action_ids_cb = {}
@ -488,7 +488,9 @@ class QuickApp():
except KeyError:
pass
def updatedValue(self, name, data):
def updatedValue(self, name, data, profile):
if not self.check_profile(profile):
return
if name == "card_nick":
target = JID(data['jid'])
if target in self.contactList:

View file

@ -69,12 +69,12 @@ class GroupBlog():
for i in range(1,21):
self.host.plugins["XEP-0163"].addPEPEvent("MICROBLOG_%02d" % i, NS_MICROBLOG % i, self.groupblogCB, None)
host.bridge.addMethod("cleanBlogCollection", ".communication", in_sign='s', out_sign='',
host.bridge.addMethod("cleanBlogCollection", ".plugin", in_sign='s', out_sign='',
method=self.cleanBlogCollection,
doc = {
})
host.bridge.addMethod("getMblogNodes", ".communication", in_sign='s', out_sign='a{sas}',
host.bridge.addMethod("getMblogNodes", ".plugin", in_sign='s', out_sign='a{sas}',
method=self.getMblogNodes,
async = True,
doc = { 'summary':"retrieve mblog node, and their association with roster's groups",
@ -82,7 +82,7 @@ class GroupBlog():
'return':'list of microblog data (dict)'
})
host.bridge.addMethod("sendGroupBlog", ".communication", in_sign='asss', out_sign='',
host.bridge.addMethod("sendGroupBlog", ".plugin", in_sign='asss', out_sign='',
method=self.sendGroupBlog,
doc = { 'summary':"Send a microblog to a list of groups",
'param_0':'list of groups which can read the microblog',
@ -90,7 +90,7 @@ class GroupBlog():
'param_2':'%(doc_profile)s'
})
host.bridge.addMethod("subscribeGroupBlog", ".communication", in_sign='ss', out_sign='',
host.bridge.addMethod("subscribeGroupBlog", ".plugin", in_sign='ss', out_sign='',
method=self.subscribeGroupBlog,
doc = { 'summary':"Subscribe to the group blog of somebody",
'param_0':'jid of the group node published',

View file

@ -64,18 +64,18 @@ class Quiz():
self.host = host
self.games={}
self.waiting_inv = {} #Invitation waiting for people to join to launch a game
host.bridge.addMethod("quizGameLaunch", ".communication", in_sign='ass', out_sign='', method=self.quizGameLaunch) #args: room_jid, players, profile
host.bridge.addMethod("quizGameCreate", ".communication", in_sign='sass', out_sign='', method=self.quizGameCreate) #args: room_jid, players, profile
host.bridge.addMethod("quizGameReady", ".communication", in_sign='sss', out_sign='', method=self.newPlayerReady) #args: player, referee, profile
host.bridge.addMethod("quizGameAnswer", ".communication", in_sign='ssss', out_sign='', method=self.playerAnswer)
host.bridge.addSignal("quizGameStarted", ".communication", signature='ssass') #args: room_jid, referee, players, profile
host.bridge.addSignal("quizGameNew", ".communication",
host.bridge.addMethod("quizGameLaunch", ".plugin", in_sign='ass', out_sign='', method=self.quizGameLaunch) #args: room_jid, players, profile
host.bridge.addMethod("quizGameCreate", ".plugin", in_sign='sass', out_sign='', method=self.quizGameCreate) #args: room_jid, players, profile
host.bridge.addMethod("quizGameReady", ".plugin", in_sign='sss', out_sign='', method=self.newPlayerReady) #args: player, referee, profile
host.bridge.addMethod("quizGameAnswer", ".plugin", in_sign='ssss', out_sign='', method=self.playerAnswer)
host.bridge.addSignal("quizGameStarted", ".plugin", signature='ssass') #args: room_jid, referee, players, profile
host.bridge.addSignal("quizGameNew", ".plugin",
signature='sa{ss}s',
doc = { 'summary': 'Start a new game',
'param_0': "room_jid: jid of game's room",
'param_1': "game_data: data of the game",
'param_2': '%(doc_profile)s'})
host.bridge.addSignal("quizGameQuestion", ".communication",
host.bridge.addSignal("quizGameQuestion", ".plugin",
signature = 'sssis',
doc = { 'summary': "Send the current question",
'param_0': "room_jid: jid of game's room",
@ -83,14 +83,14 @@ class Quiz():
'param_2': "question: question to ask",
'param_3': "timer: timer",
'param_4': '%(doc_profile)s'})
host.bridge.addSignal("quizGamePlayerBuzzed", ".communication",
host.bridge.addSignal("quizGamePlayerBuzzed", ".plugin",
signature = 'ssbs',
doc = { 'summary': "A player just pressed the buzzer",
'param_0': "room_jid: jid of game's room",
'param_1': "player: player who pushed the buzzer",
'param_2': "pause: should the game be paused ?",
'param_3': '%(doc_profile)s'})
host.bridge.addSignal("quizGamePlayerSays", ".communication",
host.bridge.addSignal("quizGamePlayerSays", ".plugin",
signature = 'sssis',
doc = { 'summary': "A player just pressed the buzzer",
'param_0': "room_jid: jid of game's room",
@ -98,7 +98,7 @@ class Quiz():
'param_2': "text: what the player say",
'param_3': "delay: how long, in seconds, the text must appear",
'param_4': '%(doc_profile)s'})
host.bridge.addSignal("quizGameAnswerResult", ".communication",
host.bridge.addSignal("quizGameAnswerResult", ".plugin",
signature = 'ssba{si}s',
doc = { 'summary': "Result of the just given answer",
'param_0': "room_jid: jid of game's room",
@ -106,12 +106,12 @@ class Quiz():
'param_2': "good_answer: True if the answer is right",
'param_3': "score: dict of score with player as key",
'param_4': '%(doc_profile)s'})
host.bridge.addSignal("quizGameTimerExpired", ".communication",
host.bridge.addSignal("quizGameTimerExpired", ".plugin",
signature = 'ss',
doc = { 'summary': "Nobody answered the question in time",
'param_0': "room_jid: jid of game's room",
'param_1': '%(doc_profile)s'})
host.bridge.addSignal("quizGameTimerRestarted", ".communication",
host.bridge.addSignal("quizGameTimerRestarted", ".plugin",
signature = 'sis',
doc = { 'summary': "Nobody answered the question in time",
'param_0': "room_jid: jid of game's room",

View file

@ -65,19 +65,19 @@ class Tarot():
self.games={}
self.waiting_inv = {} #Invitation waiting for people to join to launch a game
self.contrats = [_('Passe'), _('Petite'), _('Garde'), _('Garde Sans'), _('Garde Contre')]
host.bridge.addMethod("tarotGameLaunch", ".communication", in_sign='ass', out_sign='', method=self.launchGame) #args: room_jid, players, profile
host.bridge.addMethod("tarotGameCreate", ".communication", in_sign='sass', out_sign='', method=self.createGame) #args: room_jid, players, profile
host.bridge.addMethod("tarotGameReady", ".communication", in_sign='sss', out_sign='', method=self.newPlayerReady) #args: player, referee, profile
host.bridge.addMethod("tarotGameContratChoosed", ".communication", in_sign='ssss', out_sign='', method=self.contratChoosed) #args: player, referee, contrat, profile
host.bridge.addMethod("tarotGamePlayCards", ".communication", in_sign='ssa(ss)s', out_sign='', method=self.play_cards) #args: player, referee, cards, profile
host.bridge.addSignal("tarotGameStarted", ".communication", signature='ssass') #args: room_jid, referee, players, profile
host.bridge.addSignal("tarotGameNew", ".communication", signature='sa(ss)s') #args: room_jid, hand, profile
host.bridge.addSignal("tarotGameChooseContrat", ".communication", signature='sss') #args: room_jid, xml_data, profile
host.bridge.addSignal("tarotGameShowCards", ".communication", signature='ssa(ss)a{ss}s') #args: room_jid, type ["chien", "poignée",...], cards, data[dict], profile
host.bridge.addSignal("tarotGameCardsPlayed", ".communication", signature='ssa(ss)s') #args: room_jid, player, type ["chien", "poignée",...], cards, data[dict], profile
host.bridge.addSignal("tarotGameYourTurn", ".communication", signature='ss') #args: room_jid, profile
host.bridge.addSignal("tarotGameScore", ".communication", signature='ssasass') #args: room_jid, xml_data, winners (list of nicks), loosers (list of nicks), profile
host.bridge.addSignal("tarotGameInvalidCards", ".communication", signature='ssa(ss)a(ss)s') #args: room_jid, game phase, played_cards, invalid_cards, profile
host.bridge.addMethod("tarotGameLaunch", ".plugin", in_sign='ass', out_sign='', method=self.launchGame) #args: room_jid, players, profile
host.bridge.addMethod("tarotGameCreate", ".plugin", in_sign='sass', out_sign='', method=self.createGame) #args: room_jid, players, profile
host.bridge.addMethod("tarotGameReady", ".plugin", in_sign='sss', out_sign='', method=self.newPlayerReady) #args: player, referee, profile
host.bridge.addMethod("tarotGameContratChoosed", ".plugin", in_sign='ssss', out_sign='', method=self.contratChoosed) #args: player, referee, contrat, profile
host.bridge.addMethod("tarotGamePlayCards", ".plugin", in_sign='ssa(ss)s', out_sign='', method=self.play_cards) #args: player, referee, cards, profile
host.bridge.addSignal("tarotGameStarted", ".plugin", signature='ssass') #args: room_jid, referee, players, profile
host.bridge.addSignal("tarotGameNew", ".plugin", signature='sa(ss)s') #args: room_jid, hand, profile
host.bridge.addSignal("tarotGameChooseContrat", ".plugin", signature='sss') #args: room_jid, xml_data, profile
host.bridge.addSignal("tarotGameShowCards", ".plugin", signature='ssa(ss)a{ss}s') #args: room_jid, type ["chien", "poignée",...], cards, data[dict], profile
host.bridge.addSignal("tarotGameCardsPlayed", ".plugin", signature='ssa(ss)s') #args: room_jid, player, type ["chien", "poignée",...], cards, data[dict], profile
host.bridge.addSignal("tarotGameYourTurn", ".plugin", signature='ss') #args: room_jid, profile
host.bridge.addSignal("tarotGameScore", ".plugin", signature='ssasass') #args: room_jid, xml_data, winners (list of nicks), loosers (list of nicks), profile
host.bridge.addSignal("tarotGameInvalidCards", ".plugin", signature='ssa(ss)a(ss)s') #args: room_jid, game phase, played_cards, invalid_cards, profile
host.trigger.add("MUC user joined", self.userJoinedTrigger)
self.deck_ordered = []
for value in ['excuse']+map(str,range(1,22)):

View file

@ -72,7 +72,7 @@ class XmlLog():
host.memory.importParams(self.params)
#bridge
host.bridge.addSignal("xmlLog", ".communication", signature='sss') #args: direction("IN" or "OUT"), xml_data, profile
host.bridge.addSignal("xmlLog", ".plugin", signature='sss') #args: direction("IN" or "OUT"), xml_data, profile
do_log = bool(self.host.memory.getParamA("Xml log", "Debug"))
if do_log:

View file

@ -58,14 +58,14 @@ class XEP_0045():
info(_("Plugin XEP_0045 initialization"))
self.host = host
self.clients={}
host.bridge.addMethod("joinMUC", ".communication", in_sign='ssss', out_sign='', method=self._join)
host.bridge.addMethod("getRoomJoined", ".communication", in_sign='s', out_sign='a(ssass)', method=self.getRoomJoined)
host.bridge.addMethod("getRoomSubjects", ".communication", in_sign='s', out_sign='a(sss)', method=self.getRoomSubjects)
host.bridge.addMethod("getUniqueRoomName", ".communication", in_sign='s', out_sign='s', method=self.getUniqueName)
host.bridge.addSignal("roomJoined", ".communication", signature='ssasss') #args: room_id, room_service, room_nicks, user_nick, profile
host.bridge.addSignal("roomUserJoined", ".communication", signature='sssa{ss}s') #args: room_id, room_service, user_nick, user_data, profile
host.bridge.addSignal("roomUserLeft", ".communication", signature='sssa{ss}s') #args: room_id, room_service, user_nick, user_data, profile
host.bridge.addSignal("roomNewSubject", ".communication", signature='ssss') #args: room_id, room_service, subject, profile
host.bridge.addMethod("joinMUC", ".plugin", in_sign='ssss', out_sign='', method=self._join)
host.bridge.addMethod("getRoomJoined", ".plugin", in_sign='s', out_sign='a(ssass)', method=self.getRoomJoined)
host.bridge.addMethod("getRoomSubjects", ".plugin", in_sign='s', out_sign='a(sss)', method=self.getRoomSubjects)
host.bridge.addMethod("getUniqueRoomName", ".plugin", in_sign='s', out_sign='s', method=self.getUniqueName)
host.bridge.addSignal("roomJoined", ".plugin", signature='ssasss') #args: room_id, room_service, room_nicks, user_nick, profile
host.bridge.addSignal("roomUserJoined", ".plugin", signature='sssa{ss}s') #args: room_id, room_service, user_nick, user_data, profile
host.bridge.addSignal("roomUserLeft", ".plugin", signature='sssa{ss}s') #args: room_id, room_service, user_nick, user_data, profile
host.bridge.addSignal("roomNewSubject", ".plugin", signature='ssss') #args: room_id, room_service, subject, profile
def __check_profile(self, profile):
"""check if profile is used and connected

View file

@ -71,17 +71,21 @@ class XEP_0054():
self.vcard_cache = host.memory.getPrivate("vcard_cache") or {} #used to store nicknames and avatar, key = jid
if not os.path.exists(self.avatar_path):
os.makedirs(self.avatar_path)
host.bridge.addMethod("getCard", ".communication", in_sign='ss', out_sign='s', method=self.getCard)
host.bridge.addMethod("getAvatarFile", ".communication", in_sign='s', out_sign='s', method=self.getAvatarFile)
host.bridge.addMethod("getCardCache", ".communication", in_sign='s', out_sign='a{ss}', method=self.getCardCache)
host.bridge.addMethod("getCard", ".plugin", in_sign='ss', out_sign='s', method=self.getCard)
host.bridge.addMethod("getAvatarFile", ".plugin", in_sign='s', out_sign='s', method=self.getAvatarFile)
host.bridge.addMethod("getCardCache", ".plugin", in_sign='s', out_sign='a{ss}', method=self.getCardCache)
def getHandler(self, profile):
return XEP_0054_handler(self)
def update_cache(self, jid, name, value):
def update_cache(self, jid, name, value, profile):
"""update cache value
- save value in memory in case of change
- send updatedValue signal if the value is new or updated
@param jid: jid of the owner of the vcard
@param name: name of the item which changed
@param value: new value of the item
@param profile: profile which received the update
"""
if not self.vcard_cache.has_key(jid.userhost()):
self.vcard_cache[jid.userhost()] = {}
@ -91,7 +95,7 @@ class XEP_0054():
if not old_value or value != old_value:
cache[name] = value
self.host.memory.setPrivate("vcard_cache", self.vcard_cache)
self.host.bridge.updatedValue('card_'+name, {'jid':jid.userhost(), name:value})
self.host.bridge.updatedValue('card_'+name, {'jid':jid.userhost(), name:value}, profile)
def get_cache(self, jid, name):
"""return cached value for jid
@ -123,7 +127,7 @@ class XEP_0054():
return hash
@defer.deferredGenerator
def vCard2Dict(self, vcard, target):
def vCard2Dict(self, vcard, target, profile):
"""Convert a VCard to a dict, and save binaries"""
debug (_("parsing vcard"))
dictionary = {}
@ -134,7 +138,7 @@ class XEP_0054():
dictionary['fullname'] = unicode(elem)
elif elem.name == 'NICKNAME':
dictionary['nick'] = unicode(elem)
self.update_cache(target, 'nick', dictionary['nick'])
self.update_cache(target, 'nick', dictionary['nick'], profile)
elif elem.name == 'URL':
dictionary['website'] = unicode(elem)
elif elem.name == 'EMAIL':
@ -149,18 +153,18 @@ class XEP_0054():
if not dictionary["avatar"]: #can happen in case of e.g. empty photo elem
del dictionary['avatar']
else:
self.update_cache(target, 'avatar', dictionary['avatar'])
self.update_cache(target, 'avatar', dictionary['avatar'], profile)
else:
info (_('FIXME: [%s] VCard tag is not managed yet') % elem.name)
yield dictionary
def vcard_ok(self, answer):
def vcard_ok(self, answer, profile):
"""Called after the first get IQ"""
debug (_("VCard found"))
if answer.firstChildElement().name == "vCard":
d = self.vCard2Dict(answer.firstChildElement(), jid.JID(answer["from"]))
d = self.vCard2Dict(answer.firstChildElement(), jid.JID(answer["from"]), profile)
d.addCallback(lambda data: self.host.bridge.actionResult("RESULT", answer['id'], data))
else:
error (_("FIXME: vCard not found as first child element"))
@ -179,13 +183,14 @@ class XEP_0054():
if not xmlstream:
error (_('Asking vcard for an non-existant or not connected profile'))
return ""
profile = self.host.memory.getProfileName(profile_key)
to_jid = jid.JID(target)
debug(_("Asking for %s's VCard") % to_jid.userhost())
reg_request=IQ(xmlstream,'get')
reg_request["from"]=current_jid.full()
reg_request["to"] = to_jid.userhost()
query=reg_request.addElement('vCard', NS_VCARD)
reg_request.send(to_jid.userhost()).addCallbacks(self.vcard_ok, self.vcard_err)
reg_request.send(to_jid.userhost()).addCallbacks(self.vcard_ok, self.vcard_err, [profile])
return reg_request["id"]
def getAvatarFile(self, hash):

View file

@ -47,7 +47,7 @@ class XEP_0060():
self.host = host
self.managedNodes=[]
self.clients={}
"""host.bridge.addMethod("getItems", ".communication", in_sign='ssa{ss}s', out_sign='as', method=self.getItems,
"""host.bridge.addMethod("getItems", ".plugin", in_sign='ssa{ss}s', out_sign='as', method=self.getItems,
async = True,
doc = { 'summary':'retrieve items',
'param_0':'service: pubsub service',

View file

@ -47,8 +47,8 @@ class XEP_0077():
info(_("Plugin XEP_0077 initialization"))
self.host = host
self.triggers = {} #used by other protocol (e.g. XEP-0100) to finish registration. key = target_jid
host.bridge.addMethod("in_band_register", ".communication", in_sign='ss', out_sign='s', method=self.in_band_register)
host.bridge.addMethod("in_band_submit", ".request", in_sign='sa(ss)', out_sign='s', method=self.in_band_submit)
host.bridge.addMethod("in_band_register", ".plugin", in_sign='ss', out_sign='s', method=self.in_band_register)
host.bridge.addMethod("in_band_submit", ".plugin", in_sign='sa(ss)', out_sign='s', method=self.in_band_submit)
def addTrigger(self, target, cb, profile):
"""Add a callback which is called when registration to target is successful"""

View file

@ -58,7 +58,7 @@ class XEP_0096():
info(_("Plugin XEP_0096 initialization"))
self.host = host
self._waiting_for_approval = {}
host.bridge.addMethod("sendFile", ".communication", in_sign='sss', out_sign='s', method=self.sendFile)
host.bridge.addMethod("sendFile", ".plugin", in_sign='sss', out_sign='s', method=self.sendFile)
def getHandler(self, profile):
return XEP_0096_handler(self)

View file

@ -44,8 +44,8 @@ class XEP_0100():
info(_("Gateways plugin initialization"))
self.host = host
self.__gateways = {} #dict used to construct the answer to findGateways. Key = target jid
host.bridge.addMethod("findGateways", ".communication", in_sign='ss', out_sign='s', method=self.findGateways)
host.bridge.addMethod("gatewayRegister", ".request", in_sign='ssa(ss)s', out_sign='s', method=self.gatewayRegister)
host.bridge.addMethod("findGateways", ".plugin", in_sign='ss', out_sign='s', method=self.findGateways)
host.bridge.addMethod("gatewayRegister", ".plugin", in_sign='ssa(ss)s', out_sign='s', method=self.gatewayRegister)
def __inc_handled_items(self, request_id):
self.__gateways[request_id]['__handled_items']+=1

View file

@ -50,8 +50,8 @@ class XEP_0163():
self.pep_events=set()
self.pep_out_cb={}
host.trigger.add("PubSub Disco Info", self.disoInfoTrigger)
host.bridge.addSignal("personalEvent", ".communication", signature='ssa{ss}s') #args: from (jid), type(MOOD, TUNE, etc), data, profile
host.bridge.addMethod("sendPersonalEvent", ".communication", in_sign='sa{ss}s', out_sign='i', method=self.sendPersonalEvent) #args: type(MOOD, TUNE, etc), data, profile_key; return 0 or error_code
host.bridge.addSignal("personalEvent", ".plugin", signature='ssa{ss}s') #args: from (jid), type(MOOD, TUNE, etc), data, profile
host.bridge.addMethod("sendPersonalEvent", ".plugin", in_sign='sa{ss}s', out_sign='i', method=self.sendPersonalEvent) #args: type(MOOD, TUNE, etc), data, profile_key; return 0 or error_code
self.addPEPEvent("MOOD", NS_USER_MOOD, self.userMoodCB, self.sendMood)
def disoInfoTrigger(self, disco_info, profile):

View file

@ -54,7 +54,7 @@ class XEP_0249():
def __init__(self, host):
info(_("Plugin XEP_0249 initialization"))
self.host = host
host.bridge.addMethod("inviteMUC", ".communication", in_sign='sssa{ss}s', out_sign='', method=self._invite)
host.bridge.addMethod("inviteMUC", ".plugin", in_sign='sssa{ss}s', out_sign='', method=self._invite)
def getHandler(self, profile):
return XEP_0249_handler(self)

View file

@ -59,7 +59,7 @@ class XEP_0277():
info(_("Microblogging plugin initialization"))
self.host = host
self.host.plugins["XEP-0163"].addPEPEvent("MICROBLOG", NS_MICROBLOG, self.microblogCB, self.sendMicroblog)
host.bridge.addMethod("getLastMicroblogs", ".communication",
host.bridge.addMethod("getLastMicroblogs", ".plugin",
in_sign='sis', out_sign='aa{ss}',
method=self.getLastMicroblogs,
async = True,
@ -69,7 +69,7 @@ class XEP_0277():
'param_2':'%(doc_profile)s',
'return':'list of microblog data (dict)'
})
host.bridge.addMethod("setMicroblogAccess", ".communication", in_sign='ss', out_sign='',
host.bridge.addMethod("setMicroblogAccess", ".plugin", in_sign='ss', out_sign='',
method=self.setMicroblogAccess,
async = True,
doc = {