From bc0a9b89db190fa8e0f0cfe80dea4148baaba3ac Mon Sep 17 00:00:00 2001 From: Bezleputh Date: Sun, 7 Sep 2014 23:13:55 +0200 Subject: [PATCH] [boobot/twitter] fix purge system --- contrib/boobot.py | 32 +++++++++++++++++++++----------- modules/twitter/backend.py | 10 ++++------ 2 files changed, 25 insertions(+), 17 deletions(-) diff --git a/contrib/boobot.py b/contrib/boobot.py index b0b0a528..6b6cc08c 100755 --- a/contrib/boobot.py +++ b/contrib/boobot.py @@ -19,7 +19,7 @@ # along with weboob. If not, see . -from datetime import datetime +from datetime import datetime, timedelta import logging import re import os @@ -30,7 +30,7 @@ from math import log import urlparse import urllib from random import randint, choice - +import itertools from irc.bot import SingleServerIRCBot import mechanize from mechanize import _headersutil as headersutil @@ -204,16 +204,26 @@ class MyThread(Thread): return None def check_twitter(self): - for backend, thread in self.weboob.do('iter_resources', objs=None, - split_path=['search', 'weboob'], backends=['twitter']): - if not thread.id in backend.storage.get('seen', default={}): - _item = thread.id.split('#') - url = 'https://twitter.com/%s/status/%s' % (_item[0], _item[1]) - for msg in self.bot.on_url(url): - self.bot.send_message('%s: %s' % (_item[0], url)) - self.bot.send_message(msg) + nb_tweets = 10 - backend.set_message_read(backend.fill_thread(thread, ['root']).root) + for _, backend in self.weboob.load_backends(modules=['twitter']).iteritems(): + for thread in list(itertools.islice(backend.iter_resources(None, ['search', 'weboob']), + 0, + nb_tweets)): + + if not backend.storage.get('lastpurge'): + backend.storage.set('lastpurge', datetime.now() - timedelta(days=60)) + backend.storage.save() + + if thread.id not in backend.storage.get('seen', default={}) and\ + thread.date > backend.storage.get('lastpurge'): + _item = thread.id.split('#') + url = 'https://twitter.com/%s/status/%s' % (_item[0], _item[1]) + for msg in self.bot.on_url(url): + self.bot.send_message('%s: %s' % (_item[0], url)) + self.bot.send_message(msg) + + backend.set_message_read(backend.fill_thread(thread, ['root']).root) def check_dlfp(self): for backend, msg in self.weboob.do('iter_unread_messages', backends=['dlfp']): diff --git a/modules/twitter/backend.py b/modules/twitter/backend.py index 97a1d891..5d5262d4 100644 --- a/modules/twitter/backend.py +++ b/modules/twitter/backend.py @@ -18,7 +18,6 @@ # along with weboob. If not, see . from datetime import datetime, timedelta -import time from weboob.tools.value import Value, ValueBackendPassword from weboob.tools.backend import BaseBackend, BackendConfig from weboob.capabilities.messages import CapMessages, Thread, CapMessagesPost @@ -97,11 +96,10 @@ class TwitterBackend(BaseBackend, CapMessages, CapMessagesPost, CapCollection): self._purge_message_read() def _purge_message_read(self): + lastpurge = self.storage.get('lastpurge', default=datetime.now() - timedelta(days=60)) - lastpurge = self.storage.get('lastpurge', default=0) - - if time.time() - lastpurge > 86400: - self.storage.set('lastpurge', time.time()) + if datetime.now() - lastpurge > timedelta(days=60): + self.storage.set('lastpurge', datetime.now() - timedelta(days=60)) self.storage.save() # we can't directly delete without a "RuntimeError: dictionary changed size during iteration" @@ -111,7 +109,7 @@ class TwitterBackend(BaseBackend, CapMessages, CapMessagesPost, CapCollection): # if no date available, create a new one (compatibility with "old" storage) if not date: self.storage.set('seen', id, datetime.now()) - elif datetime.now() - date > timedelta(days=60): + elif lastpurge > date: todelete.append(id) for id in todelete: