PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Skript für kdialog in dialog umwandeln



bonwit
25.06.07, 16:41
Wie kann ich dieses Skript so umwandeln, dass es auch für Debian nutzbar ist?


#!/usr/bin/perl -w
#
# read_calls.pl
#
# Synopsis:
# Script is run as a service daemon. It connects to the Fritz!Box Fon Ata
# (port 1012) and receives the calling string (number of the party calling
# in). This number is passed on to another program. I.e. this could be an
# Jabber client or a "look who called list".
#
# Requirements:
# - must be able to reach tcp port 1012 on your FB
# - activate call monitor on FB by dialing #96*5*
# - required perl package
#
# Licence: GPL2
#
# History:
# ver. 0.1 - 20060401 - Lars G. Sander, Zuerich
# First public release.
# ver. 0.2 - 20060510 - Ulrich Dangel <fritzbox@spamt.net>
# Added telefon book support
# ver. 0.3 - 20060624 - Udo Rathje udo@familie-rathje.de
# Switched to kdialog passive Popups
# Added outgoing calls
# Added Reverse lookup
# ver. 0.4 - 20061010 - Udo Rathje udo@familie-rathje.de
# changed lookup
# To Do:
# - beefed up security?
# - proxy functionality
#
use IO::Socket;
use strict;

# your fritz box (ip or hostname)
my $FRITZBOX="fritz.box"; # address of box
my $TELEFONBUCH="$ENV{HOME}/doc/addressbook"; # path to local adressbook
my $EXTPRO="/usr/bin/kdialog"; # path to kdialog
my $DISPLAYTIME="30"; # Display time of Popups
my $DOLOOKUPS="true"; # Reverse lookups of incoming calls (only germany, lookuptel required)
#-------- NO USER SERVICABLE PARTS BELOW -------#

sub reverse_lookup {
my $number = shift;
system("wget -q --tries=3 --timeout=5 -O /tmp/reverse_lookup \"http://www1.dasoertliche.de/?form_name=search_inv&ph=$number\"");
my $nameadr = `grep -e 'class=\"entry\".*' -e ';.*<br\/>' /tmp/reverse_lookup`;
if (index($nameadr, "<a href") != -1) {
#Name
$nameadr =~ s/^.*\"entry\">//g;
$nameadr =~ s/<\/a>.*/, /g;
#Adresse
$nameadr =~ s/\n//g;
$nameadr =~ s/\&nbsp\;/\ /g;
$nameadr =~ s/\t//g;
$nameadr =~ s/\<br.*//g;
return("$nameadr");
}
return("");
}

sub read_book {
my %book = ();
open(IN, "<", $TELEFONBUCH) || return ();
while(<IN>){
chomp;
my @elements = split(":",$_);
$book{$elements[0]}=$elements[1];
}
close(IN);
return %book;
}
my %book = &read_book;
my @status;
my $frombook="false";
my $sock = new IO::Socket::INET (
PeerAddr => $FRITZBOX,
PeerPort => '1012',
Proto => 'tcp'
);
die "Could not create socket: $!\n" unless $sock;

while(<$sock>)
{
if ($_ =~ /RING/){
my @C = split(/;/);
my $nr="";
if (exists($book{$C[3]}))
{
$nr=$book{$C[3]};
$frombook="true";
}
else
{
$nr=$C[3];
$frombook="false";
}
my @args=("$EXTPRO --title \"Eingehender Anruf:\" --passivepopup \"von $nr\n(MSN: $C[4], Leitung: $C[5])\" $DISPLAYTIME &");
$status[$C[2]]="Anruf von $nr\n(MSN: $C[4], Leitung: $C[5])";
system(@args);
if (($frombook eq "false") and ($nr ne "") and ($DOLOOKUPS eq "true"))
{

my $name=reverse_lookup($nr);
chomp($name);
if (length($name)>10)
{
$status[$C[2]]="Anruf von $nr\n(MSN: $C[4], Leitung: $C[5])\n Identifiziert als:\n$name";
@args=("$EXTPRO --title \"Eingehender Anruf:\" --passivepopup \"von $nr\n(MSN: $C[4], Leitung: $C[5])\nIdentifiziert als:\n$name \" $DISPLAYTIME &");
system(@args);
print "$name \n";
}

}
}
if ($_ =~ /CALL/)
{
my @C = split(/;/);
chomp(@C);
my $nr="";
if (exists($book{$C[5]}))
{
$nr=$book{$C[5]};
}
else
{
$nr=$C[5];
}
my @args=("$EXTPRO --title \"Ausgehendes Gespäch:\" --passivepopup \"an $nr von Nebenstelle $C[3]\n(MSN: $C[4], Leitung: $C[6])\" $DISPLAYTIME &");
$status[$C[2]]="Gespräch zu $nr\n(MSN: $C[4], Leitung: $C[6])";
system(@args);

}
if ($_ =~ /DISCONNECT/)
{
my @C = split(/;/);
if ($status[$C[2]] ne "")

{
my @args=("$EXTPRO --title \"Verbindung beendet ($C[3] Sekunden):\" --passivepopup \"$status[$C[2]]\" $DISPLAYTIME &");
system(@args);
}
$status[$C[2]]="";

}
}

3qualizer
25.06.07, 17:41
Was lässt dich denn denken das es das nicht tut? Kommt eine Fehlermeldung, funktioniert etwas nicht?

bonwit
25.06.07, 17:45
Die /usr/bin/kdialog gibts in Debian nicht (das Paket ist schließlich nicht installiert). Und kdialog ist bei Synaptic auch nicht vorhanden.

3qualizer
25.06.07, 17:56
Soweit ich weiss gibts in Debian eine Möglichkeit zu suchen in welchem Paket die Datei steckt. Anscheinend (unter anderem?) in kdebase-bin

bonwit
25.06.07, 19:07
Scheint zu funktionieren. Wenn jemand anruft, gibt der zwar nen Haufen Fehlermeldungen raus, aber das Popup kommt trotzdem.

kreol
25.06.07, 19:51
Falls Du unter Debian Gnome verwendest: Das Äquivalent zu kdialog ist gdialog (Link (http://www.linux-user.de/ausgabe/2002/02/042-pcorner/pcorner7.html)).
Such mal danach, installiere es ggf. und ändere die Zuweisung zu $EXTPRO. Dann brauchst Du nicht die ganze kde-base zu installieren.


Kreol