From 26aab7a2cd65022e5eefdfd95abd54606de7ddc1 Mon Sep 17 00:00:00 2001 From: Tobin Date: Tue, 31 Mar 2015 10:47:15 -0500 Subject: [PATCH] implemented subreddit search. search for posts --- rtv/content.py | 55 +++++++++++++++++++++++++----------------------- rtv/subreddit.py | 17 +++++++++++++++ 2 files changed, 46 insertions(+), 26 deletions(-) diff --git a/rtv/content.py b/rtv/content.py index 72899e9..12f9f56 100644 --- a/rtv/content.py +++ b/rtv/content.py @@ -245,7 +245,7 @@ class SubredditContent(BaseContent): self._submission_data = [] @classmethod - def from_name(cls, reddit, name, loader, order='hot'): + def from_name(cls, reddit, name, loader, order='hot', search=None): if name is None: name = 'front' @@ -263,34 +263,37 @@ class SubredditContent(BaseContent): else: display_name = '/r/{}/{}'.format(name, order) - if name == 'front': - if order == 'hot': - submissions = reddit.get_front_page(limit=None) - elif order == 'top': - submissions = reddit.get_top(limit=None) - elif order == 'rising': - submissions = reddit.get_rising(limit=None) - elif order == 'new': - submissions = reddit.get_new(limit=None) - elif order == 'controversial': - submissions = reddit.get_controversial(limit=None) - else: - raise SubredditError(display_name) + if search: + submissions = reddit.search(search, name, order) else: - subreddit = reddit.get_subreddit(name) - if order == 'hot': - submissions = subreddit.get_hot(limit=None) - elif order == 'top': - submissions = subreddit.get_top(limit=None) - elif order == 'rising': - submissions = subreddit.get_rising(limit=None) - elif order == 'new': - submissions = subreddit.get_new(limit=None) - elif order == 'controversial': - submissions = subreddit.get_controversial(limit=None) + if name == 'front': + if order == 'hot': + submissions = reddit.get_front_page(limit=None) + elif order == 'top': + submissions = reddit.get_top(limit=None) + elif order == 'rising': + submissions = reddit.get_rising(limit=None) + elif order == 'new': + submissions = reddit.get_new(limit=None) + elif order == 'controversial': + submissions = reddit.get_controversial(limit=None) + else: + raise SubredditError(display_name) else: - raise SubredditError(display_name) + subreddit = reddit.get_subreddit(name) + if order == 'hot': + submissions = subreddit.get_hot(limit=None) + elif order == 'top': + submissions = subreddit.get_top(limit=None) + elif order == 'rising': + submissions = subreddit.get_rising(limit=None) + elif order == 'new': + submissions = subreddit.get_new(limit=None) + elif order == 'controversial': + submissions = subreddit.get_controversial(limit=None) + else: + raise SubredditError(display_name) # Verify that content exists for the given submission generator. # This is necessary because PRAW loads submissions lazily, and diff --git a/rtv/subreddit.py b/rtv/subreddit.py index 5dfe990..1f1785b 100644 --- a/rtv/subreddit.py +++ b/rtv/subreddit.py @@ -50,6 +50,23 @@ class SubredditPage(BasePage): else: self.nav = Navigator(self.content.get) + @SubredditController.register('f') + def search_subreddit(self, name=None): + name = name or self.content.name + attr = curses.A_BOLD | Color.CYAN + prompt = 'Search this Subreddit: ' + n_rows, n_cols = self.stdscr.getmaxyx() + self.stdscr.addstr(n_rows - 1, 0, prompt, attr) + self.stdscr.refresh() + window = self.stdscr.derwin(1, n_cols - len(prompt), + n_rows - 1, len(prompt)) + window.attrset(attr) + + search = text_input(window) + if search is not None: + self.content = SubredditContent.from_name(self.reddit, name, + self.loader, search=search) + @SubredditController.register('/') def prompt_subreddit(self): "Open a prompt to type in a new subreddit"