]> jfr.im git - irssi-scripts.git/blobdiff - listenbrainz.pl
no autorun smshilight
[irssi-scripts.git] / listenbrainz.pl
index c697fe3322fd1449acbd41af7546f2fed1a375f5..a959026096082f973004eaab2b6dd1396be16d09 100644 (file)
@@ -21,38 +21,50 @@ use JSON qw/decode_json/;
 use LWP::UserAgent;
 my $ua = LWP::UserAgent->new;
 
-$VERSION = "2.0";
+$VERSION = "2.1";
 $ua->agent("irssi+listenbrainz.pl/$VERSION ");
 %IRSSI = (
        authors     => "John Runyon",
        name        => "listenbrainz",
        description => "A now-playing-script which uses ListenBrainz",
        license     => 'CC0',
-       url         => 'https://github.com/zonidjan/irssi-scripts',
-       contact     => 'https://github.com/zonidjan/irssi-scripts/issues'
+       url         => 'https://jfr.im/git/',
+       contact     => 'git@jfr.im'
 );
 
 sub cmd_listenbrainz {
        my ($username, $server, $witem) = @_;
-       if (!length $username) {
+       unless (length $username) {
                $username = Irssi::settings_get_str('listenbrainz_username');
        }
-       if (!length $username) {
+       unless (length $username) {
                Irssi::print('%R>>%n '.$IRSSI{name}.': No username specified.');
                return;
        }
 
+       unless (defined $witem) {
+               Irssi::print("Irssi says you're not in an active window!");
+               return;
+       }
+
        my $url = "https://api.listenbrainz.org/1/user/" . uri_escape($username) . "/playing-now";
        my $req = HTTP::Request->new('GET', $url);
 
        my $res = $ua->request($req);
        if ($res->is_success) {
                my $data = decode_json($res->content);
+               unless (scalar @{ $data->{payload}{listens} }) {
+                       $witem->print("ListenBrainz says you're not listening to anything!");
+                       return;
+               }
                my %track = %{ $data->{payload}{listens}[0]{track_metadata} };
-               my $s = sprintf(Irssi::settings_get_str('listenbrainz_format'), $username, $track{track_name}, $track{artist_name}, $track{release_name}, $track{additional_info}{listening_from});
+               my $s = sprintf(Irssi::settings_get_str('listenbrainz_format'), $username, $track{track_name}, $track{artist_name}, $track{release_name}, $track{additional_info}{media_player} // $track{additional_info}{listening_from});
+               if (Irssi::settings_get_bool('listenbrainz_append_link') && defined $track{mbid_mapping}{recording_mbid}) {
+                       $s .= ' https://musicbrainz.org/recording/' . $track{mbid_mapping}{recording_mbid};
+               }
                $witem->command("say $s");
        } else {
-               print "ListenBrainz request Failed!";
+               $witem->print("ListenBrainz request Failed!");
                if (Irssi::settings_get_bool('listenbrainz_debug')) {
                        print $req->url;
                        print $req->content;
@@ -73,6 +85,7 @@ Irssi::settings_add_bool('listenbrainz', 'listenbrainz_alias_np', 1);        # S
 Irssi::settings_add_str('listenbrainz', 'listenbrainz_username', '');        # Default username when none is supplied
 # Output format - 1: username, 2: track, 3: artist, 4: album, 5: player
 Irssi::settings_add_str('listenbrainz', 'listenbrainz_format', '%1$s playing %2$s by %3$s (%4$s) (from %5$s)');
+Irssi::settings_add_bool('listenbrainz', 'listenbrainz_append_link', 1);
 
 Irssi::command_bind('listenbrainz', 'cmd_listenbrainz', 'listenbrainz');
 Irssi::command_bind('np', 'cmd_np', 'listenbrainz');