Function: erc-dcc-send-filter

erc-dcc-send-filter is a byte-compiled function defined in erc-dcc.el.gz.

Signature

(erc-dcc-send-filter PROC STRING)

Source Code

;; Defined in /usr/src/emacs/lisp/erc/erc-dcc.el.gz
(defun erc-dcc-send-filter (proc string)
  (let* ((size (erc-unpack-int string))
         (elt (erc-dcc-member :peer proc))
         (parent (plist-get elt :parent))
         (sent-marker (plist-get elt :sent))
         (confirmed-marker (plist-get elt :confirmed)))
    (with-current-buffer (process-buffer proc)
      (set-marker confirmed-marker (+ (point-min) size))
      (cond
       ((and (= confirmed-marker sent-marker)
             (= confirmed-marker (point-max)))
        (erc-display-message
         nil 'notice parent
         'dcc-send-finished
         ?n (plist-get elt :nick)
         ?f buffer-file-name
         ?s (number-to-string (- sent-marker (point-min))))
        (setq erc-dcc-list (delete elt erc-dcc-list))
        (set-buffer-modified-p nil)
        (delete-process proc)
        (kill-buffer (current-buffer)))
       ((<= confirmed-marker sent-marker)
        (while (and (< (- sent-marker confirmed-marker)
                       (or erc-dcc-pump-bytes
                           erc-dcc-block-size))
                    (> (erc-dcc-send-block proc) 0))))
       ((> confirmed-marker sent-marker)
        (erc-display-message
         nil 'notice parent
         (format "DCC: Client confirmed too much (%s vs %s)!"
                 (marker-position confirmed-marker)
                 (marker-position sent-marker)))
        (set-buffer-modified-p nil)
        (delete-process proc)
        (kill-buffer (current-buffer)))))))