Add authenticated API for compilation creation

This commit is contained in:
broquemonsieur 2023-06-15 21:29:37 -07:00
parent 7c92b051b3
commit b6181b9d97
5 changed files with 39 additions and 1 deletions

View File

@ -759,3 +759,10 @@ h1, h2, h3, h4, h5, p,
.channel-emoji {
margin: 0 2px;
}
div.compilation-video-panel {
display: block;
margin-left: auto;
margin-right: auto;
color: #d9d9d9;
}

View File

@ -207,6 +207,32 @@ module Invidious::Routes::API::V1::Authenticated
end
end
def self.create_compilation(env)
env.response.content_type = "application/json"
user = env.get("user").as(User)
title = env.params.json["title"]?.try &.as(String).delete("<>").byte_slice(0, 150)
if !title
return error_json(400, "Invalid title.")
end
privacy = env.params.json["privacy"]?.try { |p| CompilationPrivacy.parse(p.as(String).downcase) }
if !privacy
return error_json(400, "Invalid privacy setting.")
end
if Invidious::Database::Compilations.count_owned_by(user.email) >= 100
return error_json(400, "User cannot have more than 100 compilations.")
end
compilation = create_compilation(title, privacy, user)
env.response.headers["Location"] = "#{HOST_URL}/api/v1/auth/compilations/#{playlist.id}"
env.response.status_code = 201
{
"title" => title,
"compilationId" => compilation.id,
}.to_json
def self.create_playlist(env)
env.response.content_type = "application/json"
user = env.get("user").as(User)

View File

@ -274,6 +274,8 @@ module Invidious::Routing
post "/api/v1/auth/subscriptions/:ucid", {{namespace}}::Authenticated, :subscribe_channel
delete "/api/v1/auth/subscriptions/:ucid", {{namespace}}::Authenticated, :unsubscribe_channel
get "/api/v1/auth/compilations", {{namespace}}::Authenticated, :create_compilation
get "/api/v1/auth/playlists", {{namespace}}::Authenticated, :list_playlists
post "/api/v1/auth/playlists", {{namespace}}::Authenticated, :create_playlist
patch "/api/v1/auth/playlists/:plid",{{namespace}}:: Authenticated, :update_playlist_attribute

View File

@ -90,6 +90,9 @@
<% when CompilationVideo %>
<a style="width:100%" href="/watch?v=<%= item.id %>&list=<%= item.compid %>&index=<%= item.index %>">
<% if !env.get("preferences").as(Preferences).thin_mode %>
<div class="compilation-video-panel">
</div>
<% end %>
</a>
<% when Category %>

View File

@ -10,7 +10,7 @@
</div>
<div class="pure-u-1-3">
<h3 style="text-align:center">
<a href="/create_compilations?referer=<%= URI.encode_www_form("/feed/compilations") %>"><%= translate(locale, "Create compilation") %></a>
<a href="/create_compilation?referer=<%= URI.encode_www_form("/feed/compilations") %>"><%= translate(locale, "Create compilation") %></a>
</h3>
</div>
<div class="pure-u-1-3">