From 9cbd9b9edbbdaf7835bcf3e501bc9c0fbe90504d Mon Sep 17 00:00:00 2001
From: Tim <contact@bytim.eu>
Date: Mon, 21 Apr 2025 18:08:13 +0200
Subject: Add image view

---
 src/pics/handler/view.clj | 46 ++++++++++++++++++++++++++++++++++++++++++++++
 src/pics/routes.clj       |  7 +++++--
 2 files changed, 51 insertions(+), 2 deletions(-)
 create mode 100644 src/pics/handler/view.clj

(limited to 'src')

diff --git a/src/pics/handler/view.clj b/src/pics/handler/view.clj
new file mode 100644
index 0000000..34ee712
--- /dev/null
+++ b/src/pics/handler/view.clj
@@ -0,0 +1,46 @@
+(ns pics.handler.view
+  (:require [clojure.string :as cstr]
+            [ring.util.response :as ruresp]
+            [hiccup2.core :as hiccup])
+  (:import java.io.File
+           java.util.Date
+           (java.text SimpleDateFormat)))
+
+(defn handle-src [req]
+  (->> (get-in req [:reitit.core/match :path-params :file-name])
+       (str "./img/")
+       ruresp/file-response))
+
+(defn handle [req]
+  (let [file (->> (.listFiles (File. "./img/"))
+                  (filter #(cstr/starts-with? (.getName ^File %)
+                                              (str (get-in req [:reitit.core/match :path-params :id]) ".")))
+                  first)]
+    (if (some? file)
+      (-> [:html
+           [:head
+            [:title "pics"]
+            [:meta {:name "robots" :content "noindex,nofollow"}]]
+           [:body {:style {:background-color :aquamarine}}
+            [:img {:src   (str "/src/" (.getName ^File file))
+                   :style {:max-height    "90%"
+                           :max-width     "90%"
+                           :border-radius "1em"
+                           :display       :block
+                           :margin        :auto}}]
+            (let [last-modified (Date. (.lastModified ^File file))
+                  date-format (SimpleDateFormat. "dd.MM.yyyy")]
+              [:div {:style {:position   :fixed
+                             :bottom     0
+                             :text-align :center
+                             :width      "100%"}}
+               [:p {:style {:font-family      "Arial, sans-serif"
+                            :background-color :white
+                            :border-radius    "1em"
+                            :display          :inline-block
+                            :padding          "0.3em"}}
+                (str "Uploaded on " (.format date-format last-modified))]])]]
+          hiccup/html
+          str
+          ruresp/response)
+      (ruresp/not-found "Not found."))))
diff --git a/src/pics/routes.clj b/src/pics/routes.clj
index a10ab95..31edd63 100644
--- a/src/pics/routes.clj
+++ b/src/pics/routes.clj
@@ -3,11 +3,14 @@
             [ring.middleware.multipart-params :as rmmultiparams]
 
             [pics.handler.home :as phhome]
-            [pics.handler.upload :as phupload]))
+            [pics.handler.upload :as phupload]
+            [pics.handler.view :as phview]))
 
 (def ^:private router
   (rring/router [["/" {:get {:handler phhome/handle}}]
-                 ["/upload" {:post {:handler phupload/handle}}]]))
+                 ["/api/upload" {:post {:handler phupload/handle}}]
+                 ["/src/:file-name" {:get {:handler phview/handle-src}}]
+                 ["/:id" {:get {:handler phview/handle}}]]))
 
 (def ring-handler
   (-> router
-- 
cgit v1.2.3