Merge pull request #58 from Brobin/post_submission

Added posting a Submission (text post)
This commit is contained in:
michael-lazar
2015-04-02 23:22:26 -07:00
2 changed files with 52 additions and 2 deletions

View File

@@ -52,3 +52,13 @@ COMMENT_FILE = """
# Replying to {author}'s {type}
{content}
"""
SUBMISSION_FILE = """
# Please enter your submission. Lines starting with '#' will be ignored,
# and an empty field aborts the submission.
#
# The first line will be interpreted as the title
# Following lines will be interpreted as the content
#
# Posting to /r/{name}
"""

View File

@@ -1,12 +1,14 @@
import curses
import time
import requests
import praw
from .exceptions import SubredditError
from .page import BasePage, Navigator, BaseController
from .submission import SubmissionPage
from .content import SubredditContent
from .helpers import clean, open_browser
from .helpers import clean, open_browser, open_editor
from .docs import SUBMISSION_FILE
from .curses_helpers import (BULLET, UARROW, DARROW, Color, LoadScreen,
show_notification)
@@ -94,6 +96,44 @@ class SubredditPage(BasePage):
global opened_links
opened_links.add(url)
@SubredditController.register('p')
def post_submission(self):
# Abort if user isn't logged in
if not self.reddit.is_logged_in():
show_notification(self.stdscr, ['Login to reply'])
return
subreddit = self.reddit.get_subreddit(self.content.name)
# Make sure it is a valid subreddit for submission
# Strips the subreddit to just the name
sub = str(subreddit).split('/')[2]
if '+' in sub or sub == 'all' or sub == 'front':
message = 'Can\'t post to /r/{0}'.format(sub)
show_notification(self.stdscr, [message])
return
# Open the submission window
submission_info = SUBMISSION_FILE.format(name=sub)
curses.endwin()
submission_text = open_editor(submission_info)
curses.doupdate()
# Abort if there is no content
if not submission_text:
curses.flash()
return
try:
title, content = submission_text.split('\n', 1)
self.reddit.submit(sub, title, text=content)
except praw.errors.APIException as e:
show_notification(self.stdscr, [e.message])
except ValueError:
show_notification(self.stdscr, ['No post content! Post aborted.'])
else:
time.sleep(0.5)
self.refresh_content()
@staticmethod
def draw_item(win, data, inverted=False):