properly correlating references with message IDs
authorKyle Spaans <kspaans@student.math.uwaterloo.ca>
Mon, 6 Apr 2009 22:17:45 +0000 (18:17 -0400)
committerKyle Spaans <kspaans@student.math.uwaterloo.ca>
Mon, 6 Apr 2009 22:17:45 +0000 (18:17 -0400)
connect.ss

index 0a5ae05..d0d9c83 100644 (file)
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
-;; thread-depth: newsgroup article -> void
-;; Given a newsgroup article, prints the depth of the thread that it's in.
-;;   OH GAWD this sounds inefficient, but should be a good prototype.
-;(define thread-dpeth
+
+;-------------------------
+;-------------------------
+;;; Want to put the message ID into the hash table with some kind of other unique ID
+;;; and then match references against the message ID to discover threads.
+;;; Directed edges will lead _away_ from the original post (towards follow-ups)
+;-------------------------
+;-------------------------
 
 ;; look at head of the first few messages
-(define (thread-all first last newsd)
+(define (thread-print first last newsd)
   (cond
     [(= first last) (printf "****************\n")]
     [else (local ((define mesg-from (message-getter uwnews first
               [(not (boolean? mesg-from))
               (printf "From: ~a~nSubj: ~a~nMID:  ~a~n~n"
                       (car mesg-from) (cadr mesg-from) (caddr mesg-from))]))
-          (thread-all (+ first 1) last newsd)]))
+          (thread-print (+ first 1) last newsd)]))
+
+(define (thread-hash first last newsd)
+  (cond
+    [(= first last) (printf "@@@@@@@@@@@@@@@@\n")]
+    [else (local [(define mesg-from (message-getter uwnews first
+                                                   (list mid-regexp  ; Ugh, the order coming out of this function
+                                                         from-regexp ; depends on what's in the headers, not the
+                                                         ref-regexp  ; order I have here. Usually From, Subj, MID, Refs
+                                                         subj-regexp)))]
+            (cond
+             [(and (not (boolean? mesg-from)) (> (length mesg-from) 2))
+               (let [(result (map (lambda (x) (hash-ref refers x #f))
+                                  (get-refs (caddr mesg-from))))
+                     (mesg-ID (get-refs (caddr mesg-from)))]
+                 (cond
+                   [(boolean? (car result))
+                    (printf "----~nInserting MID(~a) into hash table.~n" mesg-ID)
+                    (hash-set! refers (car mesg-ID) (make-dot-id))]
+                   [else (printf "MIDs already in hash table?~n    >>~a<<~n" (caddr mesg-from))]))
+               (cond [(> (length mesg-from) 3)
+                      (printf "Checking References to find threading...~n")
+                      (let [(Refs (get-refs (cadddr mesg-from)))]
+                        (printf "Refs:     ~a~n" Refs)
+                        (printf "          Is it in the table? ~a~n" (hash-ref refers (car Refs) #f)))])
+               (printf "From: ~a~nSubj: ~a~nMID:  ~a~n~n"
+                      (car mesg-from) (cadr mesg-from) (caddr mesg-from))]
+              [(not (boolean? mesg-from))
+               (printf "Pooppoop!~n")
+               (printf "From: ~a~nSubj: ~a~nMID:  ~a~n~n"
+                      (car mesg-from) (cadr mesg-from) (caddr mesg-from))]))
+          (thread-hash (+ first 1) last newsd)]))
+
+;(thread-print first (+ first 20) uwnews)
+(thread-hash first (+ first 20) uwnews)
+;refers
 
-(thread-all first (+ first 20) uwnews)
 
 ;(read-all first last uwnews)
 ;(read-all first (+ first 1000) uwnews)
 
-;; Now let's see what's in the hash table
-;(printf "########~n")
-;(printf "Size of Table: ~a~n" (hash
-;(hash-for-each httest (lambda (x y) (printf "-->~a\t\t~a~n" x y)))
-;(printf "########~n")
 
 (disconnect-from-server uwnews)
 ;(display "Disconnected.\n")