X-Git-Url: https://git.xandkar.net/?a=blobdiff_plain;f=tt.rkt;fp=tt.rkt;h=d11c151f3101f9b5dd08ee4bb15e74c0a6837c3c;hb=6cedad920413e724fd100e35d817ec98173c4ec4;hp=9f0d66528efe63b6736f8d18fce492ba4ca23d3d;hpb=38ff609be21cfce1e23d97f3693d9fe1ef176183;p=tt.git diff --git a/tt.rkt b/tt.rkt index 9f0d665..d11c151 100644 --- a/tt.rkt +++ b/tt.rkt @@ -166,23 +166,18 @@ (: peers-merge (-> (Listof Peer) * (Listof Peer))) (define (peers-merge . peer-sets) - (define (merge peers) + (define (merge-2 p1 p2) + (match* (p1 p2) + [((Peer n1 _ _ _) (Peer n2 _ _ _)) #:when (and n1 n2) p1] ; TODO compare which is more-common? + [((Peer #f _ _ _) (Peer #f _ _ _)) p1] ; TODO update with most-common nick? + [((Peer n1 _ _ _) (Peer #f _ _ _)) p1] + [((Peer #f _ _ _) (Peer n2 _ _ _)) p2])) + (define (merge-n peers) (match peers ['() (raise 'impossible)] [(list p) p] - [(list* p1 p2 ps) - (let* ([n1 (Peer-nick p1)] - [n2 (Peer-nick p2)] - [p (cond - ; TODO Try to pick from nicks db: preferred, otherwise seen - [(and (not n1) (not n2)) p1] ; TODO update with most-common nick - [(and n1 n2 ) p1] ; TODO compare which is more-common - [(and n1 (not n2)) p1] - [(and (not n1) n2) p2] - [else - (raise 'impossible)])]) - (merge (cons p ps)))])) - (sort (map merge (group-by Peer-url-str (append* peer-sets))) + [(list* p1 p2 ps) (merge-n (cons (merge-2 p1 p2) ps))])) + (sort (map merge-n (group-by Peer-url-str (append* peer-sets))) (match-lambda** [((Peer _ _ u1 _) (Peer _ _ u2 _)) (string