| 1 | #!/usr/bin/env perl |
| 2 | #ArchLinux Daemon Manager Gui! by Harvie 2oo9 |
| 3 | use strict; |
| 4 | use warnings; |
| 5 | use utf8; |
| 6 | use Gtk2 qw(-init); |
| 7 | |
| 8 | if($< > 0) { |
| 9 | #run as root |
| 10 | print "You are not root! Trying GKSU...\n"; |
| 11 | system("gksu ".$0); |
| 12 | exit; |
| 13 | } |
| 14 | |
| 15 | my $aldm = '/usr/sbin/aldm'; |
| 16 | |
| 17 | my %iterators = {}; |
| 18 | |
| 19 | my $builder = Gtk2::Builder->new(); |
| 20 | $builder->add_from_file('/usr/share/aldm-gui/aldm.ui'); |
| 21 | |
| 22 | my %widgets; |
| 23 | foreach my $widget qw(window1 aboutdialog1 treeview1 liststore1 label2) |
| 24 | { |
| 25 | $widgets{$widget}=$builder->get_object($widget); |
| 26 | } |
| 27 | |
| 28 | $builder->connect_signals( undef ); |
| 29 | $builder = undef; |
| 30 | |
| 31 | #create columns in treeview |
| 32 | my $column = Gtk2::TreeViewColumn->new_with_attributes('Daemon', Gtk2::CellRendererText->new, text => 0); |
| 33 | $widgets{'treeview1'}->append_column($column); |
| 34 | |
| 35 | $column = Gtk2::TreeViewColumn->new_with_attributes('Running', Gtk2::CellRendererText->new, text => 1); |
| 36 | $widgets{'treeview1'}->append_column($column); |
| 37 | |
| 38 | $column = Gtk2::TreeViewColumn->new_with_attributes('WhatIs', Gtk2::CellRendererText->new, text => 2); |
| 39 | $widgets{'treeview1'}->append_column($column); |
| 40 | |
| 41 | refresh_view(); |
| 42 | |
| 43 | $widgets{'window1'}->show(); |
| 44 | |
| 45 | |
| 46 | Gtk2->main(); |
| 47 | exit; |
| 48 | |
| 49 | sub on_window1_destroy |
| 50 | { |
| 51 | Gtk2->main_quit(); |
| 52 | } |
| 53 | |
| 54 | sub on_imagemenuitem10_activate |
| 55 | { |
| 56 | $widgets{'aboutdialog1'}->show(); |
| 57 | } |
| 58 | |
| 59 | sub on_aboutdialog1_close |
| 60 | { |
| 61 | $widgets{'aboutdialog1'}->hide(); |
| 62 | } |
| 63 | |
| 64 | sub refresh_view |
| 65 | { |
| 66 | #clear |
| 67 | #$widgets{'liststore1'}->clear(); |
| 68 | |
| 69 | #list daemons |
| 70 | open(my $daemon_list, "$aldm list|"); |
| 71 | while(<$daemon_list>) { |
| 72 | no warnings 'uninitialized'; |
| 73 | $_ =~ s/^\s+|\s+$//g; #trim |
| 74 | open(my $whatis, "'$aldm' whatis '$_'|"); my $w = <$whatis>; close($whatis); $w =~ s/^\s+|\s+$//g; #trim |
| 75 | (my $run, $w) = split(/ /,$w,2); |
| 76 | |
| 77 | #my $iter = $widgets{'liststore1'}->append(); |
| 78 | #$widgets{'liststore1'}->set($iter, 0 => "$_", 1=> "$run", 2 => "$w"); |
| 79 | |
| 80 | my $serv = $_; |
| 81 | $serv =~ s/^(!|@)//g; |
| 82 | |
| 83 | if(!defined($iterators{$serv})) { |
| 84 | $iterators{$serv} = $widgets{'liststore1'}->append(); |
| 85 | } |
| 86 | $widgets{'liststore1'}->set($iterators{$serv}, 0 => "$_", 1=> "$run", 2 => "$w"); |
| 87 | } |
| 88 | close($daemon_list); |
| 89 | } |
| 90 | |
| 91 | sub get_selected_daemon |
| 92 | { |
| 93 | my $path = $widgets{'treeview1'}->get_selection->get_selected_rows; |
| 94 | my $model = $widgets{'treeview1'}->get_model; |
| 95 | my $iter = $model->get_iter($path); |
| 96 | my $str = $model->get ($iter, 0); |
| 97 | return $str; |
| 98 | } |
| 99 | |
| 100 | sub status |
| 101 | { |
| 102 | $_[0] =~ s/^\s+|\s+$//g; #trim |
| 103 | $widgets{'label2'}->set_text($_[0]); |
| 104 | } |
| 105 | |
| 106 | sub s_system |
| 107 | { |
| 108 | open(my $pipe, "$_[0]|"); |
| 109 | while(<$pipe>) { status($_); } |
| 110 | close($pipe); |
| 111 | } |
| 112 | |
| 113 | sub on_button_start_clicked { s_system "$aldm start ".get_selected_daemon(); refresh_view(); } |
| 114 | sub on_button_stop_clicked { s_system "$aldm stop ".get_selected_daemon(); refresh_view(); } |
| 115 | sub on_button_restart_clicked { s_system "$aldm restart ".get_selected_daemon(); refresh_view(); } |
| 116 | |
| 117 | sub on_button_enable_fg_clicked { |
| 118 | my $d = get_selected_daemon(); |
| 119 | system "$aldm enable-fg ".$d; |
| 120 | refresh_view(); |
| 121 | status($d." enabled on init!"); |
| 122 | } |
| 123 | |
| 124 | sub on_button_enable_bg_clicked { |
| 125 | my $d = get_selected_daemon(); |
| 126 | system "$aldm enable-bg ".$d; |
| 127 | refresh_view(); |
| 128 | status($d." enabled on init background!"); |
| 129 | } |
| 130 | |
| 131 | sub on_button_disable_clicked { |
| 132 | my $d = get_selected_daemon(); |
| 133 | system "$aldm disable ".$d; |
| 134 | refresh_view(); |
| 135 | status($d." disabled!"); |
| 136 | } |