From 06d34f9b8ed81854baaaea3a4a7f4e247cab31a0 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Mon, 24 Nov 2025 22:01:46 +0100 Subject: OPML export/import of unicity criteria (#8243) Found during https://github.com/FreshRSS/FreshRSS/discussions/8242#discussioncomment-15052838 --- app/Services/ImportService.php | 9 +++++++++ app/views/helpers/export/opml.phtml | 8 ++++++++ 2 files changed, 17 insertions(+) (limited to 'app') diff --git a/app/Services/ImportService.php b/app/Services/ImportService.php index 26d07faae..22865f873 100644 --- a/app/Services/ImportService.php +++ b/app/Services/ImportService.php @@ -186,6 +186,15 @@ class FreshRSS_Import_Service { default => FreshRSS_Feed::PRIORITY_MAIN_STREAM, }); + if (isset($feed_elt['frss:unicityCriteria']) && $feed_elt['frss:unicityCriteria'] !== 'id' + && preg_match('/^[a-z:_-]{2,64}$/', $feed_elt['frss:unicityCriteria'])) { + $feed->_attribute('unicityCriteria', $feed_elt['frss:unicityCriteria']); + } + + if (filter_var($feed_elt['frss:unicityCriteriaForced'] ?? '', FILTER_VALIDATE_BOOLEAN)) { + $feed->_attribute('unicityCriteriaForced', true); + } + 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 de044332e..feeb409a5 100644 --- a/app/views/helpers/export/opml.phtml +++ b/app/views/helpers/export/opml.phtml @@ -47,6 +47,14 @@ function feedsToOutlines(array $feeds, bool $excludeMutedFeeds = false): array { default => null, }; + if ($feed->attributeString('unicityCriteria') != '' && $feed->attributeString('unicityCriteria') !== 'id') { + $outline['frss:unicityCriteria'] = $feed->attributeString('unicityCriteria'); + } + + if ($feed->attributeBoolean('unicityCriteriaForced')) { + $outline['frss:unicityCriteriaForced'] = 'true'; + } + if ($feed->kind() === FreshRSS_Feed::KIND_HTML_XPATH || $feed->kind() === FreshRSS_Feed::KIND_XML_XPATH) { /** @var array */ $xPathSettings = $feed->attributeArray('xpath') ?? []; -- cgit v1.2.3