diff --git a/rtv/content.py b/rtv/content.py index adb1e44..1bee522 100644 --- a/rtv/content.py +++ b/rtv/content.py @@ -137,7 +137,8 @@ class SubmissionContent(BaseContent): 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.max_indent_level = max_indent_level @@ -145,20 +146,22 @@ class SubmissionContent(BaseContent): self._submission = 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) self._comment_data = [self.strip_praw_comment(c) for c in comments] @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: with loader(): - submission = reddit.get_submission(url, comment_sort='hot') + submission = reddit.get_submission(url, comment_sort=order) except praw.errors.APIException: 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): """ @@ -243,7 +246,7 @@ class SubredditContent(BaseContent): list for repeat access. """ - def __init__(self, name, submissions, loader): + def __init__(self, name, submissions, loader, order='hot'): self.name = name self._loader = loader @@ -258,12 +261,13 @@ class SubredditContent(BaseContent): self.get(0) except (praw.errors.APIException, requests.HTTPError, praw.errors.RedirectException, praw.errors.Forbidden, - praw.errors.InvalidSubreddit): + praw.errors.InvalidSubreddit, praw.errors.NotFound): raise SubredditError(name) @classmethod 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 if name.startswith('r/'): name = name[2:] @@ -272,9 +276,7 @@ class SubredditContent(BaseContent): if '/' in name: name, order = name.split('/') - display_name = display_name = '/r/{}'.format(name) - if order != 'hot': - display_name += '/{}'.format(order) + display_name = '/r/{0:s} : {1:s}'.format(name, order) if order not in ['hot', 'top', 'rising', 'new', 'controversial']: raise SubredditError(name) @@ -311,7 +313,7 @@ class SubredditContent(BaseContent): } 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): """ diff --git a/rtv/submission.py b/rtv/submission.py index 5a14ec2..5e7cab5 100644 --- a/rtv/submission.py +++ b/rtv/submission.py @@ -62,15 +62,37 @@ class SubmissionPage(BasePage): self.active = False @SubmissionController.register(curses.KEY_F5, 'r') - def refresh_content(self): + def refresh_content(self, order='hot'): "Re-download comments reset the page index" self.content = SubmissionContent.from_url( self.reddit, self.content.name, - self.loader) + self.loader, + order=order) + 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') def open_link(self): "Open the current submission page with the webbrowser" diff --git a/rtv/subreddit.py b/rtv/subreddit.py index c12f107..201715a 100644 --- a/rtv/subreddit.py +++ b/rtv/subreddit.py @@ -49,13 +49,13 @@ class SubredditPage(BasePage): self.controller.trigger(cmd) @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" name = name or self.content.name try: self.content = SubredditContent.from_name( - self.reddit, name, self.loader) + self.reddit, name, self.loader, order=order) except AccountError: show_notification(self.stdscr, ['Not logged in']) except SubredditError: @@ -65,6 +65,26 @@ class SubredditPage(BasePage): else: 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') def search_subreddit(self, name=None): "Open a prompt to search the given subreddit"