feat(vlc): add play next extension
This commit is contained in:
parent
c908ee136b
commit
3dd00fedf0
3 changed files with 172 additions and 0 deletions
|
@ -8,6 +8,7 @@
|
||||||
config = lib.mkMerge [
|
config = lib.mkMerge [
|
||||||
(lib.mkIf (osConfig.desktop.media-player == "vlc") {
|
(lib.mkIf (osConfig.desktop.media-player == "vlc") {
|
||||||
home.packages = lib.singleton pkgs.vlc;
|
home.packages = lib.singleton pkgs.vlc;
|
||||||
|
home.file.".local/share/vlc/lua/extensions/vlc-play-next.lua".source = ./vlc-play-next.lua;
|
||||||
})
|
})
|
||||||
(lib.mkIf (osConfig.desktop.media-player == "mpv") {
|
(lib.mkIf (osConfig.desktop.media-player == "mpv") {
|
||||||
programs.mpv = {
|
programs.mpv = {
|
||||||
|
|
166
modules/home/desktop/media-player/vlc-play-next.lua
Normal file
166
modules/home/desktop/media-player/vlc-play-next.lua
Normal file
|
@ -0,0 +1,166 @@
|
||||||
|
function descriptor()
|
||||||
|
return {
|
||||||
|
title = "Play Next in Folder",
|
||||||
|
version = "1.0",
|
||||||
|
author = "Mindconstructor",
|
||||||
|
url = "http://www.videolan.org",
|
||||||
|
shortdesc = "Play Next in Folder",
|
||||||
|
description = "This extension plays the next media file in the directory of the last ended video file.",
|
||||||
|
capabilities = { "input-listener" },
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
function activate()
|
||||||
|
vlc.msg.dbg("[Play Next in Folder] Activated")
|
||||||
|
end
|
||||||
|
|
||||||
|
function deactivate()
|
||||||
|
vlc.msg.dbg("[Play Next in Folder] Deactivated")
|
||||||
|
end
|
||||||
|
|
||||||
|
local lastplayeditem = ""
|
||||||
|
|
||||||
|
function meta_changed()
|
||||||
|
if vlc.playlist.status() == "stopped" then
|
||||||
|
local item = vlc.input.item()
|
||||||
|
if item then
|
||||||
|
lastplayeditem = item:uri()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function playing_changed()
|
||||||
|
local item = vlc.input.item()
|
||||||
|
if item then
|
||||||
|
vlc.msg.dbg(item:uri())
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function input_changed()
|
||||||
|
-- Trigger only when playback stops
|
||||||
|
if vlc.playlist.status() == "stopped" then
|
||||||
|
local uri = lastplayeditem
|
||||||
|
local path = vlc.strings.decode_uri(uri)
|
||||||
|
play_next_video_in_directory(path)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function play_next_video_in_directory(current_path)
|
||||||
|
local folder_path = string.sub(string.match(current_path, "^(.*/)"), 9)
|
||||||
|
if not folder_path then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local files = vlc.io.readdir(folder_path)
|
||||||
|
if not files then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Filter for media files
|
||||||
|
files = filter_media_files(files)
|
||||||
|
|
||||||
|
local current_file = string.match(current_path, ".*/([^/]+)$")
|
||||||
|
local next_file = nil
|
||||||
|
local found_current = false
|
||||||
|
|
||||||
|
for _, file in ipairs(files) do
|
||||||
|
if found_current then
|
||||||
|
next_file = file
|
||||||
|
break
|
||||||
|
end
|
||||||
|
if file == current_file then
|
||||||
|
found_current = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if next_file then
|
||||||
|
local next_uri = "file:///" .. folder_path .. next_file
|
||||||
|
vlc.playlist.clear()
|
||||||
|
vlc.playlist.add({ { path = next_uri } })
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function filter_media_files(files)
|
||||||
|
local media_files = {}
|
||||||
|
local media_extensions = {
|
||||||
|
-- Videoformate
|
||||||
|
"%.avi$",
|
||||||
|
"%.mkv$",
|
||||||
|
"%.mp4$",
|
||||||
|
"%.wmv$",
|
||||||
|
"%.flv%",
|
||||||
|
"%.mpeg$",
|
||||||
|
"%.mpg$",
|
||||||
|
"%.mov$",
|
||||||
|
"%.rm$",
|
||||||
|
"%.vob$",
|
||||||
|
"%.asf$",
|
||||||
|
"%.divx$",
|
||||||
|
"%.m4v$",
|
||||||
|
"%.ogg$",
|
||||||
|
"%.ogm$",
|
||||||
|
"%.ogv$",
|
||||||
|
"%.qt$",
|
||||||
|
"%.rmvb$",
|
||||||
|
"%.webm$",
|
||||||
|
"%.3gp$",
|
||||||
|
"%.3g2$",
|
||||||
|
"%.drc$",
|
||||||
|
"%.f4v$",
|
||||||
|
"%.f4p$",
|
||||||
|
"%.f4a$",
|
||||||
|
"%.f4b$",
|
||||||
|
"%.gifv$",
|
||||||
|
"%.mng$",
|
||||||
|
"%.mts$",
|
||||||
|
"%.m2ts$",
|
||||||
|
"%.ts$",
|
||||||
|
"%.mov$",
|
||||||
|
"%.qt$",
|
||||||
|
"%.mxf$",
|
||||||
|
"%.nsv$",
|
||||||
|
"%.roq$",
|
||||||
|
"%.svi$",
|
||||||
|
"%.viv$",
|
||||||
|
-- Audioformate
|
||||||
|
"%.mp3$",
|
||||||
|
"%.wav$",
|
||||||
|
"%.flac$",
|
||||||
|
"%.aac$",
|
||||||
|
"%.ogg$",
|
||||||
|
"%.wma$",
|
||||||
|
"%.alac$",
|
||||||
|
"%.ape$",
|
||||||
|
"%.ac3$",
|
||||||
|
"%.opus$",
|
||||||
|
"%.aiff$",
|
||||||
|
"%.aif$",
|
||||||
|
"%.amr$",
|
||||||
|
"%.au$",
|
||||||
|
"%.mka$",
|
||||||
|
"%.dts$",
|
||||||
|
"%.m4a$",
|
||||||
|
"%.m4b$",
|
||||||
|
"%.m4p$",
|
||||||
|
"%.mpc$",
|
||||||
|
"%.mpp$",
|
||||||
|
"%.mp+",
|
||||||
|
"%.oga$",
|
||||||
|
"%.spx$",
|
||||||
|
"%.tta$",
|
||||||
|
"%.voc$",
|
||||||
|
"%.ra$",
|
||||||
|
"%.mid$",
|
||||||
|
"%.midi$",
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, f in ipairs(files) do
|
||||||
|
for _, ext in ipairs(media_extensions) do
|
||||||
|
if string.match(f, ext) then
|
||||||
|
table.insert(media_files, f)
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return media_files
|
||||||
|
end
|
|
@ -15,5 +15,10 @@
|
||||||
users.defaultUserShell = pkgs.zsh;
|
users.defaultUserShell = pkgs.zsh;
|
||||||
environment.pathsToLink = [ "/share/zsh" ]; # enables completion
|
environment.pathsToLink = [ "/share/zsh" ]; # enables completion
|
||||||
}
|
}
|
||||||
|
{
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
p7zip
|
||||||
|
];
|
||||||
|
}
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue