#!/usr/bin/lua
+require "uci"
+require("socket")
+json=require("json")
+
function url_decode(str)
if not str then return nil end
str = string.gsub (str, "+", " ")
return res
end
-require "uci"
-require("socket")
-
function mpd_new(settings)
local client = {}
if settings == nil then settings = {} end
return client
end
-
function mpd_send(mpd,action,raw)
local command = string.format("%s\n", action)
return values
end
-
-json=require("json")
-
x = uci.cursor()
+
settings = {}
settings['host'] = x.get("mpd","server","host") or "localhost"
settings['port'] = x.get("mpd","server","port") or 6600
+settings['timeout'] = x.get("mpd","server","timeout") or 1
+
+volstep = x.get("mpd","control","volume_step") or 3
+
password = x.get("mpd","server","password")
if password then
settings["password"] = password
command = url_decode(os.getenv('QUERY_STRING'))
if not command or command=="" then
- command="status"
+ command="idle"
end
-if command=="play" or command=="pause" or command=="stop" or command=="previous" or command=="next" then
+if command=="play" or command=="pause" or command=="stop" then
+
res=mpd_send(m,command)
+
+elseif command=="previous" or command=="next" then
+
+ res=mpd_send(m,"play")
+ res=mpd_send(m,command)
+
+elseif command=="idle" then
+
+ m.timeout=30
+ res=mpd_send(m,command)
+
elseif command=="vold" then
+
status=mpd_send(m,"status")
volume=tonumber(status["volume"])
- res=mpd_send(m,"setvol "..(volume-3))
+ res=mpd_send(m,"setvol "..(volume-volstep))
+
elseif command=="volu" then
+
status=mpd_send(m,"status")
volume=tonumber(status["volume"])
- res=mpd_send(m,"setvol "..(volume+3))
+ res=mpd_send(m,"setvol "..(volume+volstep))
+
+elseif string.starts(command,"fastfwd") then
+
+ cmd=split(command,"|")
+ skip=tonumber(cmd[2])
+ if not skip then
+ skip=15
+ end
+
+ status=mpd_send(m,"status")
+ rec_time=status["time"]
+ song=status["song"]
+
+ if song then
+
+ if rec_time then
+ rec_time=split(rec_time,":")
+ cur_time=tonumber(rec_time[1])
+
+ track_time=tonumber(rec_time[2])
+ cur_time=cur_time+skip
+ if cur_time>track_time then
+ cur_time=track_time
+ end
+
+ mpd_send(m,"seek "..song.." "..cur_time)
+
+ else
+
+ mpd_send(m,"play")
+
+ end
+
+ end
+
+ res={}
+
+elseif string.starts(command,"rewind") then
+
+ cmd=split(command,"|")
+ skip=tonumber(cmd[2])
+ if not skip then
+ skip=15
+ end
+
+ status=mpd_send(m,"status")
+ rec_time=status["time"]
+ song=status["song"]
+
+ if song then
+
+ if rec_time then
+ rec_time=split(rec_time,":")
+ cur_time=tonumber(rec_time[1])
+
+ track_time=tonumber(rec_time[2])
+ cur_time=cur_time-skip
+ if cur_time<0 then
+ cur_time=0
+ end
+
+ mpd_send(m,"seek "..song.." "..cur_time)
+
+ else
+
+ mpd_send(m,"play")
+ mpd_send(m,"previous")
+
+ end
+
+ end
+
+ res={}
+
elseif command=="status" then
+
res=mpd_send(m,"status")
song=res["song"]
playlist=mpd_send(m,"playlist",1)
pl=process_playlist(playlist)
+
if song then
res['current_playing']=pl[song]['name']
else
- res['current_playing']="No songs selected"
+ res['song']="--"
+ res['current_playing']="---"
end
+
elseif command=="playlist" then
+
playlist=mpd_send(m,"playlist",1)
res=process_playlist(playlist)
+
elseif command=="repeat" then
+
status=mpd_send(m,"status")
rep=1-status["repeat"]
res=mpd_send(m,"repeat "..rep)
+
elseif string.starts(command,"cpl") then
+
cmd=split(command,"|")
id=cmd[3]
command=cmd[2]
+
if command=="playitem" then
command="play "..id
res=mpd_send(m,command)
end
+
if command=="clear" then
res=mpd_send(m,"clear")
end
+
if command=="remove" then
command="delete "..id
res=mpd_send(m,command)
end
+
if command=="moveup" then
command="swap "..id.." "..(id-1)
res=mpd_send(m,command)
end
+
if command=="movedown" then
command="swap "..id.." "..(id+1)
res=mpd_send(m,command)
end
+
elseif string.starts(command,"lists") then
+
cmd=split(command,"|")
command=cmd[2]
+
if command=="load" then
if not cmd[3] then
lists=mpd_send(m,"listplaylists",1)
res=mpd_send(m,"load "..cmd[3],1)
end
end
+
if command=="save" and cmd[3] then
res=mpd_send(m,"save "..cmd[3],1)
end
+
if command=="delete" and cmd[3] then
res=mpd_send(m,"rm "..cmd[3],1)
end
+
if command=="edit" then
if cmd[3] then
dir=mpd_send(m,"lsinfo \""..cmd[3].."\"",1)
end
res=process_directory(dir)
end
+
if command=="add" then
res={}
if cmd[3] then
res=mpd_send(m,"add \""..cmd[3].."\"")
end
end
+
end
if not res then