From 14f902c1d7b45f19e48f4d43569c11c4ee4a34e8 Mon Sep 17 00:00:00 2001 From: mehbark Date: Sun, 8 Oct 2023 22:27:14 -0400 Subject: [PATCH] hs2-last-updated: woohoo! it works i think! --- deno.lock | 31 ++++++++- serverside/hs2-last-updated.ts | 117 +++++++++++++++++++++++++++++++++ static/courier-std-bold.otf | Bin 0 -> 36520 bytes 3 files changed, 147 insertions(+), 1 deletion(-) create mode 100644 serverside/hs2-last-updated.ts create mode 100644 static/courier-std-bold.otf diff --git a/deno.lock b/deno.lock index 1bc9fe9..1a01669 100644 --- a/deno.lock +++ b/deno.lock @@ -159,7 +159,8 @@ }, "redirects": { "https://deno.land/x/canvas/mod.ts": "https://deno.land/x/canvas@v1.4.1/mod.ts", - "https://deno.land/x/emit/mod.ts": "https://deno.land/x/emit@0.28.0/mod.ts" + "https://deno.land/x/emit/mod.ts": "https://deno.land/x/emit@0.28.0/mod.ts", + "https://deno.land/x/font_dir/mod.ts": "https://deno.land/x/font_dir@v0.1.0/mod.ts" }, "remote": { "https://deno.land/std@0.106.0/encoding/base64.ts": "eecae390f1f1d1cae6f6c6d732ede5276bf4b9cd29b1d281678c054dc5cc009e", @@ -449,6 +450,34 @@ "https://deno.land/x/emit@0.28.0/_utils.ts": "98412edc7aa29e77d592b54fbad00bdec1b05d0c25eb772a5f8edc9813e08d88", "https://deno.land/x/emit@0.28.0/emit.generated.js": "6ca765a2a7a1c2dab97e747981e6a9fb98a5acd7a0aa78a003e596fdd0632480", "https://deno.land/x/emit@0.28.0/mod.ts": "817cb45fcd94d15a43de826161049eee89e3be4bcf06b3a2f60e8cf459e559f1", + "https://deno.land/x/font_dir@v0.1.0/mod.ts": "2b26db64f0ffb29d9d446796fdac3e5c964921a1367950541d1ad83ef283cd7f", + "https://deno.land/x/imagescript@1.2.15/ImageScript.js": "9ce10c37a0e4fe43699689088c24f386fd401874057932bd57079ac729205038", + "https://deno.land/x/imagescript@1.2.15/png/src/crc.mjs": "5cf50de181d61dd00e66a240d811018ba5070afa8bba302f393604404604de84", + "https://deno.land/x/imagescript@1.2.15/png/src/mem.mjs": "4968d400dae069b4bf0ef4767c1802fd2cc7d15d90eda4cfadf5b4cd19b96c6d", + "https://deno.land/x/imagescript@1.2.15/png/src/png.mjs": "96ef0ceff1b5a6cd9304749e5f187b4ab238509fb5f9a8be8ee934240271ed8d", + "https://deno.land/x/imagescript@1.2.15/png/src/zlib.mjs": "9867dc3fab1d31b664f9344b0d7e977f493d9c912a76c760d012ed2b89f7061c", + "https://deno.land/x/imagescript@1.2.15/utils/buffer.js": "952cb1beb8827e50a493a5d1f29a4845e8c648789406d389dd51f51205ba02d8", + "https://deno.land/x/imagescript@1.2.15/utils/crc32.js": "573d6222b3605890714ebc374e687ec2aa3e9a949223ea199483e47ca4864f7d", + "https://deno.land/x/imagescript@1.2.15/utils/png.js": "fbed9117e0a70602645d70df9c103ff6e79c03e987bd5c1685dcb4200729b6de", + "https://deno.land/x/imagescript@1.2.15/utils/wasm/font.js": "9e75d842608c057045698d6a7cdf5ffd27241b5cdea0391c89a1917b31294524", + "https://deno.land/x/imagescript@1.2.15/utils/wasm/gif.js": "8b86f7b96486bb8ff50fbc7c7487f86cb5cef85e6acd71e1def78a1aa2f12e4f", + "https://deno.land/x/imagescript@1.2.15/utils/wasm/jpeg.js": "75295e2fcf96b4f7bb894b3844fdaa8140d63169d28b466b5d5be89d59a7b6e6", + "https://deno.land/x/imagescript@1.2.15/utils/wasm/png.js": "0659536a8dd8f892c8346e268b2754b4414fad0ec1e9794dfcde1ba1c804ee02", + "https://deno.land/x/imagescript@1.2.15/utils/wasm/svg.js": "f5c8a9d1977b51a7c07549ceb6bbbaca9497321a193f28b3dc229a42d91bcf14", + "https://deno.land/x/imagescript@1.2.15/utils/wasm/tiff.js": "c2d7bdaef094df25aae1752e75167f485e89275d76a1379e39d8949580b7af4f", + "https://deno.land/x/imagescript@1.2.15/utils/wasm/zlib.js": "749875f83abffe24d3b977475a0cbd5f9b52bee1fbdbef61ec183cbfc17805f6", + "https://deno.land/x/imagescript@1.2.15/v2/framebuffer.mjs": "add44ff184636659714b3c6d4b896f628545451abffbc30b5bcc2e8d9a73d012", + "https://deno.land/x/imagescript@1.2.15/v2/ops/blur.mjs": "80716f1ffab8a2aeb54a036f583bf51a2b9dd37e005adc000add803df8e8a12f", + "https://deno.land/x/imagescript@1.2.15/v2/ops/color.mjs": "5e72cdcbf97dc939a2795223f01e3cb0544c0c56b03ea2aa026050df58348814", + "https://deno.land/x/imagescript@1.2.15/v2/ops/crop.mjs": "69431fa6f687fd9f0c31eff0ec27d7ac925275005e53a37f0c3fab4cc4d9a9ea", + "https://deno.land/x/imagescript@1.2.15/v2/ops/fill.mjs": "cf1b9488314753fbc9ebf03410ac74c2a34ea5a69fb6892cd6e8366cd1930d93", + "https://deno.land/x/imagescript@1.2.15/v2/ops/flip.mjs": "825a34a66567dcf15e76a719f1bf2f66fb106503cd69942292b1b0ae05c5718e", + "https://deno.land/x/imagescript@1.2.15/v2/ops/index.mjs": "423ba687119be2bba8cec72890577d3afa3621b6b8108912242fe937a183f2aa", + "https://deno.land/x/imagescript@1.2.15/v2/ops/iterator.mjs": "c2adf3d90ce00719a02c48c97634574176a3501ff026676259bd71aa8f5d69b9", + "https://deno.land/x/imagescript@1.2.15/v2/ops/overlay.mjs": "7e6e2c2ffd25006d52597ab8babc5f8f503d388a3fdf2fbc0eaea02799a020c9", + "https://deno.land/x/imagescript@1.2.15/v2/ops/resize.mjs": "814e78ebce8eaf8f1f918688db7b52a141405e06a36ed4b25d04413d69e7d17b", + "https://deno.land/x/imagescript@1.2.15/v2/ops/rotate.mjs": "a1b65616717bd2eed8db406affea3263b4674dada46b56441ef38167a187455d", + "https://deno.land/x/imagescript@1.2.15/v2/util/mem.mjs": "4968d400dae069b4bf0ef4767c1802fd2cc7d15d90eda4cfadf5b4cd19b96c6d", "https://deno.land/x/media_types@v2.9.0/db.ts": "ba39cddbcefce47d577c0529066787a3a7b39d27750a6d32b5ad53ed487e7b7b", "https://deno.land/x/media_types@v2.9.0/deps.ts": "364b24c35845cfd5c6903ab22b8ba9873bf1022bbbf6bf3d001695332d4bbb4f", "https://deno.land/x/media_types@v2.9.0/mod.ts": "d63583b978d32eff8b76e1ae5d83cba2fb27baa90cc1bcb0ad15a06122ea8c19", diff --git a/serverside/hs2-last-updated.ts b/serverside/hs2-last-updated.ts new file mode 100644 index 0000000..aba3e4a --- /dev/null +++ b/serverside/hs2-last-updated.ts @@ -0,0 +1,117 @@ +// once a minute (what's the point if it's out of date!) +// do days since last update (0 will be obvious then), should (please please please let this be true) only need three digits MAX +// until hs2 ends of course but let's not think about that now +// okay aaaa hs2 will end that will be sad and good i guess but +// not important right now + +import { contentType } from "https://deno.land/std@0.202.0/media_types/mod.ts"; +import { + DOMParser, + NodeType, +} from "https://deno.land/x/deno_dom@v0.1.38/deno-dom-wasm.ts"; +import { + Image, + TextLayout, +} from "https://deno.land/x/imagescript@1.2.15/ImageScript.js"; + +// not sure how worthwhile this optimization is but +const dom_parser = new DOMParser(); + +async function get_last_update_date(): Promise { + try { + const res = await fetch("https://homestuck2.com/log"); + const body = await res.text(); + if (!body) return "couldn't get a string body"; + + // could just regex for the date lol + const doc = dom_parser.parseFromString(body, "text/html"); + if (!doc) return "couldn't parse the body into the DOM"; + + const p = doc.querySelector("p"); + if (!p) return "couldn't get a p from the doc"; + + // should really enable strict indexing + const us_date_node = p.childNodes[0]; + if (!us_date_node || us_date_node.nodeType != NodeType.TEXT_NODE) { + return "couldn't get a date node from the log entry"; + } + + const us_date = us_date_node.textContent.replace(" - ", ""); + // apparently doing new Date("10/8/2023") is implementation defined which is icky but it works with deno + const date = new Date(us_date); + if (Number.isNaN(date.valueOf())) { + return `got an invalid date :(. the text_content was '${us_date}'`; + } + return date; + } catch (e) { + return `caught error: ${e}`; + } +} + +async function check_again() { + last_checked = new Date(); + + const new_date = await get_last_update_date(); + if (typeof new_date == "string") { + console.log(`failed to get a date when checking 😬: '${new_date}'`); + console.log( + "^ ironically enough, this is more likely when there *is* an update", + ); + console.log( + "^ unironically, this is *most* likely the result of a bug", + ); + return; + } + last_updated = new_date; +} + +function days_since_update(): number { + const millis = new Date().getTime() - last_updated.getTime(); + return millis / (24 * 60 * 60 * 1000); +} + +// silly, i know +let last_updated: Date = new Date(0); +let last_checked: Date = new Date(); +await check_again(); + +// *definitely* a worthwhile optimization +// (still inefficient to go over http...) +const font = await fetch("https://static.pyrope.net/courier-std-bold.otf") + .then((r) => r.arrayBuffer()) + .then((b) => new Uint8Array(b)); + +function make_image(): Image { + const days = Math.floor(days_since_update()).toString().padStart(3, "0"); + console.log(days_since_update()); + const image = new Image(106, 44); + const text = Image.renderText( + font, + 64, + days, + 0x00_00_00_ff, + new TextLayout({ verticalAlign: "center", horizontalAlign: "middle" }), + ); + + return image.composite(text, -5); +} + +async function update_image() { + image = await make_image().encode(); +} + +let image: Uint8Array = new Uint8Array(); +await update_image(); + +Deno.serve({ port: 61264 }, async () => { + if (new Date().getTime() - last_checked.getTime() >= 60 * 1000) { + await check_again(); + await update_image(); + } + + return new Response(image, { + headers: { "Content-Type": contentType("png") }, + }); +}); + +await Deno.writeFile("/tmp/poop.png", image); diff --git a/static/courier-std-bold.otf b/static/courier-std-bold.otf new file mode 100644 index 0000000000000000000000000000000000000000..deef256c9cdd03c3f5c29608e2991431f9750950 GIT binary patch literal 36520 zcmce-cUTkI_b@(_Fd3X^RK~EHI0>j=4^5P+2sZ431v?0#Ne!VZ%`S+&qS6%+6??

5Tp;(2ZzRnB*X@{_=6y58~Dj0 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

(9B74!*J!=+^t3}` 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