summaryrefslogtreecommitdiff
path: root/contrib/eventcmd-examples
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/eventcmd-examples')
-rwxr-xr-xcontrib/eventcmd-examples/dmenu.pl47
-rwxr-xr-xcontrib/eventcmd-examples/eventcmd.sh38
-rwxr-xr-xcontrib/eventcmd-examples/rbot.rb50
-rwxr-xr-xcontrib/eventcmd-examples/scrobble.py69
4 files changed, 204 insertions, 0 deletions
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 <jcmuller@gmail.com>
+
+# 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 (<STDIN>)
+ {
+ 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 <matthewm@boedicker.org>
+
+# 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 <jon@jonpierce.com>
+
+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()
+