|
|
|
@ -30,6 +30,60 @@ struct Invidious::User
|
|
|
|
|
return subscriptions
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def parse_playlist_export_csv(user : User, raw_input : String)
|
|
|
|
|
# Split the input into head and body content
|
|
|
|
|
raw_head, raw_body = raw_input.split("\n\n", limit: 2, remove_empty: true)
|
|
|
|
|
|
|
|
|
|
# Create the playlist from the head content
|
|
|
|
|
csv_head = CSV.new(raw_head, headers: true)
|
|
|
|
|
csv_head.next
|
|
|
|
|
title = csv_head[4]
|
|
|
|
|
description = csv_head[5]
|
|
|
|
|
visibility = csv_head[6]
|
|
|
|
|
|
|
|
|
|
if visibility.compare("Public", case_insensitive: true) == 0
|
|
|
|
|
privacy = PlaylistPrivacy::Public
|
|
|
|
|
else
|
|
|
|
|
privacy = PlaylistPrivacy::Private
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
playlist = create_playlist(title, privacy, user)
|
|
|
|
|
Invidious::Database::Playlists.update_description(playlist.id, description)
|
|
|
|
|
|
|
|
|
|
# Add each video to the playlist from the body content
|
|
|
|
|
csv_body = CSV.new(raw_body, headers: true)
|
|
|
|
|
csv_body.each do |row|
|
|
|
|
|
video_id = row[0]
|
|
|
|
|
if playlist
|
|
|
|
|
next if !video_id
|
|
|
|
|
next if video_id == "Video Id"
|
|
|
|
|
|
|
|
|
|
begin
|
|
|
|
|
video = get_video(video_id)
|
|
|
|
|
rescue ex
|
|
|
|
|
next
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
playlist_video = PlaylistVideo.new({
|
|
|
|
|
title: video.title,
|
|
|
|
|
id: video.id,
|
|
|
|
|
author: video.author,
|
|
|
|
|
ucid: video.ucid,
|
|
|
|
|
length_seconds: video.length_seconds,
|
|
|
|
|
published: video.published,
|
|
|
|
|
plid: playlist.id,
|
|
|
|
|
live_now: video.live_now,
|
|
|
|
|
index: Random::Secure.rand(0_i64..Int64::MAX),
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
Invidious::Database::PlaylistVideos.insert(playlist_video)
|
|
|
|
|
Invidious::Database::Playlists.update_video_added(playlist.id, playlist_video.index)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return playlist
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
# -------------------
|
|
|
|
|
# Invidious
|
|
|
|
|
# -------------------
|
|
|
|
@ -149,6 +203,21 @@ struct Invidious::User
|
|
|
|
|
return true
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def from_youtube_pl(user : User, body : String, filename : String, type : String) : Bool
|
|
|
|
|
extension = filename.split(".").last
|
|
|
|
|
|
|
|
|
|
if extension == "csv" || type == "text/csv"
|
|
|
|
|
playlist = parse_playlist_export_csv(user, body)
|
|
|
|
|
if playlist
|
|
|
|
|
return true
|
|
|
|
|
else
|
|
|
|
|
return false
|
|
|
|
|
end
|
|
|
|
|
else
|
|
|
|
|
return false
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
# -------------------
|
|
|
|
|
# Freetube
|
|
|
|
|
# -------------------
|
|
|
|
|