--- Emerge-Progress_0.1.10.perl 2006-02-19 19:07:38.000000000 +0100 +++ Emerge-Progress_0.1.11.perl 2006-02-22 21:57:55.826344456 +0100 @@ -4,13 +4,15 @@ use utf8; use Gtk2 '-init'; use Gtk2::Helper; +use Gtk2::GladeXML; use strict; use FileHandle; use Data::Dumper; # for debugging purposes +my $glade = Gtk2::GladeXML -> new("/home/users/t/theemperor/Projects/project1/project1.glade"); #Definering av ting.. -my $version = '0.1.9'; +my $version = '0.1.11'; my $logfile = "/var/log/emerge.log"; my @package_list; my $lastline; @@ -21,61 +23,43 @@ my $progresstring = '.'; my @cols = ( { title => 'Name', type => 'Glib::String', }, - { title => 'Date', type => 'Glib::String', }, + { title => 'Started', type => 'Glib::String', }, { title => 'Status', type => 'Glib::String', }, ); +my @cols_done = ( + { title => 'Name', type => 'Glib::String', }, + { title => 'Started', type => 'Glib::String', }, + { title => 'Completed in', type => 'Glib::String', }, +); + #initsialisere ting.. my $store = Gtk2::ListStore->new( map {$_->{type}} @cols ); -my $storedone = Gtk2::ListStore->new( map { $_->{type}} @cols ); -my $window = Gtk2::Window->new; -my $swindow = Gtk2::ScrolledWindow->new; -my $vbox = Gtk2::VBox->new; -my $buttonbox = Gtk2::HButtonBox->new; -my $exitbutton = Gtk2::Button->new('Lukk'); -my $updatebutton = Gtk2::Button->new('Update system'); -my $treeview = Gtk2::TreeView->new_with_model($store); -my $treeviewdone = Gtk2::TreeView->new_with_model($storedone); -my $statusbar = Gtk2::Statusbar->new; +my $storedone = Gtk2::ListStore->new( map { $_->{type}} @cols_done ); +my $window = $glade -> get_widget("window1"); +my $swindow = $glade -> get_widget("scrolledwindow1"); +my $swindow2 = $glade -> get_widget("scrolledwindow2"); +my $vbox = $glade -> get_widget("vbox1"); +my $buttonbox = $glade -> get_widget("hbuttonbox1"); +my $exitbutton = $glade -> get_widget("button2"); +my $updatebutton = $glade -> get_widget("button1"); +my $treeview = $glade -> get_widget("treeview1"); +$treeview -> set_model($store); +my $treeviewdone = $glade -> get_widget("treeview2"); +$treeviewdone -> set_model($storedone); +my $statusbar = $glade -> get_widget("statusbar1"); #sette parametre.. -$window->set_default_size(600,400); -$window->set_title("Emerge Progress $version"); -$buttonbox->set_layout_default("end"); -$buttonbox->set_spacing_default(12); -$treeview->set_headers_visible(0); -$treeviewdone->set_headers_visible(0); $exitbutton->signal_connect(clicked => sub { Gtk2->main_quit; }); $updatebutton->signal_connect(clicked => sub { &updatesystem; }); $window->signal_connect(destroy => sub { Gtk2->main_quit; }); -$statusbar->set_has_resize_grip('0'); -$swindow->set_policy (qw/automatic automatic/); -#vis ting.. -$buttonbox->pack_start($updatebutton,0,0,0); -$buttonbox->pack_start($exitbutton,0,0,0); -$swindow->add($vbox); -$window->add($swindow); -$window->show_all(); #Start programmet.. &sett_opp; Gtk2->main; sub sett_opp { - my $label_ongoing = Gtk2::Label->new("Ongoing Emerges"); - my $label_done = Gtk2::Label->new("Done Emerges"); - $label_ongoing->set_justify('left'); - $label_done->set_justify('left'); - $vbox->pack_start($label_ongoing,0,0,0); - $vbox->pack_start($treeview,1,1,0); - $vbox->pack_start($label_done,0,0,0); - $vbox->pack_start($treeviewdone,1,1,0); - my $hbox = Gtk2::HBox->new; - $hbox->pack_start($statusbar,1,1,0); - $hbox->pack_start($buttonbox,0,0,0); - $vbox->pack_start($hbox,0,0,0); - $window->show_all; &sett_opp_kolonner; &parselog("emerge"); my $timer = Glib::Timeout->add(10000, \&test); @@ -98,7 +82,12 @@ my $column = Gtk2::TreeViewColumn->new_with_attributes( $_->{title}, $renderer, text => $i ); $treeview->append_column($column); + $i++; + } + $i = 0; + foreach(@cols_done) + { $rendererdone = Gtk2::CellRendererText->new; $rendererdone->signal_connect (edited => sub { my ($celldone, $text_pathdone, $new_textdone, $storedone) = @_; @@ -126,17 +115,17 @@ my $syncbutton = Gtk2::Button->new('Sync'); my $emergebutton = Gtk2::Button->new('emerge'); $syncbutton->signal_connect(clicked => sub { - $statusbar->push('1','Running emerge --sync, this will take some time.'); - $noclickupdate = 1; - &sync; - $updatewindow->destroy; - }); + $statusbar->push('1','Running emerge --sync, this will take some time.'); + $noclickupdate = 1; + &sync; + $updatewindow->destroy; + }); $emergebutton->signal_connect(clicked => sub { - $statusbar->push('1','Running emerge world, this will take some time.'); - $noclickupdate = 1; - &emergeworld; - $updatewindow->destroy; - }); + $statusbar->push('1','Running emerge world, this will take some time.'); + $noclickupdate = 1; + &emergeworld; + $updatewindow->destroy; + }); $updatewindow->add($vbox); $vbox->pack_start($label,0,0,0); $vbox->pack_start($buttonbox,0,0,0); @@ -209,7 +198,8 @@ chomp($lastline) or &error("Kunne ikke lese /var/log/emerge.log,\nEr du i portage-gruppen?"); if($_[0] eq 'emerge') { - open($fh, q^tail -n100 "/var/log/emerge.log" | grep ">>> emerge"| sort -k7 -u| tail -n10|^); +# open($fh, q^tail -n100 "/var/log/emerge.log" | grep ">>> emerge"| sort -k7 -u| tail -n10|^); + open($fh, q^tail -n100 "/var/log/emerge.log" | grep ">>> emerge" | tail -n10|^); } $tag = Gtk2::Helper->add_watch ( $fh->fileno, 'in', sub { @@ -236,7 +226,16 @@ my $package_group = (split/\//, $line)[0]; $package_group = (split /\ /, $package_group)[7]; my $status = &status_package($package); - + my $completed = 0; + if(defined($status)) + { + if((split / /,$status)[0] eq 'completed') + { + my $tidting = (split / /,$status)[1]; + $status = &gettime($tidting - $time); + $completed = 1; + } + } my $tid = sprintf("%d",$time); $tid = gmtime($tid); @@ -246,8 +245,7 @@ foreach(@data) { - - if((split / /,$status)[0] eq "completed") + if($completed) { my $iterdone = $storedone->append; $storedone->set($iterdone, @@ -264,11 +262,11 @@ 1, $_->{'Time'}, 2, $_->{'Status'} ); + push(@package_list, int($time)); + push(@package_list, "$package_group"); + push(@package_list, "$package"); } } - push(@package_list, int($time)); - push(@package_list, "$package_group"); - push(@package_list, "$package"); return 1; } @@ -278,29 +276,29 @@ chomp($testline); if($testline eq $lastline) { - my $i = 0; - my $idone = 0; - my $i2 = 0; - while($i < scalar(@package_list)) + my $testi = 0; + my $pathi = 0; + while($testi < scalar(@package_list)) { - $status = &status_package($package_list[$i + 2]); - if((split / /,$status)[0] eq 'completed') - { - my $pathdone = Gtk2::TreePath->new_from_string($idone); - my $iterdone = $storedone->get_iter($pathdone); - $storedone->set($iterdone, 2, $status); - $idone++; - } - else + my $path; + my $iter; + $status = &status_package($package_list[$testi + 2]); + if(defined($testi)) { - my $path = Gtk2::TreePath->new_from_string($i2); - my $iter = $store->get_iter($path); - $store->set($iter, 2, $status); - $i2++; + my $path = Gtk2::TreePath->new_from_string($pathi); + if(defined($path)) + { + my $iter = $store->get_iter($path); + if(defined($iter)) + { + $store->set($iter, 2, $status); + } + } } - $i++; - $i++; - $i++; + $testi++; + $testi++; + $testi++; + $pathi++; } return 1; } @@ -315,18 +313,12 @@ sub status_package { + return 0 unless($_[0]); my $test = `tail -n100 $logfile | grep "$_[0]"| tail -n1`; +# my $isdone = `tail -n100 $logfile | grep "$_[0]" | grep "completed" | tail -n1`; my $isdone = (split /:::/, $test)[1]; - if(defined($isdone)) - { - if((split / /, $isdone)[1] eq "completed") - { - my $whendone = (split /:::/, $test)[0]; - $whendone = (split /:/, $whendone)[0]; - return("completed at ".gmtime($whendone)); - } - } - else + unless(defined($isdone)) +# if($isdone eq '') { my $antatt_status = (split / /, $test)[6]; my $alternativ_status = (split / /, $test)[3]; @@ -347,10 +339,17 @@ return($antatt_status); } } + else + { + my $whendone = (split /:::/, $test)[0]; + $whendone = (split /:/, $whendone)[0]; + return("completed $whendone"); + } } sub prosent { + return 0 unless $_[0]; my $progress; my $total = `find /var/tmp/portage/$_[0] -iname "*.c" -or -iname "*.cpp" -or -iname "*.cc" | wc -l`; chomp($total); @@ -359,18 +358,43 @@ $progress = `find /var/tmp/portage/$_[0] -iname "*.o" | wc -l`; chomp($progress); } - unless($progress eq "0" || $total eq "0") - { - my $prosent = ($progress / $total * 100); - $prosent = sprintf("%.2f", $prosent); - return("$prosent%"); - } - else + if(defined($progress)) { - return("Ukjent status.."); + if(defined($total)) + { + unless($progress eq "0" || $total eq "0") + { + my $prosent = ($progress / $total * 100); + $prosent = sprintf("%.2f", $prosent); + return("$prosent%"); + } + else + { + return("Ukjent status.."); + } + } } } +sub gettime # gettime(tid i sekunder) +{ + my $gettime = $_[0]; + if($gettime > 0) + { + my $returnstring; + my $days = int($gettime/24/60/60); + my $hours = int($gettime/60/60)%24; + my $minutes = int($gettime/60)%60; + my $seconds = int$gettime%60; + if($seconds > 0) { $returnstring = "$seconds sec"; } + if($minutes > 0) { $returnstring = "$minutes min, $seconds sec"; } + if($hours > 0) { $returnstring = "$hours hours, $minutes min, $seconds sec"; } + if($days > 0) { $returnstring = "$days days, $hours hours, $minutes min, $seconds sec"; } + return $returnstring; + } # if + else { return 0; } +} # sub time + sub error { my $message = shift;