shithub: castor9

Download patch

ref: 69cadae851b48fc297cb5293c7899dd43dd499e5
parent: 6227d00cc133e573e42aaf95c43c8a1fdbadbb3a
author: Julien Blanchard <julien@typed-hole.org>
date: Thu Dec 31 09:33:22 EST 2020

Bookmark a page, refact current_url stuff

--- a/castor.c
+++ b/castor.c
@@ -43,6 +43,7 @@
 void gemini_get(Url *u);
 void gemini_put(Response *r);
 void texthit(Panel *p, int b, Rtext *t);
+void addbookmark(void);
 void message(char *s, ...);
 
 Panel *root;
@@ -53,7 +54,6 @@
 Panel *textp;
 Panel *statusp;
 Panel *popup;
-Url *current_base_url;
 Mouse *mouse;
 Hist *hist = nil;
 int preformatted = 0;
@@ -63,6 +63,8 @@
 	Mback,
 	Mforward,
 	Msearch,
+	Mbookmarks,
+	Maddbookmark,
 	Mexit,
 };
 
@@ -70,11 +72,31 @@
 	"back",
 	"forward",
 	"search",
+	"bookmarks",
+	"add bookmark",
 	"exit",
 	0
 };
 
+Url *
+current_url(void)
+{
+	return hist->c->url;
+}
 
+Url *
+current_base_url(void)
+{
+	return base_url(current_url());
+}
+
+char *
+current_host(void)
+{
+	Url *base = current_base_url();
+	return base->host;
+}
+
 char*
 cleanup(char *line)
 {
@@ -94,13 +116,6 @@
 }
 
 void
-set_current_base_url(Url *url)
-{
-	freeurl(current_base_url);
-	current_base_url = url;
-}
-
-void
 show(Ctx *c)
 {
 	plinittextview(textp, PACKE|EXPAND, ZP, c->text, texthit);
@@ -369,7 +384,6 @@
 		break;
 	case 20:
 		c->url = url;
-		set_current_base_url(base_url(url));
 
 		if(r->meta != NULL && strbeg(r->meta, "text/") != 0){
 			Bflush(&body);
@@ -524,7 +538,6 @@
 		return;
 	hist->p->n = hist;
 	hist = hist->p;
-	set_current_base_url(base_url(hist->c->url));
 	show(hist->c);
 }
 
@@ -537,7 +550,6 @@
 	if(hist==nil || hist->n==nil)
 		return;
 	hist = hist->n;
-	set_current_base_url(base_url(hist->c->url));
 	show(hist->c);
 }
 
@@ -556,6 +568,12 @@
 	case Msearch:
 		search();
 		break;
+	case Mbookmarks:
+		//showbookmarks();
+		break;
+	case Maddbookmark:
+		addbookmark();
+		break;
 	case Mexit:
 		exits(nil);
 		break;
@@ -563,6 +581,18 @@
 }
 
 void
+addbookmark(void)
+{
+	int fd;
+	if((fd = create("bookmarks", OWRITE, 0600 | DMAPPEND)) < 0)
+		sysfatal("create(bookmarks): %r");
+
+	fprint(fd, "=> %s\n", hist->c->url->raw);
+	close(fd);
+	message("Bookmark added!");
+}
+
+void
 entryhit(Panel *p, char *t)
 {
 	USED(p);
@@ -603,13 +633,13 @@
 		/* assuming relative URL */
 		if(strcmp(link, "/") == 0){
 			/* no slash, must be a hostname */
-			n = smprint("gemini://%s", current_base_url->host);
+			n = smprint("gemini://%s", current_host());
 		}else if(*link == '/'){
 			/* start with a slash so use the base host */
-			n = smprint("gemini://%s%s", current_base_url->host, estrdup(link));
+			n = smprint("gemini://%s%s", current_host(), estrdup(link));
 		}else{
 			/* make an absolute URL of the link */
-			n = smprint("%s%s", urlparse(current_base_url, link)->raw, estrdup(link));
+			n = smprint("%s%s", urlparse(current_base_url(), link)->raw, estrdup(link));
 		}
 		next_url = urlparse(nil, n);
 	}
--- a/util.c
+++ b/util.c
@@ -31,4 +31,15 @@
 strbeg(char *str, char *prefix)
 {
 	return strncmp(str, prefix, strlen(prefix)) == 0 ? 0 : -1;
-}
\ No newline at end of file
+}
+
+char* 
+replace_char(char* str, char find, char replace)
+{
+	char *current_pos = strchr(str,find);
+	while(current_pos){
+		*current_pos = replace;
+		current_pos = strchr(current_pos,find);
+	}
+	return str;
+}