summaryrefslogtreecommitdiffstats
path: root/src/invidious.cr
diff options
context:
space:
mode:
Diffstat (limited to 'src/invidious.cr')
-rw-r--r--src/invidious.cr35
1 files changed, 34 insertions, 1 deletions
diff --git a/src/invidious.cr b/src/invidious.cr
index ab3f1019..2d566ac0 100644
--- a/src/invidious.cr
+++ b/src/invidious.cr
@@ -468,6 +468,13 @@ end
get "/embed/:id" do |env|
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
id = env.params.url["id"]
+ plid = env.params.query["list"]?
+
+ if md = env.params.query["playlist"]?
+ .try &.match(/[a-zA-Z0-9_-]{11}(,[a-zA-Z0-9_-]{11})*/)
+ video_series = md[0].split(",")
+ env.params.query.delete("playlist")
+ end
preferences = env.get("preferences").as(Preferences)
@@ -483,7 +490,33 @@ get "/embed/:id" do |env|
next env.redirect url
end
- if id.size > 11
+ # YouTube embed supports `videoseries` with either `list=PLID`
+ # or `playlist=VIDEO_ID,VIDEO_ID`
+ if id == "videoseries"
+ url = ""
+
+ if plid
+ begin
+ videos = fetch_playlist_videos(plid, 1, 1, locale: locale)
+ rescue ex
+ error_message = ex.message
+ next templated "error"
+ end
+
+ url = "/embed/#{videos[0].id}"
+ elsif video_series
+ url = "/embed/#{video_series.shift}"
+ env.params.query["playlist"] = video_series.join(",")
+ else
+ next env.redirect "/"
+ end
+
+ if env.params.query.size > 0
+ url += "?#{env.params.query}"
+ end
+
+ next env.redirect url
+ elsif id.size > 11
url = "/embed/#{id[0, 11]}"
if env.params.query.size > 0