1 -- Authors: Steve Jothen <sjothen@gmail.com>
3 -- Last Changed: Unknown
5 -- Small interface to MusicPD
7 -- Author: Steve Jothen <sjothen at gmail dot com>
11 -- Change your path/settings according to your setup
13 -- defbindings("WScreen", {
14 -- kpress("KP_6", "MusicPD.next()"), -- next song
15 -- kpress("KP_4", "MusicPD.previous()"), -- previous song
16 -- kpress("KP_2", "MusicPD.volume_down()"), -- volume down settings.volume_delta units
17 -- kpress("KP_8", "MusicPD.volume_up()"), -- volume up ....
18 -- kpress("KP_5", "MusicPD.toggle_play()") -- toggle play/pause/stop
21 local netcat
= "/bin/netcat"
24 hostname
= "localhost",
32 function MusicPD
.file_exists()
33 if io
.open(netcat
, "r") then -- check to see if file exists
40 -- creates the appropriate string to call with io.popen
42 function MusicPD
.create_command(command
)
44 if settings
.password
then
45 arguments
= string.format(
46 "echo -n \"password %s\n%s\nclose\n\" | %s %s %d",
47 settings
.password
, command
, netcat
, settings
.hostname
, settings
.port
)
50 arguments
= string.format(
51 "echo -n \"%s\nclose\n\" | %s %s %d",
52 command
, netcat
, settings
.hostname
, settings
.port
)
57 -- calls the command and returns table of key, value pairs
59 function MusicPD
.call_command(command
)
60 local arg_cmd
= MusicPD
.create_command(command
)
62 if MusicPD
.file_exists() then
63 local handle
= io
.popen(arg_cmd
, "r")
64 local line
= handle
:read("*l")
66 local _
, _
, key
, value
= string.find(line
, "(.+):%s(.+)")
68 values
[string.lower(key
)] = value
70 line
= handle
:read("*l")
77 function MusicPD
.next()
78 MusicPD
.call_command("next")
81 function MusicPD
.previous()
82 MusicPD
.call_command("previous")
85 function MusicPD
.pause()
86 MusicPD
.call_command("pause")
89 function MusicPD
.stop()
90 MusicPD
.call_command("stop")
93 function MusicPD
.volume_up()
94 local stats
= MusicPD
.call_command("status")
95 local cur_volume
= tonumber(stats
.volume
)
97 if cur_volume
== 100 then
99 elseif cur_volume
+ settings
.volume_delta
> 100 then
100 new_volume
= string.format("setvol %d", 100)
102 new_volume
= string.format("setvol %d", settings
.volume_delta
+ cur_volume
)
104 MusicPD
.call_command(new_volume
)
107 function MusicPD
.volume_down()
108 local stats
= MusicPD
.call_command("status")
109 local cur_volume
= tonumber(stats
.volume
)
111 if cur_volume
== 0 then
113 elseif cur_volume
- settings
.volume_delta
< 0 then
114 new_volume
= string.format("setvol %d", 0)
116 new_volume
= string.format("setvol %d", cur_volume
- settings
.volume_delta
)
118 MusicPD
.call_command(new_volume
)
121 function MusicPD
.toggle_random()
122 local stats
= MusicPD
.call_command("status")
123 local random = tonumber(stats
.random)
125 MusicPD
.call_command("random 1")
126 elseif random == 1 then
127 MusicPD
.call_command("random 0")
131 function MusicPD
.toggle_repeat()
132 local stats
= MusicPD
.call_command("status")
133 local rpt
= tonumber(stats
["repeat"])
135 MusicPD
.call_command("repeat 1")
137 MusicPD
.call_command("repeat 0")
141 function MusicPD
.toggle_play()
142 local stats
= MusicPD
.call_command("status")
143 if stats
.state
== "play" then
144 MusicPD
.call_command("pause")
145 elseif stats
.state
== "pause" then
146 MusicPD
.call_command("pause")
147 elseif stats
.state
== "stop" then
148 MusicPD
.call_command("play")
152 defbindings("WScreen", {
153 kpress("KP_6", "MusicPD.next()"),
154 kpress("KP_4", "MusicPD.previous()"),
155 kpress("KP_2", "MusicPD.volume_down()"),
156 kpress("KP_8", "MusicPD.volume_up()"),
157 kpress("KP_5", "MusicPD.toggle_play()"),
158 kpress("KP_7", "MusicPD.toggle_repeat()"),
159 kpress("KP_9", "MusicPD.toggle_random()")