Changeset 43 in code for trunk/cli/conversion.ml


Ignore:
Timestamp:
Dec 18, 2022, 2:49:25 PM (2 years ago)
Author:
fox
Message:

Relation dates, with conversion condition upon it

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/cli/conversion.ml

    r41 r43  
    11open Logarion
    22
    3 module Ref_set = Set.Make(String)
     3module Rel = struct
     4
     5module Rel_set = Set.Make(String)
    46module Id_map = Map.Make(String)
     7
     8type t = { last_rel: string; ref_set: String_set.t; rep_set: String_set.t }
     9type map_t = t Id_map.t
     10
     11let empty = { last_rel = ""; ref_set = Rel_set.empty; rep_set = Rel_set.empty }
     12let empty_map = Id_map.empty
     13
     14let acc_ref date source target = Id_map.update target (function
     15        | None -> Some { last_rel = date;
     16                ref_set = Rel_set.singleton source;
     17                rep_set = Rel_set.empty }
     18        | Some rel -> Some { rel with
     19                last_rel = if Date.compare date rel.last_rel > 0 then date else rel.last_rel;
     20                ref_set = Rel_set.add source rel.ref_set })
     21
     22let acc_rep date source target = Id_map.update target (function
     23        | None -> Some { last_rel = date;
     24                rep_set = Rel_set.singleton source;
     25                ref_set = Rel_set.empty }
     26        | Some rel -> Some { rel with
     27                last_rel = if Date.compare date rel.last_rel > 0 then date else rel.last_rel;
     28                rep_set = Rel_set.add source rel.rep_set })
     29
     30let acc_txt rels (text, _paths) =
     31        let acc_ref = acc_ref (Date.listing text.Text.date) text.Text.id in
     32        let acc_rep = acc_rep (Date.listing text.Text.date) text.Text.id in
     33        let rels = String_set.fold acc_ref (Text.set "references" text) rels in
     34        let rels = String_set.fold acc_rep (Text.set "in-reply-to" text) rels in
     35        rels
     36
     37let acc_pck rels peer =
     38        let path = try List.hd peer.Peers.pack.Header_pack.info.locations with Failure _->"" in
     39        try Header_pack.fold
     40                (fun rels id t _title _authors _topics refs_ls reps_ls ->
     41                        let acc_ref = acc_ref (Date.of_secs @@ Int32.to_int t) (Filename.concat path id) in
     42                        let acc_rep = acc_rep (Date.of_secs @@ Int32.to_int t) (Filename.concat path id) in
     43                        let rels = String_set.fold acc_ref (String_set.of_list refs_ls) rels in
     44                        let rels = String_set.fold acc_rep (String_set.of_list reps_ls) rels in
     45                        rels)
     46                rels peer.Peers.pack
     47        with e -> prerr_endline "acc_pck"; raise e
     48end
     49
    550
    651type t = {
     
    1055        topic_roots: string list;
    1156        topics: (String_set.t * String_set.t) Topic_set.Map.t;
    12         references: Ref_set.t Id_map.t;
    13         replies: Ref_set.t Id_map.t;
     57        relations: Rel.map_t;
    1458        texts: Text.t list
    1559}
     
    2670        topic_roots = [];
    2771        topics = Topic_set.Map.empty;
    28         references = Id_map.empty;
    29         replies = Id_map.empty;
     72        relations = Rel.Id_map.empty;
    3073        texts = []
    3174}
Note: See TracChangeset for help on using the changeset viewer.