Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • perl/lib/BarnOwl/ModuleLoader.pm

    r965e14d r41bbb8a  
    88use PAR (BarnOwl::get_config_dir() . "/modules/*.par");
    99
     10our %modules;
     11
    1012sub load_all {
     13    my $class = shift;
     14    $class->rescan_modules;
    1115    PAR::reload_libs();
     16
     17    for my $mod (keys %modules) {
     18        if(!defined eval "use BarnOwl::Module::$mod") {
     19            BarnOwl::error("Unable to load module $mod: \n$@\n") if $@;
     20        }
     21    }
     22
     23    $BarnOwl::Hooks::startup->add(\&register_keybindings);
     24}
     25
     26sub rescan_modules {
    1227    PAR->import(BarnOwl::get_data_dir() . "/modules/*.par");
    1328    PAR->import(BarnOwl::get_config_dir() . "/modules/*.par");
    14     my %modules;
    1529    my @modules;
     30
     31    %modules = ();
    1632
    1733    my @moddirs = ();
     
    3753        }
    3854    }
    39     for my $class (keys %modules) {
    40         if(!defined eval "use BarnOwl::Module::$class") {
    41             # BarnOwl::error("Unable to load module $class: $!") if $!;
    42             BarnOwl::error("Unable to load module $class: \n$@\n") if $@;
     55}
     56
     57sub reload_module {
     58    my $class = shift;
     59    my $module = shift;
     60
     61    $class->rescan_modules();
     62
     63    for my $m (keys %INC) {
     64        delete $INC{$m} if $m =~ m{^BarnOwl/Module/$module};
     65    }
     66
     67    my $parfile;
     68    for my $p (@PAR::PAR_INC) {
     69        if($p =~ m/\Q$module\E[.]par$/) {
     70            $parfile = $p;
     71            last;
    4372        }
    4473    }
    4574
    46     $BarnOwl::Hooks::startup->add(\&register_keybindings);
     75    local $SIG{__WARN__} = \&squelch_redefine;
     76
     77    if(defined $parfile) {
     78        PAR::reload_libs($parfile);
     79        $class->run_startup_hooks();
     80    } elsif(!defined eval "use BarnOwl::Module::$module") {
     81        BarnOwl::error("Unable to load module $module: \n$@\n") if $@;
     82    }
     83}
     84
     85sub reload_module_cmd {
     86    my $class = shift;
     87    shift; # Command
     88    my $module = shift;
     89    unless(defined($module)) {
     90        die("Usage: reload-module [MODULE]");
     91    };
     92    $class->reload_module($module);
    4793}
    4894
     
    5298                           usage   => 'reload-modules',
    5399                           description => q{Reloads all modules located in ~/.owl/modules and the system modules directory}
     100                          });
     101    BarnOwl::new_command('reload-module', sub {BarnOwl::ModuleLoader->reload_module_cmd(@_)}, {
     102                           summary => 'Reload one module',
     103                           usage   => 'reload-module [MODULE]',
     104                           description => q{Reloads a single module located in ~/.owl/modules or the system modules directory}
    54105                          });
    55106}
     
    63114    $INC{$_} = 1 for (qw(BarnOwl.pm BarnOwl/Hooks.pm
    64115                         BarnOwl/Message.pm BarnOwl/Style.pm));
     116    $class->run_startup_hooks();
     117}
    65118
    66     $BarnOwl::Hooks::startup->clear;
    67     $BarnOwl::Hooks::getBuddyList->clear;
    68     $BarnOwl::Hooks::mainLoop->clear;
    69     $BarnOwl::Hooks::shutdown->clear;
    70     $BarnOwl::Hooks::receiveMessage->clear;
     119sub run_startup_hooks {
     120    my $class = shift;
    71121    local $SIG{__WARN__} = \&squelch_redefine;
    72122    $class->load_all;
Note: See TracChangeset for help on using the changeset viewer.