aboutsummaryrefslogtreecommitdiffstats
path: root/lib/AdminPanel/Rpmdragora/gui.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/AdminPanel/Rpmdragora/gui.pm')
-rw-r--r--lib/AdminPanel/Rpmdragora/gui.pm125
1 files changed, 110 insertions, 15 deletions
diff --git a/lib/AdminPanel/Rpmdragora/gui.pm b/lib/AdminPanel/Rpmdragora/gui.pm
index 5606c7cb..6985b1a5 100644
--- a/lib/AdminPanel/Rpmdragora/gui.pm
+++ b/lib/AdminPanel/Rpmdragora/gui.pm
@@ -64,6 +64,7 @@ our @EXPORT = qw(
$urpm
%grp_columns
%pkg_columns
+ %hidden_info
@filtered_pkgs
@initial_selection
ask_browse_tree_given_widgets_for_rpmdragora
@@ -95,6 +96,13 @@ my $loc = AdminPanel::rpmdragora::locale();
our ($descriptions, %filters, @filtered_pkgs, %filter_methods, $force_displaying_group, $force_rebuild, @initial_selection, $pkgs, $size_free, $size_selected, $urpm);
our ($results_ok, $results_none) = ($loc->N("Search results"), $loc->N("Search results (none)"));
+our %hidden_info = (
+ details => "details",
+ changelog => "changelog",
+ files => "file",
+ new_deps => "new_deps",
+
+);
our %grp_columns = (
label => 0,
icon => 2,
@@ -291,14 +299,42 @@ sub get_url_link {
sub files_format {
my ($files) = @_;
- ugtk2::markup_to_TextView_format(
+# ugtk2::markup_to_TextView_format(
'<tt>' . $spacing #- to highlight information
. join("\n$spacing", map { "\x{200e}$_" } @$files)
- . '</tt>');
+ . '</tt>';
+}
+
+#=============================================================
+
+=head2 format_link
+
+=head3 INPUT
+
+ $description: Description to be shown as link
+ $url: to be reach when click on $description link
+
+=head3 OUTPUT
+
+ $webref: href HTML tag
+
+=head3 DESCRIPTION
+
+ This function returns an href string to be published
+
+=cut
+
+#=============================================================
+sub format_link {
+ my ($description, $url) = @_;
+
+ my $webref = "<a href=\"". $url ."\">". $description ."</a>";
+
+ return $webref;
}
sub format_pkg_simplifiedinfo {
- my ($pkgs, $key, $urpm, $descriptions) = @_;
+ my ($pkgs, $key, $urpm, $descriptions, $options) = @_;
my ($name) = split_fullname($key);
my $pkg = $pkgs->{$key};
my $upkg = $pkg->{pkg};
@@ -323,16 +359,32 @@ sub format_pkg_simplifiedinfo {
#push @$s, [ gtkadd(gtkshow(my $details_exp = Gtk2::Expander->new(format_field($loc->N("Details:")))),
# gtknew('TextView', text => get_details($pkg, $upkg, $installed_version, $raw_medium))) ];
- my $details = get_details($pkg, $upkg, $installed_version, $raw_medium);
- utf8::encode($details);
- push @$s, join("\n", format_field($loc->N("Details:")). "\n" . $details);
- #$details_exp->set_use_markup(1);
- push @$s, [ "\n\n" ];
+ my $detail_link = format_link(format_field($loc->N("Details:")), $hidden_info{details} );
+ if ($options->{details}) {
+ my $details = get_details($pkg, $upkg, $installed_version, $raw_medium);
+ utf8::encode($details);
+ $detail_link .= "\n" . $details;
+ }
+ push @$s, join("\n", $detail_link, "\n");
+
#push @$s, [ build_expander($pkg, $loc->N("Files:"), 'files', sub { files_format($pkg->{files}) }) ];
- push @$s, [ "\n\n" ];
+ my $files_link = format_link(format_field($loc->N("Files:")), $hidden_info{files} );
+ if ($options->{files}) {
+# my $files = files_format($pkg->{files});
+# utf8::encode($files);
+# $files_link .= "\n" . $files;
+ }
+ push @$s, join("\n", $files_link, "\n");
+
#push @$s, [ build_expander($pkg, $loc->N("Changelog:"), 'changelog', sub { $pkg->{changelog} }, $installed_version) ];
+ my $changelog_link = format_link(format_field($loc->N("Changelog:")), $hidden_info{changelog} );
+ if ($options->{files}) {
+# my $changelog = $pkg->{changelog};
+# utf8::encode($changelog);
+# $changelog_link .= "\n" . $changelog;
+ }
+ push @$s, join("\n", $changelog_link, "\n");
- push @$s, [ "\n\n" ];
if ($upkg->id) { # If not installed
# push @$s, get_new_deps($urpm, $upkg);
}
@@ -1018,7 +1070,7 @@ sub callback_choices {
#=============================================================
sub setInfoOnWidget {
- my ($pkgname, $infoWidget) = @_;
+ my ($pkgname, $infoWidget, $options) = @_;
return if( ref $infoWidget ne "yui::YRichText");
@@ -1026,7 +1078,7 @@ sub setInfoOnWidget {
my $info_text ="<h2>" . $loc->N("Informations") . "</h2>";
- my @data = get_info($pkgname);
+ my @data = get_info($pkgname, $options);
for(@{$data[0]}){
if(ref $_ ne "ARRAY"){
$info_text .= "<br />" . $_;
@@ -1467,13 +1519,33 @@ or you already installed all of them."));
statusbar_msg_remove($wait) if defined $wait;
}
+#=============================================================
+
+=head2 get_info
+
+=head3 INPUT
+
+ $key: package full name
+ $options: HASH reference containing:
+ details => show details
+ changelog => show changelog
+ files => show files
+ new_deps => show new dependencies
+
+=head3 DESCRIPTION
+
+ return a format_pkg_simplifiedinfo
+
+=cut
+
+#=============================================================
sub get_info {
- my ($key, $widget) = @_;
+ my ($key, $options) = @_;
#- the package information hasn't been loaded. Instead of rescanning the media, just give up.
exists $pkgs->{$key} or return [ [ $loc->N("Description not available for this package\n") ] ];
#- get the description if needed:
- exists $pkgs->{$key}{description} or slow_func($widget, sub { extract_header($pkgs->{$key}, $urpm, 'info', find_installed_version($pkgs->{$key}{pkg})) });
- format_pkg_simplifiedinfo($pkgs, $key, $urpm, $descriptions);
+ exists $pkgs->{$key}{description} or slow_func("", sub { extract_header($pkgs->{$key}, $urpm, 'info', find_installed_version($pkgs->{$key}{pkg})) });
+ format_pkg_simplifiedinfo($pkgs, $key, $urpm, $descriptions, $options);
}
sub sort_callback {
@@ -1488,6 +1560,29 @@ sub run_help_callback {
run_program::raw({ detach => 1, as_user => 1 }, 'www-browser', $url);
}
+#=============================================================
+
+=head2 run_browser
+
+=head3 INPUT
+
+ $url: url to be passed to the configured browser
+
+=head3 DESCRIPTION
+
+ This function calls the browser with the given URL
+
+=cut
+
+#=============================================================
+sub run_browser {
+ my $url = shift;
+
+ my ($user) = grep { $_->[2] eq $ENV{USERHELPER_UID} } list_passwd();
+ local $ENV{HOME} = $user->[7] if $user && $ENV{USERHELPER_UID};
+ run_program::raw({ detach => 1, as_user => 1 }, 'www-browser', $url);
+}
+
sub groups_tree {
return %groups_tree;
}