mirror of
https://github.com/ihabunek/toot.git
synced 2024-11-03 04:17:21 -05:00
Show public or home timeline in curses
This commit is contained in:
parent
521c329db9
commit
6149c9beda
34
toot/api.py
34
toot/api.py
@ -88,22 +88,40 @@ def timeline_home(app, user):
|
|||||||
return http.get(app, user, '/api/v1/timelines/home').json()
|
return http.get(app, user, '/api/v1/timelines/home').json()
|
||||||
|
|
||||||
|
|
||||||
def timeline_generator(app, user, limit=20):
|
def get_next_path(headers):
|
||||||
path = '/api/v1/timelines/home?limit={}'.format(limit)
|
"""Given timeline response headers, returns the path to the next batch"""
|
||||||
|
links = headers.get('Link', '')
|
||||||
|
matches = re.match('<([^>]+)>; rel="next"', links)
|
||||||
|
if matches:
|
||||||
|
parsed = urlparse(matches.group(1))
|
||||||
|
return "?".join([parsed.path, parsed.query])
|
||||||
|
|
||||||
def get_next_path(headers):
|
|
||||||
links = headers.get('Link', '')
|
|
||||||
matches = re.match('<([^>]+)>; rel="next"', links)
|
|
||||||
if matches:
|
|
||||||
parsed = urlparse(matches.group(1))
|
|
||||||
return "?".join([parsed.path, parsed.query])
|
|
||||||
|
|
||||||
|
def _timeline_generator(app, user, path, limit=20):
|
||||||
while path:
|
while path:
|
||||||
response = http.get(app, user, path)
|
response = http.get(app, user, path)
|
||||||
yield response.json()
|
yield response.json()
|
||||||
path = get_next_path(response.headers)
|
path = get_next_path(response.headers)
|
||||||
|
|
||||||
|
|
||||||
|
def _anon_timeline_generator(instance, path, limit=20):
|
||||||
|
while path:
|
||||||
|
url = "https://{}{}".format(instance, path)
|
||||||
|
response = http.anon_get(url, path)
|
||||||
|
yield response.json()
|
||||||
|
path = get_next_path(response.headers)
|
||||||
|
|
||||||
|
|
||||||
|
def home_timeline_generator(app, user, limit=20):
|
||||||
|
path = '/api/v1/timelines/home?limit={}'.format(limit)
|
||||||
|
return _timeline_generator(app, user, path)
|
||||||
|
|
||||||
|
|
||||||
|
def public_timeline_generator(instance, limit=20):
|
||||||
|
path = '/api/v1/timelines/public?limit={}'.format(limit)
|
||||||
|
return _anon_timeline_generator(instance, path)
|
||||||
|
|
||||||
|
|
||||||
def upload_media(app, user, file):
|
def upload_media(app, user, file):
|
||||||
return http.post(app, user, '/api/v1/media', files={
|
return http.post(app, user, '/api/v1/media', files={
|
||||||
'file': file
|
'file': file
|
||||||
|
@ -65,7 +65,16 @@ def timeline(app, user, args):
|
|||||||
|
|
||||||
def curses(app, user, args):
|
def curses(app, user, args):
|
||||||
from toot.app import TimelineApp
|
from toot.app import TimelineApp
|
||||||
generator = api.timeline_generator(app, user)
|
|
||||||
|
if not args.public and (not app or not user):
|
||||||
|
raise ConsoleError("You must be logged in to view the home timeline.")
|
||||||
|
|
||||||
|
if args.public:
|
||||||
|
instance = args.instance or app.instance
|
||||||
|
generator = api.public_timeline_generator(instance)
|
||||||
|
else:
|
||||||
|
generator = api.home_timeline_generator(app, user)
|
||||||
|
|
||||||
TimelineApp(generator).run()
|
TimelineApp(generator).run()
|
||||||
|
|
||||||
|
|
||||||
|
@ -138,8 +138,18 @@ READ_COMMANDS = [
|
|||||||
Command(
|
Command(
|
||||||
name="curses",
|
name="curses",
|
||||||
description="An experimental timeline app (doesn't work on Windows)",
|
description="An experimental timeline app (doesn't work on Windows)",
|
||||||
arguments=[],
|
arguments=[
|
||||||
require_auth=True,
|
(["-p", "--public"], {
|
||||||
|
"action": 'store_true',
|
||||||
|
"default": False,
|
||||||
|
"help": "Resolve non-local accounts",
|
||||||
|
}),
|
||||||
|
(["-i", "--instance"], {
|
||||||
|
"type": str,
|
||||||
|
"help": 'instance from which to read (for public timeline only)',
|
||||||
|
})
|
||||||
|
],
|
||||||
|
require_auth=False,
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user