- (log-info "uri-fetch new ~a" uri)
- ; TODO Timeout. Currently hangs on slow connections.
- (let* ([resp (http-get uri)]
- [status (http-response-code resp)]
- [body (http-response-body resp)])
- (log-debug "finished GET ~a status:~a body length:~a"
- uri status (string-length body))
- ; TODO Handle redirects
- (if (= status 200)
- (begin
- (display-to-file body cache-file-path #:exists 'replace)
- body)
- ; TODO A more-informative exception
- (raise status))))))
+ (log-warning "Cache file not found for URI: ~a" (url->string uri))
+ "")))
+
+(: str->feed (String (Option Feed)))
+(define (str->feed str)
+ (log-debug "Parsing feed string: ~v" str)
+ (match (string-split str)
+ [(list nick u)
+ (with-handlers*
+ ([exn:fail?
+ (λ (e)
+ (log-error "Invalid URI: ~v, exn: ~v" u e)
+ #f)])
+ (feed nick (string->url u)))]
+ [_
+ (log-error "Invalid feed string: ~v" str)
+ #f]))
+
+(: filter-comments (-> (Listof String) (Listof String)))
+(define (filter-comments lines)
+ (filter-not (λ (line) (string-prefix? line "#")) lines))
+
+(: str->feeds (-> String (Listof Feed)))
+(define (str->feeds str)
+ (filter-map str->feed (filter-comments (str->lines str))))
+
+(: file->feeds (-> Path-String (Listof Feed)))
+(define (file->feeds filename)
+ (str->feeds (file->string filename)))
+
+(: user-agent String)
+(define user-agent
+ (let*
+ ([prog-name "tt"]
+ [prog-version (info:#%info-lookup 'version)]
+ [prog-uri "https://github.com/xandkar/tt"]
+ [user-feed-file (build-path tt-home-dir "me")]
+ [user
+ (if (file-exists? user-feed-file)
+ (let ([user (first (file->feeds user-feed-file))])
+ (format "+~a; @~a" (url->string (feed-uri user)) (feed-nick user)))
+ (format "+~a" prog-uri))])
+ (format "~a/~a (~a)" prog-name prog-version user)))