summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Pointner <equinox@spreadspace.org>2015-07-24 19:58:39 (GMT)
committerChristian Pointner <equinox@spreadspace.org>2015-07-24 19:58:39 (GMT)
commit7ee36b6d571a0310224643547864b42433d311cd (patch)
tree8975dca3ae9cd5964343a499f2e93c520500d6fa
parent6e0e3a9c798ce1b21c939603484b0b08a4f0f23e (diff)
added utils.pm with get_rd_week
-rw-r--r--MANIFEST1
-rw-r--r--META.yml4
-rw-r--r--Makefile.PL10
-rw-r--r--lib/RHRD.pm2
-rwxr-xr-xlib/RHRD/utils.pm56
5 files changed, 67 insertions, 6 deletions
diff --git a/MANIFEST b/MANIFEST
index cbe0e68..e553989 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -1,6 +1,7 @@
ChangeLog
lib/RHRD.pm
lib/RHRD/rddb.pm
+lib/RHRD/utils.pm
Makefile.PL
MANIFEST
META.yml
diff --git a/META.yml b/META.yml
index 5add8b0..8d1b6a6 100644
--- a/META.yml
+++ b/META.yml
@@ -20,4 +20,6 @@ no_index:
requires:
Config::IniFiles: '0'
DBI: '0'
-version: '0.1'
+ DateTime: '0'
+ DateTime::TimeZone: '0'
+version: '0.2'
diff --git a/Makefile.PL b/Makefile.PL
index c9f1b5e..cceb48c 100644
--- a/Makefile.PL
+++ b/Makefile.PL
@@ -2,13 +2,15 @@ use ExtUtils::MakeMaker;
use 5.004;
WriteMakefile(
- NAME => 'RHRD',
- VERSION_FROM => 'lib/RHRD.pm',
+ NAME => 'RHRD',
+ VERSION_FROM => 'lib/RHRD.pm',
LICENSE => 'gpl_3',
AUTHOR => 'Christian Pointner <equinox@helsinki.at>',
ABSTRACT => 'Radio Helsinki Rivendell libraries and utils',
PREREQ_PM => {
- "Config::IniFiles" => 0,
- "DBI" => 0
+ "Config::IniFiles" => 0,
+ "DBI" => 0,
+ "DateTime" => 0,
+ "DateTime::TimeZone" => 0
},
);
diff --git a/lib/RHRD.pm b/lib/RHRD.pm
index dce995f..859641f 100644
--- a/lib/RHRD.pm
+++ b/lib/RHRD.pm
@@ -26,6 +26,6 @@ use strict;
use vars qw($VERSION);
use 5.004;
-$VERSION = "0.1"
+$VERSION = "0.2"
##########################################################################
diff --git a/lib/RHRD/utils.pm b/lib/RHRD/utils.pm
new file mode 100755
index 0000000..3a49ebb
--- /dev/null
+++ b/lib/RHRD/utils.pm
@@ -0,0 +1,56 @@
+# rddb.pm
+#
+# rhrdlibs
+#
+# Copyright (C) 2015 Christian Pointner <equinox@helsinki.at>
+#
+# This file is part of rhrdlibs.
+#
+# rhrdlibs is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# any later version.
+#
+# rhrdlibs is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with rhrdlibs. If not, see <http://www.gnu.org/licenses/>.
+#
+
+package RHRD::rddb;
+
+use strict;
+use DateTime;
+use DateTime::TimeZone;
+
+sub get_rd_week
+{
+ #
+ # This computes the current Rivendell Week based on the number
+ # of weeks since epoch.
+ #
+ # Explanation:
+ # epoch was at 01.01.1970 which was a Thursday.
+ # Monday in that week is (s-from-epoch + 3*24*60*60) seconds ago.
+ # This needs to be adjusted by the timezone offset for Europe/Vienna
+ # which is of course not constant (damn you daylight savings time)
+ # Divide this by (7*24*60*60) and you get the number of
+ # weeks since the Monday in the week of epoch adjusted for timezone offsets.
+ # This week had week number 3 so add an offset of 2 and
+ # get the modulo of 4. This rounded down gives you the current week
+ # with 0 meaning Week 1. So add 1 to that number and you will get
+ # the current RD week.
+ #
+ my $now = DateTime->now();
+ my $tz = DateTime::TimeZone->new(name => 'Europe/Vienna');
+ my $tz_offset = $tz->offset_for_datetime($now);
+ my $sEpoch = $now->epoch() + $tz_offset;
+ my $week = floor(((($sEpoch + 259200)/604800) + 2) % 4) + 1;
+
+ return $week;
+}
+
+return 1;