Compare commits

..

No commits in common. "f9ac4b6d1876b6ea7cd20dd512da8f4360923d0a" and "d967bd40212694209ba77f7125f0e4f092ce57fb" have entirely different histories.

View File

@ -1,5 +1,7 @@
-- mpv-youtube-queue.lua -- mpv-youtube-queue.lua
-- --
-- mpv-youtube-queue.lua
--
-- YouTube 'Add To Queue' for mpv -- YouTube 'Add To Queue' for mpv
-- --
-- Copyright (C) 2023 sudacode -- Copyright (C) 2023 sudacode
@ -40,7 +42,7 @@ local options = {
display_limit = 6, display_limit = 6,
cursor_icon = "🠺", cursor_icon = "🠺",
font_size = 24, font_size = 24,
font_name = "JetBrains Mono" font_name = "JetBrains Mono",
} }
local colors = { local colors = {
@ -48,7 +50,6 @@ local colors = {
text = "BFBFBF", text = "BFBFBF",
selected_color = "F993BD", selected_color = "F993BD",
cursor = "FDE98B", cursor = "FDE98B",
reset = "{\\c&BFBFBF&}"
} }
mp.options.read_options(options, "mpv-youtube-queue") mp.options.read_options(options, "mpv-youtube-queue")
@ -62,16 +63,18 @@ local display_offset = 0
local function sleep(n) os.execute("sleep " .. tonumber(n)) end local function sleep(n) os.execute("sleep " .. tonumber(n)) end
local function print_osd_message(message, duration, color) local function print_osd_message(message, duration, color)
if not color then color = colors.text end if not color then
mp.osd_message(styleOn .. "{\\c&" .. color .. "&}" .. message .. "{\\c&" .. color = colors.text
colors.text .. "&}" .. styleOff .. "\n", duration) end
mp.osd_message(styleOn .. "{\\c&" .. color .. "&}" .. message .. "{\\c&" .. colors.text .. "&}" .. styleOff .. "\n",
duration)
end end
-- print the name of the current video to the OSD -- print the name of the current video to the OSD
local function print_video_name(video, duration) local function print_video_name(video, duration)
if not video then return end if not video then return end
if not duration then duration = 2 end if not duration then duration = 2 end
print_osd_message('Playing: ' .. video.name, duration) print_osd_message('Currently playing: ' .. video.name, duration)
end end
-- Function to get the video name from a YouTube URL -- Function to get the video name from a YouTube URL
@ -165,7 +168,9 @@ end
-- Function to find the index of the currently playing video -- Function to find the index of the currently playing video
function YouTubeQueue.update_current_index() function YouTubeQueue.update_current_index()
local current_url = mp.get_property("path") local current_url = mp.get_property("path")
if #video_queue == 0 then return end if #video_queue == 0 then
return
end
for i, v in ipairs(video_queue) do for i, v in ipairs(video_queue) do
if v.url == current_url then if v.url == current_url then
index = i index = i
@ -202,24 +207,33 @@ function YouTubeQueue.print_queue(duration)
display_offset = start_index - 1 display_offset = start_index - 1
for i = start_index, end_index do for i = start_index, end_index do
local prefix = (i == selected_index) and styleOn .. "{\\c&" .. local prefix = (i == selected_index) and
colors.cursor .. "&}" .. options.cursor_icon .. styleOn ..
" " .. colors.reset .. styleOff or " " "{\\c&" ..
colors.cursor ..
"&}" .. options.cursor_icon .. " " .. "{\\c&" .. colors.text .. "&}" .. styleOff
or
" "
if i == current_index then if i == current_index then
message = message .. prefix .. styleOn .. "{\\b1\\c&" .. message = message ..
colors.selected_color .. "&}" .. i .. ". " .. prefix ..
video_queue[i].name .. "{\\b0}" .. colors.reset .. styleOn .. "{\b1\\c&" .. colors.selected_color .. "&}" .. i .. ". " .. video_queue[i].name ..
styleOff .. "\n" "{\\c&" .. colors.text .. "&\b0}" .. styleOff .. "\n"
elseif i == 2 then
message = message ..
prefix ..
styleOn .. "{\\c&" .. colors.text .. "&\b0}" .. styleOff .. i .. ". " .. video_queue[i].name ..
"\n"
else else
message = message .. prefix .. styleOn .. colors.reset .. message = message ..
styleOff .. i .. ". " .. video_queue[i].name .. prefix ..
styleOn .. "{\\c&" .. colors.text .. "&\b0}" .. styleOff .. i .. ". " .. video_queue[i].name ..
"\n" "\n"
end end
end end
mp.osd_message(message, duration) mp.osd_message(message, duration)
else else
print_osd_message("No videos in the queue or history.", duration, print_osd_message("No videos in the queue or history.", duration, colors.error)
colors.error)
end end
end end
@ -231,8 +245,7 @@ end
local function get_clipboard_content() local function get_clipboard_content()
local handle = io.popen(options.clipboard_command) local handle = io.popen(options.clipboard_command)
if not handle then if not handle then
print_osd_message("Error getting clipboard content", MSG_DURATION, print_osd_message("Error getting clipboard content", MSG_DURATION, colors.error)
colors.error)
return nil return nil
end end
local result = handle:read("*a") local result = handle:read("*a")
@ -272,6 +285,7 @@ local function play_video_at(idx)
return current_video return current_video
end end
local function play_selected_video() local function play_selected_video()
-- local current_index = YouTubeQueue.get_current_index() -- local current_index = YouTubeQueue.get_current_index()
local video = play_video_at(selected_index) local video = play_video_at(selected_index)
@ -300,8 +314,7 @@ end
local function add_to_queue() local function add_to_queue()
local url = get_clipboard_content() local url = get_clipboard_content()
if not url then if not url then
print_osd_message("Nothing found in the clipboard.", MSG_DURATION, print_osd_message("Nothing found in the clipboard.", MSG_DURATION, colors.error)
colors.error)
return return
end end
if YouTubeQueue.is_in_queue(url) then if YouTubeQueue.is_in_queue(url) then
@ -313,14 +326,12 @@ local function add_to_queue()
end end
local name = get_video_name(url) local name = get_video_name(url)
if not name then if not name then
print_osd_message("Error getting video name.", MSG_DURATION, print_osd_message("Error getting video name.", MSG_DURATION, colors.error)
colors.error)
return return
end end
local channel_url = get_channel_url(url) local channel_url = get_channel_url(url)
if not channel_url then if not channel_url then
print_osd_message("Error getting channel URL.", MSG_DURATION, print_osd_message("Error getting channel URL.", MSG_DURATION, colors.error)
colors.error)
return return
end end
@ -342,8 +353,7 @@ local function play_previous_video()
local previous_video = YouTubeQueue.prev_in_queue() local previous_video = YouTubeQueue.prev_in_queue()
local current_index = YouTubeQueue.get_current_index() local current_index = YouTubeQueue.get_current_index()
if not previous_video then if not previous_video then
print_osd_message("No previous video available.", MSG_DURATION, print_osd_message("No previous video available.", MSG_DURATION, colors.error)
colors.error)
return return
end end
mp.set_property_number("playlist-pos", current_index - 1) mp.set_property_number("playlist-pos", current_index - 1)