Took the opportunity to clean up a few things and fix some old "order" errors.
This commit is contained in:
@@ -103,6 +103,12 @@ class BaseContent(object):
|
|||||||
"""
|
"""
|
||||||
Parse through a submission and return a dict with data ready to be
|
Parse through a submission and return a dict with data ready to be
|
||||||
displayed through the terminal.
|
displayed through the terminal.
|
||||||
|
|
||||||
|
Definitions:
|
||||||
|
permalink - Full URL to the submission comments.
|
||||||
|
url_full - Link that the submission points to.
|
||||||
|
url - URL that is displayed on the subreddit page, may be
|
||||||
|
"selfpost" or "x-post" or a link.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
is_selfpost = lambda s: s.startswith('http://www.reddit.com/r/')
|
is_selfpost = lambda s: s.startswith('http://www.reddit.com/r/')
|
||||||
@@ -137,33 +143,32 @@ class SubmissionContent(BaseContent):
|
|||||||
list for repeat access.
|
list for repeat access.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, submission, loader, indent_size=2,
|
def __init__(self, submission, loader, indent_size=2, max_indent_level=8,
|
||||||
max_indent_level=8, order='hot'):
|
order=None):
|
||||||
|
|
||||||
|
submission_data = self.strip_praw_submission(submission)
|
||||||
|
comments = self.flatten_comments(submission.comments)
|
||||||
|
|
||||||
self.indent_size = indent_size
|
self.indent_size = indent_size
|
||||||
self.max_indent_level = max_indent_level
|
self.max_indent_level = max_indent_level
|
||||||
|
self.name = submission_data['permalink']
|
||||||
|
self.order = order
|
||||||
self._loader = loader
|
self._loader = loader
|
||||||
self._submission = submission
|
self._submission = submission
|
||||||
|
self._submission_data = submission_data
|
||||||
self._submission_data = self.strip_praw_submission(self._submission)
|
|
||||||
self.name = self._submission_data['permalink']+' : '+order
|
|
||||||
comments = self.flatten_comments(self._submission.comments)
|
|
||||||
self._comment_data = [self.strip_praw_comment(c) for c in comments]
|
self._comment_data = [self.strip_praw_comment(c) for c in comments]
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def from_url(cls, reddit, url, loader, order='hot', indent_size=2,
|
def from_url(cls, reddit, url, loader, indent_size=2, max_indent_level=8,
|
||||||
max_indent_level=8):
|
order=None):
|
||||||
|
|
||||||
# remove order specification at the end
|
|
||||||
url = url.split(' : ')[0]
|
|
||||||
try:
|
try:
|
||||||
with loader():
|
with loader():
|
||||||
submission = reddit.get_submission(url, comment_sort=order)
|
submission = reddit.get_submission(url, comment_sort=order)
|
||||||
except (praw.errors.APIException, praw.errors.NotFound):
|
except (praw.errors.APIException, praw.errors.NotFound):
|
||||||
raise SubmissionError(url)
|
raise SubmissionError(url)
|
||||||
|
|
||||||
return cls(submission, loader, indent_size, max_indent_level,
|
return cls(submission, loader, indent_size, max_indent_level, order)
|
||||||
order=order)
|
|
||||||
|
|
||||||
def get(self, index, n_cols=70):
|
def get(self, index, n_cols=70):
|
||||||
"""
|
"""
|
||||||
@@ -248,9 +253,10 @@ class SubredditContent(BaseContent):
|
|||||||
list for repeat access.
|
list for repeat access.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, name, submissions, loader, order='hot'):
|
def __init__(self, name, submissions, loader, order=None):
|
||||||
|
|
||||||
self.name = name
|
self.name = name
|
||||||
|
self.order = order
|
||||||
self._loader = loader
|
self._loader = loader
|
||||||
self._submissions = submissions
|
self._submissions = submissions
|
||||||
self._submission_data = []
|
self._submission_data = []
|
||||||
@@ -268,30 +274,30 @@ class SubredditContent(BaseContent):
|
|||||||
raise SubredditError(name)
|
raise SubredditError(name)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def from_name(cls, reddit, name, loader, order='hot', query=None):
|
def from_name(cls, reddit, name, loader, order=None, query=None):
|
||||||
|
|
||||||
# replace the order
|
# Strip leading and trailing backslashes
|
||||||
if name.count('/') == 3:
|
name = name.strip(' /')
|
||||||
name = '/'.join(name.split('/')[:-1]+[order])
|
|
||||||
|
|
||||||
name = name.strip(' /') # Strip leading and trailing backslashes
|
|
||||||
if name.startswith('r/'):
|
if name.startswith('r/'):
|
||||||
name = name[2:]
|
name = name[2:]
|
||||||
|
|
||||||
# Grab the display order e.g. "python/new"
|
# If the order is not given explicitly, it will be searched for and
|
||||||
|
# stripped out of the subreddit name e.g. python/new.
|
||||||
if '/' in name:
|
if '/' in name:
|
||||||
name, order = name.split('/')
|
name, name_order = name.split('/')
|
||||||
|
order = order or name_order
|
||||||
|
display_name = '/r/{}'.format(name)
|
||||||
|
|
||||||
display_name = '/r/{0:s}/{1:s}'.format(name, order)
|
if order not in ['hot', 'top', 'rising', 'new', 'controversial', None]:
|
||||||
|
|
||||||
if order not in ['hot', 'top', 'rising', 'new', 'controversial']:
|
|
||||||
raise SubredditError(name)
|
raise SubredditError(name)
|
||||||
|
|
||||||
if name == 'me':
|
if name == 'me':
|
||||||
if not reddit.is_logged_in():
|
if not reddit.is_logged_in():
|
||||||
raise AccountError
|
raise AccountError
|
||||||
else:
|
elif order:
|
||||||
submissions = reddit.user.get_submitted(sort=order)
|
submissions = reddit.user.get_submitted(sort=order)
|
||||||
|
else:
|
||||||
|
submissions = reddit.user.get_submitted()
|
||||||
|
|
||||||
elif query:
|
elif query:
|
||||||
if name == 'front':
|
if name == 'front':
|
||||||
@@ -302,6 +308,7 @@ class SubredditContent(BaseContent):
|
|||||||
else:
|
else:
|
||||||
if name == 'front':
|
if name == 'front':
|
||||||
dispatch = {
|
dispatch = {
|
||||||
|
None: reddit.get_front_page,
|
||||||
'hot': reddit.get_front_page,
|
'hot': reddit.get_front_page,
|
||||||
'top': reddit.get_top,
|
'top': reddit.get_top,
|
||||||
'rising': reddit.get_rising,
|
'rising': reddit.get_rising,
|
||||||
@@ -311,6 +318,7 @@ class SubredditContent(BaseContent):
|
|||||||
else:
|
else:
|
||||||
subreddit = reddit.get_subreddit(name)
|
subreddit = reddit.get_subreddit(name)
|
||||||
dispatch = {
|
dispatch = {
|
||||||
|
None: subreddit.get_hot,
|
||||||
'hot': subreddit.get_hot,
|
'hot': subreddit.get_hot,
|
||||||
'top': subreddit.get_top,
|
'top': subreddit.get_top,
|
||||||
'rising': subreddit.get_rising,
|
'rising': subreddit.get_rising,
|
||||||
|
|||||||
26
rtv/page.py
26
rtv/page.py
@@ -255,7 +255,7 @@ class BasePage(object):
|
|||||||
self._content_window = None
|
self._content_window = None
|
||||||
self._subwindows = None
|
self._subwindows = None
|
||||||
|
|
||||||
def refresh_content(self):
|
def refresh_content(self, order=None):
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
@@ -270,6 +270,26 @@ class BasePage(object):
|
|||||||
def help(self):
|
def help(self):
|
||||||
show_help(self._content_window)
|
show_help(self._content_window)
|
||||||
|
|
||||||
|
@BaseController.register('1')
|
||||||
|
def sort_content_hot(self):
|
||||||
|
self.refresh_content(order='hot')
|
||||||
|
|
||||||
|
@BaseController.register('2')
|
||||||
|
def sort_content_top(self):
|
||||||
|
self.refresh_content(order='top')
|
||||||
|
|
||||||
|
@BaseController.register('3')
|
||||||
|
def sort_content_rising(self):
|
||||||
|
self.refresh_content(order='rising')
|
||||||
|
|
||||||
|
@BaseController.register('4')
|
||||||
|
def sort_content_new(self):
|
||||||
|
self.refresh_content(order='new')
|
||||||
|
|
||||||
|
@BaseController.register('5')
|
||||||
|
def sort_content_controversial(self):
|
||||||
|
self.refresh_content(order='controversial')
|
||||||
|
|
||||||
@BaseController.register(curses.KEY_UP, 'k')
|
@BaseController.register(curses.KEY_UP, 'k')
|
||||||
def move_cursor_up(self):
|
def move_cursor_up(self):
|
||||||
self._move_cursor(-1)
|
self._move_cursor(-1)
|
||||||
@@ -488,8 +508,10 @@ class BasePage(object):
|
|||||||
attr = curses.A_REVERSE | curses.A_BOLD | Color.CYAN
|
attr = curses.A_REVERSE | curses.A_BOLD | Color.CYAN
|
||||||
self._header_window.bkgd(' ', attr)
|
self._header_window.bkgd(' ', attr)
|
||||||
|
|
||||||
sub_name = self.content.name.replace('/r/front', 'Front Page ')
|
sub_name = self.content.name.replace('/r/front', 'Front Page')
|
||||||
add_line(self._header_window, sub_name, 0, 0)
|
add_line(self._header_window, sub_name, 0, 0)
|
||||||
|
if self.content.order is not None:
|
||||||
|
add_line(self._header_window, ' [{}]'.format(self.content.order))
|
||||||
|
|
||||||
if self.reddit.user is not None:
|
if self.reddit.user is not None:
|
||||||
username = self.reddit.user.name
|
username = self.reddit.user.name
|
||||||
|
|||||||
@@ -62,37 +62,14 @@ class SubmissionPage(BasePage):
|
|||||||
self.active = False
|
self.active = False
|
||||||
|
|
||||||
@SubmissionController.register(curses.KEY_F5, 'r')
|
@SubmissionController.register(curses.KEY_F5, 'r')
|
||||||
def refresh_content(self, order='hot'):
|
def refresh_content(self, order=None):
|
||||||
"Re-download comments reset the page index"
|
"Re-download comments reset the page index"
|
||||||
|
|
||||||
|
order = order or self.content.order
|
||||||
self.content = SubmissionContent.from_url(
|
self.content = SubmissionContent.from_url(
|
||||||
self.reddit,
|
self.reddit, self.content.name, self.loader, order=order)
|
||||||
self.content.name,
|
|
||||||
self.loader,
|
|
||||||
order=order)
|
|
||||||
|
|
||||||
self.nav = Navigator(self.content.get, page_index=-1)
|
self.nav = Navigator(self.content.get, page_index=-1)
|
||||||
|
|
||||||
@SubmissionController.register('1')
|
|
||||||
def sort_content_hot(self):
|
|
||||||
self.refresh_content(order='hot')
|
|
||||||
|
|
||||||
@SubmissionController.register('2')
|
|
||||||
def sort_content_top(self):
|
|
||||||
self.refresh_content(order='top')
|
|
||||||
|
|
||||||
@SubmissionController.register('3')
|
|
||||||
def sort_content_rising(self):
|
|
||||||
self.refresh_content(order='rising')
|
|
||||||
|
|
||||||
@SubmissionController.register('4')
|
|
||||||
def sort_content_new(self):
|
|
||||||
self.refresh_content(order='new')
|
|
||||||
|
|
||||||
@SubmissionController.register('5')
|
|
||||||
def sort_content_controversial(self):
|
|
||||||
self.refresh_content(order='controversial')
|
|
||||||
|
|
||||||
@SubmissionController.register(curses.KEY_ENTER, 10, 'o')
|
@SubmissionController.register(curses.KEY_ENTER, 10, 'o')
|
||||||
def open_link(self):
|
def open_link(self):
|
||||||
"Open the current submission page with the webbrowser"
|
"Open the current submission page with the webbrowser"
|
||||||
|
|||||||
@@ -49,10 +49,17 @@ class SubredditPage(BasePage):
|
|||||||
self.controller.trigger(cmd)
|
self.controller.trigger(cmd)
|
||||||
|
|
||||||
@SubredditController.register(curses.KEY_F5, 'r')
|
@SubredditController.register(curses.KEY_F5, 'r')
|
||||||
def refresh_content(self, name=None, order='hot'):
|
def refresh_content(self, name=None, order=None):
|
||||||
"Re-download all submissions and reset the page index"
|
"Re-download all submissions and reset the page index"
|
||||||
|
|
||||||
name = name or self.content.name
|
name = name or self.content.name
|
||||||
|
order = order or self.content.order
|
||||||
|
|
||||||
|
# Hack to allow an order specified in the name by prompt_subreddit() to
|
||||||
|
# override the current default
|
||||||
|
if order == 'ignore':
|
||||||
|
order = None
|
||||||
|
|
||||||
try:
|
try:
|
||||||
self.content = SubredditContent.from_name(
|
self.content = SubredditContent.from_name(
|
||||||
self.reddit, name, self.loader, order=order)
|
self.reddit, name, self.loader, order=order)
|
||||||
@@ -65,26 +72,6 @@ class SubredditPage(BasePage):
|
|||||||
else:
|
else:
|
||||||
self.nav = Navigator(self.content.get)
|
self.nav = Navigator(self.content.get)
|
||||||
|
|
||||||
@SubredditController.register('1')
|
|
||||||
def refresh_content_hot(self):
|
|
||||||
self.refresh_content(order='hot')
|
|
||||||
|
|
||||||
@SubredditController.register('2')
|
|
||||||
def refresh_content_top(self):
|
|
||||||
self.refresh_content(order='top')
|
|
||||||
|
|
||||||
@SubredditController.register('3')
|
|
||||||
def refresh_content_rising(self):
|
|
||||||
self.refresh_content(order='rising')
|
|
||||||
|
|
||||||
@SubredditController.register('4')
|
|
||||||
def refresh_content_new(self):
|
|
||||||
self.refresh_content(order='new')
|
|
||||||
|
|
||||||
@SubredditController.register('5')
|
|
||||||
def refresh_content_controversial(self):
|
|
||||||
self.refresh_content(order='controversial')
|
|
||||||
|
|
||||||
@SubredditController.register('f')
|
@SubredditController.register('f')
|
||||||
def search_subreddit(self, name=None):
|
def search_subreddit(self, name=None):
|
||||||
"Open a prompt to search the given subreddit"
|
"Open a prompt to search the given subreddit"
|
||||||
@@ -98,7 +85,7 @@ class SubredditPage(BasePage):
|
|||||||
try:
|
try:
|
||||||
self.content = SubredditContent.from_name(
|
self.content = SubredditContent.from_name(
|
||||||
self.reddit, name, self.loader, query=query)
|
self.reddit, name, self.loader, query=query)
|
||||||
except IndexError: # if there are no submissions
|
except (IndexError, SubredditError): # if there are no submissions
|
||||||
show_notification(self.stdscr, ['No results found'])
|
show_notification(self.stdscr, ['No results found'])
|
||||||
else:
|
else:
|
||||||
self.nav = Navigator(self.content.get)
|
self.nav = Navigator(self.content.get)
|
||||||
@@ -109,7 +96,7 @@ class SubredditPage(BasePage):
|
|||||||
prompt = 'Enter Subreddit: /r/'
|
prompt = 'Enter Subreddit: /r/'
|
||||||
name = prompt_input(self.stdscr, prompt)
|
name = prompt_input(self.stdscr, prompt)
|
||||||
if name is not None:
|
if name is not None:
|
||||||
self.refresh_content(name=name)
|
self.refresh_content(name=name, order='ignore')
|
||||||
|
|
||||||
@SubredditController.register(curses.KEY_RIGHT, 'l')
|
@SubredditController.register(curses.KEY_RIGHT, 'l')
|
||||||
def open_submission(self):
|
def open_submission(self):
|
||||||
|
|||||||
Reference in New Issue
Block a user