#!/usr/bin/perl # DrakxTV # $Id$ # Copyright (C) 2002 MandrakeSoft (tvignaud@mandrakesoft.com) # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. use lib qw(/usr/lib/libDrakX); use standalone; #- warning, standalone must be loaded very first, for 'explanations' use interactive; use strict; use detect_devices; use lang; use log; use common; my $in = 'interactive'->vnew; sub scan4channels() { # xawtv has been installed by DrakX when/if it's detected a tv # card. # In the future, we might try to install xawtv if it'sn't there as # we're just a, xawtv wraper -x "/usr/bin/scantv" or $in->do_pkgs->install('xawtv'); my ($ftable_id, $norm); # this table must be checked on each xawtv release: my %freqtables = ("us-bcast" => N("USA (broadcast)"), "us-cable" => N("USA (cable)"), "us-cable-hrc" => N("USA (cable-hrc)"), "canada-cable" => N("Canada (cable)"), "japan-bcast" => N("Japan (broadcast)"), "japan-cable" => N("Japan (cable)"), "china-bcast" => N("China (broadcast)"), "europe-west" => N("West Europe"), "europe-east" => N("East Europe"), "italy" => N("Italy"), "ireland" => N("Ireland"), "france" => N("France [SECAM]"), "newzealand" => N("Newzealand"), "australia" => N("Australia"), "southafrica" => N("South Africa"), "argentina" => N("Argentina"), "australia-optus" => N("Australian Optus cable TV"), -1 => N("All") ); # Info: HRC means "Harmonically Related Carrier" my %countries = ( "AR" => [ "argentina" ], "AU" => [ "australia" ], "FR" => [ "france", "SECAM" ], "CA" => [ "canada-cable" ], "IE" => [ "ireland" ], "IT" => [ "italy" ], "JP" => [ "japan-bcast", "NTSC-JP" ], "NZ" => [ "newzealand" ], "AT|BE|CH|DE|ES|GB|SE" => [ "europe-west" ], "US" => [ "us-bcast", "NTSC" ], "ZA" => [ "southafrica" ], "CN|TW" => [ "china-bcast" ] ); my $tbl; my $locale = lang::read('', $>); $locale->{country} =~ /$_/ and $tbl = $countries{$_} foreach keys %countries; if ($tbl) { $ftable_id = $tbl->[0]; $norm = $tbl->[1] if $tbl->[1]; } # default to pal since most people use that $norm ||= "PAL"; log::l("[drakxtv] guess country=>$locale->{country}, norm=>$norm, area=>$ftable_id"); if ($in->ask_from("TVdrake", N("Please,\ntype in your tv norm and country"), [ { label => N("TV norm:"), val => \$norm, list => [ "NTSC", "NTSC-JP", "PAL", "PAL-M", "PAL-N", "PAL-NC", "SECAM" ], type => 'combo' }, { label => N("Area:"), val => \$ftable_id, list => [keys %freqtables], format => sub { $freqtables{$_[0]} }, sort => 1 }, ] )) { my $_wait = $in->wait_message(N("Please wait"), N("Scanning for TV channels in progress ...")); # we provide scantv a bogus table (france) which will # will be ignored since "All" is selected (because of -a) $ftable_id = "france -a " if $ftable_id eq -1; # Note that this'll be broken if/when we implement interactive::qt my $use_X = $in->isa('interactive::gtk') && -x "/usr/X11R6/bin/xvt"; my $home = $ENV{HOME}; my $is_bttv_loaded = cat_("/proc/modules"); # workaround non loaded bttv run_program::run('/sbin/modprobe', 'bttv') if $< == 0 && $is_bttv_loaded !~ /bttv/; my $i = system(($use_X ? "xvt -T '" . N("Scanning for TV channels") . " ...' -e " : "") . "scantv -n $norm -f $ftable_id -o $home/.xawtv" . ($use_X ? "" : " &>$home/tmp/scantv.log;")); if ($i) { $in->ask_warn(N("There was an error while scanning for TV channels"), N("XawTV isn't installed!")) } else { log::explanations("created file $home/.xawtv"); $in->ask_warn(N("Have a nice day!"), N("Now, you can run xawtv (under X Window!) !\n")) unless $use_X; } } } my @devices = grep { $_->{media_type} eq 'MULTIMEDIA_VIDEO' || $_->{driver} eq 'usbvision' } detect_devices::probeall(); push @devices, { driver => 'bttv', description => 'dummy' } if $::testing && !@devices; if (@devices) { my $not_canceled = 1; # TODO: That need some work for multiples TV cards foreach (@devices) { if ($< == 0 && (grep { detect_devices::isTVcard($_) } @devices)) { require harddrake::v4l; require modules; modules::read_conf(); $not_canceled &&= harddrake::v4l::config($in, $_->{driver}); modules::write_conf(); } scan4channels() if $not_canceled; } } else { $in->ask_warn(N("No TV Card detected!"), formatAlaTeX( N("No TV Card has been detected on your machine. Please verify that a Linux-supported Video/TV Card is correctly plugged in. You can visit our hardware database at: http://www.linux-mandrake.com/en/hardware.php3"))); } $in->exit(0) if defined $in; # TODO: # - offer to sort channels after # - use Video-Capture-V4l-0.221 ? # - configure kwintv and zapping ? => they've already wizards :-( # - install xawtv if needed through consolhelper