summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--perl-install/install_any.pm12
-rw-r--r--perl-install/install_steps.pm1
-rw-r--r--perl-install/install_steps_interactive.pm32
3 files changed, 42 insertions, 3 deletions
diff --git a/perl-install/install_any.pm b/perl-install/install_any.pm
index ca65b0c7b..5d4feaf65 100644
--- a/perl-install/install_any.pm
+++ b/perl-install/install_any.pm
@@ -199,7 +199,7 @@ sub getFile {
crypto::getFile($f);
} elsif ($current_method eq "ftp") {
require ftp;
- ftp::getFile($rel, @{ $::o->{packages}{mediums}{$asked_medium}{ftp_prefix} || [] });
+ ftp::getFile($rel, @{ $::o->{packages}{mediums}{$asked_medium}{ftp_prefix} || our $global_ftp_prefix || [] });
} elsif ($current_method eq "http") {
require http;
http::getFile(($ENV{URLPREFIX} || $o_altroot) . "/$rel");
@@ -475,7 +475,15 @@ sub selectSupplMedia {
}
}
} else {
- my $url = $o->ask_from_entry('', N("URL of the mirror?")) or return '';
+ my $url;
+ local our $global_ftp_prefix;
+ if ($suppl_method eq 'ftp') { #- mirrors are ftp only (currently)
+ $url = $o->askSupplMirror(N("URL of the mirror?")) or return '';
+ $url =~ m!^ftp://(?:(.*?)(?::(.*?))?@)?([^/]+)/(.*)!
+ and $global_ftp_prefix = [ $3, $4, $1, $2 ]; #- for getFile
+ } else {
+ my $url = $o->ask_from_entry('', N("URL of the mirror?")) or return '';
+ }
useMedium($medium_name);
require "$suppl_method.pm"; #- require http or ftp
#- first, try to find an hdlists file
diff --git a/perl-install/install_steps.pm b/perl-install/install_steps.pm
index 6f4f49070..1258fbb2d 100644
--- a/perl-install/install_steps.pm
+++ b/perl-install/install_steps.pm
@@ -299,6 +299,7 @@ sub deselectFoundMedia {
}
sub selectSupplMedia { '' }
+sub askSupplMirror { '' }
sub choosePackages {
my ($o, $packages, $_compssUsers, $first_time) = @_;
diff --git a/perl-install/install_steps_interactive.pm b/perl-install/install_steps_interactive.pm
index 036ac87fe..838750637 100644
--- a/perl-install/install_steps_interactive.pm
+++ b/perl-install/install_steps_interactive.pm
@@ -1,7 +1,6 @@
package install_steps_interactive; # $Id$
-use diagnostics;
use strict;
use vars qw(@ISA $new_bootstrap);
@@ -396,6 +395,37 @@ sub deselectFoundMedia {
my ($o, $p) = @_;
install_any::deselectFoundMedia($o, $p);
}
+
+sub mirror2text { $crypto::mirrors{$_[0]} ? $crypto::mirrors{$_[0]}[0] . '|' . $_[0] : "-|URL" }
+sub askSupplMirror {
+ my ($o, $message) = @_;
+ my $u = $o->{updates} ||= {};
+ require crypto;
+ my @mirrors = do {
+ my $_w = $o->wait_message('', N("Contacting Mandrakelinux web site to get the list of available mirrors..."));
+ crypto::mirrors($o->{distro_type});
+ };
+ push @mirrors, '-';
+ $o->ask_from_(
+ {
+ messages => N("Choose a mirror from which to get the packages"),
+ cancel => N("Cancel"),
+ },
+ [ { separator => '|',
+ format => \&mirror2text,
+ list => \@mirrors,
+ val => \$u->{mirror},
+ }, ],
+ ) or $u->{mirror} = '';
+ if ($u->{mirror} eq '-') {
+ return $o->ask_from_entry('', $message) || '';
+ }
+ my $url = "ftp://$u->{mirror}$crypto::mirrors{$u->{mirror}}[1]";
+ $url =~ s/\bmedia\/?$//;
+ log::l("mirror chosen [$url]");
+ return $url;
+}
+
sub selectSupplMedia {
my ($o, $suppl_method) = @_;
install_any::selectSupplMedia($o, $suppl_method);