1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
#!/usr/bin/perl
#- Copyright (C) 2005 MandrakeSoft SA
#- Copyright (C) 2005, 2006 Mandriva SA
use strict;
use warnings;
BEGIN { #- set up a safe path and environment
$ENV{PATH} = "/bin:/usr/bin:/usr/X11R6/bin";
delete @ENV{qw(ENV BASH_ENV IFS CDPATH)};
}
use Gtk2;
use gurpmi;
#- globals
my ($srpms, $rpms) = ([], []);
my ($mainw, $mainbox);
my @all_rpms = gurpmi::parse_command_line();
#- Now, the graphical stuff.
Gtk2->init;
#- Create main window
$mainw = Gtk2::Window->new('toplevel');
$mainw->set_border_width(3);
$mainw->set_title(N("RPM installation"));
$mainw->signal_connect(destroy => \&quit);
$mainw->set_position('center');
$mainw->set_modal(0);
$mainbox = Gtk2::VBox->new(0, 5);
$mainw->add($mainbox);
sub all_descriptions {
join '', qx(rpm -qp --qf '%{name}-%{version}-%{release}: %{summary}\\n' @_);
}
foreach (@all_rpms) {
unless (-e $_) {
$mainbox->pack_start(new_label(N("Error: unable to find file %s, will cancel operation", $_)), 1, 1, 0);
my $abort_button = Gtk2::Button->new(but(N("_Ok")));
$abort_button->signal_connect(clicked => sub { quit(); exit 1 });
add_button_box($mainbox, $abort_button);
$mainw->show_all;
Gtk2->main;
}
/\.src\.rpm$/ ? push(@$srpms, $_) : push(@$rpms, $_);
}
sub proceed {
#- we need to switch to root if we're not already (via consolehelper)
#- yes. hardcoded paths. safe.
exec $> ? '/usr/bin/gurpmi2' : '/usr/sbin/gurpmi2', @ARGV;
}
#- Ask question: save or install ?
#- change depending on the number of rpms, and on the presence of srpms
if (!$gurpmi::options{auto} && @all_rpms + @gurpmi::names) {
my $msg = (
@$srpms > 0
? N("You have selected a source package:
%s
You probably didn't want to install it on your computer (installing it would allow you to make modifications to its sourcecode then compile it).
What would you like to do?", $srpms->[0])
: @all_rpms == 0
? N("You are about to install the following software packages on your computer:
%s
Proceed?", @gurpmi::names)
: @all_rpms == 1
? N("You are about to install the following software package on your computer:
%s
You may prefer to just save it. What is your choice?", all_descriptions($rpms->[0]))
: N("You are about to install the following software packages on your computer:
%s
Proceed?", all_descriptions(@all_rpms))
);
$mainbox->pack_start(new_label($msg), 1, 1, 0);
} else {
#- we're doing an --auto-select, proceed without asking
proceed();
}
{ #- buttons
my $inst_button = Gtk2::Button->new(but(N("_Install")));
my $save_button = @all_rpms == 1 ? Gtk2::Button->new(but(N("_Save"))) : undef;
my $ccel_button = Gtk2::Button->new(but(N("_Cancel")));
$inst_button->signal_connect(clicked => sub {
#- performs installation.
quit();
proceed();
});
$save_button and $save_button->signal_connect(clicked => sub {
my $file_dialog = Gtk2::FileSelection->new(N("Choose location to save file"));
$file_dialog->set_modal(1);
$file_dialog->set_position('center');
my $filename = @$srpms > 0 ? $srpms->[0] : $rpms->[0];
$file_dialog->set_filename($filename);
$file_dialog->hide_fileop_buttons;
$file_dialog->ok_button->signal_connect(clicked => sub {
my $location = $file_dialog->get_filename;
quit();
$location and exec '/bin/mv', '-f', $filename, $location;
});
$file_dialog->cancel_button->signal_connect(clicked => \&quit);
$file_dialog->show;
});
$ccel_button->signal_connect(clicked => \&quit);
add_button_box($mainbox, grep { defined $_ } $inst_button, $save_button, $ccel_button);
}
$mainw->show_all;
Gtk2->main;
|