File: 24_improve_reminder_performance.dpatch

package info (click to toggle)
perlpanel 1%3A0.9.1%2Bcvs20051225-1
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 1,624 kB
  • ctags: 547
  • sloc: perl: 7,376; sh: 127; makefile: 125
file content (65 lines) | stat: -rw-r--r-- 2,482 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#! /bin/sh /usr/share/dpatch/dpatch-run
## 24_improve_reminder_performance.dpatch by Marc 'HE' Brockschmidt <he@debian.org>
##
## All lines beginning with `## DP:' are a description of the patch.
## DP: Does more caching and less checking for events to remind for, greatly
## DP: lowering the number of cpu cycles wasted.

@DPATCH@
--- old/lib/PerlPanel/Applet/Clock.pm	2005-04-14 18:23:19.000000000 +0200
+++ new/lib/PerlPanel/Applet/Clock.pm	2005-04-14 18:28:52.000000000 +0200
@@ -41,6 +41,8 @@
 
 our $REMINDER_DIALOG_FMT = "<span weight=\"bold\" size=\"x-large\">%s</span>\n\n%s";
 
+our %TIMESTAMP_CACHE;
+
 sub new {
 	my $self		= {};
 	$self->{package}	= shift;
@@ -77,6 +79,7 @@
 	$self->{glade}->get_widget('reminder_dialog')->set_icon(PerlPanel::icon);
 
 	PerlPanel::add_timeout(1000, sub { $self->update });
+	PerlPanel::add_timeout(60000, sub { $self->show_reminders });
 	$self->widget->show_all;
 	return 1;
 }
@@ -85,7 +88,6 @@
 	my $self = shift;
 	$self->{label}->set_text(' '.my_strftime($self->{config}{format}, time()).' ');
 	PerlPanel::tips->set_tip($self->widget, my_strftime($self->{config}{date_format}, time()));
-	$self->show_reminders;
 	return 1;
 }
 
@@ -382,8 +384,10 @@
 	my $now = time();
 
 	foreach my $event (grep { $_->{reminder} > 0 && defined($_->{date}) } @{$self->{config}->{events}}) {
+		next if $event->{reminded} eq 'true';
+		
 		my $timestamp = $self->get_timestamp_for($event);
-		if ($event->{reminder} > 0 && ($timestamp - ($event->{reminder} * 60)) < $now && $event->{reminded} ne 'true' && $event->{notes} ne '') {
+		if ($event->{reminder} > 0 && ($timestamp - ($event->{reminder} * 60)) < $now && $event->{notes} ne '') {
 			$event->{reminded} = 'true';
 			PerlPanel::save_config();
 			$self->reminder($event);
@@ -410,9 +414,14 @@
 
 sub get_timestamp_for {
 	my ($self, $event) = @_;
-	my ($year, $month, $day) = split(/-/, $event->{date}, 3);
-	my ($hour, $min) = split(/:/, $event->{time}, 2);
-	return strtotime(sprintf('%04d-%02d-%02d %02d:%02d:00', $year, $month+1, $day, $hour, $min));
+
+	unless ($TIMESTAMP_CACHE{$event->{date} . " " . $event->{time}}) {
+		my ($year, $month, $day) = split(/-/, $event->{date}, 3);
+		my ($hour, $min) = split(/:/, $event->{time}, 2);
+		$TIMESTAMP_CACHE{$event->{date} . " " . $event->{time}} = strtotime(sprintf('%04d-%02d-%02d %02d:%02d:00', $year, $month+1, $day, $hour, $min));
+	}
+
+	return $TIMESTAMP_CACHE{$event->{date} . " " . $event->{time}};
 }
 
 sub my_strftime {