html/upgradeinfo.pl
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
8 use strict;
9 use Irssi 20021204.1123;
10 use Irssi::TextUI;
11
12 # ======[ Script Header ]===============================================
13
14 use 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
28 my($load_time) = 0; # modification time of binary at load
29 my($file_time) = 0; # modification time of binary file
30 my($timer) = 0; # ID of current timer
31
32 # ======[ Commands ]====================================================
33
34 # --------[ UPGRADEINFO ]-----------------------------------------------
35
36 sub 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
48 sub 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
67 sub 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
93 sub 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
103 Irssi::command_bind('upgradeinfo', 'cmd_upgradeinfo');
104
105 # --------[ Register formats ]------------------------------------------
106
107 # --------[ Register settings ]-----------------------------------------
108
109 Irssi::settings_add_int('upgrade', 'upgrade_check_interval', 300);
110 Irssi::settings_add_str('upgrade', 'upgrade_time_format', '%d+%02d:%02d');
111
112 # --------[ Register signals ]------------------------------------------
113
114 Irssi::signal_add('setup changed', 'sig_setup_changed');
115
116 # --------[ Register statusbar items ]----------------------------------
117
118 Irssi::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
125 sig_setup_changed;
126
127 # ======[ END ]=========================================================
128
129 # Local Variables:
130 # header-initial-hide: t
131 # mode: header-minor
132 # end: