code wiki / _hdl_build / nx_manga_search_gate.nx
nx_manga_search_gate.nx source
↩ module page · 51 lines · 3520 B
1import "nx_gate_base.nx"
2// nx_manga_search_gate.nx -- LIVE smoke for the source-browser parsers: fetch mangadex + nhentai search + a mangadex
3// feed with the sovereign client, run the parsers, print the JSON. Eyeball-verify shapes match before wiring. expect_exit:0
4import "nx_syscalls.nx"
5import "nx_x509_trust_store.nx"
6import "nx_trust_store_load_from_certdata.nx"
7import "nx_https_fetch_follow.nx"
8import "nx_manga_search.nx"
9
10func grow(name: *u8, ok: i64) -> i64 { if ok==1 { gw(" PASS " as *u8) } else { gw(" FAIL " as *u8) } gw(name); gw("
11" as *u8); return ok }
12func fetchp(url: *u8, store: *TrustStore, buf: *u8, cap: i64) -> i64 {
13 let st: *i64 = sys_mmap(8) as *i64
14 let n: i64 = nx_https_fetch_follow_chrome(url, store, buf, cap, 6, st)
15 gw(" fetch "); gw(url); gw(" -> "); if n<=0 { gw("FAIL\n" as *u8); return 0 }
16 let sb: *u8=sys_mmap(16); var v: i64=st[0]; var k: i64=0; if v==0{sb[0]=48 as u8;k=1} let t: *u8=sys_mmap(16); while v>0{t[k]=(48+(v%10)) as u8;v=v/10;k=k+1} var i: i64=0; while i<k{sb[i]=t[k-1-i];i=i+1} sys_write(1,sb,k)
17 gw(" (bytes "); v=n; k=0; if v==0{sb[0]=48 as u8;k=1} while v>0{t[k]=(48+(v%10)) as u8;v=v/10;k=k+1} i=0; while i<k{sb[i]=t[k-1-i];i=i+1} sys_write(1,sb,k); gw(")\n" as *u8)
18 return n
19}
20func main() -> i64 {
21 let r: i64 = nx_trust_store_load_from_certdata("data/mozilla_certdata.txt" as *u8, 512, 4194304)
22 if r <= 0 { gw("certdata fail\n" as *u8); return 1 }
23 let store: *TrustStore = r as *TrustStore
24 let buf: *u8 = sys_mmap(MSS_FETCH_CAP)
25 let out: *u8 = sys_mmap(MSS_OUT_CAP)
26
27 gw("== MANGADEX SEARCH 'naruto' ==\n" as *u8)
28 let n1: i64 = fetchp("https://api.mangadex.org/manga?title=naruto&limit=4&includes[]=cover_art" as *u8, store, buf, MSS_FETCH_CAP)
29 if n1 > 0 { msearch_mangadex(buf, n1, out, MSS_OUT_CAP); gw(out); gw("\n\n" as *u8) }
30
31 gw("== NHENTAI SEARCH 'school' ==\n" as *u8)
32 let n2: i64 = fetchp("https://nhentai.net/search/?q=school" as *u8, store, buf, MSS_FETCH_CAP)
33 if n2 > 0 { msearch_nhentai(buf, n2, out, MSS_OUT_CAP); var e: i64=0; while out[e]!=(0 as u8){e=e+1} var d: i64=e; if d>900{d=900} sys_write(1,out,d); gw("\n...(truncated)\n\n" as *u8) }
34
35 gw("== MANGADEX FEED (Renge to Naruto series) ==\n" as *u8)
36 let n3: i64 = fetchp("https://api.mangadex.org/manga/275c3ee8-bdeb-4070-a333-6add23a8415a/feed?translatedLanguage[]=en&order[chapter]=asc&limit=8" as *u8, store, buf, MSS_FETCH_CAP)
37 if n3 > 0 { mfeed_mangadex(buf, n3, out, MSS_OUT_CAP); gw(out); gw("\n" as *u8) }
38
39 gw("== MANGADEX BROWSE popular (no query) ==\n" as *u8)
40 let n4: i64 = fetchp("https://api.mangadex.org/manga?limit=6&includes[]=cover_art&order[followedCount]=desc" as *u8, store, buf, MSS_FETCH_CAP)
41 if n4 > 0 { msearch_mangadex(buf, n4, out, MSS_OUT_CAP); var e: i64=0; while out[e]!=(0 as u8){e=e+1} var d: i64=e; if d>700{d=700} sys_write(1,out,d); gw("\n...(trunc)\n" as *u8) }
42
43 gw("== NHENTAI BROWSE homepage (recent) ==\n" as *u8)
44 let n5: i64 = fetchp("https://nhentai.net/" as *u8, store, buf, MSS_FETCH_CAP)
45 if n5 > 0 { msearch_nhentai(buf, n5, out, MSS_OUT_CAP); var e2: i64=0; while out[e2]!=(0 as u8){e2=e2+1} var d2: i64=e2; if d2>500{d2=500} sys_write(1,out,d2); gw("\n...(trunc)\n" as *u8) }
46
47 gw("== MANGADEX RANDOM ==\n" as *u8)
48 let n6: i64 = fetchp("https://api.mangadex.org/manga/random?includes[]=cover_art" as *u8, store, buf, MSS_FETCH_CAP)
49 if n6 > 0 { msearch_mangadex(buf, n6, out, MSS_OUT_CAP); gw(out); gw("\n" as *u8) }
50 return 0
51}