From e486dccf8ebdd2b7cc957695ea4cb8a00e636342 Mon Sep 17 00:00:00 2001 From: Felix Stupp Date: Sat, 5 Nov 2022 13:59:56 +0100 Subject: [PATCH] Add capability to mark TT-RSS feed items as read --- .../extractors/all/tt_rss.py | 15 +++++++++++++-- .../extractors/collection/tt_rss.py | 17 +++++++---------- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/server/entertainment_decider/extractors/all/tt_rss.py b/server/entertainment_decider/extractors/all/tt_rss.py index a933a80..e559d4d 100644 --- a/server/entertainment_decider/extractors/all/tt_rss.py +++ b/server/entertainment_decider/extractors/all/tt_rss.py @@ -5,10 +5,10 @@ from enum import Enum from functools import partial import logging import re -from typing import Dict, List, Optional +from typing import Dict, List, Optional, Sequence import urllib.parse as url -from tinytinypy import Connection +from tinytinypy import Connection, UpdateField, UpdateMode from tinytinypy.main import Headline @@ -115,3 +115,14 @@ class TtRssUri: def request(self, params: TtRssConnectionParameter, **kwargs) -> HeadlineList: return self.kind.request(self.id)(params, **self.options, **kwargs) + + def set_read( + self, + params: TtRssConnectionParameter, + article_ids: Sequence[int], + ) -> None: + _build_connection(params=params).updateArticle( + article_ids=article_ids, + mode=UpdateMode.SET_TO_FALSE, + field=UpdateField.UNREAD, + ) diff --git a/server/entertainment_decider/extractors/collection/tt_rss.py b/server/entertainment_decider/extractors/collection/tt_rss.py index 01e73af..a0c7f71 100644 --- a/server/entertainment_decider/extractors/collection/tt_rss.py +++ b/server/entertainment_decider/extractors/collection/tt_rss.py @@ -59,15 +59,6 @@ class TtRssCollectionExtractor(CollectionExtractor[HeadlineList]): if self.__label_filter in (label_marker[0] for label_marker in headline.labels) ] - if self.__mark_as_read: - parameters = { - "article_ids": ",".join(str(headline.feedId) for headline in data), - "field": "2", # unread - "mode": "0", # false - } - raise NotImplementedError( - "Cannot set articles as read with tinytinypy for now" - ) # TODO return ExtractedData( extractor_name=self.name, object_key=uri, @@ -79,8 +70,14 @@ class TtRssCollectionExtractor(CollectionExtractor[HeadlineList]): if not object.title: object.title = object.uri logging.debug(f"Got {len(data)} headlines") + rss_uri = self.__decode_uri(object.uri) + readed_headlines = list[int]() for headline in data: - self._add_episode(collection=object, uri=headline.url) + elem = self._add_episode(collection=object, uri=headline.url) + if elem is not None: + readed_headlines.append(headline.headlineId) orm.commit() + if self.__mark_as_read: + rss_uri.set_read(self.__params, readed_headlines) if object.watch_in_order_auto: object.watch_in_order = False # no order available