From 3bc137945573cb9aa2a8a79d896ef12b160828e3 Mon Sep 17 00:00:00 2001 From: Samuel Clay Date: Fri, 17 May 2013 13:51:46 -0700 Subject: [PATCH] New API endpoint: /reader/unread_story_hashes. --- apps/reader/urls.py | 1 + apps/reader/views.py | 20 ++++++++++++++++++++ templates/static/api.yml | 14 +++++++++++++- 3 files changed, 34 insertions(+), 1 deletion(-) diff --git a/apps/reader/urls.py b/apps/reader/urls.py index fef399391..812315335 100644 --- a/apps/reader/urls.py +++ b/apps/reader/urls.py @@ -17,6 +17,7 @@ urlpatterns = patterns('', url(r'^refresh_feeds', views.refresh_feeds, name='refresh-feeds'), url(r'^feed_unread_count', views.feed_unread_count, name='feed-unread-count'), url(r'^starred_stories', views.load_starred_stories, name='load-starred-stories'), + url(r'^unread_story_hashes', views.unread_story_hashes, name='unread-story-hashes'), url(r'^mark_all_as_read', views.mark_all_as_read, name='mark-all-as-read'), url(r'^mark_story_as_read', views.mark_story_as_read, name='mark-story-as-read'), url(r'^mark_feed_stories_as_read', views.mark_feed_stories_as_read, name='mark-feed-stories-as-read'), diff --git a/apps/reader/views.py b/apps/reader/views.py index d1f10c79d..9c7c4b25c 100644 --- a/apps/reader/views.py +++ b/apps/reader/views.py @@ -823,7 +823,27 @@ def load_river_stories__redis(request): elapsed_time=timediff, user_profiles=user_profiles) + +@json.json_view +def unread_story_hashes(request): + user = get_user(request) + feed_ids = [int(feed_id) for feed_id in request.REQUEST.getlist('feed_id') if feed_id] + if not feed_ids: + usersubs = UserSubscription.objects.filter(user=user, active=True).only('feed') + feed_ids = [sub.feed_id for sub in usersubs] + + unread_feed_story_hashes = {} + for feed_id in feed_ids: + try: + us = UserSubscription.objects.get(user=user.pk, feed=feed_id) + except UserSubscription.DoesNotExist: + continue + unread_feed_story_hashes[feed_id] = us.get_stories(read_filter='unread', limit=500, + hashes_only=True) + + return dict(unread_feed_story_hashes=unread_feed_story_hashes) + @ajax_login_required @json.json_view def mark_all_as_read(request): diff --git a/templates/static/api.yml b/templates/static/api.yml index 45c7e9549..f15086908 100644 --- a/templates/static/api.yml +++ b/templates/static/api.yml @@ -234,7 +234,19 @@ optional: true default: unread example: all - + + - url: /reader/unread_story_hashes + method: GET + short_desc: "The story_hashes of all unread stories." + long_desc: + - "The story_hashes of all unread stories." + - "Useful for offline access of stories and quick unread syncing." + params: + - key: feed_id + desc: "Feed ids to check. Omit to include every feed subscription." + optional: true + example: "feed_id=12&feed_id=24" + - url: /reader/mark_story_as_read method: POST short_desc: "Mark a story as read."