@@ -7,9 +7,9 @@ from .exceptions import SubmissionError, SubredditError, AccountError
|
|||||||
from .helpers import humanize_timestamp, wrap_text, strip_subreddit_url
|
from .helpers import humanize_timestamp, wrap_text, strip_subreddit_url
|
||||||
|
|
||||||
__all__ = ['SubredditContent', 'SubmissionContent']
|
__all__ = ['SubredditContent', 'SubmissionContent']
|
||||||
|
|
||||||
_logger = logging.getLogger(__name__)
|
_logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class BaseContent(object):
|
class BaseContent(object):
|
||||||
|
|
||||||
def get(self, index, n_cols):
|
def get(self, index, n_cols):
|
||||||
@@ -337,4 +337,4 @@ class SubredditContent(BaseContent):
|
|||||||
data['n_rows'] = len(data['split_title']) + 3
|
data['n_rows'] = len(data['split_title']) + 3
|
||||||
data['offset'] = 0
|
data['offset'] = 0
|
||||||
|
|
||||||
return data
|
return data
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ __all__ = ['ESCAPE', 'get_gold', 'show_notification', 'show_help',
|
|||||||
# http://bugs.python.org/issue21088
|
# http://bugs.python.org/issue21088
|
||||||
ESCAPE = 27
|
ESCAPE = 27
|
||||||
|
|
||||||
|
|
||||||
def get_gold():
|
def get_gold():
|
||||||
"""
|
"""
|
||||||
Return the guilded symbol.
|
Return the guilded symbol.
|
||||||
@@ -30,6 +31,7 @@ def get_gold():
|
|||||||
attr = curses.A_BOLD | Color.YELLOW
|
attr = curses.A_BOLD | Color.YELLOW
|
||||||
return symbol, attr
|
return symbol, attr
|
||||||
|
|
||||||
|
|
||||||
def get_arrow(likes):
|
def get_arrow(likes):
|
||||||
"""
|
"""
|
||||||
Return the vote symbol to display, based on the `likes` paramater.
|
Return the vote symbol to display, based on the `likes` paramater.
|
||||||
@@ -305,7 +307,7 @@ def prompt_input(window, prompt, hide=False):
|
|||||||
window.addstr(n_rows - 1, 0, prompt, attr)
|
window.addstr(n_rows - 1, 0, prompt, attr)
|
||||||
window.refresh()
|
window.refresh()
|
||||||
subwin = window.derwin(1, n_cols - len(prompt),
|
subwin = window.derwin(1, n_cols - len(prompt),
|
||||||
n_rows - 1, len(prompt))
|
n_rows - 1, len(prompt))
|
||||||
subwin.attrset(attr)
|
subwin.attrset(attr)
|
||||||
out = text_input(subwin)
|
out = text_input(subwin)
|
||||||
|
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ from .exceptions import ProgramError
|
|||||||
__all__ = ['open_browser', 'clean', 'wrap_text', 'strip_textpad',
|
__all__ = ['open_browser', 'clean', 'wrap_text', 'strip_textpad',
|
||||||
'strip_subreddit_url', 'humanize_timestamp', 'open_editor']
|
'strip_subreddit_url', 'humanize_timestamp', 'open_editor']
|
||||||
|
|
||||||
|
|
||||||
def clean(string, n_cols=None):
|
def clean(string, n_cols=None):
|
||||||
"""
|
"""
|
||||||
Required reading!
|
Required reading!
|
||||||
@@ -49,6 +50,7 @@ def clean(string, n_cols=None):
|
|||||||
string = string.encode('utf-8')
|
string = string.encode('utf-8')
|
||||||
return string
|
return string
|
||||||
|
|
||||||
|
|
||||||
def open_editor(data=''):
|
def open_editor(data=''):
|
||||||
"""
|
"""
|
||||||
Open a temporary file using the system's default editor.
|
Open a temporary file using the system's default editor.
|
||||||
@@ -124,6 +126,7 @@ def open_browser(url):
|
|||||||
webbrowser.open_new_tab(url)
|
webbrowser.open_new_tab(url)
|
||||||
curses.doupdate()
|
curses.doupdate()
|
||||||
|
|
||||||
|
|
||||||
def wrap_text(text, width):
|
def wrap_text(text, width):
|
||||||
"""
|
"""
|
||||||
Wrap text paragraphs to the given character width while preserving newlines.
|
Wrap text paragraphs to the given character width while preserving newlines.
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ def save_history(history):
|
|||||||
# Ignore unicode URLS, may want to handle this at some point
|
# Ignore unicode URLS, may want to handle this at some point
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
|
||||||
class OrderedSet(object):
|
class OrderedSet(object):
|
||||||
"""
|
"""
|
||||||
A simple implementation of an ordered set. A set is used to check
|
A simple implementation of an ordered set. A set is used to check
|
||||||
|
|||||||
@@ -15,9 +15,9 @@ from .curses_helpers import (Color, show_notification, show_help, text_input,
|
|||||||
from .docs import COMMENT_EDIT_FILE, SUBMISSION_FILE
|
from .docs import COMMENT_EDIT_FILE, SUBMISSION_FILE
|
||||||
|
|
||||||
__all__ = ['Navigator', 'BaseController', 'BasePage']
|
__all__ = ['Navigator', 'BaseController', 'BasePage']
|
||||||
|
|
||||||
_logger = logging.getLogger(__name__)
|
_logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class Navigator(object):
|
class Navigator(object):
|
||||||
"""
|
"""
|
||||||
Handles math behind cursor movement and screen paging.
|
Handles math behind cursor movement and screen paging.
|
||||||
@@ -155,6 +155,7 @@ class Navigator(object):
|
|||||||
else:
|
else:
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
class SafeCaller(object):
|
class SafeCaller(object):
|
||||||
|
|
||||||
def __init__(self, window):
|
def __init__(self, window):
|
||||||
@@ -186,6 +187,7 @@ class SafeCaller(object):
|
|||||||
_logger.exception(e)
|
_logger.exception(e)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
class BaseController(object):
|
class BaseController(object):
|
||||||
"""
|
"""
|
||||||
Event handler for triggering functions with curses keypresses.
|
Event handler for triggering functions with curses keypresses.
|
||||||
|
|||||||
@@ -13,9 +13,9 @@ from .curses_helpers import (Color, LoadScreen, get_arrow, get_gold, add_line,
|
|||||||
from .docs import COMMENT_FILE
|
from .docs import COMMENT_FILE
|
||||||
|
|
||||||
__all__ = ['SubmissionController', 'SubmissionPage']
|
__all__ = ['SubmissionController', 'SubmissionPage']
|
||||||
|
|
||||||
_logger = logging.getLogger(__name__)
|
_logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class SubmissionController(BaseController):
|
class SubmissionController(BaseController):
|
||||||
character_map = {}
|
character_map = {}
|
||||||
|
|
||||||
@@ -254,4 +254,4 @@ class SubmissionPage(BasePage):
|
|||||||
text, attr = 'NSFW', (curses.A_BOLD | Color.RED)
|
text, attr = 'NSFW', (curses.A_BOLD | Color.RED)
|
||||||
add_line(win, text, attr=attr)
|
add_line(win, text, attr=attr)
|
||||||
|
|
||||||
win.border()
|
win.border()
|
||||||
|
|||||||
@@ -17,11 +17,10 @@ from .curses_helpers import (Color, LoadScreen, add_line, get_arrow, get_gold,
|
|||||||
show_notification, prompt_input)
|
show_notification, prompt_input)
|
||||||
|
|
||||||
__all__ = ['history', 'SubredditController', 'SubredditPage']
|
__all__ = ['history', 'SubredditController', 'SubredditPage']
|
||||||
|
|
||||||
_logger = logging.getLogger(__name__)
|
_logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
history = load_history()
|
history = load_history()
|
||||||
|
|
||||||
|
|
||||||
@atexit.register
|
@atexit.register
|
||||||
def save_links():
|
def save_links():
|
||||||
global history
|
global history
|
||||||
@@ -80,7 +79,7 @@ class SubredditPage(BasePage):
|
|||||||
try:
|
try:
|
||||||
self.content = SubredditContent.from_name(
|
self.content = SubredditContent.from_name(
|
||||||
self.reddit, name, self.loader, query=query)
|
self.reddit, name, self.loader, query=query)
|
||||||
except IndexError: # if there are no submissions
|
except IndexError: # if there are no submissions
|
||||||
show_notification(self.stdscr, ['No results found'])
|
show_notification(self.stdscr, ['No results found'])
|
||||||
else:
|
else:
|
||||||
self.nav = Navigator(self.content.get)
|
self.nav = Navigator(self.content.get)
|
||||||
@@ -197,4 +196,4 @@ class SubredditPage(BasePage):
|
|||||||
if row in valid_rows:
|
if row in valid_rows:
|
||||||
add_line(win, u'{author}'.format(**data), row, 1, curses.A_BOLD)
|
add_line(win, u'{author}'.format(**data), row, 1, curses.A_BOLD)
|
||||||
add_line(win, u' {subreddit}'.format(**data), attr=Color.YELLOW)
|
add_line(win, u' {subreddit}'.format(**data), attr=Color.YELLOW)
|
||||||
add_line(win, u' {flair}'.format(**data), attr=Color.RED)
|
add_line(win, u' {flair}'.format(**data), attr=Color.RED)
|
||||||
|
|||||||
Reference in New Issue
Block a user