add support for storing every file viewed, disabled by default - clic - Clic is an command line interactive client for gopher written in Common LISP HTML 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 HTML 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"