|
16 | 16 | from __future__ import annotations |
17 | 17 |
|
18 | 18 | from typing import Any, Iterable |
19 | | -from datetime import datetime |
| 19 | +from datetime import datetime, timedelta |
20 | 20 | from string import Template |
21 | 21 | from time import mktime, time |
22 | 22 | import asyncio |
@@ -76,6 +76,7 @@ class RSSBot(Plugin): |
76 | 76 | poll_task: asyncio.Future |
77 | 77 | http: aiohttp.ClientSession |
78 | 78 | power_level_cache: dict[RoomID, tuple[int, PowerLevelStateEventContent]] |
| 79 | + next_run: datetime |
79 | 80 |
|
80 | 81 | @classmethod |
81 | 82 | def get_config_class(cls) -> type[BaseProxyConfig]: |
@@ -186,6 +187,7 @@ async def _poll_feeds(self) -> None: |
186 | 187 | self.log.debug("Polling stopped") |
187 | 188 | except Exception: |
188 | 189 | self.log.exception("Error while polling feeds") |
| 190 | + self.next_run = datetime.now() + timedelta(seconds=(self.config["update_interval"]*60)) |
189 | 191 | await asyncio.sleep(self.config["update_interval"] * 60) |
190 | 192 |
|
191 | 193 | async def try_parse_feed(self, feed: Feed | None = None) -> tuple[Feed, list[Entry]]: |
@@ -342,6 +344,13 @@ async def can_manage(self, evt: MessageEvent) -> bool: |
342 | 344 | async def rss(self) -> None: |
343 | 345 | pass |
344 | 346 |
|
| 347 | + @rss.subcommand("nextrun", aliases=("n",), help="Get latest item for each feed.") |
| 348 | + async def next_run(self, evt: MessageEvent) -> None: |
| 349 | + await evt.reply(f"""Next polling in {self.next_run - datetime.now()}""") |
| 350 | + # Next polling @ {self.next_run} |
| 351 | + # Now: {datetime.now()} |
| 352 | + # Delta: {self.next_run - datetime.now()} |
| 353 | + |
345 | 354 | @rss.subcommand("subscribe", aliases=("s", "sub"), help="Subscribe this room to a feed.") |
346 | 355 | @command.argument("url", "feed URL", pass_raw=True) |
347 | 356 | async def subscribe(self, evt: MessageEvent, url: str) -> None: |
|
0 commit comments