Add a picture of me
This commit is contained in:
2
baked.c
2
baked.c
@ -18,6 +18,7 @@ INCBIN(favicon_ico, "./etc/favicon.ico");
|
||||
#if MY_DEBUG
|
||||
INCBIN(hotreload_js, "./etc/hotreload.js");
|
||||
#endif
|
||||
INCBIN(me_jpg, "./etc/me.jpg");
|
||||
|
||||
INCBIN(blog_welcome_md, "./blog/welcome.md");
|
||||
INCBIN(blog_weird_page_md, "./blog/weird-page.md");
|
||||
@ -48,6 +49,7 @@ void init_baked_resources(void)
|
||||
#if MY_DEBUG
|
||||
add_baked_resource("hotreload.js", hotreload_js_data, hotreload_js_size);
|
||||
#endif
|
||||
add_baked_resource("me.jpg", me_jpg_data, me_jpg_size);
|
||||
add_baked_resource("blog-welcome.md", blog_welcome_md_data, blog_welcome_md_size);
|
||||
add_baked_resource("blog-weird-page.md", blog_weird_page_md_data, blog_weird_page_md_size);
|
||||
add_baked_resource("blog-curious-case-of-gebs.md", blog_curious_case_of_gebs_md_data, blog_curious_case_of_gebs_md_size);
|
||||
|
1
baked.h
1
baked.h
@ -15,6 +15,7 @@ INCBIN_EXTERN(favicon_ico);
|
||||
#if MY_DEBUG
|
||||
INCBIN_EXTERN(hotreload_js);
|
||||
#endif
|
||||
INCBIN_EXTERN(me_jpg);
|
||||
|
||||
INCBIN_EXTERN(blog_welcome_md);
|
||||
INCBIN_EXTERN(blog_weird_page_md);
|
||||
|
2
build.c
2
build.c
@ -37,6 +37,8 @@ int main(int argc, char ** argv)
|
||||
|
||||
"./etc/hotreload.js",
|
||||
"./etc/simple.css",
|
||||
"./etc/favicon.ico",
|
||||
"./etc/me.jpg",
|
||||
|
||||
"./blog/welcome.md",
|
||||
"./blog/weird-page.md",
|
||||
|
@ -18,38 +18,7 @@ async function fetch_build_id()
|
||||
return json.build_id;
|
||||
}
|
||||
|
||||
(async function() {
|
||||
build_id = await fetch_build_id();
|
||||
})();
|
||||
|
||||
|
||||
const asyncIntervals = [];
|
||||
|
||||
const runAsyncInterval = async (cb, interval, intervalIndex) => {
|
||||
await cb();
|
||||
if (asyncIntervals[intervalIndex]) {
|
||||
setTimeout(() => runAsyncInterval(cb, interval, intervalIndex), interval);
|
||||
}
|
||||
};
|
||||
|
||||
const setAsyncInterval = (cb, interval) => {
|
||||
if (cb && typeof cb === "function") {
|
||||
const intervalIndex = asyncIntervals.length;
|
||||
asyncIntervals.push(true);
|
||||
runAsyncInterval(cb, interval, intervalIndex);
|
||||
return intervalIndex;
|
||||
} else {
|
||||
throw new Error('Callback must be a function');
|
||||
}
|
||||
};
|
||||
|
||||
const clearAsyncInterval = (intervalIndex) => {
|
||||
if (asyncIntervals[intervalIndex]) {
|
||||
asyncIntervals[intervalIndex] = false;
|
||||
}
|
||||
};
|
||||
|
||||
setAsyncInterval(async function () {
|
||||
setInterval(async function() {
|
||||
let new_build_id = await fetch_build_id();
|
||||
if (build_id !== new_build_id) {
|
||||
location.reload(true);
|
||||
|
BIN
etc/me.jpg
Normal file
BIN
etc/me.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 29 KiB |
4
main.c
4
main.c
@ -92,6 +92,7 @@ void event_handler(struct mg_connection *conn, int ev, void *ev_data)
|
||||
sb.items,
|
||||
result->body.count
|
||||
);
|
||||
printf("%s\n", reply);
|
||||
mg_printf(conn, "%s", reply);
|
||||
mg_send(conn, result->body.items, result->body.count);
|
||||
}
|
||||
@ -103,12 +104,13 @@ void init_route_hashtable(void)
|
||||
shdefault(route_hashtable, &route_page_not_found);
|
||||
shput(route_hashtable, "/", &route_home);
|
||||
shput(route_hashtable, "/page-missing", &route_page_not_found);
|
||||
shput(route_hashtable, "/simple.css", &route_simple_css);
|
||||
shput(route_hashtable, "/simple.css", &route_simple_css);
|
||||
shput(route_hashtable, "/favicon.ico", &route_favicon);
|
||||
#if MY_DEBUG
|
||||
shput(route_hashtable, "/hotreload.js", &route_hotreload_js);
|
||||
shput(route_hashtable, "/build-id", &route_build_id);
|
||||
#endif
|
||||
shput(route_hashtable, "/me.jpg", &route_me_jpg);
|
||||
shput(route_hashtable, "/blog", &route_blog);
|
||||
|
||||
void put_blogs(Baked_Resource *resource)
|
||||
|
19
routes.c
19
routes.c
@ -158,6 +158,24 @@ ROUTE_HANDLER(simple_css)
|
||||
make_text(result, "css", 200, sb.items);
|
||||
}
|
||||
|
||||
ROUTE_HANDLER(me_jpg)
|
||||
{
|
||||
char path[PATH_MAX] = {0};
|
||||
if (!get_baked_resource_path("me.jpg", path, sizeof(path))) {
|
||||
make_internal_server_error(result);
|
||||
return;
|
||||
}
|
||||
|
||||
String_Builder sb = {0};
|
||||
defer { sb_free(&sb); }
|
||||
if (!sb_read_file(&sb, path)) {
|
||||
make_internal_server_error(result);
|
||||
return;
|
||||
}
|
||||
|
||||
make_binary(result, "image/jpeg", 200, sb.items, sb.count);
|
||||
}
|
||||
|
||||
ROUTE_HANDLER(favicon)
|
||||
{
|
||||
char path[PATH_MAX] = {0};
|
||||
@ -172,7 +190,6 @@ ROUTE_HANDLER(favicon)
|
||||
make_internal_server_error(result);
|
||||
return;
|
||||
}
|
||||
sb_finish(&sb);
|
||||
|
||||
make_binary(result, "image/x-icon", 200, sb.items, sb.count);
|
||||
}
|
||||
|
1
routes.h
1
routes.h
@ -33,6 +33,7 @@ typedef struct {
|
||||
ROUTE_HANDLER(page_not_found);
|
||||
ROUTE_HANDLER(simple_css);
|
||||
ROUTE_HANDLER(favicon);
|
||||
ROUTE_HANDLER(me_jpg);
|
||||
#if MY_DEBUG
|
||||
ROUTE_HANDLER(hotreload_js);
|
||||
ROUTE_HANDLER(build_id);
|
||||
|
@ -52,6 +52,9 @@
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
<section>
|
||||
<img src="/me.jpg" alt="literally me" />
|
||||
</section>
|
||||
<footer>
|
||||
<div style="float: left;">
|
||||
<a href="/">HOME</a>
|
||||
|
Reference in New Issue
Block a user