;;; NB: assumes that the last number in the line is the "mark" ;;; Sometimes, we'll have a newsgroup not on this server - sharing a ;;; newsrc across multiple news servers for instance. (defmethod retrieve-user-newsgroup ((j hermes) line) (with-input-from-string (str line) (multiple-value-bind (name ignore delim) (scl:read-delimited-string '(#\! #\:) str) (when (eql #\: delim) (let ((newsgroup (find-newsgroup name (hermes-server-newsgroups j)))) (when newsgroup (set-syntax-from-char #\- #\space) (set-syntax-from-char #\, #\space) (let ((numbers (loop for num = (read str nil nil) while num collecting num))) (setf (group-mark newsgroup) (or (first (last numbers)) 0))) (set-syntax-from-char #\- #\A) (setf (group-status newsgroup) :SUB)) ;; We want to warn the user, yet create a dummy group that will be saved out ;; so that we can keep using this group on other servers. (unless newsgroup (newsgroup-vanished j (first (push (make-instance 'newsgroup :name name ; Yes Virginia, this sure is ugly. :indent (format nil "~va" (* 2 (1- (length (split name ".")))) "") :show 0) (hermes-server-newsgroups j))))))))))