From da851ec0485f22e3e3df0332ce55c0ee650a9d9c Mon Sep 17 00:00:00 2001 From: ysakamoto Date: Thu, 12 Mar 2015 17:44:37 -0500 Subject: [PATCH] add_comment function added add_comment function added comment posting implemented delay added after successful comment posting cursor added for commenting reply functionality added comment box expanded bug fixed: you can only comment on 'Comment' type bug fixed: you can only comment on 'Comment' or 'Submission' type --- rtv/submission.py | 55 +++++++++++++++++++++++++++++++++++++++++++++-- rtv/utils.py | 6 +++--- 2 files changed, 56 insertions(+), 5 deletions(-) diff --git a/rtv/submission.py b/rtv/submission.py index 71f76e1..647f60a 100644 --- a/rtv/submission.py +++ b/rtv/submission.py @@ -1,9 +1,12 @@ import curses import sys +import time +import praw.errors from .content import SubmissionContent from .page import BasePage -from .utils import LoadScreen, Color, Symbol, display_help, open_browser +from .utils import (LoadScreen, Color, Symbol, display_help, open_browser, + text_input, display_message) class SubmissionPage(BasePage): @@ -50,6 +53,10 @@ class SubmissionPage(BasePage): self.refresh_content() self.draw() + elif cmd == ord('c'): + self.add_comment() + self.draw() + elif cmd == ord('?'): display_help(self.stdscr) self.draw() @@ -208,4 +215,48 @@ class SubmissionPage(BasePage): text = Symbol.clean('{score} {comments}'.format(**data)) win.addnstr(row, 1, text, n_cols, curses.A_BOLD) - win.border() \ No newline at end of file + 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() diff --git a/rtv/utils.py b/rtv/utils.py index 3309415..ac6312c 100644 --- a/rtv/utils.py +++ b/rtv/utils.py @@ -118,7 +118,7 @@ def load_config(): 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 until an escape sequence is entered. @@ -128,8 +128,8 @@ def text_input(window): """ window.clear() - curses.curs_set(2) - textbox = textpad.Textbox(window, insert_mode=True) + curses.curs_set(1 if show_cursor else 2) + textbox = textpad.Textbox(window, insert_mode=insert_mode) def validate(ch): "Filters characters for special key sequences"