(* COCANWIKI - a wiki written in Objective CAML.
* Written by Richard W.M. Jones <rich@merjis.com>.
* Copyright (C) 2004 Merjis Ltd.
- * $Id: mail_import.ml,v 1.4 2004/10/12 10:00:38 rich Exp $
+ * $Id: mail_import.ml,v 1.9 2005/11/24 14:54:12 rich Exp $
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
open Cocanwiki_date
open Cocanwiki_strings
open Cocanwiki_pages
+open Cocanwiki_mail
let irt_re = Pcre.regexp "<.*?>"
let ws_re = Pcre.regexp "\\s+"
with
Not_found ->
error ~back_button:true ~title:"No message"
- q "No message was uploaded.";
+ dbh hostid q "No message was uploaded.";
return () in
(* Parse the message. *)
*)
if date = "" || inet_message_id = "" then (
error ~back_button:true ~title:"Headers missing"
- q "Date or Message-ID header missing. Cannot handle this message. ";
+ dbh hostid q
+ "Date or Message-ID header missing. Cannot handle this message. ";
return ()
);
+ (* Can't handle funny characters in subject lines - remove them. *)
+ let subject = String.map (fun c ->
+ if Char.code c < 32 then ' ' else c) subject in
+
(* Parse the date field. *)
let date, time =
try
let id = sth#fetch1int () in
if not overwrite then (
ok ~title:"Message exists"
- q "Message already imported";
+ dbh hostid q "Message already imported";
return ()
);
Some id
message_date) values (?, ?, ?, ?)" in
sth#execute [`Int hostid; `String subject; `String inet_message_id;
`Timestamp (date, time)];
- let msgid = sth#serial "messages_id_seq" in
+ let msgid = Int64.to_int (sth#serial "messages_id_seq") in
let sth =
dbh#prepare_cached
*)
msgid in
- (* The message is referred to by a unique title: *)
+ (* The message is referred to by a unique title.
+ * NB. Do not change this unique title - it is also used during thread
+ * indexing.
+ *)
let title = sprintf "Mail/%s (%d)" subject msgid in
(* Choose a suitable URL. *)
try
String.find (String.lowercase str) sub_lc
with
- String.Invalid_string -> -1
+ Invalid_string -> -1
in
let rec loop line = function
[] -> line
loop line links) lines in
let lines = List.map trim lines in
- let lines =
- List.map (fun line -> if line <> "" then line ^ " <br>" else "")
- lines in
+ let lines = List.map (fun line -> line ^ "<br>") lines in
String.concat "\n" lines
in
*)
save_page dbh hostid ~user ~r model;
+ (* Rebuild threads? *)
+ if rebuild then
+ thread_mail dbh hostid ~user ~r date.Dbi.year date.Dbi.month;
+
(* Commit to the database. *)
dbh#commit ();
(* Finish off. *)
ok ~title:"Imported"
- q ("Message " ^ inet_message_id ^ " was imported.")
+ dbh hostid q ("Message " ^ inet_message_id ^ " was imported.")
let () =
register_script ~restrict:[CanImportMail] run