Haha, that’s clear. Thanks for explaining.
I’m hoping to still find out the sub-issue with the blogs I’m managing, though, since they (at seemingly random times, without an updated or new article present) still exhibited the same behavior (all articles unread), but with the extra peculiar detail that the article timestamp was set to that of the fetching action, not the actual timestamp of the article.
e: i can exclude GUIDs from this hash calculation which would prevent this from happening next time this format changes but you’ll get another set of unread articles. is it worth it? 
Well, I’m already writing a mini-plugin to allow hotkeys for instant unsubscribe and hopefully instant mark-all-as-read, so it gives me a good chance to clean up old subscriptions anyway.
fox
8
there’s a bunch of fields that are taken into account and if any one changes you’ll get your pseudo unread article, even if the change is (almost-) invisible.
could be updated timestamp or number of comments, etc. this option is simply not very useful for some feeds.
https://git.tt-rss.org/fox/tt-rss/commit/3a142cbf58b927a7e0d7ac07922e19ee73440eef
since I broke this once today, might as well do this.
e: woops https://git.tt-rss.org/fox/tt-rss/commit/06d2c65193b8679a6a7afbcd342ced07c53a4268
The feed really doesn’t have many fields for tt-rss to take into account anyway. Here’s an anonymized excerpt of the feed:
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title>Title of Blog</title>
<link>https://some.thing</link>
<description>Desc</description>
<lastBuildDate>Sun, 17 May 2020 08:50:24 +0200</lastBuildDate>
<item>
<title>A title </title>
<link>https://some.thing/article-first</link>
<description>The entire article text is here</description>
<pubDate>Sa, 16 May 2020 09:52:42 +0200</pubDate>
<guid isPermaLink="false">e032052af3258ee58b06a3f3de9d43cd</guid>
</item>
<item>
<title>2nd article </title>
<link>https://some.thing/article-second</link>
<description>The entire article text is here</description>
<pubDate>Sa, 18 Apr 2020 12:06:36 +0200</pubDate>
<guid isPermaLink="false">61e12be95c389ea9e10eeb6a279b2ed8</guid>
</item>
</channel>
</rss>
e: All right, I’ve updated. Let’s see how this goes at the next cron job.
…yeah, my blogs that have the feed structure as posted above just got all their articles reset to unread again (I updated https://git.tt-rss.org/fox/tt-rss/commit/06d2c65193b8679a6a7afbcd342ced07c53a4268 about an hour ago, so cronjob has been run twice since then).
fox
11
anything you had mark unread on update enabled would’ve done this after this last update, in this case it’s not related to feed data.
Ok,cool.I’ll keep an eye on it and report back if this happens again. Thanks!
I just updated from commit c8cc845d5b1c64ea259667c01a9591a04e0e4e98 to ac17ded854557e77840bf99ec48e736a2586f7e4 and again 889 articles got their read status reset.
They again consist of various sources: Reddit topics, forum topics, GitHub RSS feeds, and blogs (including the one I described above)…
fox
14
search before posting, there were guid changes some time ago
I know that, it’s been discussed here. But those changes were not between c8cc845d5b1c64ea259667c01a9591a04e0e4e98 and ac17ded854557e77840bf99ec48e736a2586f7e4.
fox
16
hmmmm
ah right, enabling or disabling plugins causes a rehash, which is what you probably did
this kind of stuff is why I wouldn’t recommend this option 
Ouch!
That is indeed what I did, to test for Prefs: TypeError: App.isCombinedMode is not a function - Support - Tiny Tiny RSS: Community, and what I had to do again just now, right after cleaning up the mess… 
Imho this is unexpected behavior, what’s the reason behind it?
fox
18
plugins might change article content so when you enable something this lets the plugin do its thing transparently
this was the reason, idk if its a worthy one
Here’s my 2ct.
I’m trying to think of a use case where the end user would want to re-read a whole bunch of articles, just because a plugin has now handled the respective articles differently. I can’t think of a reason t.b.h.
I think it would be the responsibility of the end user to first mark articles unread if they wanted those articles to be re-read after some plugin went over them (or stopped doing so).
The option to “Mark updated articles as unread” to me reads as an update of the source, so the article itself, not what tt-rss does with it.
An RSS feed doesn’t provide the entire article in the feed, only an excerpt. The user enables af_readability to replace the excerpt with the full article.
Every user is different. It makes sense that when enabling a plugin that modifies article content that TT-RSS would consider the article content changed.
But only because that’s how you’re thinking. I’m not saying it’s not a valid opinion, but I am saying it’s just as valid as: “I think it would be the responsibility of TT-RSS to mark articles unread after some plugin went over them.”
Internally TT-RSS does a lot of work to figure out what the source being modified is, but plugins can intercept and change that at multiple points. Given that users doesn’t often toggle plugins on a daily basis, the current approach makes sense. The alternative makes sense, too. There’s no right or wrong here, just the way TT-RSS does it.
The one I can think of is if they subscribed to a bunch of feeds that don’t include the articles and then enable something like readability or af_comics.
fox
22
i think this (rehash on active plugin list change) is one of those things that might go here or there, arguments might be made for both ways to behave.
if i was implementing this now, i might have chosen differently, but since this how this has already worked for years and the only arguably strange synergy is with the redheaded stepchild option (mark unread on update) i’m not sure if its worth it to suddenly change it.
also, remember that changing this would ALSO rehash everything AGAIN. 
@JustAMacUser and @ovalwonder I think those are valid points, too, sure. The thing is that “Mark unread on update”, be it the “redheaded stepchild”
or not, is imho a great feature to keep track of changes in blog (and forum) posts, so you won’t miss the latest edit.
I agree that this would be tailored more to the way I look at it and how I’m trying to use this feature, but I still have trouble thinking of a use case where the end user would like to have almost all its articles, dating back years and years, marked unread, because they tried en-/disabling a certain plugin.
Ah, I’m thinking I might be able to “hack it” to my personal needs in my updater script. First gotta find it in the code, though… 
Wait! What!? You don’t purge articles?
Hehe fair point!
Got some really old articles starred/published, though. Plus, when following topics, the amount of articles that are marked unread goes well beyond a 1000 at times.
fox
26
https://git.tt-rss.org/fox/tt-rss/src/master/classes/rssutils.php#L19
see, it joins calculated value with the list of loaded plugins. you can replace that with sha1($tmp) etc