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