#!/usr/bin/perl # Drak Bug Report # C$opyright (C) 2002 MandrakeSoft (daouda@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; use interactive; use MDK::Common; require Gtk; require Gtk::Gdk::ImlibImage; use my_gtk qw(:helpers :wrappers :ask); use Config; Gtk::Gdk::ImlibImage->init; my $in = 'interactive'->vnew; my $bugzilla_url = "http://drakbug.mandrakesoft.com"; my $version = "0.9.0"; my $prog; my $incident=0; sub usage { print STDERR _("drakbug version %s Copyright (C) 2002 MandrakeSoft. This is free software and may be redistributed under the terms of the GNU GPL. usage: drakbug [OPTIONS] [PROGRAM_NAME] OPTIONS: ", $version) . _(" --help - print this help message. ") . "\n" . _(" --report - program should be one of mandrake tools ") . "\n" . _(" --incident - program should be one of mandrake tools "); exit(0); } while (defined($_ = shift @ARGV)) { /^--help$/ and do { usage; next }; /^--report$/ and do { $prog = shift @ARGV }; /^--incident$/ and do {$incident = 1 ; $prog = shift @ARGV }; } my $window_g = new Gtk::Window -toplevel; $window_g->set_policy($false,$false,$true); $window_g->set_position(1); $window_g->border_width(5); $window_g->set_title(_("Mandrake Bug Report Tool")); #$window_g->set_usize(540, 350); $window_g->signal_connect("delete_event", \&quit_global); my $mdk_app = { _("Mandrake Control Center") => 'drakconf', _("First Time Wizard") => 'drakfw', _("Synchronization tool") => 'draksync', _("Standalone Tools") => ['adduserdrake','diskdrake','drakautoinst','drakbackup','drakboot','drakbug','drakfloppy','drakfont','drakgw','drakconnect','drakxservices','drakxtv','keyboardrake','logdrake','mousedrake','net_monitor','printerdrake','scannerdrake','drakfirewall','XFdrake'], _("HardDrake") => 'harddrake2', _("Mandrake Online") => 'mdkonline', _("Menudrake") => 'menudrake', _("Msec") => 'msec', _("Remote Control") => 'rfbdrake', _("Software Manager") => 'rpmdrake', _("Urpmi") => 'urpmi', _("Windows Migration tool") => 'transfugdrake', _("Userdrake") => 'userdrake', _("Configuration Wizards") => 'wizdrake', }; my @generic_tool = keys %{$mdk_app}; my @all_drakxtools = @ { $mdk_app->{_("Standalone Tools")} }; push(@generic_tool,@all_drakxtools); my $kernel_release = chomp_(`uname -r`); $kernel_release.=""; my $mdk_release = chomp_(cat_("/etc/mandrake-release")); my $table = new Gtk::Table(4,2,'TRUE'); #$table->set_border_width(5); $table->set_row_spacings(10); $table->set_col_spacings(5); $table->attach(new Gtk::Label(_("Application:")), 0, 1, 0, 1,'fill', 'fill',20,0); $table->attach(new Gtk::Label(_("Package: ")), 0, 1, 1, 2, 'fill', 'fill',0,0); $table->attach(new Gtk::Label(_("Kernel:")), 0, 1, 2, 3, 'fill', 'fill',0,0); $table->attach(new Gtk::Label(_("Release: ")), 0, 1, 3, 4, 'fill', 'fill',0,0); $table->attach(my $comb_app = new Gtk::Combo(), 1, 2, 0, 1, 'fill', 'fill',0,0); $comb_app->set_usize(270,undef); $comb_app->set_popdown_strings("",sort(@generic_tool)); $table->attach(my $package = new Gtk::Entry(), 1, 2, 1, 2, 'fill', 'fill',0,0); $package->set_text("..."); $table->attach(my $kernel_rel = new Gtk::Entry(), 1, 2, 2, 3, 'fill', 'fill',0,0); $kernel_rel->set_text("$kernel_release"); $table->attach(my $mdk_rel = new Gtk::Entry(), 1, 2, 3, 4, 'fill', 'fill',0,0); $mdk_rel->set_text("$mdk_release"); gtkpack2__( gtkpack2__(my $vbx = new Gtk::VBox(0,5), gtkadd($table), gtkpack(new Gtk::HBox(0,0), gtkpack(gtkset_justify(new Gtk::Label(_("\n\nTo submit a bug report, click on the button report.\nThis will open a web browser window on https://drakbug.mandrakesoft.com\n where you'll find a form to fill in.The information displayed above will be \ntransferred to that server\n\n")),"left")), ), gtkpack(new Gtk::HSeparator), ), ); if (defined $prog) { update_app($prog); $comb_app->entry->set_text("$prog"); }; $comb_app->entry->signal_connect('changed', sub { update_app($comb_app->entry->get_text()) }); my $kernel = $kernel_rel->get_chars(0,-1); my $hbx = new Gtk::HBox(0,0); my $Close_Button = new Gtk::Button(_("Close")); $Close_Button->signal_connect(clicked => sub { Gtk->exit(0) }); $hbx->pack_start($Close_Button,0,0,0); my $Report_Button = new Gtk::Button(_("Report")); $Report_Button->signal_connect(clicked => sub { my $options = "mdkwizard=1"; $options.="&incident=1" if $incident; $p = $package->get_text(); $k=$kernel_rel->get_text(); ($r =parse_release()) =~ s/\s//; $options.="&package=$p" if $p =~ /rpm/; $options.="&kernel=$k"; $options.="&mdkrelease=$r"; print "$bugzilla_url"."?"."$options" ."\n"; connect_bugzilla("$bugzilla_url"."?"."$options") }); $hbx->pack_end($Report_Button,0,0,0); $vbx->pack_start($hbx,0,0,0); $window_g->add($vbx); $window_g->show_all(); Gtk->main(); Gtk->exit(0); in->exit(0); sub update_app { my ($text) = @_; my $app_choice; $ENV{PATH} = "/sbin:/usr/sbin:$ENV{PATH}"; if (member($text,@all_drakxtools) || $text eq _("Standalone Tools")) { $app_choice = chomp_(`rpm -q drakxtools`) ; } elsif (member($text,keys %{$mdk_app}) && $text ne _("Standalone Tools")) { $app_choice = get_package($mdk_app->{$text}); } else { LOOP: while (($key,$value) = each %{$mdk_app}) { next if $key eq _("Standalone Tools"); if ($value eq $text) { $app_choice = get_package($text); $prog = $key; last LOOP; } } } $app_choice ne '' ? $package->set_text("$app_choice") : $package->set_text(_("Not installed")); } sub get_package { my ($executable) = @_; my ($rpm_package, $which_app); $which_app = chomp_(`which '$executable'`); $rpm_package = chomp_(`rpm -qf '$which_app' 2>1&`); $rpm_package; } sub parse_release { my ($rel) = cat_('/etc/mandrake-release') =~ /release\s(\S+\s\(.*\))/; $rel; } sub connect_bugzilla { my($url) = @_; my $w = $in->wait_message('',_("connecting to Bugzilla wizard ...")); sleep(3); exec $ENV{BROWSER},$url if exists $ENV{BROWSER} ; my @browser = qw (mozilla konqueror galeon); foreach (@browser) { if (-e "/usr/bin/$_") { standalone::explanations("Contacting $url with $_\n "); exec $_,$url } } $in->ask_warn('', _("No browser available! Please install one")); } sub read_app_context { my ($name) = @_; } sub quit_global { Gtk->exit(0); }