From 0a76b7239781e6e0cb77169302219e6566b6c4d3 Mon Sep 17 00:00:00 2001 From: Lars-Dominik Braun Date: Sun, 30 Jan 2011 11:12:00 +0100 Subject: Move example eventcmd scripts to own directory --- contrib/change-station-dmenu.sh | 2 +- contrib/eventcmd-examples/dmenu.pl | 47 ++++++++++++++++++++++++ contrib/eventcmd-examples/eventcmd.sh | 38 +++++++++++++++++++ contrib/eventcmd-examples/rbot.rb | 50 +++++++++++++++++++++++++ contrib/eventcmd-examples/scrobble.py | 69 +++++++++++++++++++++++++++++++++++ contrib/eventcmd.pl | 47 ------------------------ contrib/eventcmd.rb | 50 ------------------------- contrib/eventcmd.sh | 38 ------------------- contrib/scrobble.py | 69 ----------------------------------- 9 files changed, 205 insertions(+), 205 deletions(-) create mode 100755 contrib/eventcmd-examples/dmenu.pl create mode 100755 contrib/eventcmd-examples/eventcmd.sh create mode 100755 contrib/eventcmd-examples/rbot.rb create mode 100755 contrib/eventcmd-examples/scrobble.py delete mode 100755 contrib/eventcmd.pl delete mode 100755 contrib/eventcmd.rb delete mode 100755 contrib/eventcmd.sh delete mode 100755 contrib/scrobble.py diff --git a/contrib/change-station-dmenu.sh b/contrib/change-station-dmenu.sh index 30c3782..1409b98 100755 --- a/contrib/change-station-dmenu.sh +++ b/contrib/change-station-dmenu.sh @@ -21,7 +21,7 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -# Use contrib/eventcmd.pl to capture station names +# Use contrib/eventcmd-examples/dmenu.pl to capture station names STATION=$(cat /tmp/pianobar_stations | \ dmenu -nf '#888888' -nb '#222222' -sf '#ffffff' -i \ diff --git a/contrib/eventcmd-examples/dmenu.pl b/contrib/eventcmd-examples/dmenu.pl new file mode 100755 index 0000000..194e1a7 --- /dev/null +++ b/contrib/eventcmd-examples/dmenu.pl @@ -0,0 +1,47 @@ +#!/usr/bin/perl + +# Copyright (c) 2011 +# Juan C. Muller + +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: + +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. + +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +use strict; +use warnings; + +# Use this script to be able to use change-station-dmenu.sh as +# event_command = $HOME/.config/pianobar/dmenu.pl + +# (taken from https://github.com/jcmuller/pianobar-notify) + +if (my $action = shift @ARGV) +{ + if ($action eq 'songstart') + { + my $stations = '/tmp/pianobar_stations'; + open(my $fh, ">$stations") or die "Couldn't open $stations for writing: $!"; + + while () + { + print $fh "$1. $2\n" if (/station(\d+)=(.+)$/); + } + + close($fh); + } +} + diff --git a/contrib/eventcmd-examples/eventcmd.sh b/contrib/eventcmd-examples/eventcmd.sh new file mode 100755 index 0000000..81dee3a --- /dev/null +++ b/contrib/eventcmd-examples/eventcmd.sh @@ -0,0 +1,38 @@ +#!/bin/bash + +# create variables +while read L; do + k="`echo "$L" | cut -d '=' -f 1`" + v="`echo "$L" | cut -d '=' -f 2`" + export "$k=$v" +done < <(grep -e '^\(title\|artist\|album\|stationName\|pRet\|pRetStr\|wRet\|wRetStr\|songDuration\|songPlayed\|rating\|coverArt\|stationCount\|station[0-9]*\)=' /dev/stdin) # don't overwrite $1... + +case "$1" in +# songstart) +# echo 'naughty.notify({title = "pianobar", text = "Now playing: ' "$title" ' by ' "$artist" '"})' | awesome-client - +# echo "$title -- $artist" > $HOME/.config/pianobar/nowplaying +# # or whatever you like... +# ;; + +# songfinish) +# # scrobble if 75% of song have been played, but only if the song hasn't +# # been banned +# if [ -n "$songDuration" ] && +# [ $(echo "scale=4; ($songPlayed/$songDuration*100)>50" | bc) -eq 1 ] && +# [ "$rating" -ne 2 ]; then +# # scrobbler-helper is part of the Audio::Scrobble package at cpan +# # "pia" is the last.fm client identifier of "pianobar", don't use +# # it for anything else, please +# scrobbler-helper -P pia -V 1.0 "$title" "$artist" "$album" "" "" "" "$((songDuration/1000))" & +# fi +# ;; + + *) + if [ "$pRet" -ne 1 ]; then + echo "naughty.notify({title = \"pianobar\", text = \"$1 failed: $pRetStr\"})" | awesome-client - + elif [ "$wRet" -ne 1 ]; then + echo "naughty.notify({title = \"pianobar\", text = \"$1 failed: Network error: $wRetStr\"})" | awesome-client - + fi + ;; +esac + diff --git a/contrib/eventcmd-examples/rbot.rb b/contrib/eventcmd-examples/rbot.rb new file mode 100755 index 0000000..abdac05 --- /dev/null +++ b/contrib/eventcmd-examples/rbot.rb @@ -0,0 +1,50 @@ +#!/usr/bin/ruby + +# pianobar event script to make rbot send currently playing song to an IRC +# channel + +# Copyright (c) 2010 +# Matthew M. Boedicker + +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: + +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. + +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +# for setting up rbot-remote see rbot/bin/rbot-remote + +# add this script to ~/.config/pianobar/config by adding +# event_command = /home/user/.config/pianobar/rbot.rb + +# make sure these are quoted correctly for popen +rbot_remote = '/home/user/src/rbot/bin/rbot-remote' +rbot_user = 'remote' +rbot_password = 'secret' +channel = '#current' + +event = ARGV.first + +if event == 'songstart' + d = {} + + STDIN.each_line { |line| d.store(*line.chomp.split('=', 2)) } + + IO.popen("#{rbot_remote} -u #{rbot_user} -p #{rbot_password} -d '#{channel}'", + 'w') do |p| + p.write("now playing \"#{d['title']}\" by \"#{d['artist']}\"") + end + +end diff --git a/contrib/eventcmd-examples/scrobble.py b/contrib/eventcmd-examples/scrobble.py new file mode 100755 index 0000000..51e19c2 --- /dev/null +++ b/contrib/eventcmd-examples/scrobble.py @@ -0,0 +1,69 @@ +#!/usr/bin/env python + +""" +Last.fm scrobbling for Pianobar, the command-line Pandora client. + +Copyright (c) 2011 +Jon Pierce + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +Dependencies: +1) https://github.com/PromyLOPh/pianobar/ +2) http://python.org/ +3) http://code.google.com/p/pylast/ +4) http://www.last.fm/api/account + +Installation: +1) Copy this script and pylast.py to the Pianobar config directory, ~/.config/pianobar/, and make sure this script is executable +2) Supply your own Last.fm credentials below +3) Update Pianobar's config file to use this script as its event_command +""" + +import sys +import time + +API_KEY = "################################" +API_SECRET = "################################" +USERNAME = "########" +PASSWORD = "########" +THRESHOLD = 50 # the percentage of the song that must have been played to scrobble + +def main(): + + event = sys.argv[1] + lines = sys.stdin.readlines() + fields = dict([line.strip().split("=", 1) for line in lines]) + + # fields: title, artist, album, songDuration, songPlayed, rating, stationName, pRet, pRetStr, wRet, wRetStr + artist = fields["artist"] + title = fields["title"] + song_duration = int(fields["songDuration"]) + song_played = int(fields["songPlayed"]) + + # events: songstart, songfinish, ??? + if event == "songfinish" and 100.0 * song_played / song_duration > THRESHOLD: + song_started = int(time.time() - song_played / 1000.0) + import pylast + network = pylast.LastFMNetwork(api_key = API_KEY, api_secret = API_SECRET, username = USERNAME, password_hash = pylast.md5(PASSWORD)) + network.scrobble(artist = artist, title = title, timestamp = song_started) + +if __name__ == "__main__": + main() + diff --git a/contrib/eventcmd.pl b/contrib/eventcmd.pl deleted file mode 100755 index eca2487..0000000 --- a/contrib/eventcmd.pl +++ /dev/null @@ -1,47 +0,0 @@ -#!/usr/bin/perl - -# Copyright (c) 2011 -# Juan C. Muller - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. - -use strict; -use warnings; - -# Use this script to be able to use change-station-dmenu.sh as -# event_command = $HOME/.config/pianobar/eventcmd.pl - -# (taken from https://github.com/jcmuller/pianobar-notify) - -if (my $action = shift @ARGV) -{ - if ($action eq 'songstart') - { - my $stations = '/tmp/pianobar_stations'; - open(my $fh, ">$stations") or die "Couldn't open $stations for writing: $!"; - - while () - { - print $fh "$1. $2\n" if (/station(\d+)=(.+)$/); - } - - close($fh); - } -} - diff --git a/contrib/eventcmd.rb b/contrib/eventcmd.rb deleted file mode 100755 index e9bbe67..0000000 --- a/contrib/eventcmd.rb +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/ruby - -# pianobar event script to make rbot send currently playing song to an IRC -# channel - -# Copyright (c) 2010 -# Matthew M. Boedicker - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. - -# for setting up rbot-remote see rbot/bin/rbot-remote - -# add this script to ~/.config/pianobar/config by adding -# event_command = /home/user/.config/pianobar/eventcmd.rb - -# make sure these are quoted correctly for popen -rbot_remote = '/home/user/src/rbot/bin/rbot-remote' -rbot_user = 'remote' -rbot_password = 'secret' -channel = '#current' - -event = ARGV.first - -if event == 'songstart' - d = {} - - STDIN.each_line { |line| d.store(*line.chomp.split('=', 2)) } - - IO.popen("#{rbot_remote} -u #{rbot_user} -p #{rbot_password} -d '#{channel}'", - 'w') do |p| - p.write("now playing \"#{d['title']}\" by \"#{d['artist']}\"") - end - -end diff --git a/contrib/eventcmd.sh b/contrib/eventcmd.sh deleted file mode 100755 index 81dee3a..0000000 --- a/contrib/eventcmd.sh +++ /dev/null @@ -1,38 +0,0 @@ -#!/bin/bash - -# create variables -while read L; do - k="`echo "$L" | cut -d '=' -f 1`" - v="`echo "$L" | cut -d '=' -f 2`" - export "$k=$v" -done < <(grep -e '^\(title\|artist\|album\|stationName\|pRet\|pRetStr\|wRet\|wRetStr\|songDuration\|songPlayed\|rating\|coverArt\|stationCount\|station[0-9]*\)=' /dev/stdin) # don't overwrite $1... - -case "$1" in -# songstart) -# echo 'naughty.notify({title = "pianobar", text = "Now playing: ' "$title" ' by ' "$artist" '"})' | awesome-client - -# echo "$title -- $artist" > $HOME/.config/pianobar/nowplaying -# # or whatever you like... -# ;; - -# songfinish) -# # scrobble if 75% of song have been played, but only if the song hasn't -# # been banned -# if [ -n "$songDuration" ] && -# [ $(echo "scale=4; ($songPlayed/$songDuration*100)>50" | bc) -eq 1 ] && -# [ "$rating" -ne 2 ]; then -# # scrobbler-helper is part of the Audio::Scrobble package at cpan -# # "pia" is the last.fm client identifier of "pianobar", don't use -# # it for anything else, please -# scrobbler-helper -P pia -V 1.0 "$title" "$artist" "$album" "" "" "" "$((songDuration/1000))" & -# fi -# ;; - - *) - if [ "$pRet" -ne 1 ]; then - echo "naughty.notify({title = \"pianobar\", text = \"$1 failed: $pRetStr\"})" | awesome-client - - elif [ "$wRet" -ne 1 ]; then - echo "naughty.notify({title = \"pianobar\", text = \"$1 failed: Network error: $wRetStr\"})" | awesome-client - - fi - ;; -esac - diff --git a/contrib/scrobble.py b/contrib/scrobble.py deleted file mode 100755 index 51e19c2..0000000 --- a/contrib/scrobble.py +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env python - -""" -Last.fm scrobbling for Pianobar, the command-line Pandora client. - -Copyright (c) 2011 -Jon Pierce - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -Dependencies: -1) https://github.com/PromyLOPh/pianobar/ -2) http://python.org/ -3) http://code.google.com/p/pylast/ -4) http://www.last.fm/api/account - -Installation: -1) Copy this script and pylast.py to the Pianobar config directory, ~/.config/pianobar/, and make sure this script is executable -2) Supply your own Last.fm credentials below -3) Update Pianobar's config file to use this script as its event_command -""" - -import sys -import time - -API_KEY = "################################" -API_SECRET = "################################" -USERNAME = "########" -PASSWORD = "########" -THRESHOLD = 50 # the percentage of the song that must have been played to scrobble - -def main(): - - event = sys.argv[1] - lines = sys.stdin.readlines() - fields = dict([line.strip().split("=", 1) for line in lines]) - - # fields: title, artist, album, songDuration, songPlayed, rating, stationName, pRet, pRetStr, wRet, wRetStr - artist = fields["artist"] - title = fields["title"] - song_duration = int(fields["songDuration"]) - song_played = int(fields["songPlayed"]) - - # events: songstart, songfinish, ??? - if event == "songfinish" and 100.0 * song_played / song_duration > THRESHOLD: - song_started = int(time.time() - song_played / 1000.0) - import pylast - network = pylast.LastFMNetwork(api_key = API_KEY, api_secret = API_SECRET, username = USERNAME, password_hash = pylast.md5(PASSWORD)) - network.scrobble(artist = artist, title = title, timestamp = song_started) - -if __name__ == "__main__": - main() - -- cgit v1.2.3