<feed xmlns='http://www.w3.org/2005/Atom'>
<title>FreshRSS (Customized)/app/Models/EntryDAO.php, branch custom</title>
<subtitle>Customized version of FreshRSS, a self-hosted RSS feed aggregator</subtitle>
<id>https://git.rdnlsmith.com/fresh-rss-custom/atom?h=custom</id>
<link rel='self' href='https://git.rdnlsmith.com/fresh-rss-custom/atom?h=custom'/>
<link rel='alternate' type='text/html' href='https://git.rdnlsmith.com/fresh-rss-custom/'/>
<updated>2026-01-24T14:06:59+00:00</updated>
<entry>
<title>MariaDB restrict USE INDEX (#8460)</title>
<updated>2026-01-24T14:06:59+00:00</updated>
<author>
<name>Alexandre Alapetite</name>
<email>alexandre@alapetite.fr</email>
</author>
<published>2026-01-24T14:06:59+00:00</published>
<link rel='alternate' type='text/html' href='https://git.rdnlsmith.com/fresh-rss-custom/commit/?id=3097abfab6e1cb2e22e9acf9145a8394c2d19123'/>
<id>urn:sha1:3097abfab6e1cb2e22e9acf9145a8394c2d19123</id>
<content type='text'>
fix https://github.com/FreshRSS/FreshRSS/issues/8455
Follow-up of https://github.com/FreshRSS/FreshRSS/pull/8211
</content>
</entry>
<entry>
<title>DB: auto-add lastUserModified column also during markRead (#8346)</title>
<updated>2025-12-25T10:31:07+00:00</updated>
<author>
<name>Alexandre Alapetite</name>
<email>alexandre@alapetite.fr</email>
</author>
<published>2025-12-25T10:31:07+00:00</published>
<link rel='alternate' type='text/html' href='https://git.rdnlsmith.com/fresh-rss-custom/commit/?id=6fb5263633ce318432cf3d177539cbd574e0fce2'/>
<id>urn:sha1:6fb5263633ce318432cf3d177539cbd574e0fce2</id>
<content type='text'>
fix https://github.com/FreshRSS/FreshRSS/issues/8345</content>
</entry>
<entry>
<title>Scaling of user statistics (#8277)</title>
<updated>2025-12-04T18:11:31+00:00</updated>
<author>
<name>Alexandre Alapetite</name>
<email>alexandre@alapetite.fr</email>
</author>
<published>2025-12-04T18:11:31+00:00</published>
<link rel='alternate' type='text/html' href='https://git.rdnlsmith.com/fresh-rss-custom/commit/?id=78e40c6fe3afe7f815ef9d32646610e2d5436ba3'/>
<id>urn:sha1:78e40c6fe3afe7f815ef9d32646610e2d5436ba3</id>
<content type='text'>
Fix https://github.com/FreshRSS/FreshRSS/issues/8268
To better support user management on FreshRSS instance with many users.

SQL speed improved. On a reduced test with 5 users, including some large accounts (PostgreSQL on a very tiny and slow server), improving from ~2.3s to ~1.8s, which gives ~20% speed improvement.

Then tested with 1000 users, with only the default feed (on my old desktop computer):

```sh
for i in {1..1000}; do ./cli/create-user.php --user=freshrss$i --password=freshrss; done
app/actualize_script.php
cli/access-permissions.sh
```

SQLite:

```console
$ time cli/user-info.php | wc -l
1001

real    0m1.366s
user    0m0.908s
sys     0m0.475s
```

PostgreSQL:

```console
$ time cli/user-info.php | wc -l
1001

real    0m28.498s
user    0m12.137s
sys     0m2.217s
```

MariaDB:

```console
# time ./cli/user-info.php | wc -l
1001

real    0m49.485s
user    0m1.276s
sys     0m2.258s
```

Yes, SQLite is much faster - not a surprise for such use-cases, where the TCP connection is not re-used.

I have added some CLI options to disable some statistics:

```sh
cli/user-info.php --no-db-size --no-db-counts
```

For the Web UI, I have disabled detailed user statistics if it takes too long, and retrieve missing user statistics asynchronously via JavaScript. Lazy loading of the user details based on IntersectionObserver, with maximum 10 requests in parallel.
Web UI tested on 1000 users as well. Checked with SeaMonkey.
</content>
</entry>
<entry>
<title>Change SQL update query (#6957)</title>
<updated>2025-11-17T12:48:48+00:00</updated>
<author>
<name>Alexandre Alapetite</name>
<email>alexandre@alapetite.fr</email>
</author>
<published>2025-11-17T12:48:48+00:00</published>
<link rel='alternate' type='text/html' href='https://git.rdnlsmith.com/fresh-rss-custom/commit/?id=deb7633c4932d1838cb0a67aebdab5e37aae7206'/>
<id>urn:sha1:deb7633c4932d1838cb0a67aebdab5e37aae7206</id>
<content type='text'>
* Change SQL update query for MariaDB / MySQL
fix https://github.com/FreshRSS/FreshRSS/issues/5707

* No change for SQLite

* Fix merge error

* Update MySQL version on the model of PostgreSQL
Performance to be tested

* Fix LEFT JOIN, also for PostgreSQL / SQLite

* Fix alias

* Reduce MySQL deadlock

* Fix compatibility with SQLite

* Back to identical SQL for all databases</content>
</entry>
<entry>
<title>Fix MySQL commitNewEntries (#8223)</title>
<updated>2025-11-17T12:46:28+00:00</updated>
<author>
<name>Alexandre Alapetite</name>
<email>alexandre@alapetite.fr</email>
</author>
<published>2025-11-17T12:46:28+00:00</published>
<link rel='alternate' type='text/html' href='https://git.rdnlsmith.com/fresh-rss-custom/commit/?id=419a1978b6d8052f88783a4624cd17602422030a'/>
<id>urn:sha1:419a1978b6d8052f88783a4624cd17602422030a</id>
<content type='text'>
I just realised that `commitNewEntries()` was not sorting articles properly before insertion in database when using MySQL: Articles were not sorted by publication date as expected from the temporary table before insertion in the final table. MySQL was not picking the correct field, so fixed with an explicit alias.
Discovered because I did some tests with MySQL in https://github.com/FreshRSS/FreshRSS/pull/6957
At the same time, I did the same change for PostgreSQL and SQLite although those were not affected.</content>
</entry>
<entry>
<title>force correct index for MySQL when listing entries (#8211)</title>
<updated>2025-11-15T22:17:13+00:00</updated>
<author>
<name>Martin Hartmann</name>
<email>15929417+martinhartmann@users.noreply.github.com</email>
</author>
<published>2025-11-15T22:17:13+00:00</published>
<link rel='alternate' type='text/html' href='https://git.rdnlsmith.com/fresh-rss-custom/commit/?id=b6314bee316488664360b77a2fb735853db507a5'/>
<id>urn:sha1:b6314bee316488664360b77a2fb735853db507a5</id>
<content type='text'>
* force correct index for MySQL when listing entries

* Make special case for MySQL / MariaDB

---------

Co-authored-by: Alexandre Alapetite &lt;alexandre@alapetite.fr&gt;</content>
</entry>
<entry>
<title>GReader API frss:priority (#7583)</title>
<updated>2025-10-17T10:54:00+00:00</updated>
<author>
<name>Alexandre Alapetite</name>
<email>alexandre@alapetite.fr</email>
</author>
<published>2025-10-17T10:54:00+00:00</published>
<link rel='alternate' type='text/html' href='https://git.rdnlsmith.com/fresh-rss-custom/commit/?id=1ef354a63e7a9de98f90961acb7d45f1d9aa893e'/>
<id>urn:sha1:1ef354a63e7a9de98f90961acb7d45f1d9aa893e</id>
<content type='text'>
* GReader API frss:priority
Experiment with a FreshRSS namespace in the GReader API to see whether there is any interest.
fix https://github.com/FreshRSS/FreshRSS/issues/1868

`'frss:priority'` can be: `'important'`, `'main'`, `'category'`, `'feed'` (there is also the value `hidden`, but which is filtered out and as such never sent through the API at the moment)

* Add visibility feed
https://github.com/FreshRSS/FreshRSS/pull/7972
</content>
</entry>
<entry>
<title>Fix API list by IDs (#8130)</title>
<updated>2025-10-17T07:33:04+00:00</updated>
<author>
<name>Alexandre Alapetite</name>
<email>alexandre@alapetite.fr</email>
</author>
<published>2025-10-17T07:33:04+00:00</published>
<link rel='alternate' type='text/html' href='https://git.rdnlsmith.com/fresh-rss-custom/commit/?id=fbbb5a5e204755a3835383316fdd87ecdfd98d2b'/>
<id>urn:sha1:fbbb5a5e204755a3835383316fdd87ecdfd98d2b</id>
<content type='text'>
fix https://github.com/FreshRSS/FreshRSS/issues/8129
Regression from https://github.com/FreshRSS/FreshRSS/pull/7886</content>
</entry>
<entry>
<title>Sort by article length (#8119)</title>
<updated>2025-10-16T19:15:44+00:00</updated>
<author>
<name>Alexandre Alapetite</name>
<email>alexandre@alapetite.fr</email>
</author>
<published>2025-10-16T19:15:44+00:00</published>
<link rel='alternate' type='text/html' href='https://git.rdnlsmith.com/fresh-rss-custom/commit/?id=f08f7dcff988de90e899ce310246f0b552a4fe3d'/>
<id>urn:sha1:f08f7dcff988de90e899ce310246f0b552a4fe3d</id>
<content type='text'>
* Sort by article length
fix https://github.com/FreshRSS/Extensions/issues/378
Very basic using simply SQL `LENGTH()` function.

&lt;img width="492" height="217" alt="image" src="https://github.com/user-attachments/assets/7cf37303-76c8-4411-b8b1-075e81535b60" /&gt;

* Improve content length retrieval</content>
</entry>
<entry>
<title>Filter on last user modified (#8093)</title>
<updated>2025-10-14T22:12:19+00:00</updated>
<author>
<name>Alexandre Alapetite</name>
<email>alexandre@alapetite.fr</email>
</author>
<published>2025-10-14T22:12:19+00:00</published>
<link rel='alternate' type='text/html' href='https://git.rdnlsmith.com/fresh-rss-custom/commit/?id=7e72033859f60f529d4d985da1e9cac0a691b2dc'/>
<id>urn:sha1:7e72033859f60f529d4d985da1e9cac0a691b2dc</id>
<content type='text'>
Example: `userdate:PT1H` to select only articles modified by user during the last hour
Fix https://github.com/FreshRSS/FreshRSS/issues/4280#issuecomment-3393078024

Useful for instance to bulk mark as unread recently marked articles by error:
1. Click on the toggle button to show the read articles (making sure the toggle for the unread articles is off)
2. Sort by *User modified 9→1*
3. Filter by *user modified date*, for instance to the last 3 hours by typing `userdate:PT3H`
4. Click in the drop-down menu *Mark selection as unread*

P.S.: I have added at the same time a bunch of unit tests for date-related logic
</content>
</entry>
</feed>
