Can browse through list of subscribed multireddits

This commit is contained in:
woorst
2016-06-29 00:15:03 -05:00
parent b54b4210dd
commit 9c964b7069
3 changed files with 86 additions and 0 deletions

View File

@@ -189,6 +189,20 @@ class Content(object):
data['title'] = subscription.title data['title'] = subscription.title
return data return data
@staticmethod
def strip_praw_multireddit(multireddit):
"""
Parse through a multireddits and return a dict with data ready to be
displayed through the terminal.
"""
data = {}
data['object'] = multireddit
data['type'] = 'Multireddit'
data['name'] = multireddit.path
data['title'] = multireddit.description_md
return data
@staticmethod @staticmethod
def humanize_timestamp(utc_timestamp, verbose=False): def humanize_timestamp(utc_timestamp, verbose=False):
""" """
@@ -560,3 +574,52 @@ class SubscriptionContent(Content):
data['offset'] = 0 data['offset'] = 0
return data return data
class MultiredditContent(Content):
def __init__(self, multireddits, loader):
self.name = "Multireddits"
self.order = None
self._loader = loader
self._multireddits = multireddits
self._multireddit_data = []
try:
self.get(0)
except IndexError:
raise exceptions.SubscriptionError('No multireddits')
@classmethod
def from_user(cls, reddit, multireddits, loader):
multireddits = (m for m in multireddits)
return cls(multireddits, loader)
def get(self, index, n_cols=70):
"""
Grab the `i`th subscription, with the title field formatted to fit
inside of a window of width `n_cols`
"""
if index < 0:
raise IndexError
while index >= len(self._multireddit_data):
try:
with self._loader('Loading multireddits'):
multireddit = next(self._multireddits)
if self._loader.exception:
raise IndexError
except StopIteration:
raise IndexError
else:
data = self.strip_praw_multireddit(multireddit)
self._multireddit_data.append(data)
data = self._multireddit_data[index]
data['split_title'] = self.wrap_text(data['title'], width=n_cols)
data['n_rows'] = len(data['split_title']) + 1
data['offset'] = 0
return data

View File

@@ -120,6 +120,7 @@ SUBREDDIT_POST = c
SUBREDDIT_OPEN = l, <KEY_RIGHT> SUBREDDIT_OPEN = l, <KEY_RIGHT>
SUBREDDIT_OPEN_IN_BROWSER = o, <LF>, <KEY_ENTER>, <KEY_ENTER> SUBREDDIT_OPEN_IN_BROWSER = o, <LF>, <KEY_ENTER>, <KEY_ENTER>
SUBREDDIT_OPEN_SUBSCRIPTIONS = s SUBREDDIT_OPEN_SUBSCRIPTIONS = s
MULTIREDDIT_OPEN_SUBSCRIPTIONS = S
; Subscription page ; Subscription page
SUBSCRIPTION_SELECT = l, <LF>, <KEY_ENTER>, <KEY_RIGHT> SUBSCRIPTION_SELECT = l, <LF>, <KEY_ENTER>, <KEY_RIGHT>

View File

@@ -9,6 +9,7 @@ from .content import SubredditContent
from .page import Page, PageController, logged_in from .page import Page, PageController, logged_in
from .objects import Navigator, Color, Command from .objects import Navigator, Color, Command
from .submission import SubmissionPage from .submission import SubmissionPage
from .multireddits import MultiredditPage
from .subscription import SubscriptionPage from .subscription import SubscriptionPage
from .exceptions import TemporaryFileError from .exceptions import TemporaryFileError
@@ -168,6 +169,27 @@ class SubredditPage(Page):
self.refresh_content(order='ignore', self.refresh_content(order='ignore',
name=page.subreddit_data['name']) name=page.subreddit_data['name'])
@SubredditController.register(Command('MULTIREDDIT_OPEN_SUBSCRIPTIONS'))
@logged_in
def open_multireddit_subscriptions(self):
"Open user multireddit subscriptions page"
with self.term.loader('Loading multireddits'):
page = MultiredditPage(
self.reddit, self.reddit.get_my_multireddits(),
self.term, self.config)
if self.term.loader.exception:
return
page.loop()
# When the user has chosen a subreddit in the subscriptions list,
# refresh content with the selected subreddit
if page.multireddit_data is not None:
self.refresh_content(order='ignore',
name=page.multireddit_data['name'])
def _draw_item(self, win, data, inverted): def _draw_item(self, win, data, inverted):
n_rows, n_cols = win.getmaxyx() n_rows, n_cols = win.getmaxyx()