X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Focaml%2Fgetter%2Fhttp_getter.ml;h=97e8c2f431f435ec82df87ae4ab8d0cbd3d7f8f9;hb=3af56c5a48f7cad33fd701e0061fe143e0e2a7c5;hp=21ed483ad157bc64de0abe11bdf4b100766d3908;hpb=faafe87ce2f7906abc4638cd8f69d1b82dece371;p=helm.git
diff --git a/helm/ocaml/getter/http_getter.ml b/helm/ocaml/getter/http_getter.ml
index 21ed483ad..97e8c2f43 100644
--- a/helm/ocaml/getter/http_getter.ml
+++ b/helm/ocaml/getter/http_getter.ml
@@ -43,6 +43,8 @@ type resolve_result =
| Exception of exn
| Resolved of string
+type logger_callback = HelmLogger.html_tag -> unit
+
let not_implemented s = raise (Not_implemented ("Http_getter." ^ s))
let (index_line_sep_RE, index_sep_RE, trailing_types_RE,
@@ -76,7 +78,7 @@ let map_of_uri = function
| uri when is_xsl_uri uri -> Lazy.force xsl_map
| uri -> raise (Unresolvable_URI uri)
-let update_from_server logmsg server_url = (* use global maps *)
+let update_from_server logger server_url = (* use global maps *)
debug_print ("Updating information from " ^ server_url);
let xml_url_of_uri = function
(* TODO missing sanity checks on server_url, e.g. it can contains $1 *)
@@ -95,7 +97,7 @@ let update_from_server logmsg server_url = (* use global maps *)
Pcre.replace ~rex:heading_rdf_theory_RE ~templ:server_url uri
| uri -> raise (Invalid_URI uri)
in
- let log = ref (`T ("Processing server: " ^ server_url) :: logmsg) in
+ logger (`T ("Processing server: " ^ server_url));
let (xml_index, rdf_index, xsl_index) =
(* TODO keeps index in memory, is better to keep them on temp files? *)
(http_get (server_url ^ "/" ^ (Lazy.force Http_getter_env.xml_index)),
@@ -106,7 +108,7 @@ let update_from_server logmsg server_url = (* use global maps *)
debug_print (sprintf "Warning: useless server %s" server_url);
(match xml_index with
| Some xml_index ->
- (log := `T "Updating XML db ...
" :: !log;
+ logger (`T "Updating XML db ...
");
List.iter
(function
| l when is_blank_line l -> () (* skip blank and commented lines *)
@@ -121,15 +123,15 @@ let update_from_server logmsg server_url = (* use global maps *)
assert (is_cic_uri uri || is_nuprl_uri uri) ;
(map_of_uri uri)#replace
uri ((xml_url_of_uri uri) ^ ".xml")
- | _ -> log := `T ("Ignoring invalid line: '" ^ l) :: !log)
+ | _ -> logger (`T ("Ignoring invalid line: '" ^ l)))
with Invalid_URI uri ->
- log := `T ("Ignoring invalid XML URI: '" ^ l) :: !log))
+ logger (`T ("Ignoring invalid XML URI: '" ^ l))))
(Pcre.split ~rex:index_sep_RE xml_index); (* xml_index lines *)
- log := `T "All done" :: !log)
+ logger (`T "All done")
| None -> ());
(match rdf_index with
| Some rdf_index ->
- (log := `T "Updating RDF db ..." :: !log;
+ logger (`T "Updating RDF db ...");
List.iter
(fun l ->
try
@@ -140,38 +142,32 @@ let update_from_server logmsg server_url = (* use global maps *)
| [uri] ->
(Lazy.force rdf_map) # replace uri
((rdf_url_of_uri uri) ^ ".xml")
- | _ -> log := `T ("Ignoring invalid line: '" ^ l) :: !log)
+ | _ -> logger (`T ("Ignoring invalid line: '" ^ l)))
with Invalid_URI uri ->
- log := `T ("Ignoring invalid RDF URI: '" ^ l) :: !log)
+ logger (`T ("Ignoring invalid RDF URI: '" ^ l)))
(Pcre.split ~rex:index_sep_RE rdf_index); (* rdf_index lines *)
- log := `T "All done" :: !log)
+ logger (`T "All done")
| None -> ());
(match xsl_index with
| Some xsl_index ->
- (log := `T "Updating XSLT db ..." :: !log;
+ logger (`T "Updating XSLT db ...");
List.iter
(fun l -> (Lazy.force xsl_map) # replace l (server_url ^ "/" ^ l))
(Pcre.split ~rex:index_sep_RE xsl_index);
- log := `T "All done" :: !log)
+ logger (`T "All done")
| None -> ());
- debug_print "done with this server";
- !log
+ debug_print "done with this server"
-let update_from_all_servers () = (* use global maps *)
+let update_from_all_servers logger () = (* use global maps *)
clear_maps ();
- let log =
- List.fold_left
- update_from_server
- [] (* initial logmsg: empty *)
- (* reverse order: 1st server is the most important one *)
- (List.map snd (List.rev (Http_getter_env.servers ())))
- in
- sync_maps ();
- `Msg (`L (List.rev log))
+ List.iter
+ (update_from_server logger)
+ (* reverse order: 1st server is the most important one *)
+ (List.map snd (List.rev (Http_getter_env.servers ())));
+ sync_maps ()
-let update_from_one_server server_url =
- let log = update_from_server [] server_url in
- `Msg (`L (List.rev log))
+let update_from_one_server ?(logger = fun _ -> ()) server_url =
+ update_from_server logger server_url
let temp_file_of_uri uri =
let flat_string s s' c =
@@ -198,8 +194,8 @@ let getxslt_remote ~patch_dtd uri = not_implemented "getxslt_remote"
let getdtd_remote ~patch_dtd uri = not_implemented "getdtd_remote"
let clean_cache_remote () = not_implemented "clean_cache_remote"
let list_servers_remote () = not_implemented "list_servers_remote"
-let add_server_remote ~position name = not_implemented "add_server_remote"
-let remove_server_remote position = not_implemented "remove_server_remote"
+let add_server_remote ~logger ~position name = not_implemented "add_server_remote"
+let remove_server_remote ~logger position = not_implemented "remove_server_remote"
let getalluris_remote () = not_implemented "getalluris_remote"
let getallrdfuris_remote () = not_implemented "getallrdfuris_remote"
let ls_remote lsuri = not_implemented "ls_remote"
@@ -229,9 +225,9 @@ let register_remote ~uri ~url =
let register_remote ~uri ~url =
ClientHTTP.send (sprintf "%sregister?uri=%s&url=%s" (getter_url ()) uri url)
-let update_remote () =
+let update_remote logger () =
let answer = ClientHTTP.get (getter_url () ^ "update") in
- `Msg (`T answer)
+ logger (`T answer)
let getxml_remote ~format ~patch_dtd uri =
ClientHTTP.get_and_save_to_tmp
@@ -259,11 +255,11 @@ let register ~uri ~url =
else
(map_of_uri uri)#add uri url
-let update () =
+let update ?(logger = fun _ -> ()) () =
if remote () then
- update_remote ()
+ update_remote logger ()
else
- update_from_all_servers ()
+ update_from_all_servers logger ()
let getxml ?(format = Enc_normal) ?(patch_dtd = true) uri =
if remote () then
@@ -311,23 +307,25 @@ let list_servers () =
else
Http_getter_env.servers ()
-let add_server ?(position = 0) name =
+let add_server ?(logger = fun _ -> ()) ?(position = 0) name =
if remote () then
- add_server_remote ~position name
+ add_server_remote ~logger ~position name
else begin
if position = 0 then begin
Http_getter_env.add_server ~position:0 name;
- update_from_one_server name (* quick update (new server only) *)
+ update_from_one_server ~logger name (* quick update (new server only) *)
end else if position > 0 then begin
Http_getter_env.add_server ~position name;
- update ()
- end else (* already checked bt parse_position *)
+ update ~logger ()
+ end else (* already checked by parse_position *)
assert false
end
-let remove_server position =
+let has_server position = List.mem_assoc position (Http_getter_env.servers ())
+
+let remove_server ?(logger = fun _ -> ()) position =
if remote () then
- remove_server_remote ()
+ remove_server_remote ~logger ()
else begin
let server_name =
try
@@ -336,7 +334,7 @@ let remove_server position =
raise (Invalid_argument (sprintf "no server with position %d" position))
in
Http_getter_env.remove_server position;
- update ()
+ update ~logger ()
end
let return_uris map filter =