|
|
iterate on previous commit which adds $SFEED_NEW_MAX_SECS - sfeed - RSS and Atom parser |
|
|
 |
git clone git://git.codemadness.org/sfeed (git://git.codemadness.org) |
|
|
 |
Log |
|
|
 |
Files |
|
|
 |
Refs |
|
|
 |
README |
|
|
 |
LICENSE |
|
|
|
--- |
|
|
 |
commit bdcbf8589716c047a732db3cc349ee6114ccc25f |
|
|
 |
parent ccee88cb02cb54f586d22c53e8bb8865817c3dc4 |
|
|
 |
Author: Hiltjo Posthuma <hiltjo@codemadness.org> (mailto://) |
application/vnd.lotus-organizer |
|
|
Date: Sun, 7 May 2023 12:39:26 +0200 |
|
|
|
|
|
|
|
iterate on previous commit which adds $SFEED_NEW_MAX_SECS |
|
|
|
|
|
|
|
Separate the common pattern to get the time to compare new items in format |
|
|
|
tools to the new util function: getcomparetime(). |
|
|
|
|
|
|
|
Some changes and notes: |
|
|
|
- Change it so it is OK to set this value to 0 or negative (in the future). |
|
|
|
- sfeed_curses: truncating newmaxsecs to an int would limit the value too much. |
|
|
|
- Just use strtotime() and parse the value to time_t. This is a signed long |
|
|
|
(32-bit, until 2038) or signed long long (64-bit) on most platforms. |
|
|
|
- sfeed_curses gets the comparison time on reload aswell and it needs errno = |
|
|
|
0, because it uses die(). time() is not guaranteed to set an errno if it fails. |
|
|
|
- Rename environment variable to $SFEED_NEW_AGE. |
|
|
|
|
|
|
|
Diffstat: |
|
|
|
M README | 6 +++--- |
|
|
|
M sfeed_curses.1 | 2 +- |
|
|
|
M sfeed_curses.c | 13 +++---------- |
|
|
|
M sfeed_frames.1 | 2 +- |
|
|
|
M sfeed_frames.c | 17 +++-------------- |
|
|
|
M sfeed_gopher.1 | 2 +- |
|
|
|
M sfeed_gopher.c | 17 +++-------------- |
|
|
|
M sfeed_html.1 | 2 +- |
|
|
|
M sfeed_html.c | 17 +++-------------- |
|
|
|
M sfeed_plain.1 | 2 +- |
|
|
|
M sfeed_plain.c | 18 +++--------------- |
|
|
|
M util.c | 18 ++++++++++++++++++ |
|
|
|
M util.h | 1 + |
|
|
|
|
|
|
|
13 files changed, 42 insertions(+), 75 deletions(-) |
|
|
|
--- |
|
|
 |
diff --git a/README b/README |
|
|
|
@@ -290,9 +290,9 @@ Just like the other format programs included in sfeed you can run it like this: |
|
|
|
sfeed_curses < ~/.sfeed/feeds/xkcd |
|
|
|
|
|
|
|
By default sfeed_curses marks the items of the last day as new/bold. This limit |
|
|
|
-might be overridden by setting the environment variable $SFEED_NEW_MAX_SECS to |
|
|
|
-the desired maximum in seconds. To manage read/unread items in a different way |
|
|
|
-a plain-text file with a list of the read URLs can be used. To enable this |
|
|
|
+might be overridden by setting the environment variable $SFEED_NEW_AGE to the |
|
|
|
+desired maximum in seconds. To manage read/unread items in a different way a |
|
|
|
+plain-text file with a list of the read URLs can be used. To enable this |
|
|
|
behaviour the path to this file can be specified by setting the environment |
|
|
|
variable $SFEED_URL_FILE to the URL file: |
|
|
|
|
|
|
 |
diff --git a/sfeed_curses.1 b/sfeed_curses.1 |
|
|
|
@@ -208,7 +208,7 @@ SIGWINCH. |
|
|
|
Read and process a sequence of keys as input commands from this environment |
|
|
|
variable first, afterwards it reads from the tty as usual. |
|
|
|
This can be useful to automate certain actions at the start. |
|
|
|
-.It Ev SFEED_NEW_MAX_SECS |
|
|
|
+.It Ev SFEED_NEW_AGE |
|
|
|
Overwrite the maximum age in seconds to mark feeds as new. |
|
|
|
By default this is 86400, which equals one day. |
|
|
|
.It Ev SFEED_PIPER |
|
|
 |
diff --git a/sfeed_curses.c b/sfeed_curses.c |
|
|
|
@@ -191,7 +191,6 @@ static int plumberia = 0; /* env variable: $SFEED_PLUMBER_INTERACTIVE */ |
|
|
|
static int piperia = 1; /* env variable: $SFEED_PIPER_INTERACTIVE */ |
|
|
|
static int yankeria = 0; /* env variable: $SFEED_YANKER_INTERACTIVE */ |
|
|
|
static int lazyload = 0; /* env variable: $SFEED_LAZYLOAD */ |
|
|
|
-static int newmaxsecs = 86400; /* env variable: $SFEED_NEW_MAX_SECS */ |
|
|
|
|
|
|
|
int |
|
|
|
ttywritef(const char *fmt, ...) |
|
|
|
@@ -1321,9 +1320,8 @@ feeds_load(struct feed *feeds, size_t nfeeds) |
|
|
|
size_t i; |
|
|
|
|
|
|
|
errno = 0; |
|
|
|
- if ((comparetime = time(NULL)) == (time_t)-1) |
|
|
|
- die("time"); |
|
|
|
- comparetime -= newmaxsecs; |
|
|
|
+ if ((comparetime = getcomparetime()) == (time_t)-1) |
|
|
|
+ die("getcomparetime"); |
|
|
|
|
|
|
|
for (i = 0; i < nfeeds; i++) { |
|
|
|
f = &feeds[i]; |
|
|
|
@@ -1967,7 +1965,7 @@ main(int argc, char *argv[]) |
|
|
|
struct pane *p; |
|
|
|
struct feed *f; |
|
|
|
struct row *row; |
|
|
|
- char *name, *tmp, *endptr; |
|
|
|
+ char *name, *tmp; |
|
|
|
char *search = NULL; /* search text */ |
|
|
|
int button, ch, fd, i, keymask, release, x, y; |
|
|
|
off_t pos; |
|
|
|
@@ -1997,11 +1995,6 @@ main(int argc, char *argv[]) |
|
|
|
markunreadcmd = tmp; |
|
|
|
if ((tmp = getenv("SFEED_LAZYLOAD"))) |
|
|
|
lazyload = !strcmp(tmp, "1"); |
|
|
|
- if ((tmp = getenv("SFEED_NEW_MAX_SECS"))) { |
|
|
|
- newmaxsecs = (int) strtol(tmp, &endptr, 10); |
|
|
|
- if (*tmp == '\0' || *endptr != '\0' || newmaxsecs <= 0) |
|
|
|
- err(1, "cannot parse $SFEED_NEW_MAX_SECS"); |
|
|
|
- } |
|
|
|
urlfile = getenv("SFEED_URL_FILE"); /* can be NULL */ |
|
|
|
cmdenv = getenv("SFEED_AUTOCMD"); /* can be NULL */ |
|
|
|
|
|
|
 |
diff --git a/sfeed_frames.1 b/sfeed_frames.1 |
|
|
|
@@ -40,7 +40,7 @@ The HTML file of the menu frame which contains navigation "anchor" links (like |
|
|
|
.El |
|
|
|
.Sh ENVIRONMENT VARIABLES |
|
|
|
.Bl -tag -width Ds |
|
|
|
-.It Ev SFEED_NEW_MAX_SECS |
|
|
|
+.It Ev SFEED_NEW_AGE |
|
|
|
Overwrite the maximum age in seconds to mark feeds as new. |
|
|
|
By default this is 86400, which equals one day. |
|
|
|
.El |
|
|
 |
diff --git a/sfeed_frames.c b/sfeed_frames.c |
|
|
|
@@ -77,9 +77,8 @@ int |
|
|
|
main(int argc, char *argv[]) |
|
|
|
{ |
|
|
|
FILE *fpindex, *fpitems, *fpmenu = NULL, *fp; |
|
|
|
- char *name, *tmp, *endptr; |
|
|
|
+ char *name; |
|
|
|
int i, showsidebar = (argc > 1); |
|
|
|
- long l; |
|
|
|
struct feed *f; |
|
|
|
|
|
|
|
if (pledge("stdio rpath wpath cpath", NULL) == -1) |
|
|
|
@@ -88,18 +87,8 @@ main(int argc, char *argv[]) |
|
|
|
if (!(feeds = calloc(argc, sizeof(struct feed)))) |
|
|
|
err(1, "calloc"); |
|
|
|
|
|
|
|
- if ((comparetime = time(NULL)) == (time_t)-1) |
|
|
|
- errx(1, "time"); |
|
|
|
- |
|
|
|
- if ((tmp = getenv("SFEED_NEW_MAX_SECS"))) { |
|
|
|
- l = strtol(tmp, &endptr, 10); |
|
|
|
- if (*tmp == '\0' || *endptr != '\0' || l <= 0) |
|
|
|
- err(1, "cannot parse $SFEED_NEW_MAX_SECS"); |
|
|
|
- comparetime -= l; |
|
|
|
- } else { |
|
|
|
- /* 1 day is old news */ |
|
|
|
- comparetime -= 86400; |
|
|
|
- } |
|
|
|
+ if ((comparetime = getcomparetime()) == (time_t)-1) |
|
|
|
+ errx(1, "getcomparetime"); |
|
|
|
|
|
|
|
/* write main index page */ |
|
|
|
if (!(fpindex = fopen("index.html", "wb"))) |
|
|
 |
diff --git a/sfeed_gopher.1 b/sfeed_gopher.1 |
|
|
|
@@ -46,7 +46,7 @@ The default is "127.0.0.1". |
|
|
|
.It Ev SFEED_GOPHER_PORT |
|
|
|
This environment variable can be used as the Gopher Port field. |
|
|
|
The default is "70". |
|
|
|
-.It Ev SFEED_NEW_MAX_SECS |
|
|
|
+.It Ev SFEED_NEW_AGE |
|
|
|
Overwrite the maximum age in seconds to mark feeds as new. |
|
|
|
By default this is 86400, which equals one day. |
|
|
|
.El |
|
|
 |
diff --git a/sfeed_gopher.c b/sfeed_gopher.c |
|
|
|
@@ -122,9 +122,8 @@ int |
|
|
|
main(int argc, char *argv[]) |
|
|
|
{ |
|
|
|
FILE *fpitems, *fpindex, *fp; |
|
|
|
- char *name, *p, *tmp, *endptr; |
|
|
|
+ char *name, *p; |
|
|
|
int i; |
|
|
|
- long l; |
|
|
|
|
|
|
|
if (argc == 1) { |
|
|
|
if (pledge("stdio", NULL) == -1) |
|
|
|
@@ -138,18 +137,8 @@ main(int argc, char *argv[]) |
|
|
|
err(1, "pledge"); |
|
|
|
} |
|
|
|
|
|
|
|
- if ((comparetime = time(NULL)) == (time_t)-1) |
|
|
|
- errx(1, "time"); |
|
|
|
- |
|
|
|
- if ((tmp = getenv("SFEED_NEW_MAX_SECS"))) { |
|
|
|
- l = strtol(tmp, &endptr, 10); |
|
|
|
- if (*tmp == '\0' || *endptr != '\0' || l <= 0) |
|
|
|
- err(1, "cannot parse $SFEED_NEW_MAX_SECS"); |
|
|
|
- comparetime -= l; |
|
|
|
- } else { |
|
|
|
- /* 1 day is old news */ |
|
|
|
- comparetime -= 86400; |
|
|
|
- } |
|
|
|
+ if ((comparetime = getcomparetime()) == (time_t)-1) |
|
|
|
+ errx(1, "getcomparetime"); |
|
|
|
|
|
|
|
if ((p = getenv("SFEED_GOPHER_HOST"))) |
|
|
|
host = p; |
|
|
 |
diff --git a/sfeed_html.1 b/sfeed_html.1 |
|
|
|
@@ -32,7 +32,7 @@ Items are marked as new using a bold markup. |
|
|
|
There is an example style.css stylesheet file included in the distribution. |
|
|
|
.Sh ENVIRONMENT VARIABLES |
|
|
|
.Bl -tag -width Ds |
|
|
|
-.It Ev SFEED_NEW_MAX_SECS |
|
|
|
+.It Ev SFEED_NEW_AGE |
|
|
|
Overwrite the maximum age in seconds to mark feeds as new. |
|
|
|
By default this is 86400, which equals one day. |
|
|
|
.El |
|
|
 |
diff --git a/sfeed_html.c b/sfeed_html.c |
|
|
|
@@ -78,28 +78,17 @@ int |
|
|
|
main(int argc, char *argv[]) |
|
|
|
{ |
|
|
|
struct feed *f; |
|
|
|
- char *name, *tmp, *endptr; |
|
|
|
+ char *name; |
|
|
|
FILE *fp; |
|
|
|
int i; |
|
|
|
- long l; |
|
|
|
|
|
|
|
if (pledge(argc == 1 ? "stdio" : "stdio rpath", NULL) == -1) |
|
|
|
err(1, "pledge"); |
|
|
|
|
|
|
|
if (!(feeds = calloc(argc, sizeof(struct feed)))) |
|
|
|
err(1, "calloc"); |
|
|
|
- if ((comparetime = time(NULL)) == (time_t)-1) |
|
|
|
- errx(1, "time"); |
|
|
|
- |
|
|
|
- if ((tmp = getenv("SFEED_NEW_MAX_SECS"))) { |
|
|
|
- l = strtol(tmp, &endptr, 10); |
|
|
|
- if (*tmp == '\0' || *endptr != '\0' || l <= 0) |
|
|
|
- err(1, "cannot parse $SFEED_NEW_MAX_SECS"); |
|
|
|
- comparetime -= l; |
|
|
|
- } else { |
|
|
|
- /* 1 day is old news */ |
|
|
|
- comparetime -= 86400; |
|
|
|
- } |
|
|
|
+ if ((comparetime = getcomparetime()) == (time_t)-1) |
|
|
|
+ errx(1, "getcomparetime"); |
|
|
|
|
|
|
|
fputs("<!DOCTYPE HTML>\n" |
|
|
|
"<html>\n" |
|
|
 |
diff --git a/sfeed_plain.1 b/sfeed_plain.1 |
|
|
|
@@ -42,7 +42,7 @@ and |
|
|
|
.Xr wcwidth 3 . |
|
|
|
.Sh ENVIRONMENT VARIABLES |
|
|
|
.Bl -tag -width Ds |
|
|
|
-.It Ev SFEED_NEW_MAX_SECS |
|
|
|
+.It Ev SFEED_NEW_AGE |
|
|
|
Overwrite the maximum age in seconds to mark feeds as new. |
|
|
|
By default this is 86400, which equals one day. |
|
|
|
.El |
|
|
 |
diff --git a/sfeed_plain.c b/sfeed_plain.c |
|
|
|
@@ -2,7 +2,6 @@ |
|
|
|
|
|
|
|
#include <locale.h> |
|
|
|
#include <stdio.h> |
|
|
|
-#include <stdlib.h> |
|
|
|
#include <string.h> |
|
|
|
#include <time.h> |
|
|
|
|
|
|
|
@@ -53,9 +52,8 @@ int |
|
|
|
main(int argc, char *argv[]) |
|
|
|
{ |
|
|
|
FILE *fp; |
|
|
|
- char *name, *tmp, *endptr; |
|
|
|
+ char *name; |
|
|
|
int i; |
|
|
|
- long l; |
|
|
|
|
|
|
|
if (pledge("stdio rpath", NULL) == -1) |
|
|
|
err(1, "pledge"); |
|
|
|
@@ -65,18 +63,8 @@ main(int argc, char *argv[]) |
|
|
|
if (pledge(argc == 1 ? "stdio" : "stdio rpath", NULL) == -1) |
|
|
|
err(1, "pledge"); |
|
|
|
|
|
|
|
- if ((comparetime = time(NULL)) == (time_t)-1) |
|
|
|
- errx(1, "time"); |
|
|
|
- |
|
|
|
- if ((tmp = getenv("SFEED_NEW_MAX_SECS"))) { |
|
|
|
- l = strtol(tmp, &endptr, 10); |
|
|
|
- if (*tmp == '\0' || *endptr != '\0' || l <= 0) |
|
|
|
- err(1, "cannot parse $SFEED_NEW_MAX_SECS"); |
|
|
|
- comparetime -= l; |
|
|
|
- } else { |
|
|
|
- /* 1 day is old news */ |
|
|
|
- comparetime -= 86400; |
|
|
|
- } |
|
|
|
+ if ((comparetime = getcomparetime()) == (time_t)-1) |
|
|
|
+ errx(1, "getcomparetime"); |
|
|
|
|
|
|
|
if (argc == 1) { |
|
|
|
printfeed(stdin, ""); |
|
|
 |
diff --git a/util.c b/util.c |
|
|
|
@@ -318,6 +318,24 @@ strtotime(const char *s, time_t *t) |
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
+time_t |
|
|
|
+getcomparetime(void) |
|
|
|
+{ |
|
|
|
+ time_t now, t; |
|
|
|
+ char *p; |
|
|
|
+ |
|
|
|
+ if ((now = time(NULL)) == (time_t)-1) |
|
|
|
+ return (time_t)-1; |
|
|
|
+ |
|
|
|
+ if ((p = getenv("SFEED_NEW_AGE"))) { |
|
|
|
+ if (strtotime(p, &t) == -1) |
|
|
|
+ return (time_t)-1; |
|
|
|
+ return now - t; |
|
|
|
+ } |
|
|
|
+ |
|
|
|
+ return now - 86400; /* 1 day is old news */ |
|
|
|
+} |
|
|
|
+ |
|
|
|
/* Escape characters below as HTML 2.0 / XML 1.0. */ |
|
|
|
void |
|
|
|
xmlencode(const char *s, FILE *fp) |
|
|
 |
diff --git a/util.h b/util.h |
|
|
|
@@ -71,6 +71,7 @@ int uri_makeabs(struct uri *, struct uri *, struct uri *); |
|
|
|
int uri_parse(const char *, struct uri *); |
|
|
|
|
|
|
|
void checkfileerror(FILE *, const char *, int); |
|
|
|
+time_t getcomparetime(void); |
|
|
|
void parseline(char *, char *[FieldLast]); |
|
|
|
void printutf8pad(FILE *, const char *, size_t, int); |
|
|
|
int strtotime(const char *, time_t *); |
|