diff --git a/src/babillard.ml b/src/babillard.ml
index 95e5790..0e444c5 100644
--- a/src/babillard.ml
+++ b/src/babillard.ml
@@ -221,6 +221,10 @@ module Q = struct
Caqti_request.collect Caqti_type.string Caqti_type.string
"SELECT post_id FROM threads WHERE thread_id=?;"
+ let count_thread_posts =
+ Caqti_request.find Caqti_type.string Caqti_type.int
+ "SELECT COUNT(post_id) FROM threads WHERE thread_id=?;"
+
(* TODO return bool *)
let is_thread =
Caqti_request.find_opt Caqti_type.string Caqti_type.string
@@ -329,7 +333,7 @@ let parse_comment comment =
let comment =
Format.asprintf "%a"
(Format.pp_print_list
- ~pp_sep:(fun fmt () -> Format.fprintf fmt "\n
")
+ ~pp_sep:(fun fmt () -> Format.fprintf fmt "@.
")
Format.pp_print_string )
lines
in
@@ -337,7 +341,7 @@ let parse_comment comment =
let cited_posts = List.sort_uniq (fun _ _ -> 1) cited_posts in
(comment, cited_posts)
-let view_post post_id =
+let view_post ?is_thread_preview post_id =
let* nick = Db.find Q.get_post_nick post_id in
let* comment = Db.find Q.get_post_comment post_id in
let* date = Db.find Q.get_post_date post_id in
@@ -376,7 +380,16 @@ let view_post post_id =
(Format.pp_print_list ~pp_sep:Format.pp_print_space pp_print_reply)
in
- let replies_view = pp_print_replies replies in
+ let replies_view =
+ match is_thread_preview with
+ | None -> pp_print_replies replies
+ | Some () -> (
+ let res_nb = Db.find Q.count_thread_posts post_id in
+ match res_nb with
+ | Error _ -> ""
+ | Ok ((0 | 1) as nb) -> Format.sprintf "%d reply" (nb - 1)
+ | Ok nb -> Format.sprintf "%d replies" (nb - 1) )
+ in
(* TODO how to display date, I should probably render everything on the client*)
let post_info_view =
Format.sprintf
@@ -407,6 +420,8 @@ let view_post post_id =
in
Ok post_view
+let preview_thread thread_id = view_post ~is_thread_preview:() thread_id
+
let view_thread thread_id =
let** _ = Db.find_opt Q.is_thread thread_id in
let* thread_posts = Db.fold Q.get_thread_posts List.cons thread_id [] in
@@ -612,7 +627,7 @@ let get_markers board =
List.map
(fun thread_id ->
let** lat, lng = Db.find_opt Q.get_post_gps thread_id in
- match view_post thread_id with
+ match preview_thread thread_id with
| Ok content -> Ok (lat, lng, content, thread_id)
| Error e -> Error e )
thread_id_list