From 2337187206b93797788a736b359cb9e9aa74f8ee Mon Sep 17 00:00:00 2001 From: Marcus Kammer Date: Mon, 10 Jun 2024 18:20:26 +0200 Subject: [PATCH] Set data dir in users home dir --- src/handlers/main.lisp | 29 ++++++++++++++++++++++++----- src/handlers/survey.lisp | 2 +- 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/src/handlers/main.lisp b/src/handlers/main.lisp index 5dcba04..54f6f30 100644 --- a/src/handlers/main.lisp +++ b/src/handlers/main.lisp @@ -1,9 +1,20 @@ (in-package :ml-survey/handlers) -(defun surveys-data-dir () - (let ((data-dir (uiop:merge-pathnames* "data/surveys/"))) - (ensure-directories-exist data-dir) - data-dir)) +(defun base-dir () + (if (uiop:os-unix-p) + (format nil "~a/" (uiop:getenv "XDG_DATA_HOME")) + (format nil "~a/" (uiop:getenv "LOCALAPPDATA")))) + +(defun app-dir () + (uiop:merge-pathnames* "ml-survey/" (base-dir))) + +(defun data-dir () + (uiop:merge-pathnames* "data/surveys/" (app-dir))) + +(defun ensure-data-dir () + (let ((data-dir (data-dir))) + (ensure-directories-exist (data-dir)) + data-dir)) (defun split-uri (uri) (check-type uri string) @@ -39,10 +50,18 @@ (format stream ""))) pathname) +(defun ensure-data-file-exist (survey-id questionnaire-id) + (let ((path (format nil "~a~a/~a.lisp" + (ensure-data-dir) + survey-id + questionnaire-id))) + (ensure-directories-exist path) + (ensure-file-exist path))) + (defun make-db-file (file) "Prepare and ensure a database file at FILE-STR path." (check-type file string) - (let ((path (uiop:merge-pathnames* file))) + (let ((path (uiop:merge-pathnames* file (ensure-data-dir)))) (ensure-file-exist path))) (defun make-surveys-db-file () diff --git a/src/handlers/survey.lisp b/src/handlers/survey.lisp index 665b3d0..43486cc 100644 --- a/src/handlers/survey.lisp +++ b/src/handlers/survey.lisp @@ -38,7 +38,7 @@ Returns a list of integers." (with-slots (id data-dir properties) survey (setf data-dir (uiop:merge-pathnames* (format nil "~a/" id) - (surveys-data-dir))) + (ensure-data-dir))) (setf properties (first (rest (assoc (parse-integer id) (load-response (make-surveys-db-file))))))))