1 | ;(require "./setting") |
---|
2 | |
---|
3 | (use srfi-1) |
---|
4 | (use file.util) |
---|
5 | |
---|
6 | (define (daily-log date-str filter-proc) |
---|
7 | ;; date-str must be in %Y-%m-%d format |
---|
8 | (define (uncolon s) |
---|
9 | (cond [(string=? "" s) |
---|
10 | ""] |
---|
11 | [(eq? #\: (string-ref s 0)) |
---|
12 | (substring s 1 -1)] |
---|
13 | [else s])) |
---|
14 | (define (unquote s) |
---|
15 | (cond [(string=? "" s) |
---|
16 | ""] |
---|
17 | [(eq? #\" (string-ref s 0)) |
---|
18 | (substring s 1 (- (string-length s) 1))] |
---|
19 | [else s])) |
---|
20 | |
---|
21 | (define (month-abbrev->number s) |
---|
22 | (case (string->symbol s) |
---|
23 | [(Jan) 1] [(Feb) 2] [(Mar) 3] [(Apr) 4] [(May) 5] [(Jun) 6] |
---|
24 | [(Jul) 7] [(Aug) 8] [(Sep) 9] [(Oct) 10] [(Nov) 11] [(Dec) 12] |
---|
25 | [else #f])) |
---|
26 | |
---|
27 | (let1 raw-log-path (string-append log-dir "/" date-str ".log") |
---|
28 | (if (file-exists? raw-log-path) |
---|
29 | (string-join |
---|
30 | (filter identity |
---|
31 | (map (lambda (line) |
---|
32 | (let (;;[month (month-abbrev->number (substring line 0 3))] |
---|
33 | ;;[day (string->number (substring line 4 6))] |
---|
34 | [timestamp (substring line 7 15)] |
---|
35 | [f (string-split (substring line 17 -1) " ")]) |
---|
36 | (if (string=? "[RECEIVED]" (car f)) |
---|
37 | (let ([user (uncolon (regexp-replace #/!.*$/ (second f) ""))] |
---|
38 | [cmd (string->symbol (third f))] |
---|
39 | [room (uncolon (fourth f))]) |
---|
40 | (case cmd |
---|
41 | [(JOIN) |
---|
42 | (filter-proc timestamp user cmd room "")] |
---|
43 | [(PART) |
---|
44 | (filter-proc timestamp user cmd room |
---|
45 | (unquote (uncolon (string-join (cddddr f) " "))))] |
---|
46 | [(QUIT) |
---|
47 | (filter-proc timestamp user cmd #f |
---|
48 | (unquote (uncolon (string-join (cdddr f) " "))))] |
---|
49 | [(PRIVMSG) |
---|
50 | (filter-proc timestamp user cmd room (uncolon (string-join (cddddr f) " ")))] |
---|
51 | [(NICK) |
---|
52 | (filter-proc timestamp user cmd #f (uncolon (string-join (cdddr f) " ")))] |
---|
53 | [(TOPIC) |
---|
54 | (filter-proc timestamp user cmd #f (uncolon (string-join (cdddr f) " ")))] |
---|
55 | [else |
---|
56 | (filter-proc timestamp user cmd room (uncolon (string-join (cddddr f) " ")))] |
---|
57 | )) |
---|
58 | #f))) |
---|
59 | (file->string-list raw-log-path)) |
---|
60 | ) "") |
---|
61 | #f))) |
---|