diff --git a/README.rst b/README.rst index 85f21f4..c6e5a5f 100644 --- a/README.rst +++ b/README.rst @@ -70,6 +70,7 @@ In subreddit mode you can browse through the top submissions on either the front :``►`` or ``l``: View comments for the selected submission :``/``: Open a prompt to switch subreddits +:``f``: Open a prompt to search the current subreddit The ``/`` prompt accepts subreddits in the following formats diff --git a/rtv/content.py b/rtv/content.py index 72899e9..e79b398 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' @@ -262,9 +262,11 @@ class SubredditContent(BaseContent): display_name = '/r/{}'.format(name) else: display_name = '/r/{}/{}'.format(name, order) - + if name == 'front': - if order == 'hot': + if search: + submissions = reddit.search(search, None, order) + elif order == 'hot': submissions = reddit.get_front_page(limit=None) elif order == 'top': submissions = reddit.get_top(limit=None) @@ -276,10 +278,11 @@ class SubredditContent(BaseContent): submissions = reddit.get_controversial(limit=None) else: raise SubredditError(display_name) - else: subreddit = reddit.get_subreddit(name) - if order == 'hot': + if search: + submissions = reddit.search(search, name, order) + elif order == 'hot': submissions = subreddit.get_hot(limit=None) elif order == 'top': submissions = subreddit.get_top(limit=None) diff --git a/rtv/docs.py b/rtv/docs.py index 6637ac4..025a9e6 100644 --- a/rtv/docs.py +++ b/rtv/docs.py @@ -36,6 +36,7 @@ Global Commands Subreddit Mode `RIGHT` or `l` : View comments for the selected submission `/` : Open a prompt to switch subreddits + `f` : Open a prompt to search the current subreddit Submission Mode `LEFT` or `h` : Return to subreddit mode diff --git a/rtv/page.py b/rtv/page.py index be55910..4a30465 100644 --- a/rtv/page.py +++ b/rtv/page.py @@ -5,7 +5,7 @@ import sys import praw.errors from .helpers import clean -from .curses_helpers import Color, show_notification, show_help +from .curses_helpers import Color, show_notification, show_help, text_input __all__ = ['Navigator'] @@ -226,6 +226,19 @@ class BasePage(object): except praw.errors.LoginOrScopeRequired: show_notification(self.stdscr, ['Login to vote']) + def prompt_input(self, prompt): + """Prompt the user for input""" + attr = curses.A_BOLD | Color.CYAN + 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) + + out = text_input(window) + return out + def draw(self): n_rows, n_cols = self.stdscr.getmaxyx() diff --git a/rtv/subreddit.py b/rtv/subreddit.py index 5dfe990..97d292f 100644 --- a/rtv/subreddit.py +++ b/rtv/subreddit.py @@ -8,7 +8,7 @@ from .submission import SubmissionPage from .content import SubredditContent from .helpers import clean, open_browser from .curses_helpers import (BULLET, UARROW, DARROW, Color, LoadScreen, - text_input, show_notification) + show_notification) __all__ = ['opened_links', 'SubredditController', 'SubredditPage'] @@ -50,22 +50,27 @@ class SubredditPage(BasePage): else: self.nav = Navigator(self.content.get) + @SubredditController.register('f') + def search_subreddit(self, name=None): + """Open a prompt to search the subreddit""" + name = name or self.content.name + prompt = 'Search this Subreddit: ' + search = self.prompt_input(prompt) + if search is not None: + try: + self.nav.cursor_index = 0 + self.content = SubredditContent.from_name(self.reddit, name, + self.loader, search=search) + except IndexError: # if there are no submissions + show_notification(self.stdscr, ['No results found']) + @SubredditController.register('/') def prompt_subreddit(self): - "Open a prompt to type in a new subreddit" - - attr = curses.A_BOLD | Color.CYAN + """Open a prompt to type in a new subreddit""" prompt = 'Enter Subreddit: /r/' - 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) - - out = text_input(window) - if out is not None: - self.refresh_content(name=out) + name = self.prompt_input(prompt) + if name is not None: + self.refresh_content(name=name) @SubredditController.register(curses.KEY_RIGHT, 'l') def open_submission(self):