77 lines
2.6 KiB
Perl
77 lines
2.6 KiB
Perl
# TTYverse Sound Pack Extension
|
|
# Adapted from the original TTYtter soundpack by Storm Dragon: https://stormux.org/
|
|
# Support Storm Dragon's work: https://patreon.com/stormux
|
|
# Published under the Floodgap Free Software License: http://www.floodgap.com/software/ffsl/
|
|
|
|
# Plays sounds for different fediverse activities:
|
|
# Core: default, mention, dm, me
|
|
# Fediverse: follow, boost, favourite, poll, announcement
|
|
#
|
|
# Configure in RC file with:
|
|
# extpref_sound_command=paplay # Sound command (paplay, play, ogg123, etc.)
|
|
# extpref_soundpack=default # Sound pack name
|
|
# notifytype=soundpack # Enable sound notifications
|
|
# notifies=default,mention,dm,me,follow,boost,favourite
|
|
|
|
sub notifier_soundpack {
|
|
my $class = shift;
|
|
my $text = shift;
|
|
my $ref = shift;
|
|
|
|
# Debug output
|
|
print $stdout "-- DEBUG: soundpack notifier called with class='$class'\n" if (defined($class) && $verbose);
|
|
|
|
# Determine sound command (default to paplay for modern Linux)
|
|
my $sound_command;
|
|
if (!$extpref_sound_command) {
|
|
$sound_command = "paplay"; # Modern default for PulseAudio
|
|
} else {
|
|
$sound_command = $extpref_sound_command;
|
|
}
|
|
|
|
# Determine sound pack name
|
|
my $sound_pack;
|
|
if (!$extpref_soundpack) {
|
|
$sound_pack = "default";
|
|
} else {
|
|
$sound_pack = $extpref_soundpack;
|
|
}
|
|
|
|
# Skip if silent mode enabled
|
|
return 1 if ($silent);
|
|
|
|
if (!defined($class)) {
|
|
# Initialize - show loaded message
|
|
print $stdout "-- TTYverse sound pack loaded: $sound_pack\n";
|
|
print $stdout "-- Supported sounds: default, mention, dm, me, follow, boost, favourite, poll, announcement\n" if (!$silent);
|
|
return 1;
|
|
}
|
|
|
|
# Build sound file path using XDG data directory
|
|
my $data_dir = "$ENV{'HOME'}/.local/share/ttyverse";
|
|
my $sound_file = "$data_dir/sounds/$sound_pack/" . lc($class) . ".ogg";
|
|
|
|
if (!-f $sound_file) {
|
|
# Only warn once per session per class
|
|
my $warn_key = "warned_missing_sound_$class";
|
|
if (!$store->{$warn_key}) {
|
|
print $stdout "-- Warning: Sound file '$class.ogg' not found in pack '$sound_pack'\n";
|
|
print $stdout "-- Place sound files in $data_dir/sounds/$sound_pack/\n";
|
|
$store->{$warn_key} = 1;
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
# Play the sound in background (suppress output)
|
|
print $stdout "-- DEBUG: Playing sound: $sound_command \"$sound_file\"\n" if ($verbose);
|
|
system("$sound_command \"$sound_file\" >/dev/null 2>&1 &");
|
|
|
|
return 1;
|
|
}
|
|
|
|
# Mark extension as successfully loaded
|
|
$store->{'loaded'} = 1;
|
|
|
|
# Extension loaded successfully
|
|
1;
|