commit eed62b345ff3e15ba010a2fcedf55f93d9de2cb5
parent c24e9a97d1ccad5124f31db78f4c4c030551d322
Author: citbl <citbl@citbl.org>
Date: Wed, 8 Oct 2025 23:00:08 +1000
volatile seen status and more UI impr
Diffstat:
4 files changed, 35 insertions(+), 16 deletions(-)
diff --git a/TODO b/TODO
@@ -1,7 +1,7 @@
show more
show domains
show ending (html|pdf)
-caching
+caching, persist links and seen
instant display
background fetching
status bar
diff --git a/keys.c b/keys.c
@@ -45,6 +45,7 @@ handle_key(app_t* app, struct tb_event ev)
if (len == 0) return;
strncpy(url, &post->data[post->link.start], len);
url[len] = '\0';
+ post->seen = 1;
open_url(url);
}
break;
@@ -61,6 +62,7 @@ handle_key(app_t* app, struct tb_event ev)
if (len == 0) return;
strncpy(url, &post->data[post->comments.start], len);
url[len] = '\0';
+ post->seen = 1;
open_url(url);
}
}
diff --git a/readr.h b/readr.h
@@ -15,6 +15,7 @@ typedef struct {
const char* data;
size_t data_len;
slice_t title, link, comments, desc, date, author;
+ int seen;
} post_t;
typedef struct {
diff --git a/render.c b/render.c
@@ -58,30 +58,46 @@ draw_background(void)
void
render(app_t* app)
{
+ int i;
uintattr_t color;
+ size_t title_len;
+ char title[TITLE_CAP] = { 0 };
+ post_t* post;
+ feed_t* feed;
+ feed_t* selected_feed = app->feeds[app->selected_feed];
draw_background();
-
draw_bars();
- int i;
for (i = 0; i < app->feeds_len; i++) {
- const feed_t* feed = app->feeds[i];
- color = (app->selected_panel == 0 && i == app->selected_feed) ? (FEED_COLOR | TB_REVERSE)
- : (FEED_COLOR);
+ feed = app->feeds[i];
+
+ if (app->selected_panel == 0 && i == app->selected_feed)
+ color = (FEED_COLOR | TB_REVERSE | TB_BRIGHT | TB_BOLD);
+ else if (i == app->selected_feed)
+ color = (FEED_COLOR | TB_BOLD);
+ else
+ color = (FEED_COLOR | TB_DIM);
+
tb_print(2, 4 + i, color, BACK_COLOR, feed->title ? feed->title : "N/A");
}
- char title[TITLE_CAP] = { 0 };
- feed_t* feed = app->feeds[app->selected_feed];
-
- for (i = 0; i < feed->posts_len; i++) {
- const post_t* post = feed->posts[i];
- size_t len = MIN(TITLE_CAP, post->title.len);
- strncpy(title, &post->data[post->title.start], len);
- title[len] = '\0';
- color = (app->selected_panel == 1 && i == app->selected_post) ? (POST_COLOR | TB_REVERSE)
- : (POST_COLOR);
+ for (i = 0; i < selected_feed->posts_len; i++) {
+ post = selected_feed->posts[i];
+ title_len = MIN(TITLE_CAP, post->title.len);
+ strncpy(title, &post->data[post->title.start], title_len);
+ title[title_len] = '\0';
+
+ if (app->selected_panel == 1 && i == app->selected_post)
+ if (post->seen)
+ color = (POST_COLOR | TB_REVERSE | TB_DIM);
+ else
+ color = (POST_COLOR | TB_REVERSE | TB_BRIGHT | TB_BOLD);
+ else if (post->seen)
+ color = (SEEN_COLOR);
+ else
+ color = (POST_COLOR);
+
tb_print(FEED_CAP + 10, 4 + i, color, BACK_COLOR, title);
}