
;;; This gets called when starting to get new mail or after one file of new mail
;;; has been read in.  It should return T if it has started something loading.
(DEFMETHOD (INBOX-BUFFER :START-NEXT-FILE) ()
  (DO ((FILE) (RENAME) (DELETE-P) (STR)
       (LOADING-NAME NIL NIL)
       (LOADING-TRUENAME NIL NIL))
      ((NULL 

	 ;(progn
	 ;  (with-open-file (foo "DJ:SAZ;test.lisp" :direction :output :if-exists :append)
	 ;    (format foo "~A" PENDING-FILE-LIST))

	       PENDING-FILE-LIST))
       NIL)
    (SETF `(,FILE ,RENAME ,DELETE-P) (CAR PENDING-FILE-LIST))
    ;; If the next pending file is on a different host,
    ;; and needs a different flavor of INBOX-BUFFER,
    ;; replace this one with a suitable one and try again with that one.
    (UNLESS (EQ (TYPE-OF SELF) (SEND FILE :INBOX-BUFFER-FLAVOR))
      (RETURN (SEND (REPLACE-INBOX-BUFFER (SEND FILE :INBOX-BUFFER-FLAVOR))
		    :START-NEXT-FILE)))
    (COND ((NOT RENAME)
	   ;;No file to rename to, see if new file exists
	   (CONDITION-CASE ()
	       (SETQ STREAM (OPEN FILE :DIRECTION :INPUT))
	     (FS:FILE-NOT-FOUND (POP PENDING-FILE-LIST) NIL)
	     (:NO-ERROR (POP PENDING-FILE-LIST) NIL)
	     (ERROR)))
	  ((IGNORE-ERRORS
	     (SETQ STREAM (OPEN RENAME :DIRECTION :INPUT)))
	   (LET ((TEM (CAR PENDING-FILE-LIST)))
	     (POP PENDING-FILE-LIST)
	     ;;If file to rename to already exists,
	     ;;arrange for real file to get read in after saving done next time
	     (SETQ NEXT-PENDING-FILE-LIST
		   (NCONC NEXT-PENDING-FILE-LIST (NCONS TEM)))))
	  ((CONDITION-CASE ()
	       (SETQ STR (OPEN FILE :DIRECTION NIL))
	     (FS:FILE-NOT-FOUND (POP PENDING-FILE-LIST) NIL)
	     (ERROR))
	   (POP PENDING-FILE-LIST)
	   ;;Rename to new file.  This does not use the :RENAME stream operation since that
	   ;;doesn't work correctly on Tops-20 and does not return the TRUENAME.
	   (SETQ LOADING-NAME (SEND STR :PATHNAME)
		 LOADING-TRUENAME (SEND STR :TRUENAME))
	   (CONDITION-CASE ()
	       (SEND FILE :RENAME RENAME)
	     (FS:FILE-LOCKED
	      (FORMAT *QUERY-IO* "~&File ~A is being accessed so cannot be renamed.  Pausing."
		      LOADING-TRUENAME)
	      (PROCESS-SLEEP (* 10. 60.))
	      (DO ()
		  (())
		(CONDITION-CASE ()
		    (SEND FILE :RENAME RENAME)
		  (FS:FILE-LOCKED NIL)
		  (:NO-ERROR
		   (FORMAT *QUERY-IO* "~&File successfully renamed, continuing.")
		   (RETURN T)))
		(UNLESS (Y-OR-N-P "Try again?  You can also abort. ")
		  (SIGNAL-CONDITION EH:ABORT-OBJECT)))))
	   ;;Get the renamed file
	   (SETQ STREAM (OPEN RENAME '(:IN)))))
    (WHEN STREAM
      (SETQ PATHNAME (OR LOADING-NAME (SEND STREAM :PATHNAME))
	    NAME (SEND PATHNAME :STRING-FOR-PRINTING)
	    STATUS :LOADING-NEW-MAIL)
      (START-LOADING-ZMAIL-BUFFER SELF STREAM T LOADING-TRUENAME)
      (AND DELETE-P (PUSH (SEND STREAM :TRUENAME) PENDING-DELETION-LIST))
      (RETURN T))))

