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

View File

@@ -34,6 +34,7 @@ Basic Commands
Authenticated Commands Authenticated Commands
`a/z` : Upvote/downvote `a/z` : Upvote/downvote
`w` : Save/unsave a post
`c` : Compose a new post or comment `c` : Compose a new post or comment
`e` : Edit an existing post or comment `e` : Edit an existing post or comment
`d` : Delete an existing post or comment `d` : Delete an existing post or comment

View File

@@ -155,6 +155,23 @@ class Page(object):
if not self.term.loader.exception: if not self.term.loader.exception:
data['likes'] = None 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') @PageController.register('u')
def login(self): def login(self):
""" """

View File

@@ -114,7 +114,7 @@ class SubredditPage(Page):
# Check that the subreddit can be submitted to # Check that the subreddit can be submitted to
name = self.content.name 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)) self.term.show_notification("Can't post to {0}".format(name))
return return
@@ -191,6 +191,11 @@ class SubredditPage(Page):
text, attr = self.term.get_arrow(data['likes']) text, attr = self.term.get_arrow(data['likes'])
self.term.add_line(win, text, attr=attr) self.term.add_line(win, text, attr=attr)
self.term.add_line(win, ' {created} {comments} '.format(**data)) 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']: if data['stickied']:
text, attr = self.term.stickied text, attr = self.term.stickied
self.term.add_line(win, text, attr=attr) self.term.add_line(win, text, attr=attr)

View File

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