--- a/src/mpdcli.cxx
+++ b/src/mpdcli.cxx
@@ -32,11 +32,12 @@
#define M_CONN ((struct mpd_connection *)m_conn)
MPDCli::MPDCli(const string& host, int port, const string& pass,
- const string& onstart, const string& onstop)
+ const string& onstart, const string& onstop,
+ const string& onvolumechange)
: m_conn(0), m_ok(false), m_premutevolume(0), m_cachedvolume(50),
m_host(host), m_port(port), m_password(pass), m_onstart(onstart),
- m_onstop(onstop), m_lastinsertid(-1), m_lastinsertpos(-1),
- m_lastinsertqvers(-1)
+ m_onstop(onstop), m_onvolumechange(onvolumechange), m_lastinsertid(-1),
+ m_lastinsertpos(-1), m_lastinsertqvers(-1)
{
regcomp(&m_tpuexpr, "^[[:alpha:]]+://.+", REG_EXTENDED|REG_NOSUB);
if (!openconn()) {
@@ -365,6 +366,17 @@
volume = 100;
RETRY_CMD(mpd_run_set_volume(M_CONN, volume));
+ if (!m_onvolumechange.empty()) {
+ char buf[256];
+ int n = snprintf(buf, sizeof buf, "%s %i", m_onvolumechange.c_str(),
+ volume);
+ if (!(n >= 0 && n < 256 && system(buf) != 0)) {
+ // The command has not been completely written to the buffer or
+ // the command has not run successfully.
+ LOGERR("MPDCli::setVolume: " << m_onvolumechange << " failed "
+ << endl);
+ }
+ }
m_stat.volume = volume;
m_cachedvolume = volume;
return true;