···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
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
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
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