From 6b3ad77ac894c14177042f0a23efdce3c76c2c72 Mon Sep 17 00:00:00 2001 From: Alex Kahan Date: Tue, 19 Jan 2016 20:24:29 -0500 Subject: [PATCH] First stab at processing and displaying saves --- README.rst | 1 + rtv/content.py | 27 +++++++++++++++++++++++++-- rtv/submission.py | 17 ++++++++++++++++- rtv/subreddit.py | 14 ++++++++++++++ 4 files changed, 56 insertions(+), 3 deletions(-) diff --git a/README.rst b/README.rst index 2d668ee..c30cc7f 100644 --- a/README.rst +++ b/README.rst @@ -108,6 +108,7 @@ The ``/`` prompt accepts subreddits in the following formats * ``/r/python+linux`` supports multireddits * ``/r/front`` will redirect to the front page * ``/r/me`` will display your submissions +* ``/r/saved`` will display your saved posts/comments --------------- Submission Mode diff --git a/rtv/content.py b/rtv/content.py index 6ee6d44..010cf19 100644 --- a/rtv/content.py +++ b/rtv/content.py @@ -86,7 +86,11 @@ class Content(object): data = {} data['object'] = comment - data['level'] = comment.nested_level + # Saved comments do not have a nested_level + if hasattr(comment, 'nested_level'): + data['level'] = comment.nested_level + else: + data['level'] = None if isinstance(comment, praw.objects.MoreComments): data['type'] = 'MoreComments' @@ -114,6 +118,7 @@ class Content(object): data['gold'] = comment.gilded > 0 data['permalink'] = permalink data['stickied'] = stickied + data['saved'] = comment.saved return data @@ -155,6 +160,7 @@ class Content(object): data['nsfw'] = sub.over_18 data['stickied'] = sub.stickied data['index'] = None # This is filled in later by the method caller + data['saved'] = sub.saved if sub.url.split('/r/')[-1] == sub.permalink.split('/r/')[-1]: data['url'] = 'self.{0}'.format(data['subreddit']) @@ -255,6 +261,12 @@ class SubmissionContent(Content): submission = reddit.get_submission(url, comment_sort=order) return cls(submission, loader, indent_size, max_indent_level, order) + def save(self): + """ + Saves a submission to the authenticated user + """ + self._submission.save() + def get(self, index, n_cols=70): """ Grab the `i`th submission, with the title field formatted to fit inside @@ -400,6 +412,15 @@ class SubredditContent(Content): 'new': reddit.get_new, 'controversial': reddit.get_controversial, } + elif name == 'saved': + dispatch = { + None: reddit.user.get_saved, + 'hot': reddit.user.get_saved, + 'top': reddit.user.get_saved, + 'rising': reddit.user.get_saved, + 'new': reddit.user.get_saved, + 'controversial': reddit.user.get_saved, + } else: subreddit = reddit.get_subreddit(name) dispatch = { @@ -432,10 +453,12 @@ class SubredditContent(Content): except StopIteration: raise IndexError else: + # TODO: In order to display saved comment, we need to + # coerce the comment into a submission data = self.strip_praw_submission(submission) data['index'] = index # Add the post number to the beginning of the title - data['title'] = '{0}. {1}'.format(index+1, data['title']) + data['title'] = '{0}. {1}'.format(index+1, data.get('title')) self._submission_data.append(data) # Modifies the original dict, faster than copying diff --git a/rtv/submission.py b/rtv/submission.py index 959ff0c..2852c96 100644 --- a/rtv/submission.py +++ b/rtv/submission.py @@ -24,7 +24,6 @@ class SubmissionPage(Page): self.content = SubmissionContent.from_url(reddit, url, term.loader) else: self.content = SubmissionContent(submission, term.loader) - self.controller = SubmissionController(self) # Start at the submission post, which is indexed as -1 self.nav = Navigator(self.content.get, page_index=-1) @@ -71,6 +70,14 @@ class SubmissionPage(Page): else: self.term.flash() + @SubmissionController.register('y') + @logged_in + def save_comment(self): + comment = self.content.get(self.nav.absolute_index).get('object') + if comment: + with self.term.loader('Saving comment'): + comment.save() + @SubmissionController.register('c') @logged_in def add_comment(self): @@ -167,6 +174,10 @@ class SubmissionPage(Page): text, attr = self.term.stickied self.term.add_line(win, text, attr=attr) + if data['saved']: + text, attr = 'SAVED', (curses.A_BOLD | Color.BLUE) + self.term.add_line(win, text, attr=attr) + for row, text in enumerate(data['split_body'], start=offset+1): if row in valid_rows: self.term.add_line(win, text, row, 1) @@ -238,4 +249,8 @@ class SubmissionPage(Page): text, attr = 'NSFW', (curses.A_BOLD | Color.RED) self.term.add_line(win, text, attr=attr) + if data['saved']: + text, attr = 'SAVED', (curses.A_BOLD | Color.RED) + self.term.add_line(win, text, attr=attr) + win.border() diff --git a/rtv/subreddit.py b/rtv/subreddit.py index 2d79133..8c0ee32 100644 --- a/rtv/subreddit.py +++ b/rtv/subreddit.py @@ -145,6 +145,16 @@ class SubredditPage(Page): self.refresh_content() + @SubredditController.register('y') + @logged_in + def save_submition(self): + data = self.content.get(self.nav.absolute_index) + url = data['permalink'] + with self.term.loader('Saving submission'): + page = SubmissionPage( + self.reddit, self.term, self.config, self.oauth, url=url) + page.content.save() + @SubredditController.register('s') @logged_in def open_subscriptions(self): @@ -203,6 +213,10 @@ class SubredditPage(Page): text, attr = 'NSFW', (curses.A_BOLD | Color.RED) self.term.add_line(win, text, attr=attr) + if data['saved']: + text, attr = ' SAVED', (curses.A_BOLD | Color.BLUE) + self.term.add_line(win, text, attr=attr) + row = n_title + offset + 2 if row in valid_rows: text = '{author}'.format(**data)