Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:dmitry_serpokryl:Enlightenment-cvs-core-metapackage
aria2
aria2-gui.pl
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File aria2-gui.pl of Package aria2
#!/usr/bin/perl #------------------------------------------------------------------------------ # aria2::gui # A graphical user interface for aria2 # # Copyright (C) 2007 Rudolf Martin # # 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 of the License, or 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. # # # Homepage: www.martin-achern.de/wgetgui/ # Email: wgetgui@martin-achern.de # #------------------------------------------------------------------------------ use Tk; use strict; use warnings; use Tk::ProgressBar; use IO::Handle; my $version="0.3beta"; my $proxy_url; my $proxy_port; my $proxy_user; my $proxy_passw; my @options; my $outline; my @message; my $mode = 0; my $linux; if ( $^O =~ /linux/) { $linux=1; # 1=Linux } else { $linux=0; # 0=Windoze } my $ent_output; my $pid; my $child; my $percent_done; ##------------------------------------------------------------------------------ #--- GUI creation my $mw = new MainWindow; $mw->title("Aria2::GUI ".$version); #------------------------------------------------------------------------------ # frame mode # my $frame_mode = $mw->Frame(-relief=>"groove", -borderwidth => "2") ->pack(-side=>'top', -fill=>'x', ); my $frame_mode_url = $frame_mode->Frame() ->pack(-fill=>'x'); $frame_mode_url->Radiobutton(-text=>"URL", -width=>10, -variable=>\$mode, -anchor=>'w', -value=>"0") ->pack(-side=>"left"); my $ent_url = $frame_mode_url->Entry(-width=>50,) ->pack(-side => 'left', -fill=>'x', -expand=>'1', ); $frame_mode_url->Button(-text => "Clear", -command => sub { $ent_url->delete('0', 'end') } ) ->pack(-side => 'left'); my $frame_mode_tor = $frame_mode->Frame() ->pack(-fill=>'x'); $frame_mode_tor->Radiobutton(-text=>"Torrent -T", -width=>10, -variable=>\$mode, -anchor=>'w', -value=>"1") ->pack(-side=>"left"); my $ent_tor = $frame_mode_tor->Entry() ->pack(-side => 'left', -fill=>'x', -expand=>'1', ); $frame_mode_tor->Button(-text => "Clear", -command => sub { $ent_tor->delete('0', 'end') } ) ->pack(-side => 'left'); my $frame_mode_meta = $frame_mode->Frame() ->pack(-fill=>'x'); $frame_mode_meta->Radiobutton(-text=>"Metalink -M", -width=>10, -variable=>\$mode, -anchor=>'w', -value=>"2") ->pack(-side=>"left"); my $ent_meta = $frame_mode_meta->Entry() ->pack(-side => 'left', -fill=>'x', -expand=>'1', ); $frame_mode_meta->Button(-text => "Clear", -command => sub { $ent_meta->delete('0', 'end') } ) ->pack(-side => 'left'); ##------------------------------------------------------------------------------ # frame in the middle my $frame_middle = $mw->Frame() ->pack(-side=>'top', -fill=>'both', -expand=>'1', ); ##------------------------------------------------------------------------------ # Frame middle left # my $frame_left = $frame_middle->Frame(-relief=>"groove", -borderwidth => "2") ->pack(-fill=>'both', -expand=>"1", -side=>"left", ); my $frame_tries = $frame_left->Frame ->pack( -fill=>'x'); my $ch_tries = $frame_tries->Checkbutton(-text => "Tries -m:", -anchor=>'w') ->pack( -side=>'left', -fill=>'x'); my $ent_tries = $frame_tries->Entry(-width=>'2') ->pack(-side=>"left", -fill=>'x', ); $ent_tries->insert (0,5); my $frame_split = $frame_left->Frame ->pack( -fill=>'x'); my $ch_split = $frame_split->Checkbutton(-text => "Split -s:", -anchor=>'w') ->pack( -side=>'left', -fill=>'x'); my $ent_split = $frame_split->Entry(-width=>'2') ->pack(-side=>"left", -fill=>'x', ); $ent_split->insert (0,1); my $ch_overwrite = $frame_left->Checkbutton(-text => "Allow-overwrite", -anchor=>'w') ->pack( -fill=>'x'); my $ch_proxy; $ch_proxy = $frame_left->Checkbutton(-text => "Use Proxy", -command => sub { if ($ch_proxy->{'Value'}) { config_proxy() } }, -anchor=>'w') ->pack( -fill=>'x'); my $frame_user = $frame_left->Frame ->pack(-fill=>'x'); $frame_user->Label( -text=>"HTTP-User:" ) ->pack(-side=>"left"); my $ent_user = $frame_user->Entry(-width=>'5') ->pack(-side=>"left", -fill=>'x', -expand=>'1'); my $frame_passw = $frame_left->Frame ->pack(-fill=>'x'); $frame_passw->Label( -text=>"HTTP-Password:" ) ->pack(-side=>"left"); my $ent_passw = $frame_passw->Entry(-width=>'10', -show=>'*') ->pack(-side=>"left", -fill=>'x', -expand=>'1', ); ##------------------------------------------------------------------------------ # Frame middle right # my $ch_logfile; my $ent_logfile; my $frame_right= $frame_middle->Frame(-relief=>"groove", -borderwidth => "2") ->pack(-fill=>'both', -expand=>"1", -side=>"left", ); my $frame_logfile = $frame_right->Frame ->pack(-fill=>'x', ); $ch_logfile = $frame_logfile->Checkbutton(-text => "Logfile -l:", -command => sub { if ($ch_logfile->{'Value'}) { $ent_logfile->configure('-state'=>'normal'); } else { $ent_logfile->configure('-state'=>'disabled') } }, -anchor=>'w') ->pack(-fill=>'x', -side=>"left", ); $ent_logfile = $frame_logfile->Entry(-width=>'5') ->pack(-side=>"left", -fill=>'x', -expand=>'1', ); $ent_logfile->insert('end',"default.log"); $ent_logfile->configure('-state'=>'disabled'); my $frame_dir = $frame_right->Frame ->pack(-fill=>'x', ); my $ent_custdir; my $ch_custdir; $ch_custdir = $frame_dir->Checkbutton(-text => "Directory -d:", -command => sub { if ($ch_custdir->{'Value'}) {$ent_custdir->configure(-state=>'normal')} else {$ent_custdir->configure(-state=>'disabled')}; }, -anchor=>'w') ->pack(-fill=>'x', -side=>"left", ); $ent_custdir = $frame_dir->Entry( # -state=>'disabled' ) ->pack( -fill=>'x', -side=>"left", -expand=>'1', ); $ent_custdir->insert('end',"download"); $ent_custdir->configure('-state'=>'disabled'); my $ent_outfile; my $ch_outfile; my $frame_outfile = $frame_right->Frame ->pack(-fill=>'x', ); $ch_outfile = $frame_outfile->Checkbutton(-text => "Output file -o:", -command => sub { if ($ch_outfile->{'Value'}) {$ent_outfile->configure(-state=>'normal')} else {$ent_outfile->configure(-state=>'disabled')}; }, -anchor=>'w') ->pack(-fill=>'x', -side=>"left", ); $ent_outfile = $frame_outfile->Entry( ) ->pack( -side=>'left', -fill=>'x', -expand=>'1', ); $ent_outfile->insert('end',"outfile"); $ent_outfile->configure('-state'=>'disabled'); my $ch_refer; my $ent_refer; my $frame_refer = $frame_right->Frame ->pack(-fill=>'x', ); $ch_refer = $frame_refer->Checkbutton(-text => "Referer :", -command => sub { if ($ch_refer->{'Value'}) {$ent_refer->configure(-state=>'normal')} else {$ent_refer->configure(-state=>'disabled')}; }, -anchor=>'w') ->pack(-fill=>'x', -side=>"left", ); $ent_refer = $frame_refer->Entry() ->pack( -side=>'left', -expand=>'1', -fill=>'x'); $ent_refer->configure('-state'=>'disabled'); my $ch_addpar; my $ent_addpar; my $frame_addpar = $frame_right->Frame ->pack(-fill=>'x', ); $ch_addpar = $frame_addpar->Checkbutton(-text => "Additional Param. :", -command => sub { if ($ch_addpar->{'Value'}) {$ent_addpar->configure(-state=>'normal')} else {$ent_addpar->configure(-state=>'disabled')}; }, -anchor=>'w') ->pack(-fill=>'x', -side=>"left", ); $ent_addpar = $frame_addpar->Entry() ->pack( -side=>'left', -expand=>'1', -fill=>'x'); $ent_addpar->configure('-state'=>'disabled'); #------------------------------------------------------------------------------ # Frame progress # #my $frame_progress = $mw->Frame(-relief=>"groove", # -borderwidth => "2") # # ->pack(-side => 'top', # -fill=>'x', # -expand=>'1'); # # # $frame_progress->Label( -text=>"output from aria2c:" ) # ->pack(-side=>"left"); # $ent_output = $frame_progress->Entry(-width=>"10", # -textvariable=>\$outline, # ) # ->pack(-side=>"left", # -fill=>'x', # -expand=>'1' # ); # #------------------------------------------------------------------------------ # Frame action buttons bottom # my $frame_action = $mw->Frame(-relief=>"groove", -borderwidth => "2") ->pack(-side => 'top', -fill=>'x', -expand=>'1'); my @buttons = ( ['START aria2c' => sub { &start_aria2(); &show_message(); }], ['QUIT' => sub { exit }], ['SAVE Sett.' => sub { &save_settings() }], ['LOAD Sett.' => sub { &load_settings() }], ['About' => sub { &about() }], ); foreach my $button (@buttons) { my $b = $frame_action->Button( -text => $button->[0], -command => $button->[1], # -width => 10, ); $b->pack(-side => 'left', -fill=>'x', -expand=>'1'); } MainLoop; #------------------------------------------------------------------------------ # Start aria2 #------------------------------------------------------------------------------ sub start_aria2 { @message=(); &check_options(); if ($linux) { # system ("aria2c", @options); &download_lin(); } else { system ("aria2c", @options); #&download_win(); }; print "\nAria2::GUI execution finished with command:\n"; print "aria2c @options\n"; print "End of command.\n"; } #------------------------------------------------------------------------------ # download Linux #------------------------------------------------------------------------------ sub download_lin { # # upload the images # uses pipe --> elegant and safe --> linuxlike local $/ = "\r"; if ($pid = open $child, "-|") { # parent # my $top_working = $mw->Toplevel( -title=>'aria2::gui', ); $top_working->geometry("+".int($mw->x+50). "+".int($mw->y+50)); $top_working->Label(-text => "\nAria2c is working\nPlease wait.\n($pid)\n") ->pack; my $progressbar = $top_working->ProgressBar( -width => 20, # height for horizontal -length => 180, # width for horizonzal -anchor => 'w', # horizontal -from => 0, -to => 100, -blocks => 1, -colors => [0, 'green', 50, 'yellow' , 80, 'red'], -variable => \$percent_done ) ->pack( -fill=>'x'); $top_working->Button( -text => "Cancel download", -command => sub { print STDOUT "Canceled by user\n"; kill 9 => $pid if defined $pid; # $top_working->destroy; } ) ->pack(); $mw->update; # # while ( <$child> ) { print "$_\n"; # cut percentage from output m/ (\d+)%/; $percent_done=$1; $progressbar->value($percent_done); $mw->update(); } close $child; $top_working->destroy; } else { # child die "connot fork: $!" unless defined $pid; # STDOUT->autoflush(1); print STDOUT "Child Pid $$ has started\n"; exec ("aria2c", @options); CORE::exit; } } #------------------------------------------------------------------------------ # download Windoze #------------------------------------------------------------------------------ sub download_win { # # upload the images #print "sleep\n"; #sleep(2); #test my @output = `aria2c @options`; # uses the shell --> unsafe foreach (@output) { print; #$outline=$_; #$ent_outline->update(); # progress? # $progressbar->value($percent_done); # $progressbar->update(); # collect output into array, one line per element, no errors! push (@message, $_); } } #------------------------------------------------------------------------------ # Check options #------------------------------------------------------------------------------ sub check_options { # we have to collect all options # we do it the same manner as the wget-documentation # and put the data in one array my $entry; @options = (); # empty array # Logging # if ($ch_logfile ->{'Value'}) { $entry = $ent_logfile->get; push (@options, "-l$entry"); } if ($ch_outfile->{'Value'}) { $entry = $ent_outfile->get; push (@options, "-o$entry") ; } if ($ch_tries->{'Value'}) { $entry = $ent_tries->get; push (@options, "-m$entry"); } if ($ch_split->{'Value'}) { $entry = $ent_split->get; push (@options, "-s$entry"); } if ($ch_overwrite->{'Value'}) { push (@options, "--allow-overwrite=true"); } $entry = $ent_user->get; if ($entry) {push(@options, "--http-user=$entry")}; $entry = $ent_passw->get; if ($entry) {push(@options, "--http-password=$entry")}; if ($ch_custdir->{'Value'}) { $entry = $ent_custdir->get; push (@options, "-d$entry") ; } if ($ch_refer->{'Value'}) { $entry = $ent_refer->get; push (@options, "--referer=$entry") ; } if ($ch_proxy->{'Value'}) { if ($proxy_user) {push(@options, "--http-proxy-user=$proxy_user")}; if ($proxy_passw) {push(@options, "--http-proxy-password=$proxy_passw")}; push(@options, "--http-proxy=$proxy_url:$proxy_port"); push(@options, "--http-proxy-method=get"); } if ($ch_addpar->{'Value'}) { $entry = $ent_addpar->get; if ($entry) {push(@options, "$entry")}; } if($mode==0){ $entry = $ent_url->get; my @url = split / /, $entry ; push(@options, "@url"); } elsif ($mode==1){ $entry = $ent_tor->get; push(@options, "-T$entry"); } elsif ($mode==2){ $entry = $ent_meta->get; push(@options, "-M$entry") }; } #------------------------------------------------------------------------------ # showmessage #------------------------------------------------------------------------------ sub show_message { # open new window my $response = $mw->messageBox(-icon => 'info', -message => 'Download has finished!', -title => 'aria2::gui', -type => 'Ok', -default => 'Ok'); } #------------------------------------------------------------------------------ # showmessage #------------------------------------------------------------------------------ sub show_message2 { # open new window my $top_message = $mw->Toplevel( -title=>'End of download', ); $top_message->Label(-text => "Aria2c has finished with following output:") ->pack; my $text_output = $top_message->Scrolled('Text', -scrollbars => 'oe', -width=>'60', -height=>'30', -wrap=>'char', ) ->pack(); $text_output->insert("end", "@message\n"); $top_message->Button( -text => "OK", -command => sub { $top_message->destroy } ) ->pack(); } #------------------------------------------------------------------------------ # Save Settingfile #------------------------------------------------------------------------------ sub save_settings { my $filename = $mw->getSaveFile( -filetypes =>[ ['ariaguirc', ['*rc', '.rc']], ['Text Files', ['.txt', '.text']], ], -initialdir => ".", -initialfile => "ariaguirc", -title => "Save settings", ); if ($filename) { open SETTING, ">$filename" or warn "Can not open ariaguirc!"; &check_options(); foreach (@options) { print SETTING "$_\n"; } close SETTING; } } #------------------------------------------------------------------------------ # Load Settingfile #------------------------------------------------------------------------------ sub load_settings { my $filename = $mw->getOpenFile( -filetypes =>[ ['ariaguirc', ['*rc', '.rc']], ['Text Files', ['.txt', '.text']], ], -initialdir => ".", -initialfile => "ariaguirc", -title => "Load settings", ); if ($filename) { open SETTING, "<$filename" or warn "Can not open ariaguirc!"; # reset all settings { $ch_logfile->deselect; $ent_logfile->configure(-state=>'normal'); $ent_logfile->delete(0,'end'); $ent_logfile->insert('end',"default.log"); $ch_outfile->deselect; $ent_outfile->configure(-state=>'normal'); $ent_outfile->delete(0,'end'); $ent_outfile->insert('end',"outfile"); $ch_tries->deselect; $ent_tries->delete(0,'end'); $ch_split->deselect; $ent_split->delete(0,'end'); $ch_overwrite->deselect; $ent_user->delete(0,'end'); $ent_passw->delete(0,'end'); $ch_addpar->deselect; $ent_addpar->delete(0,'end'); $ch_custdir->deselect; $ent_custdir->configure(-state=>'normal'); $ent_custdir->delete(0,'end'); $ent_custdir->insert('end',"download"); # $ch_refer->deselect; $ent_refer->configure(-state=>'normal'); $ent_refer->delete(0,'end'); # $ch_proxy->deselect; $proxy_url=""; $proxy_port=""; $proxy_user=""; $proxy_passw=""; # $mode=0; $ent_url->delete(0,'end'); $ent_tor->delete(0,'end'); $ent_meta->delete(0,'end'); } while (<SETTING>) { chomp; SWITCH:{ # logging /^-l(.*)$/ && do { $ch_logfile->select; $ent_logfile->delete(0,'end'); $ent_logfile->insert('end',$1); last SWITCH; }; /^-o(.*)$/ && do { $ch_outfile->select; $ent_outfile->delete(0,'end'); $ent_outfile->insert('end',$1); last SWITCH; }; # download /^-m(\d+)$/ && do { $ch_tries->select; $ent_tries->insert('end',$1); last SWITCH; }; /^-s(\d+)$/ && do { $ch_split->select; $ent_split->insert('end',$1); last SWITCH; }; /^--allow-overwrite=true$/ && do { $ch_overwrite->select; last SWITCH; }; /^--http-user=(.*)$/ && do { $ent_user->insert('end',$1); last SWITCH; }; /^--http-password=(.*)$/ && do { $ent_passw->insert('end',$1); last SWITCH; }; # directory /^-d(.*)$/ && do { $ch_custdir->select; $ent_custdir->delete(0,'end'); $ent_custdir->insert('end',$1); last SWITCH; }; # referer /^--referer=(.*)$/ && do { $ch_refer->select; $ent_refer->delete(0,'end'); $ent_refer->insert('end',$1); last SWITCH; }; # http /^--http-proxy-user=(.*)$/ && do { $proxy_user=$1; last SWITCH; }; /^--http-proxy-password=(.*)$/ && do { $proxy_passw=$1; last SWITCH; }; /^--http-proxy=(.*):(.*)$/ && do { $proxy_url=$1; $proxy_port=$2; $ch_proxy->select; last SWITCH; }; #mode /^-T(.*)$/ && do { $mode=1; $ent_tor->delete(0,'end'); $ent_tor->insert('end',$1); last SWITCH; }; /^-M(.*)$/ && do { $mode=2; $ent_meta->delete(0,'end'); $ent_meta->insert('end',$1); last SWITCH; }; # URL /^(http.*)$/ && do { $mode=0; $ent_url->delete(0,'end'); $ent_url->insert('end',$1); last SWITCH; }; # } } close SETTING; } } #------------------------------------------------------------------------------ # Configure Proxy #------------------------------------------------------------------------------ sub config_proxy { # open new window my $top_proxy = $mw->Toplevel( -title=>'Configure Proxy', ); $top_proxy->geometry("+".int($mw->x+50). "+".int($mw->y+50)); my $frame_puser = $top_proxy->Frame() ->pack(-fill=>'x'); $frame_puser->Label( -text=>"Proxy User:" ) ->pack(-side=>"left"); my $ent_puser = $frame_puser->Entry(-width=>"5", -textvariable=>\$proxy_user, ) ->pack(-side=>"left", -fill=>'x', -expand=>'1' ); my $frame_ppassw = $top_proxy->Frame ->pack(-fill=>'x'); $frame_ppassw->Label( -text=>"Proxy Password:" ) ->pack(-side=>"left"); my $ent_ppassw = $frame_ppassw->Entry(-width=>"12", -textvariable=>\$proxy_passw, ) ->pack(-side=>"left", -fill=>'x', -expand=>'1' ); $top_proxy->Label( -text=>"Proxy URL:", -anchor=>'w') ->pack(-fill=>'x'); my $ent_purl = $top_proxy->Entry( -textvariable=>\$proxy_url, ) ->pack(-fill=>'x'); my $frame_pport = $top_proxy->Frame ->pack(-fill=>'x'); $frame_pport->Label( -text=>"Proxy Port:" ) ->pack(-side=>"left"); my $ent_pport = $frame_pport->Entry(-width=>"12", -textvariable=>\$proxy_port, ) ->pack(-side=>"left", -fill=>'x', -expand=>'1' ); my $frame_butt = $top_proxy->Frame ->pack( -fill=>'x', -expand=>'1', ); $frame_butt->Button( -text => "OK", -command => sub { $top_proxy->destroy } ) ->pack(-side => 'left', -fill=>'x', -expand=>'1', ); $frame_butt->Button( -text => "Clear", -command => sub { $proxy_user=""; $proxy_passw=""; $proxy_url=""; $proxy_port=""; } ) ->pack(-side => 'left', -fill=>'x', -expand=>'1', ); } #------------------------------------------------------------------------------ # About #------------------------------------------------------------------------------ sub about { # open new window my $text = << ' END_OFF_TEXT'; aria2::gui A graphical user interface for aria2 Copyright (C) 2007 Rudolf Martin 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. 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. Homepage: www.martin-achern.de/wgetgui/ Email: wgetgui@martin-achern.de END_OFF_TEXT my $top_about = $mw->Toplevel( -title=>'About aria2::gui', ); my $text_about = $top_about->Text( -width=>60, ) ->pack(); $text_about->insert("end", $text); $text_about->configure(-state=>'disabled'); $top_about->Button( -text => "OK", -command => sub { $top_about->destroy } ) ->pack(); } #------------------------------------------------------------------------------ #------------------------------------------------------------------------------ # bug: read proxy-setting # new: proxy-method=get # new: --allow-overwrite=true #
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor