From 7fdd173ac01c7ebad818b1e622dfd1909e4c18dd Mon Sep 17 00:00:00 2001 From: Samuel Clay Date: Mon, 17 Jan 2011 14:20:36 -0500 Subject: [PATCH] Refreshing stale feeds for old users returning. --- apps/profile/middleware.py | 4 ++++ apps/profile/models.py | 15 +++++++++++++++ media/css/reader.css | 2 +- utils/feed_fetcher.py | 13 +++++++++++-- 4 files changed, 31 insertions(+), 3 deletions(-) diff --git a/apps/profile/middleware.py b/apps/profile/middleware.py index 48d9e2ac9..02063674f 100644 --- a/apps/profile/middleware.py +++ b/apps/profile/middleware.py @@ -1,5 +1,6 @@ import datetime from utils import log as logging +from django.conf import settings class LastSeenMiddleware(object): @@ -9,8 +10,11 @@ class LastSeenMiddleware(object): and hasattr(request, 'user') and request.user.is_authenticated()): hour_ago = datetime.datetime.utcnow() - datetime.timedelta(minutes=60) + SUBSCRIBER_EXPIRE = datetime.datetime.utcnow() - datetime.timedelta(days=settings.SUBSCRIBER_EXPIRE) if request.user.profile.last_seen_on < hour_ago: logging.info(" ---> [%s] ~FG~BBRepeat visitor: ~SB%s" % (request.user, request.user.profile.last_seen_on)) + if request.user.profile.last_seen_on < SUBSCRIBER_EXPIRE: + request.user.profile.refresh_stale_feeds() request.user.profile.last_seen_on = datetime.datetime.utcnow() request.user.profile.last_seen_ip = request.META['REMOTE_ADDR'] request.user.profile.save() diff --git a/apps/profile/models.py b/apps/profile/models.py index b873a9eca..255e1b9ff 100644 --- a/apps/profile/models.py +++ b/apps/profile/models.py @@ -50,6 +50,21 @@ Sincerely, NewsBlur""" % {'user': self.user.username, 'feeds': subs.count()} mail_admins('New premium account', message, fail_silently=True) + def refresh_stale_feeds(self): + stale_cutoff = datetime.datetime.now() - datetime.timedelta(days=7) + stale_feeds = UserSubscription.objects.filter(user=self.user, active=True, feed__last_update__lte=stale_cutoff) + all_feeds = UserSubscription.objects.filter(user=self.user, active=True) + + logging.info(" ---> [%s] ~FG~BBRefreshing stale feeds: ~SB%s/%s" % ( + self.user, stale_feeds.count(), all_feeds.count())) + + for sub in stale_feeds: + sub.feed.fetched_once = False + sub.feed.save() + + queue_new_feeds(self.user) + + def create_profile(sender, instance, created, **kwargs): if created: Profile.objects.create(user=instance) diff --git a/media/css/reader.css b/media/css/reader.css index b912e93df..7144d5111 100644 --- a/media/css/reader.css +++ b/media/css/reader.css @@ -1456,7 +1456,7 @@ background: transparent; #story_pane .NB-feed-story-header-info { font-weight: bold; font-size: 16px; - padding: 0 200px 0 28px; + padding: 0 250px 0 28px; background: #dadada url('../theme/images/dadada_40x100_textures_03_highlight_soft_75.png') 0 50% repeat-x; border-bottom: 1px solid #ADADAD; position: relative; diff --git a/utils/feed_fetcher.py b/utils/feed_fetcher.py index 86d79b260..ca632c08c 100644 --- a/utils/feed_fetcher.py +++ b/utils/feed_fetcher.py @@ -330,8 +330,17 @@ class Dispatcher: logging.debug(u' ---> [%-30s] Fetching page' % (unicode(feed)[:30])) page_importer = PageImporter(feed.feed_link, feed) - page_importer.fetch_page() - + try: + page_importer.fetch_page() + except Exception, e: + logging.debug('[%d] ! -------------------------' % (feed_id,)) + tb = traceback.format_exc() + logging.error(tb) + logging.debug('[%d] ! -------------------------' % (feed_id,)) + ret_feed = FEED_ERREXC + feed.save_feed_history(550, "Page Error", tb) + fetched_feed = None + feed = self.refresh_feed(feed_id) delta = datetime.datetime.utcnow() - start_time