diff --git a/discord_rss_bot/feeds.py b/discord_rss_bot/feeds.py index 203e7b5..a8388a9 100644 --- a/discord_rss_bot/feeds.py +++ b/discord_rss_bot/feeds.py @@ -2,6 +2,7 @@ from __future__ import annotations import datetime import logging +import os import pprint import re from typing import TYPE_CHECKING, Any @@ -303,7 +304,10 @@ def send_to_discord(custom_reader: Reader | None = None, feed: Feed | None = Non reader: Reader = get_reader() if custom_reader is None else custom_reader # Check for new entries for every feed. - reader.update_feeds() + reader.update_feeds( + scheduled=True, + workers=os.cpu_count() or 1, + ) # Loop through the unread entries. entries: Iterable[Entry] = reader.get_entries(feed=feed, read=False) diff --git a/discord_rss_bot/main.py b/discord_rss_bot/main.py index 7ae706f..3103fe7 100644 --- a/discord_rss_bot/main.py +++ b/discord_rss_bot/main.py @@ -100,9 +100,9 @@ async def lifespan(app: FastAPI) -> AsyncGenerator[None]: add_missing_tags(reader) scheduler: AsyncIOScheduler = AsyncIOScheduler() - # Update all feeds every 15 minutes. + # Run job every minute to check for new entries. Feeds will be checked every 15 minutes. # TODO(TheLovinator): Make this configurable. - scheduler.add_job(send_to_discord, "interval", minutes=15, next_run_time=datetime.now(tz=UTC)) + scheduler.add_job(send_to_discord, "interval", minutes=1, next_run_time=datetime.now(tz=UTC)) scheduler.start() logger.info("Scheduler started.") yield diff --git a/discord_rss_bot/settings.py b/discord_rss_bot/settings.py index a99733e..d730b10 100644 --- a/discord_rss_bot/settings.py +++ b/discord_rss_bot/settings.py @@ -24,7 +24,7 @@ default_custom_embed: dict[str, str] = { } -@lru_cache +@lru_cache(maxsize=1) def get_reader(custom_location: Path | None = None) -> Reader: """Get the reader. @@ -35,5 +35,10 @@ def get_reader(custom_location: Path | None = None) -> Reader: The reader. """ db_location: Path = custom_location or Path(data_dir) / "db.sqlite" + reader: Reader = make_reader(url=str(db_location)) - return make_reader(url=str(db_location)) + # https://reader.readthedocs.io/en/latest/api.html#reader.types.UpdateConfig + # Set the update interval to 15 minutes + reader.set_tag((), ".reader.update", {"interval": 15}) + + return reader