added viewing user's submissions with ; key or /r/me

This commit is contained in:
Tobin
2015-04-03 17:13:43 -05:00
parent 653d67a330
commit a14049afcf
5 changed files with 33 additions and 6 deletions

View File

@@ -109,7 +109,7 @@ def main():
if args.link: if args.link:
page = SubmissionPage(stdscr, reddit, url=args.link) page = SubmissionPage(stdscr, reddit, url=args.link)
page.loop() page.loop()
page = SubredditPage(stdscr, reddit, args.subreddit) page = SubredditPage(stdscr, reddit, args.subreddit, args.username)
page.loop() page.loop()
except praw.errors.InvalidUserPass: except praw.errors.InvalidUserPass:
print('Invalid password for username: {}'.format(args.username)) print('Invalid password for username: {}'.format(args.username))

View File

@@ -309,6 +309,19 @@ class SubredditContent(BaseContent):
return content 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): def get(self, index, n_cols=70):
""" """
Grab the `i`th submission, with the title field formatted to fit inside Grab the `i`th submission, with the title field formatted to fit inside

View File

@@ -161,11 +161,12 @@ class BasePage(object):
MIN_HEIGHT = 10 MIN_HEIGHT = 10
MIN_WIDTH = 20 MIN_WIDTH = 20
def __init__(self, stdscr, reddit, content, **kwargs): def __init__(self, stdscr, reddit, content, username, **kwargs):
self.stdscr = stdscr self.stdscr = stdscr
self.reddit = reddit self.reddit = reddit
self.content = content self.content = content
self.username = username
self.nav = Navigator(self.content.get, **kwargs) self.nav = Navigator(self.content.get, **kwargs)
self._header_window = None self._header_window = None
@@ -246,6 +247,7 @@ class BasePage(object):
try: try:
self.reddit.login(username, password) self.reddit.login(username, password)
self.username = username
except praw.errors.InvalidUserPass: except praw.errors.InvalidUserPass:
show_notification(self.stdscr, ['Invalid user/pass']) show_notification(self.stdscr, ['Invalid user/pass'])
else: else:

View File

@@ -32,7 +32,7 @@ class SubmissionPage(BasePage):
raise ValueError('Must specify url or submission') raise ValueError('Must specify url or submission')
super(SubmissionPage, self).__init__(stdscr, reddit, content, super(SubmissionPage, self).__init__(stdscr, reddit, content,
page_index=-1) page_index=-1, username=None)
def loop(self): def loop(self):
self.active = True self.active = True

View File

@@ -24,13 +24,13 @@ class SubredditController(BaseController):
class SubredditPage(BasePage): class SubredditPage(BasePage):
def __init__(self, stdscr, reddit, name): def __init__(self, stdscr, reddit, name, username):
self.controller = SubredditController(self) self.controller = SubredditController(self)
self.loader = LoadScreen(stdscr) self.loader = LoadScreen(stdscr)
content = SubredditContent.from_name(reddit, name, self.loader) 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): def loop(self):
while True: while True:
@@ -41,7 +41,9 @@ class SubredditPage(BasePage):
@SubredditController.register(curses.KEY_F5, 'r') @SubredditController.register(curses.KEY_F5, 'r')
def refresh_content(self, name=None): def refresh_content(self, name=None):
name = name or self.content.name name = name or self.content.name
if name == 'me' or name == '/r/me':
self.reddittor_profile()
return
try: try:
self.content = SubredditContent.from_name( self.content = SubredditContent.from_name(
self.reddit, name, self.loader) self.reddit, name, self.loader)
@@ -74,6 +76,16 @@ class SubredditPage(BasePage):
if name is not None: if name is not None:
self.refresh_content(name=name) 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') @SubredditController.register(curses.KEY_RIGHT, 'l')
def open_submission(self): def open_submission(self):
"Select the current submission to view posts" "Select the current submission to view posts"