diff options
Diffstat (limited to 'fixery')
-rw-r--r-- | fixery/awayproxy.pl | 22 | ||||
-rw-r--r-- | fixery/now_playing_mpd.pl | 205 |
2 files changed, 222 insertions, 5 deletions
diff --git a/fixery/awayproxy.pl b/fixery/awayproxy.pl index b60eff4..d0b33dd 100644 --- a/fixery/awayproxy.pl +++ b/fixery/awayproxy.pl @@ -9,7 +9,7 @@ ## Other hand if you dont use irssi-proxy you still have a good reason to ## use this if you want to forward messages that come to you while ## you are away to email box. -## This is usefull for forwarding messages to an SMS-gateway ;) +## This is useful for forwarding messages to an SMS-gateway ;) ## ## btw.. if you find any bugs or have any ideas for development of this ## script dont hesitate to send msg to BCOW@IrcNET @@ -311,7 +311,19 @@ sub msg_pri { } } -Irssi::signal_add_last('proxy client connected', \&client_connect); -Irssi::signal_add_last('proxy client disconnected', \&client_disconnect); -Irssi::signal_add_last('message public', \&msg_pub); -Irssi::signal_add_last('message private', \&msg_pri); +sub init { + + Irssi::settings_add_string('awayproxy', 'awayproxy_send_mode', MODE_EMAIL); + + Irssi::signal_add_last('proxy client connected', \&sig_client_connect); + Irssi::signal_add_last('proxy client disconnected', \&sig_client_disconnect); + Irssi::signal_add_last('message public', \&sig_msg_public); + Irssi::signal_add_last('message private', \&sig_msg_private); + Irssi::signal_add('setup changed', \&sig_setup_changed); + + sig_setup_changed(); +} + +sub sig_setup_changed { + # load values from settings. +} diff --git a/fixery/now_playing_mpd.pl b/fixery/now_playing_mpd.pl new file mode 100644 index 0000000..c80a7c3 --- /dev/null +++ b/fixery/now_playing_mpd.pl @@ -0,0 +1,205 @@ +# MPD Now-Playing Script for irssi +# Copyright (C) 2005 Erik Scharwaechter +# <diozaka@gmx.de> +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 2 +# as published by the Free Software Foundation. +# +# This program 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. +# +# The full version of the license can be found at +# http://www.gnu.org/copyleft/gpl.html. +# +# +####################################################################### +# I'd like to thank Bumby <bumby@evilninja.org> for his impc script, # +# which helped me a lot with making this script. # +####################################################################### +# Type "/np help" for a help page! # +####################################################################### +# TODO: # +# - add more format directives # +####################################################################### +# CHANGELOG: # +# 0.4: First official release # +####################################################################### + +use strict; +#use IO::Socket; +use Irssi; +use IrssiX::Async qw(fork_off); +use Audio::MPD; +#use Storable; +use JSON::Any; +use Data::Dumper; + +our $VERSION = "0.5"; +our %IRSSI = ( + name => 'mpd', + authors => 'Erik Scharwaechter', + contact => 'diozaka@gmx.de', + license => 'GPLv2', + description => 'print the song you are listening to', + ); + +sub _to_json { + my $data = shift; + # add terminal newline to ensure flushing without having to mess + # with autoflush on all pipes. + return JSON::Any->new->objToJson($data) . "\n"; +} + +sub _from_json { + my $json = shift; + return JSON::Any->new->jsonToObj($json); +} + +sub _freeze_witem { + my ($witem) = @_; + my $win_item_ref; + + if (defined $witem) { + $win_item_ref = { server_tag => $witem->window->{servertag}, + win_refnum => $witem->window->{refnum}, + item_name => $witem->{name} }; + + } else { + # make this more better (find status window) + $win_item_ref = { server_tag => undef, + win_refnum => 1, + item_name => '' }; + + } + + return $win_item_ref; +} + +sub _thaw_witem { + my ($frozen_witem) = @_; + + my $witem; + my ($server_tag, $win_refnum, $witem_name) + = map { $frozen_witem->{$_} } qw/server_tag win_refnum item_name/; + + my $server = Irssi::server_find_tag($server_tag); + my $win = Irssi::window_find_refnum($win_refnum); + + if ($win) { + $witem = $win->item_find($server, $witem_name); + } else { + Irssi::print("Failed to find window item from params: tag: $server_tag, " + . "refnum: $win_refnum, item_name: $witem_name"); + } + return $witem; +} + +sub cmd_now_playing { + my ($data, $server, $witem) = @_; + + if($data =~ /^help/i){ + cmd_now_playing_help(); + return; + } + + my $host = Irssi::settings_get_str('mpd_port') || 'localhost'; + my $port = Irssi::settings_get_str('mpd_host') || 6060; + my $pass = Irssi::settings_get_str('mpd_pass') || ''; + my $timeout = Irssi::settings_get_str('mpd_timeout') || 5; + + + my $mpd_options = { win => _freeze_witem($witem), + host => $host, + port => $port, + password => $pass }; + + my $json_data = _to_json($mpd_options); + fork_off($json_data, \&now_playing_request, \&now_playing_callback); +} + +sub now_playing_request { + my (@input) = <STDIN>; + my $json_data = join('', @input); + + my $data = _from_json($json_data); + #my $win = delete $data->{win}; + +# my $mpd = Audio::MPD->new(%options); + +# my $am_playing = $mpd->current->as_string; +# my %x; +# if (defined $am_playing) { + # %x = ( result => $am_playing, win => $win ); + + # } else { + # %x = ( result => '__ERROR__', win => $win ); + # } + # my %x = (result => "foo", win => undef); + # my $r = Storable::freeze(\%x); + #print $r; + + my $response = { status => 1, + message => "Foo", + win => $data->{win}, + }; + + my $json_data = _to_json($response); + print $json_data; +} + +sub now_playing_callback { + my ($json_data) = @_; + #chomp $result; + #my $data = Storable::thaw($frozen_data); + my $data = _from_json($json_data); + print "received data: " . Dumper($data); + my $witem = _thaw_witem($data->{win}); + print "Witem: " . Dumper($witem); + if ($witem) { + $witem->print("Moo!"); + } + # unless ($deserialised->{result} eq "__ERROR__") { + # my $output_message = "/me is playing: " . $deserialised->{result}; + # my $witem = $deserialised->{win}; + + # if ($witem && ($witem->{type} eq "CHANNEL" || + # $witem->{type} eq "QUERY")) { + # #$witem->command($output_message); + # $witem->print("Printing: $output_message"); + # } + # } else { + # print "Now Playing MPD: Unable to do thingie (Got ERROR from child)"; + # } + +} + +sub cmd_now_playing_help { + print ' + MPD Now-Playing Script +======================== + +by Erik Scharwaechter (diozaka@gmx.de) + +Variables: + mpd_host (137.224.241.20) + mpd_port (6600) + mpd_timeout (5) + +Usage: + /np Print the song you are listening to + /np help Print this text +'; +} + + +Irssi::settings_add_str('mpd', 'mpd_host', '137.224.241.20'); +Irssi::settings_add_str('mpd', 'mpd_port', '6600'); +Irssi::settings_add_str('mpd', 'mpd_timeout', '5'); +Irssi::settings_add_str('mpd', 'mpd_pass', ''); + +Irssi::command_bind('np' => \&cmd_now_playing); +Irssi::command_bind('np help' => \&cmd_now_playing_help); + |