diff options
author | Christian Pointner <equinox@spreadspace.org> | 2015-05-02 19:29:38 (GMT) |
---|---|---|
committer | Christian Pointner <equinox@spreadspace.org> | 2015-05-02 19:29:38 (GMT) |
commit | cbce382e9cc06bb284f4d9f632e903bca6de0c67 (patch) | |
tree | 1c15435cfb430e48ad42687f9fe87e4bdae90aa9 /src/qlistener.lua | |
parent | 4242679dc99da37f7d2b926f8eb6d86f4a09722c (diff) |
moved to single directory
Diffstat (limited to 'src/qlistener.lua')
-rw-r--r-- | src/qlistener.lua | 109 |
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 |