diff options
| author | Angelo Naselli <anaselli@linux.it> | 2014-11-27 14:00:31 +0100 | 
|---|---|---|
| committer | Angelo Naselli <anaselli@linux.it> | 2014-11-27 14:00:31 +0100 | 
| commit | 63afd4949f397b3f17207db25f3568e842c64440 (patch) | |
| tree | cb27c401c005f977249c70055d2f47437f5f5a90 /lib | |
| parent | 802ec61bef9e5a742cf7f3aa70abce2c4fbc7f93 (diff) | |
| download | manatools-63afd4949f397b3f17207db25f3568e842c64440.tar manatools-63afd4949f397b3f17207db25f3568e842c64440.tar.gz manatools-63afd4949f397b3f17207db25f3568e842c64440.tar.bz2 manatools-63afd4949f397b3f17207db25f3568e842c64440.tar.xz manatools-63afd4949f397b3f17207db25f3568e842c64440.zip  | |
code clean up
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/AdminPanel/Rpmdragora/gui.pm | 121 | 
1 files changed, 64 insertions, 57 deletions
diff --git a/lib/AdminPanel/Rpmdragora/gui.pm b/lib/AdminPanel/Rpmdragora/gui.pm index 60dccab0..1e457f59 100644 --- a/lib/AdminPanel/Rpmdragora/gui.pm +++ b/lib/AdminPanel/Rpmdragora/gui.pm @@ -1593,21 +1593,26 @@ sub ctreefy {  }  sub _build_tree { -    my ($tree, $elems, @elems) = @_; +    my ($tree, $pkg_by_group_hash, @pkg_name_and_group_list) = @_;      print "TODO ====> BUILD TREE\n"; +    yui::YUI::app()->busyCursor(); +      #- we populate all the groups tree at first -    %$elems = (); +    %{$pkg_by_group_hash} = ();      # better loop on packages, create groups tree and push packages in the proper place:      my @groups = (); -    foreach my $pkg (@elems) { +    foreach my $pkg (@pkg_name_and_group_list) { + +#         $DB::single = 1; +          my $grp = $pkg->[1];          # no state for groups (they're not packages and thus have no state)          push @groups, $grp; -        $elems->{$grp} ||= []; -        push @{$elems->{$grp}}, $pkg; +        $pkg_by_group_hash->{$grp} ||= []; +        push @{$pkg_by_group_hash->{$grp}}, $pkg;      }      my $tree_hash = AdminPanel::Shared::pathList2hash({ @@ -1642,11 +1647,12 @@ sub _build_tree {      $tree->addItems($itemColl);      $tree->doneMultipleChanges();      $tree->rebuildTree(); +    yui::YUI::app()->normalCursor();  }  sub build_tree { -    my ($tree, $tree_model, $elems, $options, $force_rebuild, $flat, $mode) = @_; +    my ($tree, $tree_model, $pkg_by_group_hash, $options, $force_rebuild, $flat, $mode) = @_;      state $old_mode;      $mode = $options->{rmodes}{$mode} || $mode;      $old_mode = '' if(!defined($old_mode)); @@ -1655,64 +1661,65 @@ sub build_tree {      undef $force_rebuild;      my @elems;      my $wait; $wait = statusbar_msg($loc->N("Please wait, listing packages...")) if $MODE ne 'update'; -    { -        my @keys = @filtered_pkgs; -        if (member($mode, qw(all_updates security bugfix normal))) { -            @keys = grep { -                my ($name) = split_fullname($_); -                member($descriptions->{$name}{importance}, @$mandrakeupdate_wanted_categories) -                  || ! $descriptions->{$name}{importance}; -            } @keys; -            if (@keys == 0) { -                _build_tree($tree, $elems, [$loc->N("(none)")]); + +    my @keys = @filtered_pkgs; +    if (member($mode, qw(all_updates security bugfix normal))) { +        @keys = grep { +            my ($name) = split_fullname($_); +            member($descriptions->{$name}{importance}, @$mandrakeupdate_wanted_categories) +                || ! $descriptions->{$name}{importance}; +        } @keys; +        if (@keys == 0) { +            _build_tree($tree, $pkg_by_group_hash, ['', $loc->N("(none)")]);  #                 add_node('', $loc->N("(none)"), { nochild => 1 }); -                state $explanation_only_once; -                $explanation_only_once or interactive_msg($loc->N("No update"), -                                                          $loc->N("The list of updates is empty. This means that either there is +            state $explanation_only_once; +            $explanation_only_once or interactive_msg($loc->N("No update"), +                                                        $loc->N("The list of updates is empty. This means that either there is  no available update for the packages installed on your computer,  or you already installed all of them.")); -                $explanation_only_once = 1; -            } +            $explanation_only_once = 1;          } +    } +    if (scalar @keys) {          # FIXME: better do this on first group access for faster startup...          @elems = map { [ $_, !$flat && ctreefy($pkgs->{$_}{pkg}->group) ] } sort_packages(@keys); -    } -    my %sortmethods = ( -        by_size => sub { sort { $pkgs->{$b->[0]}{pkg}->size <=> $pkgs->{$a->[0]}{pkg}->size } @_ }, -        by_selection => sub { sort { $pkgs->{$b->[0]}{selected} <=> $pkgs->{$a->[0]}{selected} -                                       || uc($a->[0]) cmp uc($b->[0]) } @_ }, -        by_leaves => sub { -            # inlining part of MDK::Common::Data::difference2(): -            my %l; @l{map { $_->[0] } @_} = (); -            my @pkgs_times = ('rpm', '-q', '--qf', '%{name}-%{version}-%{release}.%{arch} %{installtime}\n', -		    map { chomp_($_) } run_program::get_stdout('urpmi_rpm-find-leaves')); -            sort { $b->[1] <=> $a->[1] } grep { exists $l{$_->[0]} } map { chomp; [ split ] } run_rpm(@pkgs_times); -        }, -        flat => sub { no locale; sort { uc($a->[0]) cmp uc($b->[0]) } @_ }, -        by_medium => sub { sort { $a->[2] <=> $b->[2] || uc($a->[0]) cmp uc($b->[0]) } @_ }, -    ); -    if ($flat) { -        add_node($tree->currentItem()->label(), '') foreach $sortmethods{$::mode->[0] || 'flat'}->(@elems); -    } else { -        if (0 && $MODE eq 'update') { -            foreach ($sortmethods{flat}->(@elems)){ -                add_node($tree->currentItem()->label(), $_->[0], $loc->N("All")) + +        my %sortmethods = ( +            by_size => sub { sort { $pkgs->{$b->[0]}{pkg}->size <=> $pkgs->{$a->[0]}{pkg}->size } @_ }, +            by_selection => sub { sort { $pkgs->{$b->[0]}{selected} <=> $pkgs->{$a->[0]}{selected} +                                        || uc($a->[0]) cmp uc($b->[0]) } @_ }, +            by_leaves => sub { +                # inlining part of MDK::Common::Data::difference2(): +                my %l; @l{map { $_->[0] } @_} = (); +                my @pkgs_times = ('rpm', '-q', '--qf', '%{name}-%{version}-%{release}.%{arch} %{installtime}\n', +                map { chomp_($_) } run_program::get_stdout('urpmi_rpm-find-leaves')); +                sort { $b->[1] <=> $a->[1] } grep { exists $l{$_->[0]} } map { chomp; [ split ] } run_rpm(@pkgs_times); +            }, +            flat => sub { no locale; sort { uc($a->[0]) cmp uc($b->[0]) } @_ }, +            by_medium => sub { sort { $a->[2] <=> $b->[2] || uc($a->[0]) cmp uc($b->[0]) } @_ }, +        ); +        if ($flat) { +            carp "WARNING: TODO \$flat not tested\n"; +            _build_tree($tree, $pkg_by_group_hash, map {[$_->[0], '']} $sortmethods{$::mode->[0] || 'flat'}->(@elems)); +#             add_node($_->[0], '') foreach $sortmethods{$::mode->[0] || 'flat'}->(@elems); +        } +        else { +            if ($::mode->[0] eq 'by_source') { +                _build_tree($tree, $pkg_by_group_hash, $sortmethods{by_medium}->(map { +                    my $m = pkg2medium($pkgs->{$_->[0]}{pkg}, $urpm); [ $_->[0], $m->{name}, $m->{priority} ]; +                } @elems)); +            } +            elsif ($::mode->[0] eq 'by_presence') { +                _build_tree($tree, $pkg_by_group_hash, map { +                    my $pkg = $pkgs->{$_->[0]}{pkg}; +                    [ $_->[0], $pkg->flag_installed ? +                        (!$pkg->flag_skip && $pkg->flag_upgrade ? $loc->N("Upgradable") : $loc->N("Installed")) +                        : $loc->N("Addable") ]; +                } $sortmethods{flat}->(@elems)); +            } +            else { +                _build_tree($tree, $pkg_by_group_hash, @elems);              } -            $tree->expand_row($tree_model->get_path($tree_model->get_iter_first), 0); -        } elsif ($::mode->[0] eq 'by_source') { -             _build_tree($tree, $elems, $sortmethods{by_medium}->(map { -                my $m = pkg2medium($pkgs->{$_->[0]}{pkg}, $urpm); [ $_->[0], $m->{name}, $m->{priority} ]; -            } @elems)); -        } elsif ($::mode->[0] eq 'by_presence') { -            _build_tree($tree, $elems, map { -                my $pkg = $pkgs->{$_->[0]}{pkg}; -                [ $_->[0], $pkg->flag_installed ? -                    (!$pkg->flag_skip && $pkg->flag_upgrade ? $loc->N("Upgradable") : $loc->N("Installed")) -                      : $loc->N("Addable") ]; -              } $sortmethods{flat}->(@elems)); -        } else { -            _build_tree($tree, $elems, @elems); -            # INFO: $elems contains references to the packages of the group, see _build_tree          }      }      statusbar_msg_remove($wait) if defined $wait;  | 
