code wiki / _hdl_build / nx_ereader_sota_fetch.nx

nx_ereader_sota_fetch.nx source

↩ module page · 86 lines · 5824 B

1// nx_ereader_sota_fetch.nx -- HONEST research (operator 2026-07-04: "the rest of our library is still not state of 2// the art in loading, serving, hotkeys... use the nishi researcher and see what ereaders do on github that are way 3// ahead of us"). Fetches the GitHub topic search API for the SOTA e-reader / comic-server projects (Kavita, Komga, 4// Koodo, foliate, Readium, epub.js...) + their READMEs with our sovereign Chrome client (we beat GitHub's wall). 5// Parses to a COMPACT list (rank, full_name, stars, topics, desc) then dumps READMEs -> the library census is 6// grounded on what these tools ACTUALLY do (loading/serving/keyboard), not memory. Temporary. license_tier: ORIGINAL 7import "nx_syscalls.nx" 8import "nx_x509_trust_store.nx" 9import "nx_trust_store_load_from_certdata.nx" 10import "nx_https_fetch_follow.nx" 11import "nx_manga_sites.nx" // na_find_from 12const K_MAGIC_4194304: i64 = 4194304 13const K_MAGIC_2097152: i64 = 2097152 14const K_MAGIC_2400: i64 = 2400 15const K_MAGIC_2600: i64 = 2600 16 17func iw(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 } 18func iseg(buf: *u8, a: i64, e: i64) -> i64 { if e>a { sys_write(1,(buf as i64+a) as *u8, e-a) } return 0 } 19func jval(buf: *u8, n: i64, key: *u8, from: i64, bound: i64, sp: *i64, ep: *i64) -> i64 { 20 let kp: i64 = na_find_from(buf, n, key, from) 21 if kp < 0 { return 0-1 } if kp >= bound { return 0-1 } 22 var kl: i64 = 0; while key[kl]!=(0 as u8){kl=kl+1} 23 let s: i64 = kp + kl 24 let e: i64 = na_find_from(buf, n, "\"" as *u8, s) 25 sp[0]=s; ep[0]=e; return 0 26} 27func fetch(url: *u8, store: *TrustStore, buf: *u8, cap: i64) -> i64 { 28 let st: *i64 = sys_mmap(8) as *i64 29 let n: i64 = nx_https_fetch_follow_chrome(url, store, buf, cap, 6, st) 30 iw("\n==== "); iw(url); iw(" status="); 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); iw("\n" as *u8) 31 return n 32} 33// compact top-N list from a GitHub search JSON 34func complist(buf: *u8, n: i64) -> i64 { 35 let sp: *i64 = sys_mmap(8) as *i64; let ep: *i64 = sys_mmap(8) as *i64 36 var pos: i64 = 0; var rank: i64 = 1; var guard: i64 = 0 37 while guard < 40 { 38 guard = guard + 1 39 let fp: i64 = na_find_from(buf, n, "\"full_name\":\"" as *u8, pos) 40 if fp < 0 { guard = 40 } else { 41 let nb: i64 = na_find_from(buf, n, "\"full_name\":\"" as *u8, fp + 13) 42 var bound: i64 = n; if nb >= 0 { bound = nb } 43 iw("["); let rb: *u8=sys_mmap(8); var rv: i64=rank; var rk: i64=0; if rv==0{rb[0]=48 as u8;rk=1} let rt: *u8=sys_mmap(8); while rv>0{rt[rk]=(48+(rv%10)) as u8;rv=rv/10;rk=rk+1} var ri: i64=0; while ri<rk{rb[ri]=rt[rk-1-ri];ri=ri+1} sys_write(1,rb,rk); iw("] " as *u8) 44 if jval(buf, n, "\"full_name\":\"" as *u8, fp, bound, sp, ep) == 0 { iseg(buf, sp[0], ep[0]) } 45 let stp: i64 = na_find_from(buf, n, "\"stargazers_count\":" as *u8, fp) 46 if stp >= 0 { if stp < bound { iw(" *"); var q: i64 = stp + 19; while q < bound { let c: i64 = buf[q] as i64; if c>=48 { if c<=57 { let o1: *u8=sys_mmap(1); o1[0]=buf[q]; sys_write(1,o1,1); q=q+1 } else { q=bound } } else { q=bound } } } } 47 iw(" topics:" as *u8) 48 let tp: i64 = na_find_from(buf, n, "\"topics\":[" as *u8, fp) 49 if tp >= 0 { if tp < bound { let te: i64 = na_find_from(buf, n, "]" as *u8, tp+10); iseg(buf, tp+9, te+1) } } 50 iw("\n " as *u8) 51 if jval(buf, n, "\"description\":\"" as *u8, fp, bound, sp, ep) == 0 { var d: i64 = ep[0]; if d - sp[0] > 150 { d = sp[0]+150 } iseg(buf, sp[0], d) } 52 iw("\n" as *u8) 53 pos = fp + 13; rank = rank + 1 54 } 55 } 56 return 0 57} 58func readme(owner_repo: *u8, store: *TrustStore, buf: *u8, cap: i64, shown: i64) -> i64 { 59 let url: *u8 = sys_mmap(256); var o: i64 = 0 60 let p1: *u8 = "https://raw.githubusercontent.com/" as *u8; while p1[o]!=(0 as u8){url[o]=p1[o];o=o+1} 61 var j: i64 = 0; while owner_repo[j]!=(0 as u8){url[o]=owner_repo[j];o=o+1;j=j+1} 62 let p2: *u8 = "/HEAD/README.md" as *u8; var k: i64=0; while p2[k]!=(0 as u8){url[o]=p2[k];o=o+1;k=k+1} url[o]=0 as u8 63 let n: i64 = fetch(url, store, buf, cap) 64 if n > 0 { var d: i64 = n; if d > shown { d = shown } sys_write(1, buf, d); iw("\n" as *u8) } 65 return n 66} 67func main() -> i64 { 68 let r: i64 = nx_trust_store_load_from_certdata("data/mozilla_certdata.txt" as *u8, 512, K_MAGIC_4194304) 69 if r <= 0 { iw("certdata fail\n" as *u8); return 1 } 70 let store: *TrustStore = r as *TrustStore 71 let buf: *u8 = sys_mmap(K_MAGIC_2097152) 72 iw("### TOPIC ebook-reader\n" as *u8) 73 let a: i64 = fetch("https://api.github.com/search/repositories?q=topic:ebook-reader&sort=stars&order=desc&per_page=12" as *u8, store, buf, K_MAGIC_2097152) 74 if a > 0 { complist(buf, a) } 75 iw("\n### TOPIC comic-reader\n" as *u8) 76 let b: i64 = fetch("https://api.github.com/search/repositories?q=topic:comics+manga+reader&sort=stars&order=desc&per_page=12" as *u8, store, buf, K_MAGIC_2097152) 77 if b > 0 { complist(buf, b) } 78 iw("\n### TOPIC self-hosted comics/manga server\n" as *u8) 79 let c: i64 = fetch("https://api.github.com/search/repositories?q=manga+server+self-hosted&sort=stars&order=desc&per_page=10" as *u8, store, buf, K_MAGIC_2097152) 80 if c > 0 { complist(buf, c) } 81 iw("\n### README: LANraragi (self-hosted manga/doujinshi server -- our closest analog)\n" as *u8) 82 readme("Difegue/LANraragi" as *u8, store, buf, K_MAGIC_2097152, K_MAGIC_2400) 83 iw("\n### README: readest (modern feature-rich reader)\n" as *u8) 84 readme("readest/readest" as *u8, store, buf, K_MAGIC_2097152, K_MAGIC_2600) 85 return 0 86}