aboutsummaryrefslogtreecommitdiffstats
path: root/youtube
diff options
context:
space:
mode:
Diffstat (limited to 'youtube')
-rw-r--r--youtube/templates/watch.html5
-rw-r--r--youtube/watch.py8
2 files changed, 13 insertions, 0 deletions
diff --git a/youtube/templates/watch.html b/youtube/templates/watch.html
index 4041144..01ae8cb 100644
--- a/youtube/templates/watch.html
+++ b/youtube/templates/watch.html
@@ -341,6 +341,11 @@ Reload without invidious (for usage of new identity button).</a>
{% endfor %}
</video>
+ {% if time_start != 0 %}
+ <script>
+ document.querySelector('video').currentTime = {{ time_start|tojson }};
+ </script>
+ {% endif %}
{% endif %}
<div class="video-info">
diff --git a/youtube/watch.py b/youtube/watch.py
index d65bd8c..0a48653 100644
--- a/youtube/watch.py
+++ b/youtube/watch.py
@@ -366,6 +366,7 @@ def format_bytes(bytes):
return '%.2f%s' % (converted, suffix)
+time_table = {'h': 3600, 'm': 60, 's': 1}
@yt_app.route('/watch')
@yt_app.route('/embed')
@yt_app.route('/embed/<video_id>')
@@ -376,6 +377,12 @@ def get_watch_page(video_id=None):
if len(video_id) < 11:
return flask.render_template('error.html', error_message='Incomplete video id (too short): ' + video_id), 404
+ time_start_str = request.args.get('t', '0s')
+ time_start = 0
+ if re.fullmatch(r'(\d+(h|m|s))+', time_start_str):
+ for match in re.finditer(r'(\d+)(h|m|s)', time_start_str):
+ time_start += int(match.group(1))*time_table[match.group(2)]
+
lc = request.args.get('lc', '')
playlist_id = request.args.get('list')
index = request.args.get('index')
@@ -511,6 +518,7 @@ def get_watch_page(video_id=None):
invidious_used = info['invidious_used'],
invidious_reload_button = info['invidious_reload_button'],
video_url = util.URL_ORIGIN + '/watch?v=' + video_id,
+ time_start = time_start,
)