Implement save/unsave post + saved list display

This commit is contained in:
David Foucher
2016-01-17 13:09:48 +01:00
parent 20a17ec2b3
commit 805875519e
5 changed files with 42 additions and 4 deletions

View File

@@ -154,6 +154,7 @@ class Content(object):
data['gold'] = sub.gilded > 0
data['nsfw'] = sub.over_18
data['stickied'] = sub.stickied
data['saved'] = sub.saved
data['index'] = None # This is filled in later by the method caller
if sub.url.split('/r/')[-1] == sub.permalink.split('/r/')[-1]:
@@ -384,6 +385,14 @@ class SubredditContent(Content):
else:
submissions = reddit.user.get_submitted()
if name == 'saved':
if not reddit.is_oauth_session():
raise exceptions.AccountError('Not logged in')
elif order:
submissions = reddit.user.get_saved(sort=order)
else:
submissions = reddit.user.get_saved()
elif query:
if name == 'front':
submissions = reddit.search(query, subreddit=None, sort=order)

View File

@@ -34,6 +34,7 @@ Basic Commands
Authenticated Commands
`a/z` : Upvote/downvote
`w` : Save/unsave a post
`c` : Compose a new post or comment
`e` : Edit an existing post or comment
`d` : Delete an existing post or comment
@@ -80,4 +81,4 @@ SUBMISSION_EDIT_FILE = """{content}
# and an empty message aborts the submission.
#
# Editing {name}
"""
"""

View File

@@ -155,6 +155,23 @@ class Page(object):
if not self.term.loader.exception:
data['likes'] = None
@PageController.register('w')
@logged_in
def savepost(self):
data = self.content.get(self.nav.absolute_index)
if 'saved' not in data:
self.term.flash()
elif not data['saved']:
with self.term.loader('Saving'):
data['object'].save()
if not self.term.loader.exception:
data['saved'] = True
else:
with self.term.loader('Unsaving'):
data['object'].unsave()
if not self.term.loader.exception:
data['saved'] = False
@PageController.register('u')
def login(self):
"""
@@ -393,4 +410,4 @@ class Page(object):
n_rows, _ = window.getmaxyx()
for row in range(n_rows):
window.chgat(row, 0, 1, attribute)
window.chgat(row, 0, 1, attribute)

View File

@@ -114,7 +114,7 @@ class SubredditPage(Page):
# Check that the subreddit can be submitted to
name = self.content.name
if '+' in name or name in ('/r/all', '/r/front', '/r/me'):
if '+' in name or name in ('/r/all', '/r/front', '/r/me','/r/saved'):
self.term.show_notification("Can't post to {0}".format(name))
return
@@ -191,6 +191,11 @@ class SubredditPage(Page):
text, attr = self.term.get_arrow(data['likes'])
self.term.add_line(win, text, attr=attr)
self.term.add_line(win, ' {created} {comments} '.format(**data))
if data['saved']:
text, attr = self.term.saved
self.term.add_line(win, text, attr=attr)
if data['stickied']:
text, attr = self.term.stickied
self.term.add_line(win, text, attr=attr)
@@ -211,4 +216,4 @@ class SubredditPage(Page):
self.term.add_line(win, text, attr=Color.YELLOW)
if data['flair']:
text = ' {flair}'.format(**data)
self.term.add_line(win, text, attr=Color.RED)
self.term.add_line(win, text, attr=Color.RED)

View File

@@ -73,6 +73,12 @@ class Terminal(object):
attr = Color.GREEN
return text, attr
@property
def saved(self):
text = '[saved]'
attr = Color.GREEN
return text, attr
@property
def vline(self):
return getattr(curses, 'ACS_VLINE', ord('|'))