From 66854522ffb999ad3e9261434b02d7851638e97f Mon Sep 17 00:00:00 2001 From: Michael Lazar Date: Fri, 5 Aug 2016 23:06:15 -0700 Subject: [PATCH] No longer leave submission/subscription page when entering an invalid subreddit. --- rtv/submission.py | 12 ++++++++---- rtv/subreddit.py | 34 +++++++++++++++++++--------------- rtv/subscription.py | 21 +++++++++++++++------ 3 files changed, 42 insertions(+), 25 deletions(-) diff --git a/rtv/submission.py b/rtv/submission.py index 18f0be3..309b15b 100644 --- a/rtv/submission.py +++ b/rtv/submission.py @@ -5,7 +5,7 @@ import time import curses from . import docs -from .content import SubmissionContent +from .content import SubmissionContent, SubredditContent from .page import Page, PageController, logged_in from .objects import Navigator, Color, Command from .exceptions import TemporaryFileError @@ -27,7 +27,7 @@ class SubmissionPage(Page): self.content = SubmissionContent(submission, term.loader) # Start at the submission post, which is indexed as -1 self.nav = Navigator(self.content.get, page_index=-1) - self.subreddit_name = None + self.selected_subreddit = None @SubmissionController.register(Command('SUBMISSION_TOGGLE_COMMENT')) def toggle_comment(self): @@ -74,8 +74,12 @@ class SubmissionPage(Page): name = self.term.prompt_input('Enter page: /') if name is not None: - self.subreddit_name = name - self.active = False + with self.term.loader('Loading page'): + content = SubredditContent.from_name( + self.reddit, name, self.term.loader) + if not self.term.loader.exception: + self.selected_subreddit = content + self.active = False @SubmissionController.register(Command('SUBMISSION_OPEN_IN_BROWSER')) def open_link(self): diff --git a/rtv/subreddit.py b/rtv/subreddit.py index c24a8f3..3235281 100644 --- a/rtv/subreddit.py +++ b/rtv/subreddit.py @@ -30,7 +30,7 @@ class SubredditPage(Page): self.controller = SubredditController(self, keymap=config.keymap) self.content = SubredditContent.from_name(reddit, name, term.loader) self.nav = Navigator(self.content.get) - self._toggled_subreddit = None + self.toggled_subreddit = None @SubredditController.register(Command('REFRESH')) def refresh_content(self, order=None, name=None): @@ -83,9 +83,9 @@ class SubredditPage(Page): if self.content.name != '/r/front': target = '/r/front' - self._toggled_subreddit = self.content.name + self.toggled_subreddit = self.content.name else: - target = self._toggled_subreddit + target = self.toggled_subreddit # target still may be empty string if this command hasn't yet been used if target is not None: @@ -111,9 +111,9 @@ class SubredditPage(Page): if data.get('url_type') == 'selfpost': self.config.history.add(data['url_full']) - if page.subreddit_name is not None: - self.refresh_content(order='ignore', - name=page.subreddit_name) + if page.selected_subreddit is not None: + self.content = page.selected_subreddit + self.nav = Navigator(self.content.get) else: self.refresh_content() @@ -173,9 +173,9 @@ class SubredditPage(Page): page.loop() - if page.subreddit_name is not None: - self.refresh_content(order='ignore', - name=page.subreddit_name) + if page.selected_subreddit is not None: + self.content = page.selected_subreddit + self.nav = Navigator(self.content.get) else: self.refresh_content() @@ -194,9 +194,11 @@ class SubredditPage(Page): # When the user has chosen a subreddit in the subscriptions list, # refresh content with the selected subreddit - if page.subreddit_name is not None: - self.refresh_content(order='ignore', - name=page.subreddit_name) + if page.selected_subreddit is not None: + self.content = page.selected_subreddit + self.nav = Navigator(self.content.get) + else: + self.refresh_content() @SubredditController.register(Command('SUBREDDIT_OPEN_MULTIREDDITS')) @logged_in @@ -213,9 +215,11 @@ class SubredditPage(Page): # When the user has chosen a subreddit in the subscriptions list, # refresh content with the selected subreddit - if page.subreddit_name is not None: - self.refresh_content(order='ignore', - name=page.subreddit_name) + if page.selected_subreddit is not None: + self.content = page.selected_subreddit + self.nav = Navigator(self.content.get) + else: + self.refresh_content() def _draw_item(self, win, data, inverted): diff --git a/rtv/subscription.py b/rtv/subscription.py index 6142f87..da5d328 100644 --- a/rtv/subscription.py +++ b/rtv/subscription.py @@ -4,7 +4,7 @@ from __future__ import unicode_literals import curses from .page import Page, PageController -from .content import SubscriptionContent +from .content import SubscriptionContent, SubredditContent from .objects import Color, Navigator, Command @@ -22,7 +22,7 @@ class SubscriptionPage(Page): reddit, term.loader, content_type) self.nav = Navigator(self.content.get) self.content_type = content_type - self.subreddit_name = None + self.selected_subreddit = None @SubscriptionController.register(Command('REFRESH')) def refresh_content(self, order=None, name=None): @@ -45,15 +45,24 @@ class SubscriptionPage(Page): name = self.term.prompt_input('Enter page: /') if name is not None: - self.subreddit_name = name - self.active = False + with self.term.loader('Loading page'): + content = SubredditContent.from_name( + self.reddit, name, self.term.loader) + if not self.term.loader.exception: + self.selected_subreddit = content + self.active = False @SubscriptionController.register(Command('SUBSCRIPTION_SELECT')) def select_subreddit(self): "Store the selected subreddit and return to the subreddit page" - self.subreddit_name = self.content.get(self.nav.absolute_index)['name'] - self.active = False + name = self.content.get(self.nav.absolute_index)['name'] + with self.term.loader('Loading page'): + content = SubredditContent.from_name( + self.reddit, name, self.term.loader) + if not self.term.loader.exception: + self.selected_subreddit = content + self.active = False @SubscriptionController.register(Command('SUBSCRIPTION_EXIT')) def close_subscriptions(self):