Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions pi/webapp/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -552,8 +552,8 @@ def validate_save_input(form) -> tuple[dict | None, list[str]]:
errors.append(f"{label} is not a valid time.")

quiet_wake_mode = form.get("quiet_wake_mode", "latest")
if quiet_wake_mode not in ("latest", "all"):
errors.append("Quiet wake mode must be 'latest' or 'all'.")
if quiet_wake_mode not in ("latest", "all", "next"):
errors.append("Quiet wake mode must be 'latest', 'all', or 'next'.")
quiet_wake_mode = "latest"

# --- Auto-update ---
Expand Down
1 change: 1 addition & 0 deletions pi/webapp/templates/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -311,6 +311,7 @@ <h1 style="white-space:nowrap;">[ PRINTPULSE ]</h1>
<label for="quiet_wake_mode">When quiet hours end:</label>
<select name="quiet_wake_mode" id="quiet_wake_mode">
<option value="latest" {% if config.quiet_wake_mode == 'latest' %}selected{% endif %}>Print only the latest item per source</option>
<option value="next" {% if config.quiet_wake_mode == 'next' %}selected{% endif %}>Print next item only (oldest queued)</option>
<option value="all" {% if config.quiet_wake_mode == 'all' %}selected{% endif %}>Print all queued items</option>
</select>
</div>
Expand Down
5 changes: 3 additions & 2 deletions printpulse/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -142,10 +142,11 @@ def _build_parser() -> argparse.ArgumentParser:
)
parser.add_argument(
"--quiet-wake-mode",
choices=["latest", "all"],
choices=["latest", "all", "next"],
default="latest",
help="What to print when quiet hours end: 'latest' prints only the most "
"recent item per source (default), 'all' prints every queued item.",
"recent item per source (default), 'all' prints every queued item, "
"'next' prints only the oldest queued item.",
)
# ── Letter mode ──
parser.add_argument(
Expand Down
9 changes: 8 additions & 1 deletion printpulse/watch.py
Original file line number Diff line number Diff line change
Expand Up @@ -299,14 +299,21 @@ def run_watch_loop(feed_urls: list[str], interval: int, max_prints: int,
quiet_queue = _load_quiet_queue()
if quiet_queue and not (use_quiet and _is_in_quiet_hours(quiet_start, quiet_end)):
live.stop()
_save_quiet_queue([]) # Clear before printing so a crash doesn't re-print
if quiet_wake_mode == "latest":
_save_quiet_queue([]) # Clear entire queue
total_queued = len(quiet_queue)
quiet_queue = _filter_quiet_queue_latest(quiet_queue)
skipped = total_queued - len(quiet_queue)
msg = (f"Quiet hours ended β€” printing {len(quiet_queue)} latest item(s)"
f" ({skipped} older item(s) discarded).")
elif quiet_wake_mode == "next":
# Print only the oldest item, keep the rest queued
quiet_queue, remaining = quiet_queue[:1], quiet_queue[1:]
_save_quiet_queue(remaining)
msg = (f"Quiet hours ended β€” printing next item"
f" ({len(remaining)} still queued).")
else:
_save_quiet_queue([]) # Clear entire queue
msg = f"Quiet hours ended β€” printing {len(quiet_queue)} saved item(s)."
ui.retro_panel("QUIET QUEUE", msg, theme)
for i, q_item in enumerate(quiet_queue, 1):
Expand Down
Loading