From 82df41d64401dca57bc5cd0c71f374118ee47d1a Mon Sep 17 00:00:00 2001 From: Samir Benmendil Date: Mon, 18 Jan 2021 23:35:28 +0000 Subject: [PATCH] awesome/mpc: return early on error --- awesome/widgets/mpc.lua | 79 +++++++++++++++++++++-------------------- 1 file changed, 40 insertions(+), 39 deletions(-) diff --git a/awesome/widgets/mpc.lua b/awesome/widgets/mpc.lua index 932a4a5..bd64fa8 100644 --- a/awesome/widgets/mpc.lua +++ b/awesome/widgets/mpc.lua @@ -103,51 +103,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() -- 2.48.1