mirror of
https://github.com/discourse/discourse.git
synced 2026-08-06 00:15:24 +08:00
Previously, the RSS Polling plugin's admin page predated Discourse's admin interface guidelines: it was a single inline-editable table with no breadcrumbs or page header, it truncated long feed URLs, it required horizontal scrolling on mobile, and it gave admins no way to verify a feed before saving it. This change rebuilds the page on the standard plugin "show route" structure (breadcrumbs, page header, and Settings + Feeds tabs) with a `d-table` feed list and dedicated FormKit new/edit routes, so the UI now matches the rest of the admin interface and works on mobile. It also: - Adds a **Test feed** dry-run that fetches a feed and previews which items would be imported or skipped, with plain-language reasons, so admins can validate a feed (and fix setup errors) before saving it. - Adds the `rss_polling_feed_request_timeout` and `rss_polling_verbose_logging` site settings. - Extracts the fetch/parse and import/skip logic into `FeedFetcher` and `FeedAnalyzer`, shared by the poll job and the new preview so the dry-run and the real import always agree. - Normalizes feed dates and categories so Atom feeds (which use `<updated>` and `term`-style `<category>` elements) are handled like RSS, and returns a clean error instead of a 500 when a feed cannot be read. --------- Co-authored-by: Martin Brennan <martin@discourse.org>
24 lines
787 B
Ruby
Vendored
24 lines
787 B
Ruby
Vendored
# frozen_string_literal: true
|
|
|
|
# name: discourse-rss-polling
|
|
# about: This plugin enables support for importing embedded content from multiple RSS/ATOM feeds
|
|
# version: 0.0.1
|
|
# authors: xrav3nz
|
|
# url: https://github.com/discourse/discourse/tree/main/plugins/discourse-rss-polling
|
|
|
|
enabled_site_setting :rss_polling_enabled
|
|
add_admin_route "rss_polling.title", "discourse-rss-polling", { use_new_show_route: true }
|
|
register_asset "stylesheets/rss-polling.scss"
|
|
register_svg_icon "rss"
|
|
register_svg_icon "filter"
|
|
register_svg_icon "arrows-rotate"
|
|
|
|
module ::DiscourseRssPolling
|
|
PLUGIN_NAME = "discourse_rss_polling"
|
|
end
|
|
|
|
require_relative "lib/discourse_rss_polling/engine"
|
|
|
|
Discourse::Application.routes.append do
|
|
mount DiscourseRssPolling::Engine, at: "/admin/plugins/rss_polling"
|
|
end
|