X-Git-Url: https://git.rmz.io/dotfiles.git/blobdiff_plain/87d3fb525e841b5648e360a926d90c11d9a0a56b..a427a09b741cecbef21644e1b10c97bd9a074c02:/awesome/widgets/mpc.lua diff --git a/awesome/widgets/mpc.lua b/awesome/widgets/mpc.lua index 932a4a5..ef56c43 100644 --- a/awesome/widgets/mpc.lua +++ b/awesome/widgets/mpc.lua @@ -32,7 +32,7 @@ function mpc.new(host, port, password, error_handler, ...) _try_reconnect = false, _idle_subsystems = { ... } }, { __index = mpc }) - self:_connect() + self:connect() return self end @@ -46,13 +46,9 @@ end function mpc:_error(err) self._connected = false self._error_handler(err) - self._try_reconnect = not self._try_reconnect - if self._try_reconnect then - self:_connect() - end end -function mpc:_connect() +function mpc:connect() if self._connected then return end -- Reset all of our state self._reply_handlers = {} @@ -103,51 +99,52 @@ function mpc:_connect() if type(err) ~= "number" then self._output, self._input = nil, nil self:_error(err) - else - line = tostring(line) - if line == "OK" or line:match("^ACK ") then - local success = line == "OK" - local arg - if success then - arg = self._pending_reply - else - arg = { line } - end - local handler = self._reply_handlers[1] - table.remove(self._reply_handlers, 1) - self._pending_reply = {} - handler(success, arg) + return + end - if next(self._reply_handlers) == nil then - self:_start_idle() - end + line = tostring(line) + if line == "OK" or line:match("^ACK ") then + local success = line == "OK" + local arg + if success then + arg = self._pending_reply else - local _, _, key, value = string.find(line, "([^:]+):%s(.+)") - if key then - local k = string.lower(key) - if k == "binary" then - value = tonumber(value) - local data = {} - while value > 0 do - local b = assert(obj:read_bytes(value)) - table.insert(data, b.data) - value = value - #b - end - local w = obj:read_bytes(1) -- read newline at end of binary - self._pending_reply[k] = table.concat(data) - elseif k == "changed" then - if not self._pending_reply[k] then - self._pending_reply[k] = {} - end - - self._pending_reply[k][value] = true - else - self._pending_reply[k] = value + arg = { line } + end + local handler = self._reply_handlers[1] + table.remove(self._reply_handlers, 1) + self._pending_reply = {} + handler(success, arg) + + if next(self._reply_handlers) == nil then + self:_start_idle() + end + else + local _, _, key, value = string.find(line, "([^:]+):%s(.+)") + if key then + local k = string.lower(key) + if k == "binary" then + value = tonumber(value) + local data = {} + while value > 0 do + local b = assert(obj:read_bytes(value)) + table.insert(data, b.data) + value = value - #b + end + local w = obj:read_bytes(1) -- read newline at end of binary + self._pending_reply[k] = table.concat(data) + elseif k == "changed" then + if not self._pending_reply[k] then + self._pending_reply[k] = {} end + + self._pending_reply[k][value] = true + else + self._pending_reply[k] = value end end - do_read() end + do_read() end) end do_read() @@ -196,7 +193,7 @@ function mpc:_send(command, callback) end function mpc:send(...) - self:_connect() + self:connect() if not self._connected then return end @@ -219,6 +216,14 @@ function mpc:toggle_play() end) end +function mpc:play() + self:send("play") +end + +function mpc:pause() + self:send("pause") +end + function clamp(x, min, max) return math.min(math.max(x, min), max) end