diff options
-rwxr-xr-x | nopsyncd/qlistener.lua | 21 | ||||
-rwxr-xr-x | nopsyncd/tcpserver.lua | 10 | ||||
-rw-r--r-- | nopsyncd/tempstorage.lua | 27 |
3 files changed, 47 insertions, 11 deletions
diff --git a/nopsyncd/qlistener.lua b/nopsyncd/qlistener.lua index e5cd4ab..1e02df2 100755 --- a/nopsyncd/qlistener.lua +++ b/nopsyncd/qlistener.lua @@ -20,6 +20,7 @@ -- local queue_name = "/rhnop" +local last_cart = nil mq = require "luamq" tempstorage = require "tempstorage" @@ -30,9 +31,13 @@ function handle_now(timestamp, nowcart, nowlen) if results == nil then io.stderr:write("can't fetch cart info: " .. err .. "\n") else - -- TODO: insert into tempstorage - print(timestamp .. " Info: '" .. results.TITLE .. "' von '" .. results.ARTIST .. "' aus '" .. results.ALBUM .. "'") - pipe.signal() +-- print(timestamp .. " Info: '" .. results.TITLE .. "' von '" .. results.ARTIST .. "' aus '" .. results.ALBUM .. "'") + local ret, err = tempstorage:insertMusic(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() + end end end @@ -41,8 +46,11 @@ function handle_message(msg) if not timestamp or not nowcart or not nowlen or not nextcart or not nextlen then io.stderr:write("ignoring malformed message\n") else - -- TODO sanity checks: is now info new or just next? - handle_now(timestamp, nowcart, nowlen) + -- TODO better sanity checks: is now info new or just next? + if last_cart ~= nowcart then + last_cart = nowcart + handle_now(timestamp, nowcart, nowlen) + end -- TODO handle next info end end @@ -59,7 +67,8 @@ function main_loop() io.stderr:write("creation of tempstorage failed: " .. err .. "\n") os.exit(1) end - + last_cart = assert(tempstorage:getLastCart()) + local ret, err = rddb:init() if ret == nil then io.stderr:write("opening rivendell db failed: " .. err .. "\n") diff --git a/nopsyncd/tcpserver.lua b/nopsyncd/tcpserver.lua index 3f7c70a..d298eed 100755 --- a/nopsyncd/tcpserver.lua +++ b/nopsyncd/tcpserver.lua @@ -86,11 +86,11 @@ end function main_loop() local pipefd = pipe.getreadfd() - local ret, err = tempstorage:init() - if ret == nil then - io.stderr:write("creation of tempstorage failed: " .. err .. "\n") - os.exit(1) - end + -- local ret, err = tempstorage:init() + -- if ret == nil then + -- io.stderr:write("creation of tempstorage failed: " .. err .. "\n") + -- os.exit(1) + -- end server = init_server() diff --git a/nopsyncd/tempstorage.lua b/nopsyncd/tempstorage.lua index f034647..37f3422 100644 --- a/nopsyncd/tempstorage.lua +++ b/nopsyncd/tempstorage.lua @@ -49,6 +49,33 @@ function tempstorage:init() return true end +function tempstorage:getLastCart() + local cur, err = self.con:execute("SELECT cart from (SELECT cart,timestamp,MAX(timestamp) AS tsmax FROM now) where timestamp = tsmax") + if cur == nil then + return nil, err + end + + local cart = cur:fetch() + if cart == nil then cart = 0 end + return cart +end + +function tempstorage:insertMusic(timestamp, cart, len, title, artist, album) + cart = tonumber(cart) + if cart < 400000 or cart > 450000 then + poolnum = 0 + else + poolnum = math.floor(cart/1000) - 399 + end + -- TODO escape "' in strings" + local cur, err = self.con:execute("INSERT into now VALUES(" .. timestamp .. ", " .. cart .. ", " .. len .. ", 'Musikpool " .. poolnum .. "', '" .. title .. "', '" .. artist .."', '" .. album .. "', 1)") + if cur == nil then + return nil, err + end + + return true +end + function tempstorage:close() if self.con then self.con:close() |