# only print to terminal. override this in a subclass for something
# more useful.
my ($self, $string) = @_;
- print "-> $string\n";
+ print "Notify <- $string\n";
+ if ( $string =~ m{CHATMESSAGE (\d+) STATUS RECEIVED} ) {
+ my $id = $1;
+ my $body = $self->Invoke("GET CHATMESSAGE $id BODY");
+ print "# $body\n";
+ my $chat = $self->Invoke("GET CHATMESSAGE $id CHATNAME");
+ my $o = $self->Invoke($body);
+ print "# $o\n";
+ $self->Invoke("CHATMESSAGE $chat $o");
+ }
+
# be careful with what you return here! DBus will try to serialize it,
# returning it to skype. you should explicitely return something
# simple to avoid to leak something unserializable, causing odd errors.
# this doesn't print $string, so that subclasses can call it without
# that side effect. subclass it yourself if you want it to do that.
my ($self, $string) = @_;
- return $self->{invoker}->Invoke($string);
+ print "Invoke -> $string\n";
+ my $response = $self->{invoker}->Invoke($string);
+ print "Invoke <- $response\n";
+ if ( $string =~ s/^get //i ) {
+ $response =~ s/^\Q$string\E *//;
+ }
+ return $response;
}
package Example; # ------------------------------------------------------------
# away mode is no good! let's be not available
$self->Invoke('SET USERSTATUS NA');
}
+
+ if ( $string =~ m{CALL (\d+) STATUS RINGING} ) {
+ $self->Invoke("ALTER CALL $1 ANSWER");
+ } elsif ( $string =~ m{CALL (\d+) STATUS INPROGRESS} ) {
+ my $call_id = $1;
+ my $port = 5000 + $call_id;
+
+ my $gst = qq{
+ gst-launch -v
+ tcpserversrc port=$port !
+ "audio/x-raw-int,rate=16000,width=16,channels=1" !
+ wavenc !
+ filesink location=/tmp/$port.wav
+ };
+ $gst =~ s{[\s\n\r]+}{ }gs;
+
+ warn "# $gst\n";
+ open(my $g, '-|', $gst) || die $!;
+ while(<$g>) {
+ warn "## $_";
+ last if m/PREROLL/;
+ }
+
+ $self->Invoke(qq|ALTER CALL $call_id set_output port="$port"|);
+ } elsif ( $string =~ m{CALL (\d+) STATUS FINISHED} ) {
+ my $port = $1 + 5000;
+ my $path = "/tmp/$port.wav";
+ warn "# $path ", -s $path, " bytes\n";
+# } elsif ( $string =~ m{} ) {
+ }
+
return 0;
}