summaryrefslogtreecommitdiffstats
path: root/gurpmi
blob: 0dcabcbba16f4c458668fba4c700c99b48d3b0cc (plain)
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
#!/usr/bin/perl

#- Copyright (C) 2005 Mandrakesoft

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 gurpmi;
use urpm::msg qw(N);
use Gtk2;
use MDK::Common::Func qw(partition);

#- globals
my (@all_rpms, $srpms, $rpms);
my ($mainw, $mainbox);

#- Gtk2 helper functions

#- Parse command line
foreach (@ARGV) {
    if (/^-/) {
	/^--?[hv?]/ and usage();
	fatal(N("Unknown option %s", $_));
    }
    push @all_rpms, $_;
}
@all_rpms or fatal(N("No packages specified"));

#- 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);

#- Ask question: save or install ?
#- change depending on the number of rpms, and on the presence of srpms
($srpms, $rpms) = partition { /\.src\.rpm$/ } @all_rpms;
{
    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 == 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?", $rpms->[0])
	: N("You are about to install the following software packages on your computer:

%s

Proceed?", join "\n", @all_rpms)
    );
    $mainbox->pack_start(new_label($msg), 1, 1, 0);
}

{   #- 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();
	#- 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;
    });
    $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;