Dalsi kolo vylepesni /remind
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
"""Deterministic random fire-time computation for reminders.
|
||||
|
||||
Shared by remind_send.py (runtime) and remind_edit.py (validation). Stdlib only,
|
||||
Shared by remind_send.py (runtime) and remind_cli.py (validation). Stdlib only,
|
||||
so it imports cleanly regardless of the caller's uv/PEP 723 environment.
|
||||
|
||||
A reminder's `random` block produces `times_per_day` fire times inside a daily
|
||||
@@ -81,6 +81,11 @@ def _hhmm_to_minutes(value: str) -> int:
|
||||
return hours * 60 + minutes
|
||||
|
||||
|
||||
def minutes_to_hhmm(total: int) -> str:
|
||||
"""Format a minute offset (e.g. 570) as HH:MM (e.g. '09:30')."""
|
||||
return f"{total // 60:02d}:{total % 60:02d}"
|
||||
|
||||
|
||||
def _minute_to_time(total_minutes: int) -> time:
|
||||
return time(total_minutes // 60, total_minutes % 60)
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ from zoneinfo import ZoneInfo
|
||||
|
||||
from croniter import croniter
|
||||
from db import get_db, init_db, log_operation
|
||||
from random_times import compute_fire_times, parse_window
|
||||
from random_times import compute_fire_times, minutes_to_hhmm, parse_window
|
||||
|
||||
WORKSPACE = Path(__file__).resolve().parent.parent.parent.parent
|
||||
DEFAULT_DB_PATH = WORKSPACE / "db" / "reminders.sqlite"
|
||||
@@ -200,7 +200,7 @@ def _schedule_lines(conn, reminder_id: int) -> list[str]:
|
||||
(reminder_id,),
|
||||
)
|
||||
for r in random_rows:
|
||||
window = f"{_minutes_to_hhmm(r['window_start'])}–{_minutes_to_hhmm(r['window_end'])}"
|
||||
window = f"{minutes_to_hhmm(r['window_start'])}–{minutes_to_hhmm(r['window_end'])}"
|
||||
parts = [f"random: {r['times_per_day']}× daily {window}"]
|
||||
if r["days_filter"]:
|
||||
parts.append(f"({r['days_filter']})")
|
||||
@@ -212,10 +212,6 @@ def _schedule_lines(conn, reminder_id: int) -> list[str]:
|
||||
return lines
|
||||
|
||||
|
||||
def _minutes_to_hhmm(total: int) -> str:
|
||||
return f"{total // 60:02d}:{total % 60:02d}"
|
||||
|
||||
|
||||
def cmd_add(args: argparse.Namespace) -> int:
|
||||
text = (args.text or "").strip()
|
||||
if not text:
|
||||
@@ -23,7 +23,7 @@ from zoneinfo import ZoneInfo
|
||||
|
||||
from croniter import croniter
|
||||
from db import get_db, init_db, log_operation
|
||||
from random_times import compute_fire_times
|
||||
from random_times import compute_fire_times, minutes_to_hhmm
|
||||
|
||||
WORKSPACE = Path(__file__).resolve().parent.parent.parent.parent
|
||||
DEFAULT_DB_PATH = WORKSPACE / "db" / "reminders.sqlite"
|
||||
@@ -129,7 +129,7 @@ def _due_random(conn, now: datetime) -> list[dict]:
|
||||
for row in rows:
|
||||
cfg = {
|
||||
"times_per_day": row["times_per_day"],
|
||||
"window": f"{_minutes_to_hhmm(row['window_start'])}-{_minutes_to_hhmm(row['window_end'])}",
|
||||
"window": f"{minutes_to_hhmm(row['window_start'])}-{minutes_to_hhmm(row['window_end'])}",
|
||||
}
|
||||
if row["days_filter"]:
|
||||
cfg["days"] = row["days_filter"]
|
||||
@@ -164,10 +164,6 @@ def _due_random(conn, now: datetime) -> list[dict]:
|
||||
return due
|
||||
|
||||
|
||||
def _minutes_to_hhmm(total: int) -> str:
|
||||
return f"{total // 60:02d}:{total % 60:02d}"
|
||||
|
||||
|
||||
def _record_fire(conn, reminder_id: int, schedule_id: int, schedule_type: str, fire_time: str, status: str, error: str | None = None) -> None:
|
||||
now = _now_prague().isoformat(timespec="seconds")
|
||||
conn.execute(
|
||||
|
||||
Reference in New Issue
Block a user