]> git.cworth.org Git - turbot/commitdiff
Add display of rounds in the Turbot home view
authorCarl Worth <cworth@cworth.org>
Sat, 2 Jan 2021 06:29:07 +0000 (22:29 -0800)
committerCarl Worth <cworth@cworth.org>
Sat, 2 Jan 2021 07:14:53 +0000 (23:14 -0800)
Grouping puzzles that belong to each round (and also a list of puzzles
that belong to no round).

This drops another item from the TODO list.

TODO
turbot/events.py

diff --git a/TODO b/TODO
index ca8ec0e5311135c6e8a932c9e61104d9a33028a2..8b1d822663eaf673955cc92b14e42e76f31d49a8 100644 (file)
--- a/TODO
+++ b/TODO
@@ -6,8 +6,6 @@ Recently-proposed ideas (not yet prioritized)
 Round management
 ----------------
 
-• Group the puzzles in the Turbot home view by round
-
 • Select round fields by default based on the round of the puzzle for
   the channel in which `/puzzle` is invoked.
 
index ccddc973a1db502e7381c20f068d73c29f23313e..2f096b276ccae2e97faef2238f442de47c356b66 100644 (file)
@@ -53,7 +53,24 @@ def puzzle_block(puzzle):
 
     return section_block(text_block(puzzle_text))
 
-def hunt_details_block(turb, hunt):
+def round_blocks(round, puzzles):
+
+    round_text = "*Round: {}*".format(round)
+
+    blocks = [
+        section_block(text_block(round_text)),
+    ]
+
+    for puzzle in puzzles:
+        if 'rounds' not in puzzle:
+            continue
+        if round not in puzzle['rounds']:
+            continue
+        blocks.append(puzzle_block(puzzle))
+
+    return blocks
+
+def hunt_details_blocks(turb, hunt):
     name = hunt['name']
     hunt_id = hunt['hunt_id']
     channel_id = hunt['channel_id']
@@ -66,24 +83,44 @@ def hunt_details_block(turb, hunt):
     )
     puzzles = response['Items']
 
+    # Compute the set of rounds across all puzzles
+    rounds = set()
+    for puzzle in puzzles:
+        if 'rounds' not in puzzle:
+            continue
+        for round in puzzle['rounds']:
+            rounds.add(round)
+
     hunt_text = "*<{}|{}>*".format(channel_url(channel_id), name)
 
-    return [
+    blocks = [
         section_block(text_block(hunt_text)),
-        *[puzzle_block(puzzle) for puzzle in puzzles],
-        divider_block()
     ]
 
-def available_hunt_block(turb, hunt):
+    # Construct blocks for each round
+    for round in rounds:
+        blocks += round_blocks(round, puzzles)
+
+    # Also blocks for any puzzles not in any round
+    stray_puzzles = [puzzle for puzzle in puzzles if 'rounds' not in puzzle]
+    if len(stray_puzzles):
+        stray_text = "*Puzzles with no asigned round*"
+        blocks.append(section_block(text_block(stray_text)))
+        for puzzle in stray_puzzles:
+            blocks.append(puzzle_block(puzzle))
+
+    blocks.append(divider_block())
+
+    return blocks
+
+def hunt_link_block(turb, hunt):
 
     name = hunt['name']
     channel_id = hunt['channel_id']
 
     hunt_link = "*<{}|{}>*".format(channel_url(channel_id), name)
 
-    return [
-        section_block(text_block(hunt_link)),
-    ]
+    return section_block(text_block(hunt_link)),
 
 def home(turb, user_id):
     """Returns a view to be published as the turbot home tab for user_id
@@ -107,9 +144,9 @@ def home(turb, user_id):
             continue
         if user_id in slack_channel_members(turb.slack_client,
                                             hunt['channel_id']):
-            my_hunt_blocks += hunt_details_block(turb, hunt)
+            my_hunt_blocks += hunt_details_blocks(turb, hunt)
         else:
-            available_hunt_blocks += available_hunt_block(turb, hunt)
+            available_hunt_blocks.append(hunt_link_block(turb, hunt))
 
     if len(my_hunt_blocks):
         my_hunt_blocks = [