aboutsummaryrefslogtreecommitdiffstats
path: root/lib
Commit message (Expand)AuthorAgeFilesLines
* improved feed presentationfilip2015-12-271-4/+4
* refresh of list of working mirrorsfilip2015-12-132-618/+776
* changed target from mga4 to 5 for doc cached list + their refreshfilip2015-06-283-482/+1241
* mirror list preparationfilip2015-06-193-1092/+909
* adding download of pdf and epub file infrastructurefilip2015-05-022-20/+1104
* added fallback for invalid date format localisationfilip2015-05-011-1/+8
* reuse news title for community page + improvement of show_feedfilip2015-05-011-10/+28
* add a date separator (|) between blog title and it's datefilip2015-04-281-5/+6
* adding blog link and it's first title to the front page (main index)filip2015-04-281-3/+5
* Update mirror listManuel Hiebel2015-04-261-483/+488
* news_date localisable on community pagefilip2015-02-241-21/+6
* update SimplePie to the latest version 1.3.1filip2015-02-243-14788/+17285
* we only need one php-markdown libraryfilip2015-02-244-4555/+0
* Revert "Updated Estonian translation"Thomas Backlund2014-10-1224-0/+23887
* Updated Estonian translationMarek Laane2014-10-1224-23887/+0
* Update mirror listManuel Hiebel2014-08-151-130/+633
* Update mirror listManuel Hiebel2014-08-141-3/+406
* update mirror listManuel Hiebel2014-08-131-929/+12
* Update cached mirror list (mga#13564)Manuel Hiebel2014-06-211-328/+595
* updates mirrors listManuel Hiebel2014-02-021-170/+369
* updated cached list to use complete mirrorManuel Hiebel2014-02-011-657/+236
* update cached mirror list, remove some brokenManuel Hiebel2013-12-271-574/+498
* mirrors cached list updateManuel Hiebel2013-10-241-558/+485
* update mirrors list, there was some new brokenManuel Hiebel2013-08-281-529/+512
* https URL fix for lib/news.phpFilip Komar2013-08-031-12/+12
* URI may have no query stringRomain d'Alverny2013-05-291-1/+1
* modified index.php for media pageManuel Hiebel2013-05-221-232/+544
* updates cached list of mirrorsManuel Hiebel2013-05-211-326/+447
* updates cached list of mirrorsManuel Hiebel2013-05-201-149/+427
* updates cached list, add back http mirror and modifing script (which works be...Manuel Hiebel2013-05-192-77/+265
* updates cached list, with the script which check now a torrent fileManuel Hiebel2013-05-192-296/+98
* new mirrors which are completeManuel Hiebel2013-05-191-7/+86
* remove mirrors which are not complete (all other should be now working)Manuel Hiebel2013-05-191-168/+0
* add some mirrors which are completeManuel Hiebel2013-05-191-0/+135
* remove r0b0t, add dacentecManuel Hiebel2013-05-191-28/+14
* gwdg.de not yet completeManuel Hiebel2013-05-191-27/+0
* kernel.org is back, webconquest is not completeManuel Hiebel2013-05-191-31/+24
* remove some other broken linkManuel Hiebel2013-05-191-45/+0
* remove broken / out of sync mirrorManuel Hiebel2013-05-191-678/+3
* updated list of mirrorsRomain d'Alverny2013-04-291-480/+671
* manual script to force update list of mirrorsRomain d'Alverny2013-04-291-2/+1
* add linux.org.tr mirror (bug 8746)Manuel Hiebel2013-04-291-0/+31
* add back mirrors previously removed (bug 8277)Manuel Hiebel2013-04-281-1/+57
* Remove broken/incorrect mirrors (see bug 8457 and bug 8277)Romain d'Alverny2012-12-211-104/+0
* Pinq, fallback mode, fix query string usageRomain d'Alverny2012-12-211-1/+4
* updated mirrors list - see bug 8277Romain d'Alverny2012-12-201-425/+487
* _run() returns consistent dataRomain d'Alverny2012-12-191-19/+30
* better code structureRomain d'Alverny2012-11-121-18/+40
* reorg code, license headersRomain d'Alverny2012-11-123-6/+118
* text local indexesRomain d'Alverny2012-11-121-2/+0
enu_items = ( { path => N("/_File"), type => '<Branch>' }, { path => N("/File/_Quit"), accelerator => N("<control>Q"), callback => sub { my_gtk->exit(0) } }, ); ugtk::create_factory_menu($window->{rwindow}, @menu_items) unless $::isEmbedded; ######### menus end my $global_vbox = new Gtk::VBox(); $global_vbox->pack_start(new Gtk::Label(N("boot disk creation")), 0, 0, 0) unless $::isEmbedded; ######## up part my $up_vbox = new Gtk::VBox (0, 0); # device part my $dev_hbox = new Gtk::HBox (1, 0); my $device_combo = new Gtk::Combo(); my $device_button = new Gtk::Button(N("default")); $device_combo->set_popdown_strings("/dev/fd0", "/dev/fd1"); $device_button->signal_connect(clicked => sub { $device_combo->entry->set_text("/dev/fd0") }); $dev_hbox->pack_start(new Gtk::Label(N("device")), 0, 0, 0); $dev_hbox->pack_start($device_combo, 0, 0, 0); $dev_hbox->pack_start($device_button, 0, 0, 0); $up_vbox->pack_start($dev_hbox, 0, 0, 0); # kernel part my $ker_hbox = new Gtk::HBox (1, 0); my $kernel_combo = new Gtk::Combo(); my $kernel_button = new Gtk::Button(N("default")); $kernel_combo->disable_activate(); $kernel_combo->set_popdown_strings(do { opendir YREP, "/lib/modules" or die N("DrakFloppy Error: %s", $!); my @files_modules = grep !/^\.\.?$/, readdir YREP; closedir YREP; @files_modules; }); #$kernel_combo->entry->set_text(`uname -r`); $kernel_combo->entry->signal_connect(changed => sub { change_tree($kernel_combo->entry->get_text()); $list->clear() }); my $aaaa = `uname -r`; chomp($aaaa); $kernel_button->signal_connect(clicked => sub { $kernel_combo->entry->set_text($aaaa); $list->clear() }); $ker_hbox->pack_start(new Gtk::Label(N("kernel version")), 0, 0, 0); $ker_hbox->pack_start($kernel_combo, 0, 0, 0); $ker_hbox->pack_start($kernel_button, 0, 0, 0); $up_vbox->pack_start($ker_hbox, 0, 0, 5); # vbox part my $up_frame = new Gtk::Frame(N("General")); $up_frame->add($up_vbox); $global_vbox->pack_start($up_frame, 1, 1, 0); ### expert mode my $expert_main_frame = new Gtk::Frame(N("Expert Area")); my $expert_dedans = new Gtk::VBox(0, 5); $expert_dedans->border_width(5); my $expert_button_frame = new Gtk::Frame(N("mkinitrd optional arguments")); my $expert_mod_frame = new Gtk::Frame(N("Add a module")); my $expert_pane = new Gtk::HPaned(); $expert_pane->set_handle_size(10); $expert_pane->set_gutter_size(8); my $expert_button = new Gtk::Button(N("Expert Mode")); $expert_button->signal_connect(clicked => sub { if ($expert_mode) { $expert_mod_frame->hide(); $expert_button_frame->hide() } else { $expert_mod_frame->show(); $expert_button_frame->show(); } $expert_mode = !$expert_mode; }); my $expert_button_vbox = new Gtk::VBox(0, 5); my $expert_button_hbox = new Gtk::HBox(0, 5); my $expert_button_hbox2 = new Gtk::HBox(0, 5); my $force_button = new Gtk::ToggleButton(N("force")); my $needed_button = new Gtk::ToggleButton(N("if needed")); my $scsi_button = new Gtk::ToggleButton(N("omit scsi modules")); my $raid_button = new Gtk::ToggleButton(N("omit raid modules")); $expert_button_hbox->pack_start($force_button, 0, 0, 0); $expert_button_hbox->pack_start($raid_button, 0, 0, 0); $expert_button_hbox2->pack_start($needed_button, 0, 0, 0); $expert_button_hbox2->pack_start($scsi_button, 0, 0, 0); $expert_button_vbox->pack_start($expert_button_hbox, 0, 0, 0); $expert_button_vbox->pack_start($expert_button_hbox2, 0, 0, 0); $expert_button_frame->add($expert_button_vbox); $expert_dedans->pack_start($expert_button_frame, 0, 0, 0); $expert_mod_frame->add($expert_pane); $expert_dedans->pack_start($expert_mod_frame, 1, 1, 0); $expert_main_frame->add($expert_dedans); $global_vbox->pack_start($expert_main_frame, 1, 1, 0); ### the tree # Create a ScrolledWindow for the tree my $tree_scrolled_win = new Gtk::ScrolledWindow(); $tree_scrolled_win->set_usize(200, $::isEmbedded ? 0 : 175); $expert_pane->add1($tree_scrolled_win); $tree_scrolled_win->set_policy('automatic', 'automatic'); # Create root tree my $tree = new Gtk::Tree(); my $leaf; my $root_dir; $tree_scrolled_win->add_with_viewport($tree); $tree->set_selection_mode('single'); $tree->set_view_mode('item'); fill_tree($kernel_combo->entry->get_text()); # Create a ScrolledWindow for the list my $list_scrolled_win = new Gtk::ScrolledWindow(undef, undef); my $rmmod_button = new Gtk::Button(N("Remove a module")); my $expert_inside_pane2 = new Gtk::VBox(0, 0); my $list_selected_row; $expert_inside_pane2->pack_start($list_scrolled_win, 1, 1, 0); $expert_inside_pane2->pack_start($rmmod_button, 0, 0, 0); $expert_pane->add2($expert_inside_pane2); $list_scrolled_win->set_policy('automatic', 'automatic'); $rmmod_button->signal_connect(clicked => sub { $list->remove($list_selected_row) }); # Create list box ########################################################## from here my $list $list->signal_connect(select_row => sub { (undef, $list_selected_row) = @_ }); $list_scrolled_win->add($list); $list->set_column_justification(1, 'right'); $list->set_column_width(0, 200); $list->set_column_width(1, 50); $list->set_selection_mode('single'); $list->set_shadow_type('none'); $list->show(); ### output my $output_frame = new Gtk::Frame(N("Output")); my $output = new Gtk::Text(undef, undef); my $vscrollbar = new Gtk::VScrollbar($output->vadj); my $output_hbox = new Gtk::HBox(0, 0); $output_hbox->border_width(5); $output_hbox->set_usize(30, 75); $output_hbox->pack_start($output, 1, 1, 0); $output_hbox->pack_start($vscrollbar, 0, 0, 0); $output_frame->add($output_hbox); $global_vbox->pack_start($output_frame, 0, 0, 0); ### final buttons my $build_button = new Gtk::Button(N("Build the disk")); my $cancel_button = new Gtk::Button(N("Cancel")); my $fin_hbox = new Gtk::HBox(0, 0); $cancel_button->signal_connect(clicked => sub { my_gtk->exit(0) }); $build_button->signal_connect(clicked => \&build_it); $fin_hbox->pack_end($cancel_button, 0, 0, 0); $fin_hbox->pack_end($build_button, 0, 0, 10); $fin_hbox->pack_end($expert_button, 0, 0, 10); $global_vbox->pack_start($fin_hbox, 0, 0, 0); ### back to window $window->{window}->add($global_vbox); $window->{rwindow}->show_all(); $expert_mod_frame->hide(); $expert_button_frame->hide(); $window->main; my_gtk->exit(0); #------------------------------------------------------------- # tree functions #------------------------------------------------------------- ### Subroutines sub fill_tree { ($root_dir) = @_; $root_dir = "/lib/modules/" . $root_dir; # Create root tree item widget $leaf = new_with_label Gtk::TreeItem($root_dir); $tree->append($leaf); $leaf->signal_connect('select', \&select_item, $root_dir); $leaf->set_user_data($root_dir); # Create the subtree if (has_sub_trees($root_dir)) { my $subtree = new Gtk::Tree(); $leaf->set_subtree($subtree); $leaf->signal_connect('expand', \&expand_tree, $subtree); $leaf->signal_connect('collapse', \&collapse_tree); $leaf->expand(); } } sub change_tree { $leaf->destroy(); fill_tree(@_); $leaf->show(); } # Callback for expanding a tree - find subdirectories, files and add them to tree sub expand_tree { my ($item, $subtree) = @_; my $path; my $item_new; my $new_subtree; my $dir = $item->get_user_data(); chdir($dir); foreach my $dir_entry (all(".")) { if (-d $dir_entry or $dir_entry =~ /\.o(\.gz)?$/) { $path = $dir . "/" . $dir_entry; $path =~ s|//|/|g; $item_new = new_with_label Gtk::TreeItem($dir_entry); $item_new->set_user_data($path); $item_new->signal_connect('select', \&select_item, $path); $subtree->append($item_new); $item_new->show(); if (has_sub_trees($path)) { $new_subtree = new Gtk::Tree(); $item_new->set_subtree($new_subtree); $item_new->signal_connect('expand', \&expand_tree, $new_subtree); $item_new->signal_connect('collapse', \&collapse_tree); } } } chdir(".."); } # Callback for collapsing a tree -- removes the subtree sub collapse_tree { my ($item) = @_; my $subtree = new Gtk::Tree(); $item->remove_subtree(); $item->set_subtree($subtree); $item->signal_connect('expand', \&expand_tree, $subtree); } # Called whenever an item is clicked on the tree widget. sub select_item { my ($widget, $file) = @_; return if -d $file; my $size = (lstat($file))[7]; my $lr = $list->rows(); my $i; $file =~ s|/lib/modules/.*?/||g; for ($i = 0; $i < $lr; $i++) { last if $file eq $list->get_text($i, 0); } print $file, "\n"; $list->append($file, $size) if $i == $lr or $lr == 0; } #------------------------------------------------------------- # the function #------------------------------------------------------------- sub build_it { my $y; my $co = "/sbin/mkbootdisk --noprompt --verbose --device " . $device_combo->entry->get_text(); if ($expert_mode) { $co .= " --mkinitrdargs -f" if $force_button->get_active; $co .= " --mkinitrdargs --ifneeded" if $needed_button->get_active; $co .= " --mkinitrdargs --omit-scsi-modules" if $scsi_button->get_active; $co .= " --mkinitrdargs --omit-raid-modules" if $raid_button->get_active; for (my $i = 0; $i < $list->rows(); $i++) { $y = $list->get_text($i, 0); $y =~ s|.*?/||g; $co .= " --mkinitrdargs --with=" . $y; #. "/usr/lib/" . $kernel_combo->entry->get_text() . "/" . $y; } } $co .= " " . $kernel_combo->entry->get_text(); $co .= " 2>&1 |"; create_dialog(N("Be sure a media is present for the device %s", $device_combo->entry->get_text()), 1) or return; # we test if the media is present test: my $a = "dd count=1 if=/dev/null of=" . $device_combo->entry->get_text() . " 2>&1"; my $b = `$a`; if ($b =~ /dd/) { create_dialog(N("There is no medium or it is write-protected for device %s.\nPlease insert one.", $device_combo->entry->get_text()), 1) ? goto test : return 0 } local *STATUS; open STATUS, $co or do { create_dialog(N("Unable to fork: %s", $!), 0); return }; local $_; while (<STATUS>) { $output->insert($fixed_font, undef, undef, $_); } close STATUS or create_dialog(N("Unable to close properly mkbootdisk: \n %s \n %s", $!, $?), 0); return (0); } #### # This is put at the end of the file because any translatable string # appearing after this will not be found by xgettext, and so wont end in # the pot file... #### # Test whether a directory has subdirectories sub has_sub_trees { my ($dir) = @_; foreach my $file (glob_("$dir/*")) { return 1 if -d $file or $file =~ /\.o(\.gz)?$/; } return (0); }