commit - 5df02e0d8d9027c56450c94857949b3826454369
commit + 8f3c9af8369ac653695ca22777db99bfa1162cfe
blob - aa3e2186e09bffc8a9dab0eaaa5367afee2de12e
blob + d2b4e4ddb16064ef991bcf62b90dfd300ce90032
--- mcache.c
+++ mcache.c
#include "telescope.h"
#include "mcache.h"
+#include "parser.h"
const char *gemtext_prefixes[] = {
[LINE_TEXT] = "",
}
int
-mcache_buffer(const char *url, struct buffer *buf, int trust)
+mcache_tab(struct tab *tab)
{
struct mcache_entry *e;
struct line *line;
unsigned int slot;
size_t l, len;
+ const char *url;
+ url = tab->hist_cur->h;
l = strlen(url);
len = sizeof(*e) + l + 1;
if ((e = calloc(1, len)) == NULL)
return -1;
- e->trust = trust;
+ e->trust = tab->trust;
memcpy(e->url, url, l);
if ((e->evb = evbuffer_new()) == NULL)
goto err;
- TAILQ_FOREACH(line, &buf->page.head, lines) {
+ TAILQ_FOREACH(line, &tab->buffer.page.head, lines) {
const char *text, *alt;
int r;
}
int
-mcache_lookup(const char *url, struct evbuffer **ret, int *trust)
+mcache_lookup(const char *url, struct tab *tab)
{
struct mcache_entry *e;
unsigned int slot;
if ((e = ohash_find(&mcache.h, slot)) == NULL)
return 0;
- *ret = e->evb;
- *trust = e->trust;
+ parser_init(tab, gemtext_initparser);
+ if (!parser_parse(tab, EVBUFFER_DATA(e->evb), EVBUFFER_LENGTH(e->evb)))
+ goto err;
+ if (!parser_free(tab))
+ goto err;
+
+ tab->trust = e->trust;
return 1;
+
+err:
+ parser_free(tab);
+ erase_buffer(&tab->buffer);
+ return 0;
}
blob - 0542e67d232dce7f2d73b304bcefa4b8d15614bc
blob + 4a4c1d502422c2383b9466d4884daf994e58fd1b
--- mcache.h
+++ mcache.h
#ifndef MCACHE_H
#define MCACHE_H
-struct buffer;
+struct tab;
void mcache_init(void);
-int mcache_buffer(const char *, struct buffer *, int);
-int mcache_lookup(const char *, struct evbuffer **, int *);
+int mcache_tab(struct tab *);
+int mcache_lookup(const char *, struct tab *);
#endif
blob - c58ab78a40612c01cb3d9532f56b7efc65bce35e
blob + 05f53eaf6ae6a4b4dbc962b829cee8f1bc721c67
--- telescope.c
+++ telescope.c
die();
if (has_prefix(tab->hist_cur->h, "gemini://") ||
has_prefix(tab->hist_cur->h, "gopher://"))
- mcache_buffer(tab->hist_cur->h, &tab->buffer, tab->trust);
+ mcache_tab(tab);
ui_on_tab_refresh(tab);
ui_on_tab_loaded(tab);
} else {
parser_init(tab, gophermap_initparser);
make_request(tab, &req, PROTO_GOPHER, NULL);
-}
-
-static int
-try_load_cache(struct tab *tab)
-{
- struct evbuffer *evb;
- int trust;
-
- if (!mcache_lookup(tab->hist_cur->h, &evb, &trust))
- return 0;
-
- parser_init(tab, gemtext_initparser);
- if (!parser_parse(tab, EVBUFFER_DATA(evb), EVBUFFER_LENGTH(evb)))
- goto err;
- parser_free(tab);
- tab->trust = trust;
- ui_on_tab_refresh(tab);
- ui_on_tab_loaded(tab);
- return 1;
-
-err:
- parser_free(tab);
- erase_buffer(&tab->buffer);
- return 0;
}
/*
struct phos_uri uri;
struct proto *p;
struct proxy *proxy;
+ int nocache = mode & LU_MODE_NOCACHE;
char *t;
tab->proxy = NULL;
phos_serialize_uri(&tab->uri, tab->hist_cur->h,
sizeof(tab->hist_cur->h));
- if (!(mode & LU_MODE_NOCACHE) && try_load_cache(tab))
+ if (!nocache && mcache_lookup(tab->hist_cur->h, tab)) {
+ ui_on_tab_refresh(tab);
+ ui_on_tab_loaded(tab);
return 0;
+ }
for (p = protos; p->schema != NULL; ++p) {
if (!strcmp(tab->uri.scheme, p->schema)) {