From a4a74eda4f1cc5f794435e3885f04a8d403f40c1 Mon Sep 17 00:00:00 2001 From: Christophe Benz Date: Sun, 16 May 2010 17:42:27 +0200 Subject: [PATCH] implement chatoob messages command --- weboob/backends/aum/backend.py | 3 +++ weboob/backends/aum/browser.py | 25 +++++++++++++++++++++---- weboob/capabilities/chat.py | 12 +++++++++++- weboob/frontends/chatoob/chatoob.py | 5 +++++ 4 files changed, 40 insertions(+), 5 deletions(-) diff --git a/weboob/backends/aum/backend.py b/weboob/backends/aum/backend.py index 902baab5..03b50afc 100644 --- a/weboob/backends/aum/backend.py +++ b/weboob/backends/aum/backend.py @@ -137,6 +137,9 @@ class AuMBackend(BaseBackend, ICapMessages, ICapMessagesReply, ICapDating, ICapC def iter_chat_contacts(self, online=True, offline=True): return self.browser.iter_chat_contacts(online=online, offline=offline) + def iter_chat_messages(self, _id=None): + return self.browser.iter_chat_messages(_id) + def send_chat_message(self, _id, message): return self.browser.send_chat_message(_id, message) diff --git a/weboob/backends/aum/browser.py b/weboob/backends/aum/browser.py index ca76b9fc..ff9dca62 100644 --- a/weboob/backends/aum/browser.py +++ b/weboob/backends/aum/browser.py @@ -38,7 +38,7 @@ from weboob.backends.aum.pages.login import LoginPage, RedirectPage, BanPage, Er from weboob.backends.aum.pages.edit import EditPhotoPage, EditPhotoCbPage, EditAnnouncePage, EditDescriptionPage, EditSexPage, EditPersonalityPage from weboob.backends.aum.pages.wait import WaitPage -from weboob.capabilities.chat import Contact +from weboob.capabilities.chat import ChatContact, ChatMessage __all__ = ['AdopteUnMec'] @@ -271,11 +271,22 @@ class AdopteUnMec(BaseBrowser): print 'isSlutOnline(%s) = %s' % (id, r) return r - def iter_chat_contacts(self, online=True, offline=True): + def _get_chat_infos(self): json = simplejson.load(self.openurl('http://www.adopteunmec.com/1.1_cht_get.php?anticache=%f' % random.random())) if json['error']: raise ChatException(u'Error while getting chat infos. json:\n%s' % json) - for contact in json['contacts']: + return json + + def iter_chat_contacts(self, online=True, offline=True): + def iter_dedupe(contacts): + yielded_ids = set() + for contact in contacts: + if contact['id'] not in yielded_ids: + yield contact + yielded_ids.add(contact['id']) + + json = self._get_chat_infos() + for contact in iter_dedupe(json['contacts']): if online and contact['cat'] == 1 or offline and contact['cat'] == 3: if contact['cat'] == 1: online = True @@ -283,7 +294,13 @@ class AdopteUnMec(BaseBrowser): online = False else: raise ChatException(u'Unknown online status: contact=%s' % contact) - yield Contact(_id=contact['id'], pseudo=contact['pseudo'], online=online, avatar_url=contact['cover'], age=contact['birthday']) + yield ChatContact(_id=contact['id'], pseudo=contact['pseudo'], online=online, avatar_url=contact['cover'], age=contact['birthday']) + + def iter_chat_messages(self, _id=None): + json = self._get_chat_infos() + if json['messages'] is not None: + for message in json['messages']: + yield ChatMessage(id_from=message['id_from'], id_to=message['id_to'], message=message['message'], date=message['date']) def send_chat_message(self, _id, message): url = 'http://www.adopteunmec.com/1.1_cht_send.php?anticache=%f' % random.random() diff --git a/weboob/capabilities/chat.py b/weboob/capabilities/chat.py index b8cd6669..7299bce0 100644 --- a/weboob/capabilities/chat.py +++ b/weboob/capabilities/chat.py @@ -16,6 +16,8 @@ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +import datetime + from .cap import ICap @@ -26,7 +28,7 @@ class ChatException(Exception): pass -class Contact(object): +class ChatContact(object): def __init__(self, _id, pseudo, online, name=None, avatar_url=None, age=None): self.id = _id self.pseudo = pseudo @@ -36,6 +38,14 @@ class Contact(object): self.age = age +class ChatMessage(object): + def __init__(self, id_from, id_to, message, date=None): + self.id_from = id_from + self.id_to = id_to + self.message = message + self.date = datetime.datetime.utcnow() if date is None else date + + class ICapChat(ICap): def iter_chat_contacts(self, online=True, offline=True): raise NotImplementedError() diff --git a/weboob/frontends/chatoob/chatoob.py b/weboob/frontends/chatoob/chatoob.py index 40591fe8..f65e166f 100644 --- a/weboob/frontends/chatoob/chatoob.py +++ b/weboob/frontends/chatoob/chatoob.py @@ -48,6 +48,11 @@ class Chatoob(ConsoleApplication): for backend, contact in self.weboob.do('iter_chat_contacts', online=True, offline=False): self.format(contact) + @ConsoleApplication.command('get messages') + def command_messages(self): + for backend, message in self.weboob.do('iter_chat_messages'): + self.format(message) + @ConsoleApplication.command('send message to contact') def command_send(self, _id, message): for backend, result in self.weboob.do('send_chat_message', _id, message):