# # autosave.pl # Automatically performs a '/layout save' followed by a # '/save' at a configurable interval # # # Settings: # /SET autosave_interval (0 to disable, 60 by default) # # Commands: # /AUTOSAVE Execute save commands # use strict; use Irssi; use vars qw($VERSION %IRSSI); $VERSION = '1.0.0'; %IRSSI = ( authors => 'John R. Dennison', contact => 'jrd@gerdesas.com', name => 'AutoSave', description => 'Save configuration on set intervals. Based on autoclearinput.pl by Trevor "tee" Slocum', license => 'GNU GPLv2 or later', url => 'https://git.gerdesas.com/jrd/irssi-autosave', changed => '2023-07-03' ); my ($autosave_timer, $server); # set up timer sub autosave_init_timer { if (Irssi::settings_get_int("autosave_interval") <= 0) { Irssi::print ($IRSSI{name} . ": Timer unset."); return; } $autosave_timer = Irssi::timeout_add_once(Irssi::settings_get_int("autosave_interval") * 1000 * 60, "autosave_execute", ""); Irssi::print ($IRSSI{name} . ": Timer set for %9" . Irssi::settings_get_int("autosave_interval") . "%9 minutes."); } # save layout and general configuaration sub autosave_execute { $server -> command ("LAYOUT SAVE"); $server -> command ("SAVE"); # remove the timer if it already exists if (defined($autosave_timer)) { Irssi::timeout_remove($autosave_timer); } if (Irssi::settings_get_int("autosave_interval") > 0) { Irssi::print ($IRSSI{name} . ": Configuration saved. Setting new timer for %9" . Irssi::settings_get_int("autosave_interval") . "%9 minutes."); $autosave_timer = Irssi::timeout_add_once(Irssi::settings_get_int("autosave_interval") * 1000 * 60, "autosave_execute", ""); } } # config has changed; reset timer if it exists sub autosave_reread_config { Irssi::print ($IRSSI{name} . ": Configuration has changed - resetting timer"); if (defined($autosave_timer)) { Irssi::timeout_remove($autosave_timer); } autosave_init_timer } Irssi::settings_add_int("autosave", "autosave_interval", 60); Irssi::signal_add('setup changed' => 'autosave_reread_config'); Irssi::command_bind("autosave", "autosave_execute"); print $IRSSI{name} . ': version %9' . $VERSION . '%9 ready. Save commands ' . (Irssi::settings_get_int("autosave_interval") > 0 ? ('will be executed every %9' . Irssi::settings_get_int("autosave_interval") . '%9 minutes.') : 'are currently %9disabled%9.'); print $IRSSI{name} . ': Configure this delay with: /SET autosave_interval [0 to disable]'; print $IRSSI{name} . ': Manually save with /AUTOSAVE'; # snag server context for the current active server $server = Irssi::servers(); # initialize timer and call it a day autosave_init_timer