add support for storing every file viewed, disabled by default - clic - Clic is an command line interactive client for gopher written in Common LISP
 (HTM) git clone git://bitreich.org/clic/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/clic/
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) Tags
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 59a4eb1d2865dd219de86ee758e27034e7ed1a85
 (DIR) parent 28cf530d7209eb187a8743bb0543cfc5a633b9ae
 (HTM) Author: Solene Rapenne <solene@perso.pw>
       Date:   Mon,  6 Nov 2017 09:10:22 +0000
       
       add support for storing every file viewed, disabled by default
       
       Diffstat:
         M clic.lisp                           |      48 +++++++++++++++++++++++--------
       
       1 file changed, 36 insertions(+), 12 deletions(-)
       ---
 (DIR) diff --git a/clic.lisp b/clic.lisp
       @@ -11,6 +11,7 @@
        (defparameter *allowed-selectors* (list "0" "1" "2" "3" "4" "5" "6" "i"
                                                "h" "7" "8" "9" "+" "T" "g" "I"))
        (defparameter *history* '())
       +(defparameter *offline* nil)
        
        ;; ANSI colors
        (defun add-color(name type hue)
       @@ -135,8 +136,16 @@
            ;; we reset the links table ONLY if we have a new folder
            (when (string= "1" type)
              (setf *links* (make-hash-table)))
       -  
       -  
       +
       +    (when *offline*
       +      (ensure-directories-exist (concatenate 'string
       +                                             "history/"
       +                                             (location-host here)
       +                                             "/"
       +                                             (location-uri here)
       +                                             "/")))
       +
       +    
            ;; we prepare informations about the connection
            (let* ((address (sb-bsd-sockets:get-host-by-name host))
                   (host (car (sb-bsd-sockets:host-ent-addresses address)))
       @@ -151,16 +160,31 @@
                ;; if the selector is 1 we omit it
                (format stream "~a~%" uri)
                (force-output stream)
       -        
       -        ;; for each line we receive we display it
       -        (loop for line = (read-line stream nil nil)
       -              counting line into line-number
       -              while line do
       -              (cond
       -               ((string= "1" type)
       -                (formatted-output line line-number))
       -               ((string= "0" type)
       -                (format t "~a~%" line))))))))
       +
       +        (let ((save-offline (if *offline*
       +                                (open (concatenate 'string
       +                                                   "history/"
       +                                                   (location-host here)
       +                                                   "/"
       +                                                   (location-uri here)
       +                                                   (location-type here))
       +                                      :direction :output
       +                                      :if-does-not-exist :create
       +                                      :if-exists :supersede)
       +                                nil)))
       +          
       +          ;; for each line we receive we display it
       +          (loop for line = (read-line stream nil nil)
       +             counting line into line-number
       +             while line do
       +               (when save-offline
       +                 (format save-offline "~a~%" line))
       +               (cond
       +                 ((string= "1" type)
       +                  (formatted-output line line-number))
       +                 ((string= "0" type)
       +                  (format t "~a~%" line))))
       +          (and save-offline (close save-offline)))))))
        
        (defun visit(destination)
          "visit a location"