This is an automated email from the ASF dual-hosted git repository.

sebb pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/whimsy.git


The following commit(s) were added to refs/heads/master by this push:
     new 104f5f99 Redesign get_invite_times
104f5f99 is described below

commit 104f5f99bc991872a0f809c2eac04db4745ff394
Author: Sebb <[email protected]>
AuthorDate: Sat Mar 16 17:21:37 2024 +0000

    Redesign get_invite_times
    
    - also return meeting end
    - return a hash, rather than an anonymous array
---
 lib/whimsy/asf/meeting-util.rb     | 41 +++++++++++++++++++++++++++++++++-----
 www/members/board-nominate.cgi     |  2 +-
 www/members/board-nominations.cgi  |  2 +-
 www/members/member_nominations.cgi |  2 +-
 www/members/nominations.cgi        |  2 +-
 5 files changed, 40 insertions(+), 9 deletions(-)

diff --git a/lib/whimsy/asf/meeting-util.rb b/lib/whimsy/asf/meeting-util.rb
index d6810190..84a86934 100644
--- a/lib/whimsy/asf/meeting-util.rb
+++ b/lib/whimsy/asf/meeting-util.rb
@@ -376,12 +376,12 @@ module ASF
     end
 
     # get the times from the VCAL events file
-    # returns: nominations close, polls close, meeting starts as seconds since 
epoch
+    # returns: hash with keys: nominations_close:, polls_close:, 
meeting_start, meeting_close:
     def self.get_invite_times
       times = {}
       File.readlines(File.join(latest_meeting_dir, 
VCAL_EVENTS_FILENAME)).slice_before(/^BEGIN:VEVENT/).drop(1).each do |ev|
         uid = nil
-        dtstart = nil
+        dtstart = dtend = nil
         ev.each do |line|
           case line
             when /^UID:(.+)/
@@ -393,19 +393,50 @@ module ASF
               else
                 raise ArgumentError.new("Cannot parse #{line.chomp} in 
#{VCAL_EVENTS_FILENAME}")
               end
+            when /^DTEND;TZID=(.+):(.+)/
+              tz = $1
+              if tz == 'UTC'
+                dtend = DateTime.iso8601($2.chomp).to_time.to_i
+              else
+                raise ArgumentError.new("Cannot parse #{line.chomp} in 
#{VCAL_EVENTS_FILENAME}")
+              end
           end
         end
         times[uid] = dtstart
+        times['asf-members-end'] = dtend if uid == 'asf-members'
       end
-      return [times['asf-members-nominations-close'], 
times['asf-members-polls-close'], times['asf-members']]
+      return {
+        nominations_close: times['asf-members-nominations-close'],
+        polls_close: times['asf-members-polls-close'],
+        meeting_start: times['asf-members'],
+        meeting_end: times['asf-members-end'],
+      }
+    end
+
+    # Shorthand methods for callers
+    def self.nominations_close
+      self.get_invite_times[:nominations_close]
+    end
+
+    def self.polls_close
+      self.get_invite_times[:polls_close]
+    end
+
+    def self.meeting_start
+      self.get_invite_times[:meeting_start]
+    end
+
+    def self.meeting_end
+      self.get_invite_times[:meeting_end]
     end
 
     # How long remains before applications close?
+    # (Time is measured from scheduled end of the meeting in which the votes 
were declared)
     # Returned as hash, e.g. {:hoursremain=>605, :days=>25, :hours=>5}
     def self.application_time_remaining
-      _, _, meeting = self.get_invite_times # this is in seconds
+      meetingend = self.meeting_end # this is in seconds
       now = DateTime.now.to_time.to_i
-      remain = (meeting + APPLICATION_EXPIRY_POST_VOTE_SECS - now) / 3600
+      remain = (meetingend + APPLICATION_EXPIRY_POST_VOTE_SECS - now) / 3600
       {hoursremain: remain, days: remain/24, hours: remain%24}
     end
 
diff --git a/www/members/board-nominate.cgi b/www/members/board-nominate.cgi
index dcfb4d22..2da953f8 100755
--- a/www/members/board-nominate.cgi
+++ b/www/members/board-nominate.cgi
@@ -13,7 +13,7 @@ require 'whimsy/asf/meeting-util'
 require 'whimsy/asf/time-utils'
 
 t_now = Time.now.to_i
-t_end = ASF::MeetingUtil.get_invite_times.first
+t_end = ASF::MeetingUtil.nominations_close
 nomclosed = t_now > t_end
 
 def emit_form(title, prev_data)
diff --git a/www/members/board-nominations.cgi 
b/www/members/board-nominations.cgi
index 9db4b23a..b9a3d2b1 100755
--- a/www/members/board-nominations.cgi
+++ b/www/members/board-nominations.cgi
@@ -12,7 +12,7 @@ require_relative '../../tools/parsemail'
 require 'whimsy/asf/time-utils'
 
 t_now = Time.now.to_i
-t_end = ASF::MeetingUtil.get_invite_times.first
+t_end = ASF::MeetingUtil.nominations_close
 
 
 # link to members private-arch
diff --git a/www/members/member_nominations.cgi 
b/www/members/member_nominations.cgi
index 71087e9a..7054ce97 100755
--- a/www/members/member_nominations.cgi
+++ b/www/members/member_nominations.cgi
@@ -13,7 +13,7 @@ require 'whimsy/asf/meeting-util'
 require 'whimsy/asf/time-utils'
 
 t_now = Time.now.to_i
-t_end = ASF::MeetingUtil.get_invite_times.first
+t_end = ASF::MeetingUtil.nominations_close
 nomclosed = t_now > t_end
 
 def emit_form(title, prev_data)
diff --git a/www/members/nominations.cgi b/www/members/nominations.cgi
index 735d426a..e333286e 100755
--- a/www/members/nominations.cgi
+++ b/www/members/nominations.cgi
@@ -12,7 +12,7 @@ require_relative '../../tools/parsemail'
 require 'whimsy/asf/time-utils'
 
 t_now = Time.now.to_i
-t_end = ASF::MeetingUtil.get_invite_times.first
+t_end = ASF::MeetingUtil.nominations_close
 
 # link to members private-arch
 MBOX = 'https://mail-search.apache.org/members/private-arch/members/'

Reply via email to