57 lines
1.6 KiB
Racket
57 lines
1.6 KiB
Racket
#lang racket/base
|
|
|
|
(require racket/class racket/date racket/list racket/match
|
|
"fs.rkt"
|
|
"framework.rkt")
|
|
|
|
(define meowbb%
|
|
(class activity%
|
|
(init-field entries)
|
|
(super-new [fps 0.0])
|
|
|
|
(define root
|
|
(new header/footer%
|
|
[header (new label% [label-text "this is the header"])]
|
|
[body (new scroll-pane%
|
|
[body (new table%
|
|
[flex-col 1]
|
|
[headers '("tag" "title" "author" "updated")]
|
|
[cells entries])])]
|
|
[footer (new label% [label-text "this is the footer"])]))
|
|
|
|
(define/override (draw size)
|
|
(send root draw size))
|
|
|
|
(define/override (on-event e)
|
|
(match e
|
|
["q" 'quit]
|
|
[_ (send root on-event e)
|
|
'continue]))
|
|
|
|
(define/override (on-deactivated)
|
|
(format "bye, meow"))))
|
|
|
|
(module+ main
|
|
(require ansi)
|
|
|
|
;; gang
|
|
(date-display-format 'iso-8601)
|
|
|
|
(define users (list-users))
|
|
(define posts (get-posts users))
|
|
(define modtimes (make-hash))
|
|
(void (dfs-modtime posts '() modtimes))
|
|
|
|
(define raw-entries
|
|
(for*/list ([(tag forum) (in-hash posts)] [(k v) (in-hash forum)])
|
|
(define post (first (hash-ref v "/index")))
|
|
(define modtime (hash-ref modtimes (list tag k)))
|
|
(list modtime tag (last (post-path post)) (post-author post)
|
|
(date->string (seconds->date modtime #t) #t))))
|
|
|
|
(define sorted-entries
|
|
(sort raw-entries > #:key first))
|
|
(define entries (map rest sorted-entries))
|
|
|
|
(run-application "MeowBB" (new meowbb% [entries entries])))
|