X-Git-Url: https://git.xandkar.net/?a=blobdiff_plain;f=tt.rkt;h=c63f35d3bb5068c958a133777ffe7b113bf931b0;hb=4f3dbb24555b4b44d6922044c170a70a0aa0f5b3;hp=b11364f4aaf3d16b9b5db273dfdb803fd435a598;hpb=24c6a76b401882f7c263d07efdf73109fa483128;p=tt.git diff --git a/tt.rkt b/tt.rkt index b11364f..c63f35d 100644 --- a/tt.rkt +++ b/tt.rkt @@ -34,6 +34,9 @@ ; - d | download ; - u | upload ; - calls user-configured command to upload user's own feed file to their server +; +; Looks like a better CLI parser than "racket/cmdline": +; https://docs.racket-lang.org/natural-cli/ #lang racket @@ -43,10 +46,14 @@ (require http-client) (require rfc3339-old) +(module+ test + (require rackunit)) + (struct msg (ts_epoch ts_rfc3339 nick uri text)) (struct feed (nick uri)) (define (concurrent-filter-map num_workers f xs) + ; TODO preserve order of elements OR communicate that reorder is expected ; TODO switch from mailboxes to channels (define (make-worker id f) (define parent (current-thread)) @@ -80,6 +87,15 @@ (for-each thread-wait threads) results) +(module+ test + (define n-workers 10) + (define given (list + (λ (x) (if (even? x) x #f)) + (range 11))) + (check-equal? + (sort (apply concurrent-filter-map (cons n-workers given)) <) + (sort (apply filter-map given ) <))) + (define (msg-print out-format odd msg) (printf (match out-format @@ -200,11 +216,9 @@ "https://raw.githubusercontent.com/mdom/we-are-twtxt/master/we-are-twtxt.txt") (str->feeds (uri-fetch uri))) -(define user-agent +(define (user-agent prog-name prog-version) (let* - ([prog-name "tt"] - [prog-version "0.3.4"] - [prog-uri "https://github.com/xandkar/tt"] + ([prog-uri "https://github.com/xandkar/tt"] [user-feed-file (expand-user-path "~/twtxt-me.txt")] [user (if (file-exists? user-feed-file) @@ -215,6 +229,7 @@ (format "~a/~a (~a)" prog-name prog-version user))) (module+ main + (require setup/getinfo) (define (setup-logging) (define logger (make-logger #f #f 'debug #f)) (define log-chan (make-log-receiver logger 'debug)) @@ -231,12 +246,15 @@ (setup-logging) (current-http-response-auto #f) - (current-http-user-agent user-agent) + (let* ([prog-name "tt"] + [prog-version ((get-info (list prog-name)) 'version)] + [user-agent (user-agent prog-name prog-version)]) + (current-http-user-agent user-agent)) (date-display-format 'rfc2822) (define args (current-command-line-arguments)) (define feeds - (if (vector-empty? args) + (if (= 0 (vector-length args)) (we-are-twtxt) (file->feeds (vector-ref args 0)))) (define out-format 'multi-line)