Merge branch 'search_subreddit' of https://github.com/Brobin/rtv into Brobin-search_subreddit
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
15
rtv/page.py
15
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()
|
||||
|
||||
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user