···193193 handle_api_error @@ fun () ->
194194 Eio_main.run @@ fun env ->
195195 Eio.Switch.run @@ fun sw ->
196196- let session = Requests.create ~sw env in
197197- let client = Peertube.Client.create ~session ~base_url in
196196+ let client = Peertube.Client.create ~sw env ~base_url in
198197 if all then begin
199198 let videos =
200199 Peertube.Client.fetch_all_channel_videos client ?max_pages
···226225 handle_api_error @@ fun () ->
227226 Eio_main.run @@ fun env ->
228227 Eio.Switch.run @@ fun sw ->
229229- let session = Requests.create ~sw env in
230230- let client = Peertube.Client.create ~session ~base_url in
228228+ let client = Peertube.Client.create ~sw env ~base_url in
231229 let response = Peertube.Client.list_videos client ~count ~start () in
232230 Fmt.pr "Showing %d of %d videos (offset %d)@.@."
233231 (List.length (Peertube.Paginated.data response))
···247245 handle_api_error @@ fun () ->
248246 Eio_main.run @@ fun env ->
249247 Eio.Switch.run @@ fun sw ->
250250- let session = Requests.create ~sw env in
251251- let client = Peertube.Client.create ~session ~base_url in
248248+ let client = Peertube.Client.create ~sw env ~base_url in
252249 let response = Peertube.Client.search_videos client ~query ~count ~start () in
253250 Fmt.pr "Found %d results for '%s' (showing %d, offset %d)@.@."
254251 (Peertube.Paginated.total response)
···269266 handle_api_error @@ fun () ->
270267 Eio_main.run @@ fun env ->
271268 Eio.Switch.run @@ fun sw ->
272272- let session = Requests.create ~sw env in
273273- let client = Peertube.Client.create ~session ~base_url in
269269+ let client = Peertube.Client.create ~sw env ~base_url in
274270 let video = Peertube.Client.fetch_video_details client ~uuid () in
275271 print_video ~json video
276272···285281 handle_api_error @@ fun () ->
286282 Eio_main.run @@ fun env ->
287283 Eio.Switch.run @@ fun sw ->
288288- let session = Requests.create ~sw env in
289289- let client = Peertube.Client.create ~session ~base_url in
284284+ let client = Peertube.Client.create ~sw env ~base_url in
290285 let video = Peertube.Client.fetch_video_details client ~uuid () in
291286 match
292287 Peertube.Client.download_thumbnail client ~video ~output_path:output ()
···310305 handle_api_error @@ fun () ->
311306 Eio_main.run @@ fun env ->
312307 Eio.Switch.run @@ fun sw ->
313313- let session = Requests.create ~sw env in
314314- let client = Peertube.Client.create ~session ~base_url in
308308+ let client = Peertube.Client.create ~sw env ~base_url in
315309 let response = Peertube.Client.list_channels client ~count ~start () in
316310 Fmt.pr "Showing %d of %d channels (offset %d)@.@."
317311 (List.length (Peertube.Paginated.data response))
···331325 handle_api_error @@ fun () ->
332326 Eio_main.run @@ fun env ->
333327 Eio.Switch.run @@ fun sw ->
334334- let session = Requests.create ~sw env in
335335- let client = Peertube.Client.create ~session ~base_url in
328328+ let client = Peertube.Client.create ~sw env ~base_url in
336329 let response =
337330 Peertube.Client.search_channels client ~query ~count ~start ()
338331 in
···355348 handle_api_error @@ fun () ->
356349 Eio_main.run @@ fun env ->
357350 Eio.Switch.run @@ fun sw ->
358358- let session = Requests.create ~sw env in
359359- let client = Peertube.Client.create ~session ~base_url in
351351+ let client = Peertube.Client.create ~sw env ~base_url in
360352 let channel = Peertube.Client.get_channel client ~handle () in
361353 print_channel ~json channel
362354···378370 handle_api_error @@ fun () ->
379371 Eio_main.run @@ fun env ->
380372 Eio.Switch.run @@ fun sw ->
381381- let session = Requests.create ~sw env in
382382- let client = Peertube.Client.create ~session ~base_url in
373373+ let client = Peertube.Client.create ~sw env ~base_url in
383374 let response = Peertube.Client.list_accounts client ~count ~start () in
384375 Fmt.pr "Showing %d of %d accounts (offset %d)@.@."
385376 (List.length (Peertube.Paginated.data response))
···399390 handle_api_error @@ fun () ->
400391 Eio_main.run @@ fun env ->
401392 Eio.Switch.run @@ fun sw ->
402402- let session = Requests.create ~sw env in
403403- let client = Peertube.Client.create ~session ~base_url in
393393+ let client = Peertube.Client.create ~sw env ~base_url in
404394 let account = Peertube.Client.get_account client ~handle () in
405395 print_account ~json account
406396···415405 handle_api_error @@ fun () ->
416406 Eio_main.run @@ fun env ->
417407 Eio.Switch.run @@ fun sw ->
418418- let session = Requests.create ~sw env in
419419- let client = Peertube.Client.create ~session ~base_url in
408408+ let client = Peertube.Client.create ~sw env ~base_url in
420409 let response =
421410 Peertube.Client.get_account_videos client ~count ~start ~handle ()
422411 in
···445434 handle_api_error @@ fun () ->
446435 Eio_main.run @@ fun env ->
447436 Eio.Switch.run @@ fun sw ->
448448- let session = Requests.create ~sw env in
449449- let client = Peertube.Client.create ~session ~base_url in
437437+ let client = Peertube.Client.create ~sw env ~base_url in
450438 let response = Peertube.Client.list_playlists client ~count ~start () in
451439 Fmt.pr "Showing %d of %d playlists (offset %d)@.@."
452440 (List.length (Peertube.Paginated.data response))
···466454 handle_api_error @@ fun () ->
467455 Eio_main.run @@ fun env ->
468456 Eio.Switch.run @@ fun sw ->
469469- let session = Requests.create ~sw env in
470470- let client = Peertube.Client.create ~session ~base_url in
457457+ let client = Peertube.Client.create ~sw env ~base_url in
471458 let response =
472459 Peertube.Client.search_playlists client ~query ~count ~start ()
473460 in
···490477 handle_api_error @@ fun () ->
491478 Eio_main.run @@ fun env ->
492479 Eio.Switch.run @@ fun sw ->
493493- let session = Requests.create ~sw env in
494494- let client = Peertube.Client.create ~session ~base_url in
480480+ let client = Peertube.Client.create ~sw env ~base_url in
495481 let playlist = Peertube.Client.get_playlist client ~id () in
496482 print_playlist ~json playlist
497483···506492 handle_api_error @@ fun () ->
507493 Eio_main.run @@ fun env ->
508494 Eio.Switch.run @@ fun sw ->
509509- let session = Requests.create ~sw env in
510510- let client = Peertube.Client.create ~session ~base_url in
495495+ let client = Peertube.Client.create ~sw env ~base_url in
511496 let response =
512497 Peertube.Client.get_playlist_videos client ~count ~start ~id ()
513498 in
···549534 handle_api_error @@ fun () ->
550535 Eio_main.run @@ fun env ->
551536 Eio.Switch.run @@ fun sw ->
552552- let session = Requests.create ~sw env in
553553- let client = Peertube.Client.create ~session ~base_url in
537537+ let client = Peertube.Client.create ~sw env ~base_url in
554538 let config = Peertube.Client.get_config client () in
555539 if json then print_json Peertube.Server_config.jsont config
556540 else begin
···578562 handle_api_error @@ fun () ->
579563 Eio_main.run @@ fun env ->
580564 Eio.Switch.run @@ fun sw ->
581581- let session = Requests.create ~sw env in
582582- let client = Peertube.Client.create ~session ~base_url in
565565+ let client = Peertube.Client.create ~sw env ~base_url in
583566 let stats = Peertube.Client.get_stats client () in
584567 if json then print_json Peertube.Server_stats.jsont stats
585568 else begin
+18-6
ocaml-peertube/lib/peertube.mli
···1414 let () =
1515 Eio_main.run @@ fun env ->
1616 Eio.Switch.run @@ fun sw ->
1717- let session = Requests.create ~sw env in
1818- let client = Client.create ~session ~base_url:"https://framatube.org" in
1717+ let client = Client.create ~sw env ~base_url:"https://framatube.org" in
19182019 (* List recent videos *)
2120 let videos = Client.list_videos client () in
···815814 Functions raise {!Client.Api_error} on HTTP errors.
816815817816 {[
818818- let client = Client.create ~session ~base_url:"https://framatube.org" in
817817+ let client = Client.create ~sw env ~base_url:"https://framatube.org" in
819818 let videos = Client.list_videos client () in
820819 ...
821820 ]} *)
···828827 Encapsulates the HTTP client and base URL for making API requests. In
829828 future, this may also contain authentication credentials. *)
830829831831- val create : session:Requests.t -> base_url:string -> t
832832- (** [create ~session ~base_url] creates a new PeerTube API session.
830830+ val create :
831831+ ?session:Requests.t ->
832832+ sw:Eio.Switch.t ->
833833+ < clock : _ Eio.Time.clock
834834+ ; net : _ Eio.Net.t
835835+ ; fs : Eio.Fs.dir_ty Eio.Path.t
836836+ ; .. > ->
837837+ base_url:string ->
838838+ t
839839+ (** [create ?session ~sw env ~base_url] creates a new PeerTube API session.
833840834834- @param session HTTP client session from the Requests library
841841+ If [session] is not provided, a new HTTP session is created using the
842842+ given switch and environment. If [session] is provided, it is reused.
843843+844844+ @param session Optional existing HTTP client session to reuse
845845+ @param sw Eio switch for resource management
846846+ @param env Eio environment with clock, net, and fs capabilities
835847 @param base_url
836848 Base URL of the PeerTube instance (e.g., "https://framatube.org") *)
837849
+6-1
ocaml-peertube/lib/peertube_client.ml
···33type t = { session : Requests.t; base_url : string }
44(** Session type encapsulating HTTP client and base URL. *)
5566-let create ~session ~base_url = { session; base_url }
66+let create ?session ~sw env ~base_url =
77+ let session = match session with
88+ | Some s -> s
99+ | None -> Requests.create ~sw env
1010+ in
1111+ { session; base_url }
712let base_url t = t.base_url
813let http_session t = t.session
914let log_src = Logs.Src.create "peertube" ~doc:"PeerTube API client"
+16-3
ocaml-peertube/lib/peertube_client.mli
···1111 Encapsulates the HTTP client and base URL for making API requests. In
1212 future, this may also contain authentication credentials. *)
13131414-val create : session:Requests.t -> base_url:string -> t
1515-(** [create ~session ~base_url] creates a new PeerTube API session.
1414+val create :
1515+ ?session:Requests.t ->
1616+ sw:Eio.Switch.t ->
1717+ < clock : _ Eio.Time.clock
1818+ ; net : _ Eio.Net.t
1919+ ; fs : Eio.Fs.dir_ty Eio.Path.t
2020+ ; .. > ->
2121+ base_url:string ->
2222+ t
2323+(** [create ?session ~sw env ~base_url] creates a new PeerTube API session.
2424+2525+ If [session] is not provided, a new HTTP session is created using the
2626+ given switch and environment. If [session] is provided, it is reused.
16271717- @param session HTTP client session from the Requests library
2828+ @param session Optional existing HTTP client session to reuse
2929+ @param sw Eio switch for resource management
3030+ @param env Eio environment with clock, net, and fs capabilities
1831 @param base_url
1932 Base URL of the PeerTube instance (e.g., "https://framatube.org") *)
2033
+17-20
ocaml-requests/lib/signature.ml
···409409(* Context *)
410410(* ========================================================================= *)
411411412412-module Context = struct
413413- (** Request context for signature computation. *)
414414- type request_ctx = {
415415- method_ : Method.t; (** The HTTP method *)
416416- uri : Uri.t; (** The request URI *)
417417- headers : Headers.t; (** The request headers *)
418418- }
412412+type request_ctx = {
413413+ method_ : Method.t;
414414+ uri : Uri.t;
415415+ headers : Headers.t;
416416+}
419417420420- (** Response context for signature computation. *)
421421- type response_ctx = {
422422- status : int; (** The HTTP status code *)
423423- headers : Headers.t; (** The response headers *)
424424- request : request_ctx option; (** The original request, if available *)
425425- }
418418+type response_ctx = {
419419+ status : int;
420420+ headers : Headers.t;
421421+ request : request_ctx option;
422422+}
426423427427- (** Message context (request or response). *)
424424+module Context = struct
428425 type t = [
429429- | `Request of request_ctx (** A request context *)
430430- | `Response of response_ctx (** A response context *)
426426+ | `Request of request_ctx
427427+ | `Response of response_ctx
431428 ]
432429433430 let request ~method_ ~uri ~headers : t =
···517514518515let resolve_component (ctx : Context.t) (component : Component.t) =
519516 let get_headers : Context.t -> Headers.t = function
520520- | `Request r -> r.Context.headers
521521- | `Response r -> r.Context.headers
517517+ | `Request r -> r.headers
518518+ | `Response r -> r.headers
522519 in
523520 let get_request_headers : Context.t -> Headers.t option = function
524524- | `Request r -> Some r.Context.headers
525525- | `Response (r : Context.response_ctx) -> Option.map (fun (req : Context.request_ctx) -> req.headers) r.request
521521+ | `Request r -> Some r.headers
522522+ | `Response (r : response_ctx) -> Option.map (fun (req : request_ctx) -> req.headers) r.request
526523 in
527524 match component with
528525 | `Derived (d, params) ->
+16-15
ocaml-requests/lib/signature.mli
···273273274274(** {1 Signing Context} *)
275275276276-module Context : sig
277277- (** Context for resolving message components. *)
276276+type request_ctx = {
277277+ method_ : Method.t;
278278+ uri : Uri.t;
279279+ headers : Headers.t;
280280+}
281281+(** Request context for signature computation.
282282+ Contains the HTTP method, request URI, and request headers. *)
278283279279- type request_ctx = {
280280- method_ : Method.t; (** The HTTP method *)
281281- uri : Uri.t; (** The request URI *)
282282- headers : Headers.t; (** The request headers *)
283283- }
284284- (** Request context for signature computation. *)
284284+type response_ctx = {
285285+ status : int;
286286+ headers : Headers.t;
287287+ request : request_ctx option;
288288+}
289289+(** Response context for signature computation.
290290+ Contains the HTTP status code, response headers, and optionally the original request. *)
285291286286- type response_ctx = {
287287- status : int; (** The HTTP status code *)
288288- headers : Headers.t; (** The response headers *)
289289- request : request_ctx option; (** The original request, if available *)
290290- }
291291- (** Response context for signature computation. *)
292292-292292+(** Context for resolving message components. *)
293293+module Context : sig
293294 type t = [
294295 | `Request of request_ctx
295296 | `Response of response_ctx
+1-1
ocaml-zulip/lib/zulip/channel.mli
···121121 (** Email notification setting. *)
122122123123 val wildcard_mentions_notify : t -> bool option
124124- (** Whether to notify on @all/@everyone mentions. *)
124124+ (** Whether to notify on \@all/\@everyone mentions. *)
125125126126 val jsont : t Jsont.t
127127 (** Jsont codec for subscription. *)
+2-2
ocaml-zulip/lib/zulip/message_flag.mli
···18181919type t =
2020 [ modifiable
2121- | `Mentioned (** User was @-mentioned in the message *)
2222- | `Wildcard_mentioned (** User was mentioned via @all/@everyone *)
2121+ | `Mentioned (** User was \@-mentioned in the message *)
2222+ | `Wildcard_mentioned (** User was mentioned via \@all/\@everyone *)
2323 | `Has_alert_word (** Message contains one of user's alert words *)
2424 | `Historical (** Message predates user joining the stream *) ]
2525(** All possible message flags. *)