summaryrefslogtreecommitdiff
path: root/src/qlistener.lua
diff options
context:
space:
mode:
authorChristian Pointner <equinox@spreadspace.org>2015-05-02 19:29:38 (GMT)
committerChristian Pointner <equinox@spreadspace.org>2015-05-02 19:29:38 (GMT)
commitcbce382e9cc06bb284f4d9f632e903bca6de0c67 (patch)
tree1c15435cfb430e48ad42687f9fe87e4bdae90aa9 /src/qlistener.lua
parent4242679dc99da37f7d2b926f8eb6d86f4a09722c (diff)
moved to single directory
Diffstat (limited to 'src/qlistener.lua')
-rw-r--r--src/qlistener.lua109
1 files changed, 109 insertions, 0 deletions
diff --git a/src/qlistener.lua b/src/qlistener.lua
new file mode 100644
index 0000000..e3b774b
--- /dev/null
+++ b/src/qlistener.lua
@@ -0,0 +1,109 @@
+--
+-- rhnop
+--
+-- Copyright (C) 2011-2015 Christian Pointner <equinox@helsinki.at>
+--
+-- This file is part of rhnop.
+--
+-- rhnop is free software: you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation, either version 3 of the License, or
+-- any later version.
+--
+-- rhnop is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with rhnop. If not, see <http://www.gnu.org/licenses/>.
+--
+
+local last_cart = nil
+
+require "posix"
+mq = require "mq"
+
+package.path = package.path .. ";" .. rhnoplibdir .. "/?.lua"
+playlog = require "playlog"
+rddb = require "rddb"
+
+conffile = "nopsyncd.conf"
+conf = require "conf"
+if conf.music_carts_lo == nil then
+ conf.music_carts_lo = 400000
+end
+if conf.music_carts_hi == nil then
+ conf.music_carts_hi = 499999
+end
+conf.music_carts_lo = tonumber(conf.music_carts_lo)
+conf.music_carts_hi = tonumber(conf.music_carts_hi)
+
+
+function handle_now(timestamp, nowcart, nowlen)
+ local results, err = rddb:getCartInfo(nowcart);
+ if results == nil then
+ io.stderr:write("can't fetch cart info: " .. err .. "\n")
+-- TODO: this error shouldn't be ignored!!!!
+ else
+-- print(timestamp .. " Info: '" .. results.TITLE .. "' von '" .. results.ARTIST .. "' aus '" .. results.ALBUM .. "'")
+ local ret, err = playlog:insertNowMusic(timestamp, nowcart, nowlen, results.TITLE, results.ARTIST, results.ALBUM)
+ if ret == nil then
+ io.stderr:write("can't insert music info: " .. err .. "\n")
+ else
+ pipe.signal(timestamp)
+ end
+ end
+end
+
+function handle_message(msg)
+ local timestamp, nowcart, nowlen, nextcart, nextlen = string.match(msg, "^(%d+) (%d+) (%d+) (%d+) (%d+)$");
+ if not timestamp or not nowcart or not nowlen or not nextcart or not nextlen then
+ io.stderr:write("ignoring malformed message\n")
+ else
+ nowcart = tonumber(nowcart)
+ nowlen = tonumber(nowlen)
+ if last_cart ~= nowcart and nowcart >= conf.music_carts_lo and nowcart <= conf.music_carts_hi and nowlen > 0 then
+ last_cart = nowcart
+ handle_now(timestamp, nowcart, nowlen)
+ end
+ -- TODO handle next info
+ end
+end
+
+function main_loop()
+ posix.umask("rwxrwxr-x")
+ local q, err = mq.create(conf.queue_name, "ro", "rw-rw----")
+ if q == nil then
+ q, err = mq.open(conf.queue_name, "wo")
+ if q == nil then
+ io.stderr:write("creation of message queue failed: " .. err .. "\n")
+ os.exit(1)
+ end
+ end
+
+ local ret, err = playlog:init()
+ if ret == nil then
+ io.stderr:write("creation of playlog failed: " .. err .. "\n")
+ os.exit(1)
+ end
+ last_cart = assert(playlog:getLastCart())
+
+ local ret, err = rddb:init()
+ if ret == nil then
+ io.stderr:write("opening rivendell db failed: " .. err .. "\n")
+ playlog:close()
+ os.exit(1)
+ end
+
+ while true do
+ local msg, prio = mq.receive(q)
+ if msg == nil then
+ io.stderr:write("recv error: " .. prio .. "\n")
+ rddb:close()
+ playlog:close()
+ os.exit(2)
+ end
+ handle_message(msg)
+ end
+end