aboutsummaryrefslogtreecommitdiffstats
path: root/fixery
diff options
context:
space:
mode:
Diffstat (limited to 'fixery')
-rw-r--r--fixery/awayproxy.pl22
-rw-r--r--fixery/now_playing_mpd.pl205
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);
+