From 6438e47aaac108d87a0c656d21f888ef9dcd5e77 Mon Sep 17 00:00:00 2001 From: lifegpc Date: Fri, 23 Jun 2023 12:20:37 +0800 Subject: [PATCH] Fix bug --- db.ts | 8 ++++++-- meilisearch.ts | 4 +++- page/GalleryPage.ts | 22 +++++++++++++++++++++- page/GalleryPage_test.ts | 14 ++++++++++++++ 4 files changed, 44 insertions(+), 4 deletions(-) diff --git a/db.ts b/db.ts index 68b60a0..4211626 100644 --- a/db.ts +++ b/db.ts @@ -1,5 +1,9 @@ import { DB } from "sqlite/mod.ts"; -import { compare as compare_ver, parse as parse_ver } from "std/semver/mod.ts"; +import { + compare as compare_ver, + format as format_ver, + parse as parse_ver, +} from "std/semver/mod.ts"; import { unescape } from "std/html/mod.ts"; import { join, resolve } from "std/path/mod.ts"; import { SqliteError } from "sqlite/mod.ts"; @@ -401,7 +405,7 @@ export class EhDb { this.db.transaction(() => { this.db.query("INSERT OR REPLACE INTO version VALUES (?, ?);", [ "eh", - this.version.toString(), + format_ver(this.version), ]); }); } diff --git a/meilisearch.ts b/meilisearch.ts index 3fe0d55..620a41a 100644 --- a/meilisearch.ts +++ b/meilisearch.ts @@ -55,7 +55,9 @@ export class MeiliSearchServer { } #gallery_update(e: Event) { const ev = e as CustomEvent; - this.updateGallery(ev.detail); + this.updateGallery(ev.detail).catch((e) => { + console.log(e); + }); } async #updateGMetaSettings() { if (this.#gmeta) { diff --git a/page/GalleryPage.ts b/page/GalleryPage.ts index 9bcacf9..0a2abdf 100644 --- a/page/GalleryPage.ts +++ b/page/GalleryPage.ts @@ -1,6 +1,7 @@ import { DOMParser, Element } from "deno_dom/deno-dom-wasm-noinit.ts"; import { Client } from "../client.ts"; -import { initDOMParser, parse_bool } from "../utils.ts"; +import { initDOMParser, map, parse_bool } from "../utils.ts"; +import { parseUrl, UrlType } from "../url.ts"; class GalleryPage { dom; @@ -11,6 +12,7 @@ class GalleryPage { #meta_script: string | undefined = undefined; #gid: number | undefined = undefined; #token: string | undefined = undefined; + #new_version: Array<{ gid: number; token: string }> | undefined = undefined; constructor(html: string, client: Client) { const dom = (new DOMParser()).parseFromString(html, "text/html"); if (!dom) { @@ -86,6 +88,24 @@ class GalleryPage { if (!ele) throw Error("Failed to find gallery's name."); return ele.innerText; } + get new_version() { + if (this.#new_version === undefined) { + const eles = this.doc.querySelectorAll("#gnd > a"); + const d = <{ gid: number; token: string }[]> map(eles, (e) => { + const b = e as Element; + const u = b.getAttribute("href"); + if (!u) return null; + const d = parseUrl(u); + if (d?.type === UrlType.Gallery) { + return { gid: d.gid, token: d.token }; + } else { + return null; + } + }).filter((d) => d !== null); + this.#new_version = d; + return d; + } else return this.#new_version; + } get japanese_name() { return this.doc.getElementById("gj")?.innerText; } diff --git a/page/GalleryPage_test.ts b/page/GalleryPage_test.ts index 78e009e..9e23ada 100644 --- a/page/GalleryPage_test.ts +++ b/page/GalleryPage_test.ts @@ -36,4 +36,18 @@ Deno.test({ assertEquals(re.language, "Chinese"); assertEquals(re.gid, 2552611); assertEquals(re.token, "3132307627"); + assertEquals(re.new_version.length, 0); +}); + +Deno.test({ + name: "GalleryPage_test2", + permissions: API_PERMISSION, +}, async () => { + const cfg = await load_settings("./config.json"); + const client = new Client(cfg); + const re = await client.fetchGalleryPage(2209409, "8c8b2b1fc3"); + assertEquals(re.name, "[Fanbox] houk1se1 (2022.03.08 - 2022.05.01)"); + assertEquals(re.japanese_name, ""); + assertEquals(re.length, 42); + assertEquals(re.new_version[0], { gid: 2223198, token: "2a5788135e" }); });