Monocle+Aperture are coming along nicely!
I just got my GitHub notifications piped into the reader, which is a much nicer experience than reading them via email or trying to track them down on github.com!
I have a few channels set to show just an indicator dot when there are new posts rather than showing the number of new posts, a much calmer experience.
Unread posts show up with a faint yellow glow around them, and they're automatically marked as read when they scroll off the screen.
At this point, I've actually moved all of the feeds I was previously following from IRC into Aperture as a way to force myself to continue putting the finishing touches on it!
I pushed an update to Aperture which allows you to toggle per-channel whether read state tracking is enabled. There are two modes, one where it returns the count of the number of unread items, and the other where it returns only true
or false
depending on whether there are new items.
For my super busy feeds, it wasn't useful having the counts, but I do like a subtle indicator there are new posts.
There are also some channels I don't want to be bothered about at all, so I've disabled read state tracking on those.
This means the Microsub API is now returning either an integer or a boolean for the unread
property on channels, e.g.:
{
"channels": [
{
"uid": "notifications",
"name": "Notifications",
"unread": 0
},
{
"uid": "31eccfe322d6c48c50dea2c84efc74ff",
"name": "IndieWeb"
"unread": true
}
]
}
I'm implementing a draft of this in Aperture right now. Here is the current API.
Every entry now includes a unique system ID, meant for internal identification of the item (not global identification). This is returned in the timeline response as the parameter _id
, and there is now also _is_read
. For example:
{
"items": [
{
"type": "entry",
"url": "http://example.com/100",
...
"_id": "41003",
"_is_read": false
]
}
These new _id
values are meant to be opaque to clients, and must always be a string. Some servers will likely use integer database IDs, but other servers may use other string identifiers for entries depending on the implementation.
Retrieving the list of channels now also includes the number of unread entries in the channel:
{
"channels": [
{
"uid": "notifications",
"name": "Notifications",
"unread": 0
},
{
"uid": "YPGiUrZjNM36LNdpFy7eSzJE7o2aK82z",
"name": "IndieWeb",
"unread": 7
}
]
}
To mark an individual entry as read:
action=timeline
channel=example
method=mark_read
entry=1234
To mark multiple entires as read:
action=timeline
channel=example
method=mark_read
entry[]=1234
entry[]=5678
Both of the above also work with method=mark_unread
.
To mark an entry read as well as everything before it:
action=timeline
channel=example
method=mark_read
last_read_entry=1234
This is to address the use case of streams, where you really only care about knowing where in the stream you've scrolled to and whether there are any new entries since then.
This is mostly inspired by the Feedly Markers API Mark one or more articles as read and Mark a feed as read