--- a/examples/mc_tune.lua Sat Mar 28 19:43:12 2009 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,147 +0,0 @@
-
-local mpd = require 'mpd'
-local lm = require 'lm'
-local pubsub = require 'pubsub'
-
-local tune_enabled = false
-local mpd_pub_song = { }
-
-pubsub.handler ( 'http://jabber.org/protocol/tune',
- function ( from, node, data )
- local self = false
- if from == lm.connection.bless ( main.connection () ):jid():gsub ( '/.*', '' ) then -- o_O
- self = true
- mpd_pub_song = { }
- end
- local item = data:child ()
- local text = ''
- while item do
- local name = item:name ()
- local value = item:value ()
- if self then
- mpd_pub_song[name] = value or ''
- end
- text = ("%s\n- %s: %s"):format ( text, item:name (), item:value () or '' )
- item = item:next ()
- end
- if main.yesno ( main.option ( 'lua_pep_notification' ) ) then
- if text ~= '' then
- text = 'Now listening to:' .. text
- else
- text = 'Now not listening to anything'
- end
- end
- main.print_info ( from, text )
- return true
- end )
-
-local function mpd_getstatus ()
- local status = mpd.call_command { 'status' }
- if not tune_enabled or ( status.state ~= 'play' and status.state ~= 'pause' ) then
- for k, v in pairs ( mpd_pub_song ) do -- if there is anything published, publish nothing
- return { }
- end
- return nil
- end
-
- local song = mpd.call_command { 'currentsong' }
- local dir, file = song.file:match ( '(.+)/(.-)' )
- -- populate according to currentsong fields: artist - artist, length - time, source - album, title - title, track - id, rating - ?, uri - ?
- local ret = {
- artist = song.artist or 'Unknown',
- length = song.time,
- source = song.album or dir,
- title = song.title or file,
- track = song.id,
- }
-
- if not song.time or song.time == '0' then -- XXX
- ret.length = nil
- end
-
- local modified = false
- for k, v in pairs ( ret ) do
- if mpd_pub_song[k] ~= v then
- modified = true
- break
- end
- end
- if not modified then
- for k, v in pairs ( mpd_pub_song ) do
- if ret[k] ~= v then
- modified = true
- break
- end
- end
- end
-
- if modified then
- return ret
- else
- return nil
- end
-end
-
-local function mpd_callback ()
- local sdata = mpd_getstatus ()
- if sdata then
- tune.publish ( lm.connection.bless ( main.connection () ),
- function ()
- end,
- function ( mesg )
- print ( 'Error publishing tune: ' .. mesg )
- end, sdata )
- end
- if tune_enabled then
- return true
- else
- return false
- end
-end
-
--- do not call it too fast, or you end up with many daemons at once
-local function enable_tune ( yn )
- if yn == nil then
- yn = true
- end
- if yn then
- if not tune_enabled then
- main.timer ( 15, mpd_callback )
- tune_enabled = true
- -- update status
- end
- else
- if tune_enabled then
- tune_enabled = false
- -- update status
- end
- end
-end
-
-main.command ( 'tune',
- function ( args )
- local enable = main.yesno ( args )
- if enable == nil then
- if tune_enabled then
- print ( "Tune notifications enabled" )
- else
- print ( "Tune notifications disabled" )
- end
- else
- enable_tune ( enable )
- end
- end, false, 'yesno' )
-
-commands_help['tune'] = "[enable|disable|on|off|yes|no|true|false]\n\nEnables or disables publishing of notifications about playing music in your player (currently only mpd is supported)."
-
-hooks_d['hook-post-connect'].tune =
- function ( args )
- if tune_enabled then
- mpd_callback ()
- end
- end
-
-main.add_feature ( 'http://jabber.org/protocol/tune+notify' )
-main.add_feature ( 'http://jabber.org/protocol/tune' )
-
--- vim: se ts=4: --