1# upgradeinfo - irssi 0.8.6.CVS 2# 3# $Id: upgradeinfo.pl,v 1.7 2003/02/04 02:29:57 peder Exp $ 4# 5# Copyright (C) 2002, 2003 by Peder Stray <peder@ninja.no> 6# 7 8use strict; 9use Irssi 20021204.1123; 10use Irssi::TextUI; 11 12# ======[ Script Header ]=============================================== 13 14use vars qw{$VERSION %IRSSI}; 15($VERSION) = '$Revision: 1.7 $' =~ / (\d+\.\d+) /; 16%IRSSI = ( 17 name => 'upgradeinfo', 18 authors => 'Peder Stray', 19 contact => 'peder@ninja.no', 20 url => 'http://ninja.no/irssi/upgradeinfo.pl', 21 license => 'GPL', 22 description => 'Statusbaritem notifying you about updated binary', 23 sbitems => 'upgradeinfo', 24 ); 25 26# ======[ Variables ]=================================================== 27 28my($load_time) = 0; # modification time of binary at load 29my($file_time) = 0; # modification time of binary file 30my($timer) = 0; # ID of current timer 31 32# ======[ Commands ]==================================================== 33 34# --------[ UPGRADEINFO ]----------------------------------------------- 35 36sub cmd_upgradeinfo { 37 my($param,$serv,$chan) = @_; 38 39 print CLIENTCRAP sprintf ">> load: %s", scalar localtime $load_time; 40 print CLIENTCRAP sprintf ">> file: %s", scalar localtime $file_time; 41 42} 43 44# ======[ Signal Hooks ]================================================ 45 46# --------[ sig_setup_changed ]----------------------------------------- 47 48sub sig_setup_changed { 49 my($interval) = Irssi::settings_get_int('upgrade_check_interval'); 50 51 Irssi::timeout_remove($timer); 52 53 if ($interval < 1) { 54 $interval = 0; 55 } 56 57 return unless $interval; 58 59 $interval *= 1000; 60 $timer = Irssi::timeout_add($interval, 'ui_check' , undef); 61} 62 63# ======[ Statusbar Hooks ]============================================= 64 65# --------[ sb_upgradeinfo ]-------------------------------------------- 66 67sub sb_upgradeinfo { 68 my($item, $get_size_only) = @_; 69 my $format = ""; 70 my($time); 71 my($timefmt) = Irssi::settings_get_str('upgrade_time_format'); 72 73 $time = $file_time - $load_time; 74 75 if ($time) { 76 $time = sprintf($timefmt, 77 $time/60/60/24, 78 $time/60/60%24, 79 $time/60%60, 80 $time%60 81 ); 82 $time =~ s/^(0+\D+)+//; 83 $format = "{sb %r$time%n}"; 84 } 85 86 $item->default_handler($get_size_only, $format, undef, 1); 87} 88 89# ======[ Timers ]====================================================== 90 91# --------[ ui_check ]-------------------------------------------------- 92 93sub ui_check { 94 $file_time = (stat Irssi::get_irssi_binary)[9]; 95 96 Irssi::statusbar_items_redraw('upgradeinfo'); 97} 98 99# ======[ Setup ]======================================================= 100 101# --------[ Register commands ]----------------------------------------- 102 103Irssi::command_bind('upgradeinfo', 'cmd_upgradeinfo'); 104 105# --------[ Register formats ]------------------------------------------ 106 107# --------[ Register settings ]----------------------------------------- 108 109Irssi::settings_add_int('upgrade', 'upgrade_check_interval', 300); 110Irssi::settings_add_str('upgrade', 'upgrade_time_format', '%d+%02d:%02d'); 111 112# --------[ Register signals ]------------------------------------------ 113 114Irssi::signal_add('setup changed', 'sig_setup_changed'); 115 116# --------[ Register statusbar items ]---------------------------------- 117 118Irssi::statusbar_item_register('upgradeinfo', undef, 'sb_upgradeinfo'); 119 120# --------[ Other setup ]----------------------------------------------- 121 122$load_time = (stat Irssi::get_irssi_binary)[9]; 123$file_time = $load_time; 124 125sig_setup_changed; 126 127# ======[ END ]========================================================= 128 129# Local Variables: 130# header-initial-hide: t 131# mode: header-minor 132# end: 133