Number keys to refresh the submission/comments and sort by:

1: hot, 2: top, 3: rising, 4: new, 5: controversial
This commit is contained in:
ysakamoto
2015-08-06 02:40:55 -05:00
parent e7e133d73b
commit 023dc6e0dd
3 changed files with 59 additions and 15 deletions

View File

@@ -137,7 +137,8 @@ class SubmissionContent(BaseContent):
list for repeat access. list for repeat access.
""" """
def __init__(self, submission, loader, indent_size=2, max_indent_level=8): def __init__(self, submission, loader, indent_size=2,
max_indent_level=8, order='hot'):
self.indent_size = indent_size self.indent_size = indent_size
self.max_indent_level = max_indent_level self.max_indent_level = max_indent_level
@@ -145,20 +146,22 @@ class SubmissionContent(BaseContent):
self._submission = submission self._submission = submission
self._submission_data = self.strip_praw_submission(self._submission) self._submission_data = self.strip_praw_submission(self._submission)
self.name = self._submission_data['permalink'] self.name = self._submission_data['permalink'] + ': ' + order
comments = self.flatten_comments(self._submission.comments) 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, indent_size=2, max_indent_level=8): def from_url(cls, reddit, url, loader, order='hot', indent_size=2,
max_indent_level=8):
try: try:
with loader(): with loader():
submission = reddit.get_submission(url, comment_sort='hot') submission = reddit.get_submission(url, comment_sort=order)
except praw.errors.APIException: except praw.errors.APIException:
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)
def get(self, index, n_cols=70): def get(self, index, n_cols=70):
""" """
@@ -243,7 +246,7 @@ class SubredditContent(BaseContent):
list for repeat access. list for repeat access.
""" """
def __init__(self, name, submissions, loader): def __init__(self, name, submissions, loader, order='hot'):
self.name = name self.name = name
self._loader = loader self._loader = loader
@@ -258,12 +261,13 @@ class SubredditContent(BaseContent):
self.get(0) self.get(0)
except (praw.errors.APIException, requests.HTTPError, except (praw.errors.APIException, requests.HTTPError,
praw.errors.RedirectException, praw.errors.Forbidden, praw.errors.RedirectException, praw.errors.Forbidden,
praw.errors.InvalidSubreddit): praw.errors.InvalidSubreddit, praw.errors.NotFound):
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='hot', query=None):
name = name.split(':')[0] # remove order specification
name = name.strip(' /') # Strip leading and trailing backslashes name = name.strip(' /') # Strip leading and trailing backslashes
if name.startswith('r/'): if name.startswith('r/'):
name = name[2:] name = name[2:]
@@ -272,9 +276,7 @@ class SubredditContent(BaseContent):
if '/' in name: if '/' in name:
name, order = name.split('/') name, order = name.split('/')
display_name = display_name = '/r/{}'.format(name) display_name = '/r/{0:s} : {1:s}'.format(name, order)
if order != 'hot':
display_name += '/{}'.format(order)
if order not in ['hot', 'top', 'rising', 'new', 'controversial']: if order not in ['hot', 'top', 'rising', 'new', 'controversial']:
raise SubredditError(name) raise SubredditError(name)
@@ -311,7 +313,7 @@ class SubredditContent(BaseContent):
} }
submissions = dispatch[order](limit=None) submissions = dispatch[order](limit=None)
return cls(display_name, submissions, loader) return cls(display_name, submissions, loader, order=order)
def get(self, index, n_cols=70): def get(self, index, n_cols=70):
""" """

View File

@@ -62,15 +62,37 @@ 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): def refresh_content(self, order='hot'):
"Re-download comments reset the page index" "Re-download comments reset the page index"
self.content = SubmissionContent.from_url( self.content = SubmissionContent.from_url(
self.reddit, self.reddit,
self.content.name, self.content.name,
self.loader) 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"

View File

@@ -49,13 +49,13 @@ 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): def refresh_content(self, name=None, order='hot'):
"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
try: try:
self.content = SubredditContent.from_name( self.content = SubredditContent.from_name(
self.reddit, name, self.loader) self.reddit, name, self.loader, order=order)
except AccountError: except AccountError:
show_notification(self.stdscr, ['Not logged in']) show_notification(self.stdscr, ['Not logged in'])
except SubredditError: except SubredditError:
@@ -65,6 +65,26 @@ 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"