Skip to content

Commit a84f16d

Browse files
committed
chore: separate next_run calculation
1 parent db15472 commit a84f16d

File tree

1 file changed

+29
-13
lines changed

1 file changed

+29
-13
lines changed

src/cogs/forum/forum_showcase.py

Lines changed: 29 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,12 @@ async def schedule_showcase(self):
101101
else:
102102
pass
103103

104-
await self.schedule_next_run()
104+
next_run = self.calculate_next_run(
105+
self.forum_showcase.schedule,
106+
self.forum_showcase.interval,
107+
self.forum_showcase.weekday,
108+
)
109+
await self.schedule_next_run(next_run=next_run)
105110

106111
async def update_schedule(self, next_schedule: datetime):
107112
now = datetime.now(timezone.utc)
@@ -120,13 +125,11 @@ async def update_schedule(self, next_schedule: datetime):
120125

121126
self.forum_showcase.schedule = next_schedule
122127

123-
async def schedule_next_run(self, run_now=False):
128+
async def schedule_next_run(self, next_run: datetime, run_now=False):
124129
if not self.forum_showcase:
125130
self.logger.error("[FORUM-SHOWCASE] No forum showcase configured")
126131
return
127132

128-
next_run = self.calculate_next_run()
129-
130133
now = datetime.now(timezone.utc)
131134
diff = (next_run - now).total_seconds()
132135

@@ -141,11 +144,11 @@ async def schedule_next_run(self, run_now=False):
141144
"[FORUM-SHOWCASE] Next run time is in the past. Waiting for next interval."
142145
)
143146

144-
def calculate_next_run(self) -> datetime:
147+
def calculate_next_run(
148+
self, schedule: datetime, interval: str, day: str
149+
) -> datetime:
145150
now = datetime.now(timezone.utc)
146-
schedule = self.forum_showcase.schedule
147-
interval = self.forum_showcase.interval
148-
weekday_int = WEEKDAYS.index(self.forum_showcase.weekday)
151+
weekday_int = WEEKDAYS.index(day)
149152

150153
next_run = schedule.replace(
151154
year=now.year, month=now.month, day=now.day, tzinfo=timezone.utc
@@ -400,7 +403,12 @@ async def config(self, interaction: Interaction):
400403
self.logger.info(
401404
f"[FORUM-SHOWCASE] New weekday: {self.forum_showcase.weekday}"
402405
)
403-
await self.schedule_next_run()
406+
next_run = self.calculate_next_run(
407+
self.forum_showcase.schedule,
408+
self.forum_showcase.interval,
409+
self.forum_showcase.weekday,
410+
)
411+
await self.schedule_next_run(next_run=next_run)
404412

405413
time_select = ConfigureTime(
406414
self.forum_showcase, self.forum_showcase_db, self.logger
@@ -411,11 +419,15 @@ async def config(self, interaction: Interaction):
411419
await time_select.wait()
412420

413421
if time_select.selected_time is not None:
414-
self.forum_showcase.schedule = time_select.forum_showcase.schedule
415422
self.logger.info(
416423
f"[FORUM-SHOWCASE] New schedule: {self.forum_showcase.schedule}"
417424
)
418-
await self.schedule_next_run()
425+
next_run = self.calculate_next_run(
426+
self.forum_showcase.schedule,
427+
self.forum_showcase.interval,
428+
self.forum_showcase.weekday,
429+
)
430+
await self.schedule_next_run(next_run=next_run)
419431

420432
await interaction.followup.send(
421433
"All settings have been updated.", ephemeral=True
@@ -446,8 +458,12 @@ async def toggle(self, interaction: Interaction):
446458
status = await self.db_config.toggle_config("forum_showcase")
447459

448460
if status:
449-
next_run = self.calculate_next_run()
450-
await self.schedule_next_run()
461+
next_run = self.calculate_next_run(
462+
self.forum_showcase.schedule,
463+
self.forum_showcase.interval,
464+
self.forum_showcase.weekday,
465+
)
466+
await self.schedule_next_run(next_run=next_run)
451467

452468
if not self.schedule_showcase.is_running():
453469
self.schedule_showcase.start()

0 commit comments

Comments
 (0)