Compare commits
5 Commits
0b47bda1aa
...
3040a8f320
Author | SHA1 | Date |
---|---|---|
metalune | 3040a8f320 | |
metalune | 6b03bf194b | |
southerntofu | a04a418d32 | |
metalune | a01b5547ee | |
southerntofu | 90a7a03b34 |
|
@ -34,6 +34,11 @@ $ python3 main.py ::1 7171 # Also works with IPv6 addresses
|
|||
|
||||
It is strongly disrecommended to run the production using this command. Instead, please refer to the [Quart deployment docs](https://pgjones.gitlab.io/quart/tutorials/deployment.html).
|
||||
|
||||
## TODO-Tracker
|
||||
|
||||
We have our TODO-Tracker hosted on todo.sr.ht: [SimpleerTube](https://todo.sr.ht/~metalune/SimpleerTube)
|
||||
|
||||
## License
|
||||
|
||||
This software is distributed under the AGPLv3 license. You can find a copy in the [LICENSE](LICENSE) file.
|
||||
|
||||
|
|
9
main.py
9
main.py
|
@ -415,7 +415,14 @@ async def video_channels__about(domain, name):
|
|||
@app.route("/<string:domain>/videos/watch/<string:id>/<string:lang>.vtt")
|
||||
async def subtitles(domain, id, lang):
|
||||
try:
|
||||
return peertube.video_captions_download(domain, id, lang)
|
||||
captions = peertube.video_captions(domain, id)
|
||||
for entry in captions["data"]:
|
||||
if entry["language"]["id"] == lang: return peertube.video_captions_download(domain, entry["captionPath"].split('/')[-1])
|
||||
return await render_template(
|
||||
"error.html",
|
||||
error_number = "404",
|
||||
error_reason = "This video has no subtitles/captions inthe requested language"
|
||||
), 404
|
||||
except Exception as e:
|
||||
return await render_template(
|
||||
"error.html",
|
||||
|
|
|
@ -26,10 +26,11 @@ def video_captions(domain, id):
|
|||
url = "https://" + domain + "/api/v1/videos/" + id + "/captions"
|
||||
return json.loads(requests.get(url).text)
|
||||
|
||||
def video_captions_download(domain, id, lang):
|
||||
def video_captions_download(domain, caption_id):
|
||||
# URL is hardcoded to prevent further proxying. URL may change with updates, see captions API
|
||||
# eg. https://kolektiva.media/api/v1/videos/9c9de5e8-0a1e-484a-b099-e80766180a6d/captions
|
||||
url = "https://" + domain + "/lazy-static/video-captions/" + id + '-' + lang + ".vtt"
|
||||
# TODO: What if the captionPath doesn't follow this format on an instance? Should we really proxy ANYTHING returned by API?
|
||||
url = "https://" + domain + "/lazy-static/video-captions/" + caption_id
|
||||
return requests.get(url).text
|
||||
|
||||
def search(domain, term, start=0, count=10):
|
||||
|
|
|
@ -11,7 +11,12 @@
|
|||
|
||||
<body>
|
||||
<center>
|
||||
|
||||
<h2>{{ instance_name }}</h2>
|
||||
<a href="/">Home</a>
|
||||
<b> | </b>
|
||||
<a href="/{{ domain }}">Instance Home</a>
|
||||
|
||||
<form action="/{{ domain }}/search" method="POST">
|
||||
<input size="45" style="max-width: 100%" type="text" name="query" id="query" placeholder="Search" value="{{ search_term }}"/>
|
||||
<button type="submit">Search</button>
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
<br>
|
||||
{{ video.views }} Views
|
||||
<br>
|
||||
<a href="/{{ domain }}/accounts/{{ video.channel.name }}@{{ video.channel.host }}">
|
||||
<a href="/{{ domain }}/video-channels/{{ video.channel.name }}@{{ video.channel.host }}">
|
||||
<b>{{ video.channel.displayName }}</b>
|
||||
</a>
|
||||
<br>
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
<br>
|
||||
{{ video.views }} Views
|
||||
<br>
|
||||
<a href="/{{ domain }}/accounts/{{ video.channel.name }}@{{ video.channel.host }}">
|
||||
<a href="/{{ domain }}/video-channels/{{ video.channel.name }}@{{ video.channel.host }}">
|
||||
<b>{{ video.channel.displayName }}</b>
|
||||
</a>
|
||||
<br>
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
<br>
|
||||
{{ video.views }} Views
|
||||
<br>
|
||||
<a href="/{{ domain }}/accounts/{{ video.channel.name }}@{{ video.channel.host }}">
|
||||
<a href="/{{ domain }}/video-channels/{{ video.channel.name }}@{{ video.channel.host }}">
|
||||
<b>{{ video.channel.displayName }}</b>
|
||||
</a>
|
||||
<br>
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
<br>
|
||||
{{ video.views }} Views
|
||||
<br>
|
||||
<a href="/{{ domain }}/accounts/{{ video.channel.name }}@{{ video.channel.host }}">
|
||||
<a href="/{{ domain }}/video-channels/{{ video.channel.name }}@{{ video.channel.host }}">
|
||||
<b>{{ video.channel.displayName }}</b>
|
||||
</a>
|
||||
<br>
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
<br>
|
||||
{{ result.views }} Views
|
||||
<br>
|
||||
<a href="/{{ domain }}/accounts/{{ result.channel.name }}@{{ result.channel.host }}">
|
||||
<a href="/{{ domain }}/video-channels/{{ result.channel.name }}@{{ result.channel.host }}">
|
||||
<b>{{ result.channel.displayName }}</b>
|
||||
</a>
|
||||
<br>
|
||||
|
|
Loading…
Reference in New Issue