Merge branch 'yskmt-post-comment-reply'

Conflicts:
	rtv/submission.py
This commit is contained in:
Michael Lazar
2015-03-18 22:20:09 -07:00
2 changed files with 55 additions and 5 deletions

View File

@@ -1,9 +1,11 @@
import curses import curses
import sys import sys
import time
import praw.errors
from .content import SubmissionContent from .content import SubmissionContent
from .page import BasePage from .page import BasePage
from .utils import Color, Symbol, display_help from .utils import Color, Symbol, display_help, text_input
from .workers import LoadScreen, open_browser from .workers import LoadScreen, open_browser
class SubmissionPage(BasePage): class SubmissionPage(BasePage):
@@ -51,6 +53,10 @@ class SubmissionPage(BasePage):
self.refresh_content() self.refresh_content()
self.draw() self.draw()
elif cmd == ord('c'):
self.add_comment()
self.draw()
elif cmd == ord('?'): elif cmd == ord('?'):
display_help(self.stdscr) display_help(self.stdscr)
self.draw() self.draw()
@@ -217,3 +223,47 @@ class SubmissionPage(BasePage):
win.addnstr(row, 1, text, n_cols, curses.A_BOLD) win.addnstr(row, 1, text, n_cols, curses.A_BOLD)
win.border() win.border()
def add_comment(self):
"""
Add a comment on the submission if a header is selected.
Reply to a comment if the comment is selected.
"""
if not self.reddit.is_logged_in():
display_message(self.stdscr, ["You are not logged in!"])
return
cursor_position = self.nav.absolute_index
if (self.content.get(cursor_position)['type'] != 'Comment') \
& (self.content.get(cursor_position)['type'] != 'Submission'):
display_message(self.stdscr, ['Expand the comments first!'])
return
n_rows, n_cols = self.stdscr.getmaxyx()
box_height = n_rows/2
attr = curses.A_BOLD | Color.CYAN
prompt = 'Enter comment: ESC to cancel, Ctrl+g to submit'
prompt = '-'*((n_cols-len(prompt))/2) + prompt \
+ '-'*((n_cols-len(prompt)+1)/2)
self.stdscr.addstr(n_rows-box_height-1, 0, prompt, attr)
self.stdscr.refresh()
window = self.stdscr.derwin(box_height, n_cols,
n_rows-box_height, 0)
window.attrset(attr)
comment_text = text_input(window, show_cursor=True, insert_mode=False)
if comment_text is not None:
try:
if cursor_position == -1: # comment on submission
self.content._submission.add_comment(comment_text)
else: # reply on a selected comment
self.content.get(cursor_position)['object']\
.reply(comment_text)
except praw.errors.APIException as e:
display_message(self.stdscr, [e.message])
else:
time.sleep(0.5)
self.refresh_content()

View File

@@ -114,7 +114,7 @@ def load_config():
return defaults return defaults
def text_input(window): def text_input(window, show_cursor=False, insert_mode=True):
""" """
Transform a window into a text box that will accept user input and loop Transform a window into a text box that will accept user input and loop
until an escape sequence is entered. until an escape sequence is entered.
@@ -124,8 +124,8 @@ def text_input(window):
""" """
window.clear() window.clear()
curses.curs_set(2) curses.curs_set(1 if show_cursor else 2)
textbox = textpad.Textbox(window, insert_mode=True) textbox = textpad.Textbox(window, insert_mode=insert_mode)
def validate(ch): def validate(ch):
"Filters characters for special key sequences" "Filters characters for special key sequences"