; - 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
(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))
(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
"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)
(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))
(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)