From 687c044b1018b5f9c42a1c86aaf86d40a26a12bf Mon Sep 17 00:00:00 2001 From: Samuel Clay Date: Wed, 7 Aug 2013 15:43:25 -0700 Subject: [PATCH] Adding folder search for admin only. If you're reading this commit message, don't get excited. I probably won't be launching folder search using this method. It'll be a while before I can ship it. But if for some strange reason folder search is much faster than I thought, this has a chance. --- apps/reader/views.py | 21 +++++++++++++++++++-- apps/rss_feeds/models.py | 12 ++++++++++++ media/js/newsblur/common/assetmodel.js | 3 ++- media/js/newsblur/reader/reader.js | 3 ++- media/js/newsblur/views/folder_view.js | 7 +++++++ 5 files changed, 42 insertions(+), 4 deletions(-) diff --git a/apps/reader/views.py b/apps/reader/views.py index f62674700..bb5dd993b 100644 --- a/apps/reader/views.py +++ b/apps/reader/views.py @@ -827,6 +827,7 @@ def load_river_stories__redis(request): page = int(request.REQUEST.get('page', 1)) order = request.REQUEST.get('order', 'newest') read_filter = request.REQUEST.get('read_filter', 'unread') + query = request.REQUEST.get('query') now = localtime_for_timezone(datetime.datetime.now(), user.profile.timezone) usersubs = [] offset = (page-1) * limit @@ -836,6 +837,21 @@ def load_river_stories__redis(request): if story_hashes: unread_feed_story_hashes = None read_filter = 'unread' + mstories = MStory.objects(story_hash__in=story_hashes).order_by(story_date_order) + stories = Feed.format_stories(mstories) + elif query: + if user.profile.is_premium: + usersubs = UserSubscription.subs_for_feeds(user.pk, feed_ids=feed_ids, + read_filter='all') + feed_ids = [sub.feed_id for sub in usersubs] + stories = Feed.find_feed_stories(feed_ids, query, offset=offset, limit=limit) + mstories = stories + unread_feed_story_hashes = UserSubscription.story_hashes(user.pk, feed_ids=feed_ids, + read_filter="unread", order=order, + group_by_feed=False) + else: + stories = [] + message = "You must be a premium subscriber to search." else: usersubs = UserSubscription.subs_for_feeds(user.pk, feed_ids=feed_ids, read_filter=read_filter) @@ -854,9 +870,10 @@ def load_river_stories__redis(request): else: story_hashes = [] unread_feed_story_hashes = [] + + mstories = MStory.objects(story_hash__in=story_hashes).order_by(story_date_order) + stories = Feed.format_stories(mstories) - mstories = MStory.objects(story_hash__in=story_hashes).order_by(story_date_order) - stories = Feed.format_stories(mstories) found_feed_ids = list(set([story['story_feed_id'] for story in stories])) stories, user_profiles = MSharedStory.stories_with_comments_and_profiles(stories, user.pk) diff --git a/apps/rss_feeds/models.py b/apps/rss_feeds/models.py index cd5942001..e3a420265 100644 --- a/apps/rss_feeds/models.py +++ b/apps/rss_feeds/models.py @@ -1140,6 +1140,18 @@ class Feed(models.Model): return stories + @classmethod + def find_feed_stories(cls, feed_ids, query, offset=0, limit=25): + stories_db = MStory.objects( + Q(story_feed_id__in=feed_ids) & + (Q(story_title__icontains=query) | + Q(story_author_name__icontains=query) | + Q(story_tags__icontains=query)) + ).order_by('-story_date')[offset:offset+limit] + stories = cls.format_stories(stories_db) + + return stories + def find_stories(self, query, offset=0, limit=25): stories_db = MStory.objects( Q(story_feed_id=self.pk) & diff --git a/media/js/newsblur/common/assetmodel.js b/media/js/newsblur/common/assetmodel.js index 977d4b97c..e6b43de1a 100644 --- a/media/js/newsblur/common/assetmodel.js +++ b/media/js/newsblur/common/assetmodel.js @@ -575,7 +575,8 @@ NEWSBLUR.AssetModel = Backbone.Router.extend({ feeds: feeds, page: page, order: this.view_setting(feed_id, 'order'), - read_filter: this.view_setting(feed_id, 'read_filter') + read_filter: this.view_setting(feed_id, 'read_filter'), + query: NEWSBLUR.reader.flags.search }, pre_callback, error_callback, { 'ajax_group': (page ? 'feed_page' : 'feed'), 'request_type': 'GET' diff --git a/media/js/newsblur/reader/reader.js b/media/js/newsblur/reader/reader.js index c8f39354e..523d2ffea 100644 --- a/media/js/newsblur/reader/reader.js +++ b/media/js/newsblur/reader/reader.js @@ -1185,7 +1185,8 @@ this.open_river_stories(this.active_folder && this.active_folder.folder_view && this.active_folder.folder_view.$el, - this.active_folder); + this.active_folder, + options); } else { this.open_feed(this.active_feed, options); } diff --git a/media/js/newsblur/views/folder_view.js b/media/js/newsblur/views/folder_view.js index e711861d9..087933406 100644 --- a/media/js/newsblur/views/folder_view.js +++ b/media/js/newsblur/views/folder_view.js @@ -116,6 +116,7 @@ NEWSBLUR.Views.Folder = Backbone.View.extend({ <%= NEWSBLUR.assets.view_setting("river:"+folder_title, "order") %>\ \ \ +
\
\
\ show hidden stories\ @@ -143,6 +144,12 @@ NEWSBLUR.Views.Folder = Backbone.View.extend({ if (this.options.feedbar) { this.show_collapsed_folder_count(); } + if (this.options.feedbar && NEWSBLUR.Globals.is_staff) { + this.search_view = new NEWSBLUR.Views.FeedSearchView({ + feedbar_view: this + }).render(); + this.$(".NB-search-container").html(this.search_view.$el); + } return $folder; },