diff --git a/weboob/backends/ecrans/backend.py b/weboob/backends/ecrans/backend.py
index d3d1ccaf..e09a9669 100644
--- a/weboob/backends/ecrans/backend.py
+++ b/weboob/backends/ecrans/backend.py
@@ -22,8 +22,9 @@
from __future__ import with_statement
from weboob.capabilities.messages import ICapMessages
+from weboob.tools.capabilities.messages.GenericBackend import GenericNewspaperBackend
from .browser import NewspaperEcransBrowser
-from .GenericBackend import GenericNewspaperBackend
+from .tools import rssid
class NewspaperEcransBackend(GenericNewspaperBackend, ICapMessages):
"NewspaperEcransBackend class"
@@ -36,5 +37,6 @@ class NewspaperEcransBackend(GenericNewspaperBackend, ICapMessages):
DESCRIPTION = u'Ecrans French news website'
BROWSER = NewspaperEcransBrowser
RSS_FEED = 'http://www.ecrans.fr/spip.php?page=backend'
+ RSSID = rssid
diff --git a/weboob/backends/ecrans/pages/article.py b/weboob/backends/ecrans/pages/article.py
index b11ba6c3..58fd2358 100644
--- a/weboob/backends/ecrans/pages/article.py
+++ b/weboob/backends/ecrans/pages/article.py
@@ -18,7 +18,7 @@
# You should have received a copy of the GNU Affero General Public License
# along with weboob. If not, see .
-from weboob.tools.genericArticle import GenericNewsPage, remove_from_selector_list, try_remove_from_selector_list, try_drop_tree
+from weboob.tools.capabilities.messages.genericArticle import GenericNewsPage, remove_from_selector_list, try_remove_from_selector_list, try_drop_tree
class ArticlePage(GenericNewsPage):
"ArticlePage object for inrocks"
def on_loaded(self):
diff --git a/weboob/backends/inrocks/GenericBackend.py b/weboob/backends/inrocks/GenericBackend.py
deleted file mode 100644
index b6e43950..00000000
--- a/weboob/backends/inrocks/GenericBackend.py
+++ /dev/null
@@ -1,99 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright(C) 2011 Julien Hebert
-#
-# This file is part of weboob.
-#
-# weboob is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# weboob is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with weboob. If not, see .
-
-# python2.5 compatibility
-from __future__ import with_statement
-
-from weboob.capabilities.messages import ICapMessages, Message, Thread
-from weboob.tools.backend import BaseBackend
-from weboob.tools.newsfeed import Newsfeed
-from .tools import rssid
-
-class GenericNewspaperBackend(BaseBackend, ICapMessages):
- "GenericNewspaperBackend class"
- MAINTAINER = 'Julien Hebert'
- EMAIL = 'juke@free.fr'
- VERSION = '0.9'
- LICENSE = 'AGPLv3+'
- STORAGE = {'seen': {}}
- RSS_FEED = None
-
- def get_thread(self, _id):
- if isinstance(_id, Thread):
- thread = _id
- _id = thread.id
- else:
- thread = None
-
- with self.browser:
- content = self.browser.get_content(_id)
-
- if not thread:
- thread = Thread(_id)
-
- flags = Message.IS_HTML
- if not thread.id in self.storage.get('seen', default={}):
- flags |= Message.IS_UNREAD
- thread.title = content.title
- if not thread.date:
- thread.date = content.date
-
- thread.root = Message(
- thread=thread,
- id=0,
- title=content.title,
- sender=content.author,
- receivers=None,
- date=thread.date,
- parent=None,
- content=content.body,
- signature='URL: %s' % content.url,
- flags=flags,
- children= [])
- return thread
-
- def iter_threads(self):
- for article in Newsfeed(self.RSS_FEED, rssid).iter_entries():
- thread = Thread(article.id)
- thread.title = article.title
- thread.date = article.datetime
- yield(thread)
-
- def fill_thread(self, thread):
- "fill the thread"
- return self.get_thread(thread)
-
- def iter_unread_messages(self, thread=None):
- for thread in self.iter_threads():
- self.fill_thread(thread)
- for msg in thread.iter_all_messages():
- if msg.flags & msg.IS_UNREAD:
- yield msg
-
- def set_message_read(self, message):
- self.storage.set(
- 'seen',
- message.thread.id,
- 'comments',
- self.storage.get(
- 'seen',
- message.thread.id,
- 'comments',
- default=[]) + [message.id])
- self.storage.save()
diff --git a/weboob/backends/inrocks/backend.py b/weboob/backends/inrocks/backend.py
index 015ce1f0..2919a1e6 100644
--- a/weboob/backends/inrocks/backend.py
+++ b/weboob/backends/inrocks/backend.py
@@ -22,8 +22,9 @@
from __future__ import with_statement
from weboob.capabilities.messages import ICapMessages
+from weboob.tools.capabilities.messages.GenericBackend import GenericNewspaperBackend
from .browser import NewspaperInrocksBrowser
-from .GenericBackend import GenericNewspaperBackend
+from .tools import rssid
class NewspaperInrocksBackend(GenericNewspaperBackend, ICapMessages):
"NewspaperInrocksBackend class"
@@ -36,4 +37,4 @@ class NewspaperInrocksBackend(GenericNewspaperBackend, ICapMessages):
DESCRIPTION = u'Inrock French news website'
BROWSER = NewspaperInrocksBrowser
RSS_FEED = 'http://www.lesinrocks.com/fileadmin/rss/actus.xml'
-
+ RSSID = rssid
diff --git a/weboob/backends/inrocks/pages/article.py b/weboob/backends/inrocks/pages/article.py
index 6f0d980a..3a499556 100644
--- a/weboob/backends/inrocks/pages/article.py
+++ b/weboob/backends/inrocks/pages/article.py
@@ -19,7 +19,7 @@
# along with weboob. If not, see .
from weboob.tools.browser import BrokenPageError
-from weboob.tools.genericArticle import GenericNewsPage, try_remove, \
+from weboob.tools.capabilities.messages.genericArticle import GenericNewsPage, try_remove, \
try_remove_from_selector_list, \
drop_comments, NoneMainDiv
diff --git a/weboob/backends/inrocks/pages/inrockstv.py b/weboob/backends/inrocks/pages/inrockstv.py
index bbc89fd9..dceebe2d 100644
--- a/weboob/backends/inrocks/pages/inrockstv.py
+++ b/weboob/backends/inrocks/pages/inrockstv.py
@@ -18,7 +18,7 @@
# You should have received a copy of the GNU Affero General Public License
# along with weboob. If not, see .
-from weboob.tools.genericArticle import GenericNewsPage
+from weboob.tools.capabilities.messages.genericArticle import GenericNewsPage
class InrocksTvPage(GenericNewsPage):
"ArticlePage object for inrocks"
diff --git a/weboob/backends/lefigaro/GenericBackend.py b/weboob/backends/lefigaro/GenericBackend.py
deleted file mode 100644
index b6e43950..00000000
--- a/weboob/backends/lefigaro/GenericBackend.py
+++ /dev/null
@@ -1,99 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright(C) 2011 Julien Hebert
-#
-# This file is part of weboob.
-#
-# weboob is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# weboob is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with weboob. If not, see .
-
-# python2.5 compatibility
-from __future__ import with_statement
-
-from weboob.capabilities.messages import ICapMessages, Message, Thread
-from weboob.tools.backend import BaseBackend
-from weboob.tools.newsfeed import Newsfeed
-from .tools import rssid
-
-class GenericNewspaperBackend(BaseBackend, ICapMessages):
- "GenericNewspaperBackend class"
- MAINTAINER = 'Julien Hebert'
- EMAIL = 'juke@free.fr'
- VERSION = '0.9'
- LICENSE = 'AGPLv3+'
- STORAGE = {'seen': {}}
- RSS_FEED = None
-
- def get_thread(self, _id):
- if isinstance(_id, Thread):
- thread = _id
- _id = thread.id
- else:
- thread = None
-
- with self.browser:
- content = self.browser.get_content(_id)
-
- if not thread:
- thread = Thread(_id)
-
- flags = Message.IS_HTML
- if not thread.id in self.storage.get('seen', default={}):
- flags |= Message.IS_UNREAD
- thread.title = content.title
- if not thread.date:
- thread.date = content.date
-
- thread.root = Message(
- thread=thread,
- id=0,
- title=content.title,
- sender=content.author,
- receivers=None,
- date=thread.date,
- parent=None,
- content=content.body,
- signature='URL: %s' % content.url,
- flags=flags,
- children= [])
- return thread
-
- def iter_threads(self):
- for article in Newsfeed(self.RSS_FEED, rssid).iter_entries():
- thread = Thread(article.id)
- thread.title = article.title
- thread.date = article.datetime
- yield(thread)
-
- def fill_thread(self, thread):
- "fill the thread"
- return self.get_thread(thread)
-
- def iter_unread_messages(self, thread=None):
- for thread in self.iter_threads():
- self.fill_thread(thread)
- for msg in thread.iter_all_messages():
- if msg.flags & msg.IS_UNREAD:
- yield msg
-
- def set_message_read(self, message):
- self.storage.set(
- 'seen',
- message.thread.id,
- 'comments',
- self.storage.get(
- 'seen',
- message.thread.id,
- 'comments',
- default=[]) + [message.id])
- self.storage.save()
diff --git a/weboob/backends/lefigaro/backend.py b/weboob/backends/lefigaro/backend.py
index c261bfcc..e279b7d6 100644
--- a/weboob/backends/lefigaro/backend.py
+++ b/weboob/backends/lefigaro/backend.py
@@ -22,8 +22,9 @@
from __future__ import with_statement
from weboob.capabilities.messages import ICapMessages
+from weboob.tools.capabilities.messages.GenericBackend import GenericNewspaperBackend
from .browser import NewspaperFigaroBrowser
-from .GenericBackend import GenericNewspaperBackend
+from .tools import rssid
class NewspaperFigaroBackend(GenericNewspaperBackend, ICapMessages):
"NewspaperFigaroBackend class"
@@ -36,5 +37,6 @@ class NewspaperFigaroBackend(GenericNewspaperBackend, ICapMessages):
DESCRIPTION = u'Lefigaro French news website'
BROWSER = NewspaperFigaroBrowser
RSS_FEED = 'http://rss.lefigaro.fr/lefigaro/laune?format=xml'
+ RSSID = rssid
diff --git a/weboob/backends/lefigaro/pages/article.py b/weboob/backends/lefigaro/pages/article.py
index e9b8ed0d..f434a65a 100644
--- a/weboob/backends/lefigaro/pages/article.py
+++ b/weboob/backends/lefigaro/pages/article.py
@@ -18,7 +18,7 @@
# You should have received a copy of the GNU Affero General Public License
# along with weboob. If not, see .
-from weboob.tools.genericArticle import GenericNewsPage, remove_from_selector_list, drop_comments, try_drop_tree, try_remove_from_selector_list
+from weboob.tools.capabilities.messages.genericArticle import GenericNewsPage, remove_from_selector_list, drop_comments, try_drop_tree, try_remove_from_selector_list
class ArticlePage(GenericNewsPage):
"ArticlePage object for inrocks"
diff --git a/weboob/backends/lefigaro/pages/flashactu.py b/weboob/backends/lefigaro/pages/flashactu.py
index 2b2d61c7..2e38633a 100644
--- a/weboob/backends/lefigaro/pages/flashactu.py
+++ b/weboob/backends/lefigaro/pages/flashactu.py
@@ -18,7 +18,7 @@
# You should have received a copy of the GNU Affero General Public License
# along with weboob. If not, see .
-from weboob.tools.genericArticle import GenericNewsPage
+from weboob.tools.capabilities.messages.genericArticle import GenericNewsPage
class FlashActuPage(GenericNewsPage):
"ArticlePage object for inrocks"
diff --git a/weboob/backends/lefigaro/pages/simple.py b/weboob/backends/lefigaro/pages/simple.py
index 44e05ef8..25128135 100644
--- a/weboob/backends/lefigaro/pages/simple.py
+++ b/weboob/backends/lefigaro/pages/simple.py
@@ -18,7 +18,7 @@
# You should have received a copy of the GNU Affero General Public License
# along with weboob. If not, see .
-from weboob.tools.genericArticle import GenericNewsPage
+from weboob.tools.capabilities.messages.genericArticle import GenericNewsPage
class SimplePage(GenericNewsPage):
"ArticlePage object for minutes20"
diff --git a/weboob/backends/minutes20/GenericBackend.py b/weboob/backends/minutes20/GenericBackend.py
deleted file mode 100644
index b6e43950..00000000
--- a/weboob/backends/minutes20/GenericBackend.py
+++ /dev/null
@@ -1,99 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright(C) 2011 Julien Hebert
-#
-# This file is part of weboob.
-#
-# weboob is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# weboob is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with weboob. If not, see .
-
-# python2.5 compatibility
-from __future__ import with_statement
-
-from weboob.capabilities.messages import ICapMessages, Message, Thread
-from weboob.tools.backend import BaseBackend
-from weboob.tools.newsfeed import Newsfeed
-from .tools import rssid
-
-class GenericNewspaperBackend(BaseBackend, ICapMessages):
- "GenericNewspaperBackend class"
- MAINTAINER = 'Julien Hebert'
- EMAIL = 'juke@free.fr'
- VERSION = '0.9'
- LICENSE = 'AGPLv3+'
- STORAGE = {'seen': {}}
- RSS_FEED = None
-
- def get_thread(self, _id):
- if isinstance(_id, Thread):
- thread = _id
- _id = thread.id
- else:
- thread = None
-
- with self.browser:
- content = self.browser.get_content(_id)
-
- if not thread:
- thread = Thread(_id)
-
- flags = Message.IS_HTML
- if not thread.id in self.storage.get('seen', default={}):
- flags |= Message.IS_UNREAD
- thread.title = content.title
- if not thread.date:
- thread.date = content.date
-
- thread.root = Message(
- thread=thread,
- id=0,
- title=content.title,
- sender=content.author,
- receivers=None,
- date=thread.date,
- parent=None,
- content=content.body,
- signature='URL: %s' % content.url,
- flags=flags,
- children= [])
- return thread
-
- def iter_threads(self):
- for article in Newsfeed(self.RSS_FEED, rssid).iter_entries():
- thread = Thread(article.id)
- thread.title = article.title
- thread.date = article.datetime
- yield(thread)
-
- def fill_thread(self, thread):
- "fill the thread"
- return self.get_thread(thread)
-
- def iter_unread_messages(self, thread=None):
- for thread in self.iter_threads():
- self.fill_thread(thread)
- for msg in thread.iter_all_messages():
- if msg.flags & msg.IS_UNREAD:
- yield msg
-
- def set_message_read(self, message):
- self.storage.set(
- 'seen',
- message.thread.id,
- 'comments',
- self.storage.get(
- 'seen',
- message.thread.id,
- 'comments',
- default=[]) + [message.id])
- self.storage.save()
diff --git a/weboob/backends/minutes20/backend.py b/weboob/backends/minutes20/backend.py
index ff049c1b..e71c7ce8 100644
--- a/weboob/backends/minutes20/backend.py
+++ b/weboob/backends/minutes20/backend.py
@@ -19,8 +19,9 @@
"backend for http://20minutes.fr"
from weboob.capabilities.messages import ICapMessages
+from weboob.tools.capabilities.messages.GenericBackend import GenericNewspaperBackend
from .browser import Newspaper20minutesBrowser
-from .GenericBackend import GenericNewspaperBackend
+from .tools import rssid
class Newspaper20minutesBackend(GenericNewspaperBackend, ICapMessages):
"Newspaper20minutesBackend class"
@@ -33,4 +34,5 @@ class Newspaper20minutesBackend(GenericNewspaperBackend, ICapMessages):
DESCRIPTION = u'20minutes French news website'
BROWSER = Newspaper20minutesBrowser
RSS_FEED = 'http://www.20minutes.fr/rss/20minutes.xml'
+ RSSID = rssid
diff --git a/weboob/backends/minutes20/pages/article.py b/weboob/backends/minutes20/pages/article.py
index 9cee4575..70faa5fa 100644
--- a/weboob/backends/minutes20/pages/article.py
+++ b/weboob/backends/minutes20/pages/article.py
@@ -18,7 +18,7 @@
# You should have received a copy of the GNU Affero General Public License
# along with weboob. If not, see .
-from weboob.tools.genericArticle import NoAuthorElement, try_remove, NoneMainDiv
+from weboob.tools.capabilities.messages.genericArticle import NoAuthorElement, try_remove, NoneMainDiv
from .simple import SimplePage
class ArticlePage(SimplePage):
diff --git a/weboob/backends/minutes20/pages/simple.py b/weboob/backends/minutes20/pages/simple.py
index 3bc4cd59..46d3214d 100644
--- a/weboob/backends/minutes20/pages/simple.py
+++ b/weboob/backends/minutes20/pages/simple.py
@@ -18,7 +18,7 @@
# You should have received a copy of the GNU Affero General Public License
# along with weboob. If not, see .
-from weboob.tools.genericArticle import GenericNewsPage
+from weboob.tools.capabilities.messages.genericArticle import GenericNewsPage
class SimplePage(GenericNewsPage):
"ArticlePage object for minutes20"
diff --git a/weboob/backends/ecrans/GenericBackend.py b/weboob/tools/capabilities/messages/GenericBackend.py
similarity index 96%
rename from weboob/backends/ecrans/GenericBackend.py
rename to weboob/tools/capabilities/messages/GenericBackend.py
index b6e43950..2b3fd26b 100644
--- a/weboob/backends/ecrans/GenericBackend.py
+++ b/weboob/tools/capabilities/messages/GenericBackend.py
@@ -23,7 +23,6 @@ from __future__ import with_statement
from weboob.capabilities.messages import ICapMessages, Message, Thread
from weboob.tools.backend import BaseBackend
from weboob.tools.newsfeed import Newsfeed
-from .tools import rssid
class GenericNewspaperBackend(BaseBackend, ICapMessages):
"GenericNewspaperBackend class"
@@ -33,6 +32,7 @@ class GenericNewspaperBackend(BaseBackend, ICapMessages):
LICENSE = 'AGPLv3+'
STORAGE = {'seen': {}}
RSS_FEED = None
+ RSSID = None
def get_thread(self, _id):
if isinstance(_id, Thread):
@@ -69,7 +69,7 @@ class GenericNewspaperBackend(BaseBackend, ICapMessages):
return thread
def iter_threads(self):
- for article in Newsfeed(self.RSS_FEED, rssid).iter_entries():
+ for article in Newsfeed(self.RSS_FEED, GenericNewspaperBackend.RSSID).iter_entries():
thread = Thread(article.id)
thread.title = article.title
thread.date = article.datetime
diff --git a/weboob/tools/capabilities/messages/__init__.py b/weboob/tools/capabilities/messages/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/weboob/tools/genericArticle.py b/weboob/tools/capabilities/messages/genericArticle.py
similarity index 100%
rename from weboob/tools/genericArticle.py
rename to weboob/tools/capabilities/messages/genericArticle.py