Implement save/unsave post + saved list display
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
17
rtv/page.py
17
rtv/page.py
@@ -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):
|
||||
"""
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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('|'))
|
||||
|
||||
Reference in New Issue
Block a user