AmendHub

Download:

jcs

/

detritus

/

amendments

/

60

browser: Reorganize go functions, use http:// fallback from URL bar

This is 2024, after all.

jcs made amendment 60 about 1 year ago
--- browser.c Thu Dec 12 21:34:18 2024 +++ browser.c Sat Dec 14 10:54:13 2024 @@ -56,8 +56,9 @@ bool browser_handle_menu(struct focusable *focusable, short item); void browser_atexit(struct focusable *focusable); -void browser_go(struct browser *browser, short dir); -page_handle browser_create_page(struct browser *browser, char *uristr); +void browser_go_uri_field(struct browser *browser); +void browser_go_dir(struct browser *browser, short dir); +page_handle browser_create_page(struct browser *browser, struct URI *uri); void browser_draw_status(struct browser *browser); struct TVStyle * browser_build_tvstyle(struct browser *browser); void browser_finished_loading(struct browser *browser); @@ -388,9 +389,7 @@ browser_follow_redir(struct browser *browser) redir->str); browser_statusf(browser, "Following redirection to %s", redir->str); - browser_go_uri(browser, redir->str); - - xfree(&redir); + browser_create_page(browser, redir); } void @@ -555,7 +554,7 @@ browser_mouse_down(struct focusable *focusable, EventR break; } #endif - browser_create_page(browser, link->uri); + browser_go_uri_str(browser, link->uri); break; } } @@ -572,11 +571,11 @@ browser_mouse_down(struct focusable *focusable, EventR browser_stop_loading_page(browser); browser_statusf(browser, "Stopped"); } else - browser_go(browser, 0); + browser_go_uri_field(browser); } else if (TrackControl(control, p, 0L) && control == browser->back) - browser_go(browser, -1); + browser_go_dir(browser, -1); else if (TrackControl(control, p, 0L) && control == browser->fwd) - browser_go(browser, 1); + browser_go_dir(browser, 1); break; case inUpButton: case inDownButton: @@ -652,7 +651,7 @@ browser_key_down(struct focusable *focusable, EventRec k = (event->message & charCodeMask); if (k == '\r') { - browser_go(browser, 0); + browser_go_uri_field(browser); return; } @@ -691,87 +690,106 @@ browser_handle_menu(struct focusable *focusable, short } void -browser_go_uri(struct browser *browser, char *uristr) +browser_go_uri_field(struct browser *browser) { - Rect r; + char *uristr; + struct URI *uri; + size_t len; - TESetText(uristr, strlen(uristr), browser->uri_te); - TESetSelect(SHRT_MAX, SHRT_MAX, browser->uri_te); + len = (*(browser->uri_te))->teLength; + uristr = xmalloc(7 + len + 1); + if (uristr == NULL) { + warn("Out of memory"); + return; + } + HLock(browser->uri_te); + HLock((*(browser->uri_te))->hText); + memcpy(uristr, *((*(browser->uri_te))->hText), len); + HUnlock((*(browser->uri_te))->hText); + HUnlock(browser->uri_te); + uristr[len] = '\0'; + + uri = parse_uri(uristr); + if (uri == NULL) { + /* kids these days */ + memmove(uristr + 7, uristr, len + 1); + memcpy(uristr, "http://", 7); + uri = parse_uri(uristr); + if (uri == NULL) + goto fail; + } - r = (*(browser->uri_te))->viewRect; - TEUpdate(&r, browser->uri_te); + xfree(&uristr); - browser_go(browser, 0); + if (!browser_create_page(browser, uri)) + xfree(&uri); + + return; + +fail: + warn("Could not parse URI \"%s\"", uristr); + xfree(&uristr); } void -browser_go(struct browser *browser, short dir) +browser_go_uri_str(struct browser *browser, char *str) { - TERec *te; + struct URI *uri; + + uri = parse_uri(str); + if (uri == NULL) { + warn("Failed to parse URI \"%s\"", str); + return; + } + if (!browser_create_page(browser, uri)) + xfree(&uri); +} + +void +browser_go_dir(struct browser *browser, short dir) +{ page_handle pageh, opage; struct page *page; - short len; - char *uristr; + if (dir != -1 && dir != 1) + return; + browser_statusf(browser, ""); + browser_stop_loading_page(browser); - if (dir == 0) { - len = (*(browser->uri_te))->teLength; - uristr = xmalloc(len + 1); - if (uristr == NULL) { - warn("Out of memory"); - return; - } - HLock(browser->uri_te); - HLock((*(browser->uri_te))->hText); - memcpy(uristr, *((*(browser->uri_te))->hText), len); - HUnlock((*(browser->uri_te))->hText); - HUnlock(browser->uri_te); - uristr[len] = '\0'; - - browser_create_page(browser, uristr); - xfree(&uristr); - } else { - browser_stop_loading_page(browser); + pageh = browser->current_page; + if (!pageh) + return; + + opage = (dir == -1) ? (*pageh)->back_page : (*pageh)->fwd_page; + if (!opage) + return; + + HLock(opage); + browser->loading_page = opage; + browser_update_buttons(browser); + + if ((*opage)->handler->reset) + (*opage)->handler->reset(opage); + else + (*opage)->content_pos = 0; - pageh = browser->current_page; - if (!pageh) - return; - - opage = (dir == -1) ? (*pageh)->back_page : (*pageh)->fwd_page; - if (!opage) - return; - - HLock(opage); - browser->loading_page = opage; - browser_update_buttons(browser); - - if ((*opage)->handler->reset) - (*opage)->handler->reset(opage); - else - (*opage)->content_pos = 0; - - browser_commit_to_loading_page(browser); - - HUnlock(opage); - } + browser_commit_to_loading_page(browser); + + HUnlock(opage); } page_handle -browser_create_page(struct browser *browser, char *uristr) +browser_create_page(struct browser *browser, struct URI *uri) { page_handle pageh; struct page *page; struct page_handler *handler; - struct URI *uri; + size_t len; short n; browser_stop_loading_page(browser); - uri = parse_uri(uristr); - if (uri == NULL) - goto fail; - for (n = 0; n < nitems(page_handlers); n++) { handler = page_handlers[n]; @@ -782,7 +800,7 @@ browser_create_page(struct browser *browser, char *uri PAGE_CONTENT_CHUNK_SIZE); if (pageh == NULL) { warn("Out of memory for new page"); - return; + return NULL; } HLock(pageh); page = *pageh; @@ -808,10 +826,8 @@ browser_create_page(struct browser *browser, char *uri return pageh; } -fail: - if (uri) - xfree(&uri); - warn("Could not parse URI \"%s\"", uristr); +fail: + warn("Could not find handler for URI"); return NULL; } @@ -1042,6 +1058,9 @@ browser_page_free(page_handle pageh) if (page->handler->free) page->handler->free(pageh); + + if (page->redir_to) + xfree(&page->redir_to); xfree(&page->uri); DisposeHandle(pageh); --- browser.h Thu Nov 21 16:23:28 2024 +++ browser.h Fri Dec 13 22:57:58 2024 @@ -79,6 +79,8 @@ struct page { short download_frefnum; size_t download_len; + struct TVStyle cur_style; + char content[]; }; @@ -148,7 +150,7 @@ size_t browser_print_bitmap(struct browser *browser, B void browser_supress_updates(struct browser *browser, bool supress); void browser_recalc_scrollbar(struct browser *browser); struct page * browser_grow_page_content(struct page *page, size_t len); -void browser_go_uri(struct browser *browser, char *uristr); +void browser_go_uri_str(struct browser *browser, char *str); void browser_commit_to_loading_page(struct browser *browser); bool browser_start_download(struct browser *browser, char *filename, char *dump_buf, size_t dump_len);