misc bugfixes
- wix: added forgotten profile in gateways management - xml_tools: removed XMLClass to the 2 methods as a direct methods - plugin_xep_100 (gateways discovery): added error callback
This commit is contained in:
parent
f9bbbed6a0
commit
2f2594de6b
10 changed files with 112 additions and 91 deletions
|
|
@ -26,7 +26,6 @@ from twisted.words.protocols.jabber import client, jid, xmlstream
|
|||
from twisted.words.protocols.jabber import error as jab_error
|
||||
from twisted.words.protocols.jabber.xmlstream import IQ
|
||||
from twisted.web.client import getPage
|
||||
#from twisted.web.http_headers import Headers
|
||||
import os.path
|
||||
import pdb
|
||||
import random
|
||||
|
|
@ -34,10 +33,10 @@ import random
|
|||
from zope.interface import implements
|
||||
|
||||
from wokkel import disco, iwokkel, data_form
|
||||
from tools.xml_tools import XMLTools
|
||||
#from twisted.web.iweb import IBodyProducer
|
||||
from tools.xml_tools import dataForm2xml
|
||||
import urllib
|
||||
|
||||
from BeautifulSoup import BeautifulSoup
|
||||
|
||||
|
||||
|
||||
|
|
@ -74,7 +73,13 @@ class CS_Plugin():
|
|||
host.memory.importParams(CS_Plugin.params)
|
||||
#menu
|
||||
host.importMenu(_("Plugin"), "CouchSurfing", self.menuSelected, help_string = _("Launch CoushSurfing mangement interface"))
|
||||
self.session_cookies={} #TODO: delete cookies after a while
|
||||
self.data={} #TODO: delete cookies/data after a while
|
||||
|
||||
def erroCB(self, e, id):
|
||||
"""Called when something is going wrong when contacting CS website"""
|
||||
message_data={"reason": "connection error", "message":_(u"Impossible to contact CS website, please check your login/password, connection or try again later")}
|
||||
self.host.bridge.actionResult("ERROR", id, message_data)
|
||||
|
||||
|
||||
def menuSelected(self, id, profile):
|
||||
"""Called when the couchsurfing menu item is selected"""
|
||||
|
|
@ -87,24 +92,36 @@ class CS_Plugin():
|
|||
|
||||
post_data = urllib.urlencode({'auth_login[un]':login,'auth_login[pw]':password,'auth_login[action]':'Login...'})
|
||||
|
||||
cookies = {}
|
||||
d = getPage('http://www.couchsurfing.org/login.html', method='POST', postdata=post_data, headers={'Content-Type':'application/x-www-form-urlencoded'} , agent=AGENT, cookies=cookies)
|
||||
#d = getPage('file:///home/goffi/tmp/CS_principale.html', method='POST', postdata=post_data, headers={'Content-Type':'application/x-www-form-urlencoded'} , agent=AGENT, cookies=cookies)
|
||||
|
||||
self.data[profile] = {'cookies':{}}
|
||||
|
||||
def connectionCB(html):
|
||||
print 'Response received'
|
||||
soup = self.data[profile]['soup'] = BeautifulSoup(html)
|
||||
user_nick = soup.find('a','item_link',href='/home.html').contents[0]
|
||||
user_name = soup.html.head.title.string.split(' - ')[1]
|
||||
unread_messages = int(soup.find('div','item_bubble').a.string)
|
||||
form_xml = """
|
||||
<form>
|
||||
<elem type='text' value='Welcome %(name)s, you have %(nb_message)i unread messages'/>
|
||||
</form>
|
||||
""" % {'name':user_name, 'nb_message':unread_messages}
|
||||
self.host.bridge.actionResult("FORM", id, {"type":"window", "xml":form_xml})
|
||||
|
||||
d = getPage('http://www.couchsurfing.org/messages.html?message_status=inbox', agent=AGENT, cookies=cookies)
|
||||
#d = getPage('file:///home/goffi/tmp/CS_inbox.html', agent=AGENT, cookies=cookies)
|
||||
def toto(html):
|
||||
print "cookies:",cookies
|
||||
pdb.set_trace()
|
||||
d.addBoth(toto)
|
||||
|
||||
|
||||
#d = getPage('http://www.couchsurfing.org/messages.html?message_status=inbox', agent=AGENT, cookies=self.session_cookies[profile])
|
||||
|
||||
#tmp
|
||||
f = open('/home/goffi/tmp/CS_principale.html','r')
|
||||
html = f.read()
|
||||
connectionCB(html)
|
||||
|
||||
"""d = getPage('http://www.couchsurfing.org/login.html', method='POST', postdata=post_data, headers={'Content-Type':'application/x-www-form-urlencoded'} , agent=AGENT, cookies=self.data[profile]['cookies'])
|
||||
d.addCallback(connectionCB)
|
||||
d.addErrback(self.erroCB, id)"""
|
||||
|
||||
|
||||
self.host.bridge.actionResult("SUPPRESS", id, {})
|
||||
#self.host.bridge.actionResult("SUPPRESS", id, {})
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ import random
|
|||
from zope.interface import implements
|
||||
|
||||
from wokkel import disco, iwokkel, data_form
|
||||
from tools.xml_tools import XMLTools
|
||||
from tools.xml_tools import dataForm2xml
|
||||
|
||||
try:
|
||||
from twisted.words.protocols.xmlstream import XMPPHandler
|
||||
|
|
@ -55,7 +55,7 @@ PLUGIN_INFO = {
|
|||
"description": _("""Implementation of Tarot card game""")
|
||||
}
|
||||
|
||||
suits_order = ['pique', 'coeur', 'trefle', 'carreau', 'atout'] #I have swith the usual order 'trefle' and 'carreau' because card are more easy to see if suit colour change (black, red, black, red)
|
||||
suits_order = ['pique', 'coeur', 'trefle', 'carreau', 'atout'] #I have switched the usual order 'trefle' and 'carreau' because card are more easy to see if suit colour change (black, red, black, red)
|
||||
values_order = map(str,range(1,11))+["valet","cavalier","dame","roi"]
|
||||
|
||||
class Card():
|
||||
|
|
@ -591,7 +591,7 @@ class Tarot():
|
|||
|
||||
elif elt.name == 'contrat': #it's time to choose contrat
|
||||
form = data_form.Form.fromElement(elt.firstChildElement())
|
||||
xml_data = XMLTools.dataForm2xml(form)
|
||||
xml_data = dataForm2xml(form)
|
||||
self.host.bridge.tarotGameChooseContrat(room_jid.userhost(), xml_data, profile)
|
||||
|
||||
elif elt.name == 'contrat_choosed':
|
||||
|
|
@ -733,7 +733,7 @@ class Tarot():
|
|||
for looser in elt.elements(name='looser', uri=''):
|
||||
loosers.append(unicode(looser))
|
||||
form = data_form.Form.fromElement(form_elt)
|
||||
xml_data = XMLTools.dataForm2xml(form)
|
||||
xml_data = dataForm2xml(form)
|
||||
self.host.bridge.tarotGameScore(room_jid.userhost(), xml_data, winners, loosers, profile)
|
||||
elif elt.name == 'error':
|
||||
if elt['type'] == 'invalid_cards':
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ from twisted.words.protocols.jabber import client, jid
|
|||
from twisted.words.protocols.jabber import error as jab_error
|
||||
from twisted.words.protocols.jabber.xmlstream import IQ
|
||||
from twisted.internet import reactor
|
||||
from tools.xml_tools import XMLTools
|
||||
from tools.xml_tools import dataForm2xml
|
||||
import pdb
|
||||
|
||||
from wokkel import data_form
|
||||
|
|
@ -67,7 +67,7 @@ class XEP_0077():
|
|||
return
|
||||
|
||||
form = data_form.Form.fromElement(x_elem)
|
||||
xml_data = XMLTools.dataForm2xml(form)
|
||||
xml_data = dataForm2xml(form)
|
||||
self.host.bridge.actionResult("FORM", answer['id'], {"target":answer["from"], "type":"registration", "xml":xml_data})
|
||||
|
||||
def reg_err(self, failure):
|
||||
|
|
@ -75,7 +75,7 @@ class XEP_0077():
|
|||
info (_("Registration failure: %s") % str(failure.value))
|
||||
answer_data = {}
|
||||
answer_data['reason'] = 'unknown'
|
||||
answer_data={"message":"%s [code: %s]" % (failure.value.condition, failure.value.code)}
|
||||
answer_data={"message":"%s [code: %s]" % (failure.value.condition, unicode(failure.value))}
|
||||
answer_type = "ERROR"
|
||||
self.host.bridge.actionResult(answer_type, failure.value.stanza['id'], answer_data)
|
||||
|
||||
|
|
|
|||
|
|
@ -88,8 +88,14 @@ class XEP_0100():
|
|||
self.__gateways[request_id] = {'__total_items':len(disco._items), '__handled_items':0, '__private__':{'target':target.full()}}
|
||||
for item in disco._items:
|
||||
debug (_("item found: %s"), item.name)
|
||||
client.disco.requestInfo(item.entity).addCallback(self.discoInfo, entity=item.entity, request_id=request_id)
|
||||
client.disco.requestInfo(item.entity).addErrback(self.discoInfoErr, entity=item.entity, request_id=request_id)
|
||||
client.disco.requestInfo(item.entity).addCallback(self.discoInfo, entity=item.entity, request_id=request_id).addErrback(self.discoInfoErr, entity=item.entity, request_id=request_id)
|
||||
|
||||
def discoItemsErr(self, failure, request_id, target, client):
|
||||
"""Something is going wrong with disco"""
|
||||
error(_("Error when discovering [%(target)s]: %(condition)s") % {'target':target.full(), 'condition':unicode(failure.value)})
|
||||
message_data={"reason": "connection error", "message":_(u"Error while trying to discover %(target)s gateways: %(error_mess)s") % {'target':target.full(), 'error_mess':unicode(failure.value)}}
|
||||
self.host.bridge.actionResult("ERROR", request_id, message_data)
|
||||
|
||||
|
||||
def registrationSuccessful(self, target):
|
||||
"""Called when in_band registration is ok, we must now follow the rest of procedure"""
|
||||
|
|
@ -107,10 +113,11 @@ class XEP_0100():
|
|||
"""Find gateways in the target JID, using discovery protocol
|
||||
Return an id used for retrieving the list of gateways
|
||||
"""
|
||||
profile = self.host.memory.getProfileName(profile_key)
|
||||
client = self.host.getClient(profile_key)
|
||||
assert(client)
|
||||
to_jid = jid.JID(target)
|
||||
debug (_("find gateways (target = %s)") % to_jid.full())
|
||||
debug (_("find gateways (target = %(target)s, profile = %(profile)s)") % {'target':to_jid.full(), 'profile':profile})
|
||||
request_id = self.host.get_next_id()
|
||||
client.disco.requestItems(to_jid).addCallback(self.discoItems, request_id=request_id, target = to_jid, client = client)
|
||||
client.disco.requestItems(to_jid).addCallback(self.discoItems, request_id=request_id, target = to_jid, client = client).addErrback(self.discoItemsErr, request_id=request_id, target = to_jid, client = client)
|
||||
return request_id
|
||||
|
|
|
|||
Loading…
Reference in a new issue