#!/usr/bin/perl # listen for incoming calls $dbus_mon_cmd = "/usr/bin/dbus-monitor " . "--system \"type='signal',path=" . "'/com/nokia/csd/call',interface='com.nokia.csd.Call'\""; # map incoming numbers to ringtones %tones = ( # gf number '077XXXXXX' => '/home/user/MyDocs/.sounds/harp.wav', # boss's number '01XXXXXXX' => '/home/user/MyDocs/.sounds/parp.wav', 'default' => '/home/user/MyDocs/.sounds/mystery.wav', ); # play a file in media player via dbus. sub pf($) { ($f) = @_; $pf_cmd = "dbus-send --print-reply " . "--dest=com.nokia.mediaplayer " . "/com/nokia/mediaplayer com.nokia.mediaplayer" . ".mime_open string:\"file:///$f\""; system("$pf_cmd &"); } # start listening on dbus open(DBUS, "$dbus_mon_cmd|") or die "couldn't read output from dbus-monitor: $!"; $debug=0; while(<DBUS>) { print if($debug); # find the incoming number. if(/string\s"(\d*)"/) { $num = $1; print "$num is calling..\n"; if($num =~ /^\d+$/ and ($tones{$num})) { # play corresponding tone pf($tones{$num}); } else { pf($tones{'default'}); } } }