Introduction
Introduction Statistics Contact Development Disclaimer Help
mark as read: use the ID if the link is empty - sfeed_curses - sfeed curses UI …
git clone git://git.codemadness.org/sfeed_curses
Log
Files
Refs
README
LICENSE
---
commit 015b434b8f0345665a9b6920f6dbbd361518904a
parent 95ef55218f09c78d2470581ec5640e5f05bca7b4
Author: Hiltjo Posthuma <[email protected]>
Date: Sat, 20 Feb 2021 20:05:58 +0100
mark as read: use the ID if the link is empty
This allows to mark only textual content (without a link) as read/unread.
The link is optional as specified in the Atom RFC 4287. The ID is mandatory.
* the id element conveys a permanent, universally unique identifier for an
entry or feed.
* atom:feed elements MUST contain exactly one atom:id element.
* atom:feed elements SHOULD contain one atom:link element.
Document the "mark as read" behaviour in a bit more detail too.
Suggested by feedback from Hadrien Lacour, thanks!
Diffstat:
M sfeed_curses.1 | 8 +++++---
M sfeed_curses.c | 15 ++++++++-------
2 files changed, 13 insertions(+), 10 deletions(-)
---
diff --git a/sfeed_curses.1 b/sfeed_curses.1
@@ -1,4 +1,4 @@
-.Dd December 18, 2020
+.Dd February 20, 2021
.Dt SFEED_CURSES 1
.Os
.Sh NAME
@@ -200,14 +200,16 @@ This URL is matched on the link field as specified in
A program to mark items as read if
.Ev SFEED_URL_FILE
is also set, if unset the default program used is "sfeed_markread read".
-The marked items are piped to the program.
+The marked items are piped to the program line by line.
+If the feed item has a link then this line is the link, otherwise it is the ID.
The program is expected to merge items in a safe/transactional manner.
The program should return the exit status 0 on success or non-zero on failure.
.It Ev SFEED_MARK_UNREAD
A program to mark items as unread if
.Ev SFEED_URL_FILE
is also set, if unset the default program used is "sfeed_markread unread".
-The marked items are piped to the program.
+The unmarked items are piped to the program line by line.
+If the feed item has a link then this line is the link, otherwise it is the ID.
The program is expected to merge items in a safe/transactional manner.
The program should return the exit status 0 on success or non-zero on failure.
.It Ev SFEED_LAZYLOAD
diff --git a/sfeed_curses.c b/sfeed_curses.c
@@ -113,9 +113,10 @@ struct statusbar {
/* /UI */
struct item {
- char *link; /* separate link field (always loaded in case of urlfile) …
char *fields[FieldLast];
char *line; /* allocated split line */
+ /* field to match new items, if link is set match on link, else on id …
+ char *matchnew;
time_t timestamp;
int timeok;
int isnew;
@@ -1118,9 +1119,9 @@ linetoitem(char *line, struct item *item)
parseline(line, fields);
memcpy(item->fields, fields, sizeof(fields));
if (urlfile)
- item->link = estrdup(fields[FieldLink]);
+ item->matchnew = estrdup(fields[fields[FieldLink][0] ? FieldLi…
else
- item->link = NULL;
+ item->matchnew = NULL;
parsedtime = 0;
if (!strtotime(fields[FieldUnixTimestamp], &parsedtime)) {
@@ -1141,7 +1142,7 @@ feed_items_free(struct items *items)
for (i = 0; i < items->len; i++) {
free(items->items[i].line);
- free(items->items[i].link);
+ free(items->items[i].matchnew);
}
free(items->items);
items->items = NULL;
@@ -1220,7 +1221,7 @@ updatenewitems(struct feed *f)
row = &(p->rows[i]); /* do not use pane_row_get */
item = (struct item *)row->data;
if (urlfile)
- item->isnew = urls_isnew(item->link);
+ item->isnew = urls_isnew(item->matchnew);
else
item->isnew = (item->timeok && item->timestamp >= comp…
row->bold = item->isnew;
@@ -1269,7 +1270,7 @@ feed_count(struct feed *f, FILE *fp)
parseline(line, fields);
if (urlfile) {
- f->totalnew += urls_isnew(fields[FieldLink]);
+ f->totalnew += urls_isnew(fields[fields[FieldLink][0] …
} else {
parsedtime = 0;
if (!strtotime(fields[FieldUnixTimestamp], &parsedtime…
@@ -1695,7 +1696,7 @@ markread(struct pane *p, off_t from, off_t to, int isread)
row = &(p->rows[i]); /* use pane_row_get: no need for …
item = (struct item *)row->data;
if (item->isnew != isnew) {
- fputs(item->link, fp);
+ fputs(item->matchnew, fp);
putc('\n', fp);
}
}
You are viewing proxied material from codemadness.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.