diff options
| author | 2025-10-26 15:07:38 +0100 | |
|---|---|---|
| committer | 2025-10-26 15:07:38 +0100 | |
| commit | 1217b6de34cc5f23cc73d8d37a51c4616a3780ab (patch) | |
| tree | 193f43d5c654a2dbd5a9da1703956ee97a15fb17 | |
| parent | e18ac172db58b66b50c21dc03fcb157768f8fd8a (diff) | |
OPML export/import frss:priority (#8158)
Follow-up of https://github.com/FreshRSS/FreshRSS/pull/7583
| -rw-r--r-- | app/Services/ExportService.php | 6 | ||||
| -rw-r--r-- | app/Services/ImportService.php | 9 | ||||
| -rw-r--r-- | app/views/helpers/export/opml.phtml | 9 | ||||
| -rw-r--r-- | docs/en/developers/OPML.md | 2 | ||||
| -rw-r--r-- | p/api/greader.php | 12 |
5 files changed, 32 insertions, 6 deletions
diff --git a/app/Services/ExportService.php b/app/Services/ExportService.php index 69f0b3d2b..14f0a3f5c 100644 --- a/app/Services/ExportService.php +++ b/app/Services/ExportService.php @@ -23,6 +23,12 @@ class FreshRSS_Export_Service { final public const TYPE_JSONFEED = 'JSONFeed'; final public const TYPE_HTML_XPATH_JSON_DOTNOTATION = 'HTML+XPath+JSON+DotNotation'; + final public const PRIORITY_IMPORTANT = 'important'; + final public const PRIORITY_MAIN_STREAM = 'main'; + final public const PRIORITY_CATEGORY = 'category'; + final public const PRIORITY_FEED = 'feed'; + final public const PRIORITY_HIDDEN = 'hidden'; + /** * Initialize the service for the given user. */ diff --git a/app/Services/ImportService.php b/app/Services/ImportService.php index b567544b3..1ab2b8d69 100644 --- a/app/Services/ImportService.php +++ b/app/Services/ImportService.php @@ -177,6 +177,15 @@ class FreshRSS_Import_Service { break; } + $feed->_priority(match (strtolower($feed_elt['frss:priority'] ?? '')) { + FreshRSS_Export_Service::PRIORITY_IMPORTANT => FreshRSS_Feed::PRIORITY_IMPORTANT, + FreshRSS_Export_Service::PRIORITY_MAIN_STREAM => FreshRSS_Feed::PRIORITY_MAIN_STREAM, + FreshRSS_Export_Service::PRIORITY_CATEGORY => FreshRSS_Feed::PRIORITY_CATEGORY, + FreshRSS_Export_Service::PRIORITY_FEED => FreshRSS_Feed::PRIORITY_FEED, + FreshRSS_Export_Service::PRIORITY_HIDDEN => FreshRSS_Feed::PRIORITY_HIDDEN, + default => FreshRSS_Feed::PRIORITY_MAIN_STREAM, + }); + if (isset($feed_elt['frss:cssFullContent'])) { $feed->_pathEntries(Minz_Helper::htmlspecialchars_utf8($feed_elt['frss:cssFullContent'])); } diff --git a/app/views/helpers/export/opml.phtml b/app/views/helpers/export/opml.phtml index fba6d2498..de044332e 100644 --- a/app/views/helpers/export/opml.phtml +++ b/app/views/helpers/export/opml.phtml @@ -38,6 +38,15 @@ function feedsToOutlines(array $feeds, bool $excludeMutedFeeds = false): array { break; } + $outline['frss:priority'] = match ($feed->priority()) { + FreshRSS_Feed::PRIORITY_IMPORTANT => FreshRSS_Export_Service::PRIORITY_IMPORTANT, + FreshRSS_Feed::PRIORITY_MAIN_STREAM => null, // Default + FreshRSS_Feed::PRIORITY_CATEGORY => FreshRSS_Export_Service::PRIORITY_CATEGORY, + FreshRSS_Feed::PRIORITY_FEED => FreshRSS_Export_Service::PRIORITY_FEED, + FreshRSS_Feed::PRIORITY_HIDDEN => FreshRSS_Export_Service::PRIORITY_HIDDEN, + default => null, + }; + if ($feed->kind() === FreshRSS_Feed::KIND_HTML_XPATH || $feed->kind() === FreshRSS_Feed::KIND_XML_XPATH) { /** @var array<string,string> */ $xPathSettings = $feed->attributeArray('xpath') ?? []; diff --git a/docs/en/developers/OPML.md b/docs/en/developers/OPML.md index c6b42f108..cc93bfa4f 100644 --- a/docs/en/developers/OPML.md +++ b/docs/en/developers/OPML.md @@ -89,6 +89,7 @@ A number of [cURL options](https://curl.se/libcurl/c/curl_easy_setopt.html) are ### Miscellaneous +* `frss:priority`: Used for priority / visibility of the articles of that feed. Can be: `important`, `main` (default), `category`, `feed`, `hidden`. * `frss:cssFullContent`: [CSS Selector](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors) to enable the download and extraction of the matching HTML section of each articles’ Web address. * Example: `div.main, .summary` * `frss:cssContentFilter`: [CSS Selector](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors) to remove the matching HTML elements from the article content or from the full content retrieved by `frss:cssFullContent`. @@ -115,6 +116,7 @@ A number of [cURL options](https://curl.se/libcurl/c/curl_easy_setopt.html) are xmlUrl="https://www.example.net/page.html" htmlUrl="https://www.example.net/page.html" description="Example of Web scraping" + frss:priority="main" frss:xPathItem="//a[contains(@href, '/interesting/')]/ancestor::article" frss:xPathItemTitle="descendant::h2" frss:xPathItemContent="." diff --git a/p/api/greader.php b/p/api/greader.php index fb2ea03f5..1986b8c3d 100644 --- a/p/api/greader.php +++ b/p/api/greader.php @@ -365,12 +365,12 @@ final class GReaderAPI { '/api/greader.php/reader/api/0/subscription', '', // Security if base_url is not set properly $feed->favicon(absolute: true)), 'frss:priority' => match ($feed->priority()) { - FreshRSS_Feed::PRIORITY_IMPORTANT => 'important', - FreshRSS_Feed::PRIORITY_MAIN_STREAM => 'main', - FreshRSS_Feed::PRIORITY_CATEGORY => 'category', - FreshRSS_Feed::PRIORITY_FEED => 'feed', - // FreshRSS_Feed::PRIORITY_HIDDEN => 'hidden', // Not returned by the API - default => 'main', + FreshRSS_Feed::PRIORITY_IMPORTANT => FreshRSS_Export_Service::PRIORITY_IMPORTANT, + FreshRSS_Feed::PRIORITY_MAIN_STREAM => FreshRSS_Export_Service::PRIORITY_MAIN_STREAM, + FreshRSS_Feed::PRIORITY_CATEGORY => FreshRSS_Export_Service::PRIORITY_CATEGORY, + FreshRSS_Feed::PRIORITY_FEED => FreshRSS_Export_Service::PRIORITY_FEED, + // FreshRSS_Feed::PRIORITY_HIDDEN => FreshRSS_Export_Service::PRIORITY_HIDDEN, // Not returned by the API + default => FreshRSS_Export_Service::PRIORITY_MAIN_STREAM, }, ]; } |
