aboutsummaryrefslogtreecommitdiff
path: root/p/api/greader.php
diff options
context:
space:
mode:
authorGravatar Alexandre Alapetite <alexandre@alapetite.fr> 2025-06-29 14:11:02 +0200
committerGravatar GitHub <noreply@github.com> 2025-06-29 14:11:02 +0200
commit0bca0d8afcf2509d7b227450450d66c5348e9e1a (patch)
treec0f1153f696c5c90fceaeae9ba733abea2fc610a /p/api/greader.php
parentc8bbf355342985c83054c6c36c6538a780ab509e (diff)
API add support for states in `s` streamId (#7695)
https://github.com/Ashinch/ReadYou/issues/1081#issuecomment-3009682580 Some other implementations allow `s` to target states: * https://www.inoreader.com/developers/stream-ids * https://github.com/theoldreader/api/blob/master/README.md#item-ids * https://feedhq.readthedocs.io/en/latest/api/reference.html#stream-items-ids I find this behaviour redundant with `it`, but for the sake of compatibility
Diffstat (limited to 'p/api/greader.php')
-rw-r--r--p/api/greader.php20
1 files changed, 18 insertions, 2 deletions
diff --git a/p/api/greader.php b/p/api/greader.php
index 5e9076de7..cefefbb23 100644
--- a/p/api/greader.php
+++ b/p/api/greader.php
@@ -610,7 +610,7 @@ final class GReaderAPI {
}
break;
}
- $streamId = (int)$streamId;
+ $streamId = is_numeric($streamId) ? (int)$streamId : 0;
$state = match ($filter_target) {
'user/-/state/com.google/read' => FreshRSS_Entry::STATE_READ,
@@ -712,8 +712,18 @@ final class GReaderAPI {
$type = 'A';
if ($streamId === 'user/-/state/com.google/reading-list') {
$type = 'A';
+ $streamId = '';
} elseif ($streamId === 'user/-/state/com.google/starred') {
$type = 's';
+ $streamId = '';
+ } elseif ($streamId === 'user/-/state/com.google/read') {
+ $filter_target = $streamId;
+ $type = 'A';
+ $streamId = '';
+ } elseif ($streamId === 'user/-/state/com.google/unread') {
+ $filter_target = $streamId;
+ $type = 'A';
+ $streamId = '';
} elseif (str_starts_with($streamId, 'feed/')) {
$type = 'f';
$streamId = substr($streamId, 5);
@@ -965,7 +975,13 @@ final class GReaderAPI {
}
}
} elseif ($streamId === 'user/-/state/com.google/reading-list') {
- $entryDAO->markReadEntries($olderThanId, false);
+ $entryDAO->markReadEntries($olderThanId, onlyFavorites: false);
+ } elseif ($streamId === 'user/-/state/com.google/starred') {
+ $entryDAO->markReadEntries($olderThanId, onlyFavorites: true);
+ } elseif ($streamId === 'user/-/state/com.google/read') {
+ $entryDAO->markReadEntries($olderThanId, state: FreshRSS_Entry::STATE_READ);
+ } elseif ($streamId === 'user/-/state/com.google/unread') {
+ $entryDAO->markReadEntries($olderThanId, state: FreshRSS_Entry::STATE_NOT_READ);
} else {
self::badRequest();
}