Add the webhook to existing feed if it doesn't have a webhook

This commit is contained in:
2023-01-28 19:28:28 +01:00
parent 3f81b532fe
commit a9c79a7a94

View File

@ -2,7 +2,7 @@ from typing import Iterable
from discord_webhook import DiscordEmbed, DiscordWebhook from discord_webhook import DiscordEmbed, DiscordWebhook
from fastapi import HTTPException from fastapi import HTTPException
from reader import Entry, Feed, Reader from reader import Entry, Feed, FeedExistsError, Reader, TagNotFoundError
from requests import Response from requests import Response
from discord_rss_bot import custom_message, settings from discord_rss_bot import custom_message, settings
@ -192,21 +192,8 @@ def create_feed(reader: Reader, feed_url: str, webhook_dropdown: str) -> None:
HTTPException: If webhook_dropdown does not equal a webhook or default_custom_message not found. HTTPException: If webhook_dropdown does not equal a webhook or default_custom_message not found.
""" """
clean_feed_url: str = feed_url.strip() clean_feed_url: str = feed_url.strip()
# TODO: Check if the feed is valid, if not return an error or fix it.
# For example, if the feed is missing the protocol, add it.
reader.add_feed(clean_feed_url)
reader.update_feed(clean_feed_url)
# Mark every entry as read, so we don't send all the old entries to Discord.
entries: Iterable[Entry] = reader.get_entries(feed=clean_feed_url, read=False)
for entry in entries:
reader.set_entry_read(entry, True)
hooks = reader.get_tag((), "webhooks", [])
webhook_url: str = "" webhook_url: str = ""
if hooks: if hooks := reader.get_tag((), "webhooks", []):
# Get the webhook URL from the dropdown. # Get the webhook URL from the dropdown.
for hook in hooks: for hook in hooks:
if hook["name"] == webhook_dropdown: # type: ignore if hook["name"] == webhook_dropdown: # type: ignore
@ -217,6 +204,23 @@ def create_feed(reader: Reader, feed_url: str, webhook_dropdown: str) -> None:
# TODO: Show this error on the page. # TODO: Show this error on the page.
raise HTTPException(status_code=404, detail="Webhook not found") raise HTTPException(status_code=404, detail="Webhook not found")
try:
# TODO: Check if the feed is valid
reader.add_feed(clean_feed_url)
except FeedExistsError:
# Add the webhook to an already added feed if it doesn't have a webhook instead of trying to create a new.
try:
reader.get_tag(clean_feed_url, "webhook")
except TagNotFoundError:
reader.set_tag(clean_feed_url, "webhook", webhook_url) # type: ignore
reader.update_feed(clean_feed_url)
# Mark every entry as read, so we don't send all the old entries to Discord.
entries: Iterable[Entry] = reader.get_entries(feed=clean_feed_url, read=False)
for entry in entries:
reader.set_entry_read(entry, True)
if not default_custom_message: if not default_custom_message:
# TODO: Show this error on the page. # TODO: Show this error on the page.
raise HTTPException(status_code=404, detail="Default custom message couldn't be found.") raise HTTPException(status_code=404, detail="Default custom message couldn't be found.")