add bcc api to outbox
This commit is contained in:
parent
b3ea5e5e10
commit
7fb44540d9
|
@ -3,12 +3,36 @@ open! Import
|
||||||
type t = {
|
type t = {
|
||||||
stream : Irc.Msg.t Lwt_stream.t;
|
stream : Irc.Msg.t Lwt_stream.t;
|
||||||
push : Irc.Msg.t option -> unit;
|
push : Irc.Msg.t option -> unit;
|
||||||
|
mutable bcc : t Dllist.node option;
|
||||||
}
|
}
|
||||||
|
|
||||||
let make () =
|
let make () =
|
||||||
let stream, push = Lwt_stream.create () in
|
let stream, push = Lwt_stream.create () in
|
||||||
{ stream; push }
|
{ stream; push; bcc = None }
|
||||||
|
|
||||||
let stream t = t.stream
|
let stream t = t.stream
|
||||||
let send t msg = try t.push (Some msg) with Lwt_stream.Closed -> ()
|
let send t msg = try t.push (Some msg) with Lwt_stream.Closed -> ()
|
||||||
let close t = try t.push None with Lwt_stream.Closed -> ()
|
let close t = try t.push None with Lwt_stream.Closed -> ()
|
||||||
|
|
||||||
|
type bcc = { recipients : t Dllist.t }
|
||||||
|
|
||||||
|
let make_bcc () = {
|
||||||
|
recipients = Dllist.create ();
|
||||||
|
}
|
||||||
|
|
||||||
|
let excl obx =
|
||||||
|
Option.iter Dllist.remove obx.bcc;
|
||||||
|
obx.bcc <- None
|
||||||
|
|
||||||
|
let incl bcc obx =
|
||||||
|
Option.iter Dllist.remove obx.bcc;
|
||||||
|
obx.bcc <- Some (Dllist.add_r obx bcc.recipients)
|
||||||
|
|
||||||
|
let rec send_all bcc msg =
|
||||||
|
match Dllist.take_l bcc.recipients with
|
||||||
|
| obx ->
|
||||||
|
obx.bcc <- None;
|
||||||
|
send obx msg;
|
||||||
|
send_all bcc msg
|
||||||
|
| exception Dllist.Empty ->
|
||||||
|
()
|
||||||
|
|
Loading…
Reference in New Issue