updated on Mon Jan 16 20:00:43 UTC 2012
[aur-mirror.git] / firefox-beta-bin-all-localizations / ff-downloader.pl
blobfc9884aefbee4d4a345fad5b77a83cbfe924d537
1 #!/usr/bin/perl
2 # ff-downloader v0.5
3 ## Copyright 2011 Simone Sclavi 'Ito'
4 # This program is free software: you can redistribute it and/or modify
5 # it under the terms of the GNU General Public License as published by
6 # the Free Software Foundation, either version 3 of the License, or
7 # (at your option) any later version.
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
14 # You should have received a copy of the GNU General Public License
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
18 use strict;
19 use warnings;
20 use feature qw(say switch);
21 use Getopt::Long qw(:config no_ignore_case);
22 use URI;
23 use LWP;
24 use GnuPG qw( :algo );
26 my $browser;
27 sub get_url
29 my ($url, $file) = @_;
30 $browser = LWP::UserAgent->new unless $browser;
31 $browser->timeout(30);
32 $browser->show_progress(1);
33 $browser->env_proxy( );
34 my $resp = $browser->get($url, ':content_file' => $file);
35 return $resp->is_success;
37 my @ff_i18n = (
38 { language => 'Afrikaans (South Africa)', code => 'af' },
39 { language => 'Akan', code => 'ak' },
40 { language => 'Aarabic', code => 'ar' },
41 { language => 'Asturian', code => 'ast' },
42 { language => 'Belarusian', code => 'be' },
43 { language => 'Bulgarian', code => 'bg' },
44 { language => 'Bengali (Bangladesh)', code => 'bn-BD' },
45 { language => 'Bengali (India)', code => 'bn-IN' },
46 { language => 'Breton', code => 'br' },
47 { language => 'Bosnian', code => 'bs' },
48 { language => 'Catalan', code => 'ca' },
49 { language => 'Czech', code => 'cs' },
50 { language => 'Kashubian', code => 'csb' },
51 { language => 'Welsh', code => 'cy' },
52 { language => 'Danish', code => 'da' },
53 { language => 'German', code => 'de' },
54 { language => 'Greek', code => 'el' },
55 { language => 'English (United Kingdom)', code => 'en-GB' },
56 { language => 'English (US)', code => 'en-US' },
57 { language => 'English (South African)', code => 'en-ZA' },
58 { language => 'Esperanto', code => 'eo' },
59 { language => 'Spanish (Argentina)', code => 'es-AR' },
60 { language => 'Spanish (Chile)', code => 'es-CL' },
61 { language => 'Spanish (Spain)', code => 'es-ES' },
62 { language => 'Spanish (Mexico)', code => 'es-MX' },
63 { language => 'Estonian', code => 'et' },
64 { language => 'Basque', code => 'eu' },
65 { language => 'Persian', code => 'fa' },
66 { language => 'Finnish', code => 'fi' },
67 { language => 'French', code => 'fr' },
68 { language => 'Frisian', code => 'fy-NL' },
69 { language => 'Irish', code => 'ga-IE' },
70 { language => 'Gaelic (Scotland)', code => 'gd' },
71 { language => 'Galician', code => 'gl' },
72 { language => 'Gujarati (India)', code => 'gu-IN' },
73 { language => 'Hebrew', code => 'he' },
74 { language => 'Hindi', code => 'hi-IN' },
75 { language => 'Croatian', code => 'hr' },
76 { language => 'Hungarian', code => 'hu' },
77 { language => 'Armenian', code => 'hy-AM' },
78 { language => 'Indonesian', code => 'id' },
79 { language => 'Icelandic', code => 'is' },
80 { language => 'Italian', code => 'it' },
81 { language => 'Japanese', code => 'ja' },
82 { language => 'Kazakh', code => 'kk' },
83 { language => 'Kannada', code => 'kn' },
84 { language => 'Korean', code => 'ko' },
85 { language => 'Kurdish', code => 'ku' },
86 { language => 'Ganda', code => 'lg' },
87 { language => 'Lithuanian', code => 'lt' },
88 { language => 'Latvian', code => 'lv' },
89 { language => 'Maithili', code => 'mai' },
90 { language => 'Macedonian', code => 'mk' },
91 { language => 'Malayalam', code => 'ml' },
92 { language => 'Mongolian', code => 'mn' },
93 { language => 'Marathi', code => 'mr' },
94 { language => 'Norwegian (Bokmal)', code => 'nb-NO' },
95 { language => 'Dutch', code => 'nl' },
96 { language => 'Norwegian (Nynorsk)', code => 'nn-NO' },
97 { language => 'Northern Sotho', code => 'nso' },
98 { language => 'Oriya', code => 'or' },
99 { language => 'Punjabi', code => 'pa-IN' },
100 { language => 'Polish', code => 'pl' },
101 { language => 'Portuguese (Brazil)', code => 'pt-BR' },
102 { language => 'Portuguese (Portugal)', code => 'pt-PT' },
103 { language => 'Romansh', code => 'rm' },
104 { language => 'Romanian', code => 'ro' },
105 { language => 'Russian', code => 'ru' },
106 { language => 'Sinhalese', code => 'si' },
107 { language => 'Slovak', code => 'sk' },
108 { language => 'Slovenian', code => 'sl' },
109 { language => 'Songhai', code => 'son' },
110 { language => 'Albanian', code => 'sq' },
111 { language => 'Serbian', code => 'sr' },
112 { language => 'Swedish', code => 'sv-SE' },
113 { language => 'Swahili', code => 'sw' },
114 { language => 'Tamil', code => 'ta' },
115 { language => 'Tamil (Sri Lanka)', code => 'ta-LK' },
116 { language => 'Telugu', code => 'te' },
117 { language => 'Thai', code => 'th' },
118 { language => 'Turkish', code => 'tr' },
119 { language => 'Ukrainan', code => 'uk' },
120 { language => 'Vietnamese', code => 'vi' },
121 { language => 'Chinese (Simplified)', code => 'zh-CN' },
122 { language => 'Chinese (Traditional)', code => 'zh-TW' },
123 { language => 'Zulu', code => 'zu' },
126 my @tb_i18n = (
127 { language => 'Aarabic', code => 'ar' },
128 { language => 'Asturian', code => 'ast' },
129 { language => 'Belarusian', code => 'be' },
130 { language => 'Bulgarian', code => 'bg' },
131 { language => 'Bengali (Bangladesh)', code => 'bn-BD' },
132 { language => 'Breton', code => 'br' },
133 { language => 'Catalan', code => 'ca' },
134 { language => 'Czech', code => 'cs' },
135 { language => 'Danish', code => 'da' },
136 { language => 'German', code => 'de' },
137 { language => 'Greek', code => 'el' },
138 { language => 'English (United Kingdom)', code => 'en-GB' },
139 { language => 'English (US)', code => 'en-US' },
140 { language => 'Spanish (Argentina)', code => 'es-AR' },
141 { language => 'Spanish (Spain)', code => 'es-ES' },
142 { language => 'Estonian', code => 'et' },
143 { language => 'Basque', code => 'eu' },
144 { language => 'Finnish', code => 'fi' },
145 { language => 'French', code => 'fr' },
146 { language => 'Frisian', code => 'fy-NL' },
147 { language => 'Irish', code => 'ga-IE' },
148 { language => 'Gaelic (Scotland)', code => 'gd' },
149 { language => 'Galician', code => 'gl' },
150 { language => 'Hebrew', code => 'he' },
151 { language => 'Hungarian', code => 'hu' },
152 { language => 'Indonesian', code => 'id' },
153 { language => 'Icelandic', code => 'is' },
154 { language => 'Italian', code => 'it' },
155 { language => 'Japanese', code => 'ja' },
156 { language => 'Korean', code => 'ko' },
157 { language => 'Lithuanian', code => 'lt' },
158 { language => 'Norwegian (Bokmal)', code => 'nb-NO' },
159 { language => 'Dutch', code => 'nl' },
160 { language => 'Norwegian (Nynorsk)', code => 'nn-NO' },
161 { language => 'Punjabi', code => 'pa-IN' },
162 { language => 'Polish', code => 'pl' },
163 { language => 'Portuguese (Brazil)', code => 'pt-BR' },
164 { language => 'Portuguese (Portugal)', code => 'pt-PT' },
165 { language => 'Romansh', code => 'rm' },
166 { language => 'Romanian', code => 'ro' },
167 { language => 'Russian', code => 'ru' },
168 { language => 'Sinhalese', code => 'si' },
169 { language => 'Slovak', code => 'sk' },
170 { language => 'Slovenian', code => 'sl' },
171 { language => 'Albanian', code => 'sq' },
172 { language => 'Serbian', code => 'sr' },
173 { language => 'Swedish', code => 'sv-SE' },
174 { language => 'Tamil (Sri Lanka)', code => 'ta-LK' },
175 { language => 'Turkish', code => 'tr' },
176 { language => 'Ukrainan', code => 'uk' },
177 { language => 'Vietnamese', code => 'vi' },
178 { language => 'Chinese (Simplified)', code => 'zh-CN' },
179 { language => 'Chinese (Traditional)', code => 'zh-TW' },
182 my ($VER, $PACKAGE, @u_i18n);
183 my $pkg = 'ff'; #default value for "--package"
184 my $res = GetOptions("version|v=s" => \$VER,
185 "package|p=s" => \$pkg );
187 die ":: usage: $0 -p|--package=<package name [ff|tb]> -v|--version=<version number>\n" unless $res and (scalar @ARGV == 0);
188 given ($pkg)
190 when ('ff') { $PACKAGE = 'firefox'; @u_i18n = @ff_i18n; }
191 when ('tb') { $PACKAGE = 'thunderbird'; @u_i18n = @tb_i18n }
192 default { die qq{:: "$pkg" is not a valid value for "--package"! Please use "ff" or "tb"\n}}
194 die qq{:: "--version" option is mandatory!\n} unless $VER;
198 my @i18n = sort { $a->{language} cmp $b->{language} } @u_i18n;
199 my $size = scalar @i18n;
201 for (my $i = 0; $i < $size; $i++ )
203 say '[', $i + 1, "] $i18n[$i]{language}";
206 print "\n:: please select your language (type corresponding number)\n> ";
207 my $choice;
208 while ( $choice = <STDIN> )
210 no warnings;
211 chomp $choice;
212 $choice =~ s/^\s+//;
213 $choice =~ s/\s+$//;
214 last if $choice ~~ [ 1 .. $size ];
215 print ":: WRONG SELECTION!\n:: please select your language (type corresponding number)\n> ";
217 say ":: \"$i18n[$choice - 1]{language}\" selected";
218 my $ARCH = `arch`;
219 chomp $ARCH;
221 $| = 1; # turn on autoflush;
223 my $ff_path = "/pub/${PACKAGE}/releases/${VER}/linux-${ARCH}/${i18n[$choice -1]{code}}/${PACKAGE}-${VER}.tar.bz2";
224 my $ff_url = URI->new('ftp://ftp.mozilla.org');
225 $ff_url->path($ff_path);
227 ##Downloading firefox##
228 get_url( $ff_url, "${PACKAGE}-${VER}.tar.bz2" ) or die qq(:: ERROR - can't download "${PACKAGE}-${VER}.tar.bz2"\n);
230 ##downloading signature##
231 $ff_url->path("${ff_path}.asc");
232 get_url( $ff_url, "$PACKAGE-${VER}.tar.bz2.asc" ) or die qq(:: ERROR - can't download "${PACKAGE}-${VER}.tar.bz2.asc"\n);
234 ##downloading public key
235 $ff_url->path("pub/${PACKAGE}/releases/${VER}/KEY");
236 get_url( $ff_url, "KEY" ) or die qq(:: ERROR - can't download 'KEY'\n);
238 print ':: verifying gnupg signature ... ';
239 my $gpg = new GnuPG();
240 $gpg->import_keys( keys => 'KEY');
241 $gpg->verify ( signature => "${PACKAGE}-${VER}.tar.bz2.asc", file => "${PACKAGE}-${VER}.tar.bz2");
242 say 'DONE';