diff --git a/rtv/__main__.py b/rtv/__main__.py index c571874..cb86551 100644 --- a/rtv/__main__.py +++ b/rtv/__main__.py @@ -109,7 +109,7 @@ def main(): if args.link: page = SubmissionPage(stdscr, reddit, url=args.link) page.loop() - page = SubredditPage(stdscr, reddit, args.subreddit) + page = SubredditPage(stdscr, reddit, args.subreddit, args.username) page.loop() except praw.errors.InvalidUserPass: print('Invalid password for username: {}'.format(args.username)) diff --git a/rtv/content.py b/rtv/content.py index 69a0ea4..dc9a6bd 100644 --- a/rtv/content.py +++ b/rtv/content.py @@ -309,6 +309,19 @@ class SubredditContent(BaseContent): return content + @classmethod + def from_reddittor(cls, reddit, username, loader, order='new'): + reddittor = reddit.get_redditor(username) + submissions = reddittor.get_submitted(sort=order) + display_name = '/r/me' + content = cls(display_name, submissions, loader) + try: + content.get(0) + except (praw.errors.APIException, requests.HTTPError, + praw.errors.RedirectException): + raise SubredditError(display_name) + return content + def get(self, index, n_cols=70): """ Grab the `i`th submission, with the title field formatted to fit inside diff --git a/rtv/page.py b/rtv/page.py index 70d13f6..4753734 100644 --- a/rtv/page.py +++ b/rtv/page.py @@ -161,11 +161,12 @@ class BasePage(object): MIN_HEIGHT = 10 MIN_WIDTH = 20 - def __init__(self, stdscr, reddit, content, **kwargs): + def __init__(self, stdscr, reddit, content, username, **kwargs): self.stdscr = stdscr self.reddit = reddit self.content = content + self.username = username self.nav = Navigator(self.content.get, **kwargs) self._header_window = None @@ -246,6 +247,7 @@ class BasePage(object): try: self.reddit.login(username, password) + self.username = username except praw.errors.InvalidUserPass: show_notification(self.stdscr, ['Invalid user/pass']) else: diff --git a/rtv/submission.py b/rtv/submission.py index 185003d..be515ba 100644 --- a/rtv/submission.py +++ b/rtv/submission.py @@ -32,7 +32,7 @@ class SubmissionPage(BasePage): raise ValueError('Must specify url or submission') super(SubmissionPage, self).__init__(stdscr, reddit, content, - page_index=-1) + page_index=-1, username=None) def loop(self): self.active = True diff --git a/rtv/subreddit.py b/rtv/subreddit.py index 3d8c277..beb33bb 100644 --- a/rtv/subreddit.py +++ b/rtv/subreddit.py @@ -24,13 +24,13 @@ class SubredditController(BaseController): class SubredditPage(BasePage): - def __init__(self, stdscr, reddit, name): + def __init__(self, stdscr, reddit, name, username): self.controller = SubredditController(self) self.loader = LoadScreen(stdscr) content = SubredditContent.from_name(reddit, name, self.loader) - super(SubredditPage, self).__init__(stdscr, reddit, content) + super(SubredditPage, self).__init__(stdscr, reddit, content, username) def loop(self): while True: @@ -41,7 +41,9 @@ class SubredditPage(BasePage): @SubredditController.register(curses.KEY_F5, 'r') def refresh_content(self, name=None): name = name or self.content.name - + if name == 'me' or name == '/r/me': + self.reddittor_profile() + return try: self.content = SubredditContent.from_name( self.reddit, name, self.loader) @@ -74,6 +76,16 @@ class SubredditPage(BasePage): if name is not None: self.refresh_content(name=name) + @SubredditController.register(';') + def reddittor_profile(self): + if self.reddit.is_logged_in(): + self.content = SubredditContent.from_reddittor(self.reddit, + self.username, + self.loader) + else: + show_notification(self.stdscr, ['Log in to view your profile']) + + @SubredditController.register(curses.KEY_RIGHT, 'l') def open_submission(self): "Select the current submission to view posts"