11namespace Plotly.NET.ImageExport
22
3+ open System.Threading
4+ open System.Threading .Tasks
35open Plotly.NET
46open PuppeteerSharp
57
@@ -20,7 +22,7 @@ module PuppeteerSharpRendererOptions =
2022
2123
2224type PuppeteerSharpRenderer () =
23-
25+
2426 /// adapted from the original C# implementation by @ilyalatt : https://github.com/ilyalatt/Plotly.NET.PuppeteerRenderer
2527 ///
2628 /// creates a full screen html site for the given chart
@@ -61,7 +63,7 @@ type PuppeteerSharpRenderer() =
6163 ///
6264 /// attempts to render a chart as static image of the given format with the given dimensions from the given html string
6365 let tryRenderAsync ( browser : Browser ) ( width : int ) ( height : int ) ( format : StyleParam.ImageFormat ) ( html : string ) =
64- async {
66+ task {
6567 let! page = browser.NewPageAsync() |> Async.AwaitTask
6668
6769 try
@@ -71,41 +73,33 @@ type PuppeteerSharpRenderer() =
7173 return imgStr
7274
7375 finally
74- page.CloseAsync() |> Async.AwaitTask |> Async.RunSynchronously
76+ page.CloseAsync() |> AsyncHelper.taskSyncUnit
7577 }
7678
77- /// attempts to render a chart as static image of the given format with the given dimensions from the given html string
78- let tryRender ( browser : Browser ) ( width : int ) ( height : int ) ( format : StyleParam.ImageFormat ) ( html : string ) =
79- tryRenderAsync browser width height format html |> Async.RunSynchronously
80-
8179 /// Initalizes headless browser
8280 let fetchAndLaunchBrowserAsync () =
83- async {
81+ task {
8482 match PuppeteerSharpRendererOptions.localBrowserExecutablePath with
8583 | None ->
8684 use browserFetcher = new BrowserFetcher()
8785
88- let! revision = browserFetcher.DownloadAsync() |> Async.AwaitTask
86+ let! revision = browserFetcher.DownloadAsync()
8987
9088 let launchOptions =
9189 PuppeteerSharpRendererOptions.launchOptions
9290
9391 launchOptions.ExecutablePath <- revision.ExecutablePath
9492
95- return ! Puppeteer.LaunchAsync( launchOptions) |> Async.AwaitTask
93+ return ! Puppeteer.LaunchAsync( launchOptions)
9694 | Some p ->
9795 let launchOptions =
9896 PuppeteerSharpRendererOptions.launchOptions
9997
10098 launchOptions.ExecutablePath <- p
10199
102- return ! Puppeteer.LaunchAsync( launchOptions) |> Async.AwaitTask
100+ return ! Puppeteer.LaunchAsync( launchOptions)
103101 }
104102
105- /// Initalizes headless browser
106- let fetchAndLaunchBrowser () =
107- fetchAndLaunchBrowserAsync () |> Async.RunSynchronously
108-
109103 /// skips the data type part of the given URI
110104 let skipDataTypeString ( base64 : string ) =
111105 let imgBase64StartIdx =
@@ -120,7 +114,7 @@ type PuppeteerSharpRenderer() =
120114 interface IGenericChartRenderer with
121115
122116 member this.RenderJPGAsync ( width : int , height : int , gChart : GenericChart.GenericChart ) =
123- async {
117+ task {
124118 use! browser = fetchAndLaunchBrowserAsync ()
125119
126120 return ! tryRenderAsync browser width height StyleParam.ImageFormat.JPEG ( gChart |> toFullScreenHtml)
@@ -129,10 +123,10 @@ type PuppeteerSharpRenderer() =
129123 member this.RenderJPG ( width : int , height : int , gChart : GenericChart.GenericChart ) =
130124 ( this :> IGenericChartRenderer)
131125 .RenderJPGAsync( width, height, gChart)
132- |> Async.RunSynchronously
126+ |> AsyncHelper.taskSync
133127
134128 member this.SaveJPGAsync ( path : string , width : int , height : int , gChart : GenericChart.GenericChart ) =
135- async {
129+ task {
136130 let! rendered =
137131 ( this :> IGenericChartRenderer )
138132 .RenderJPGAsync( width, height, gChart)
@@ -143,10 +137,10 @@ type PuppeteerSharpRenderer() =
143137 member this.SaveJPG ( path : string , width : int , height : int , gChart : GenericChart.GenericChart ) =
144138 ( this :> IGenericChartRenderer)
145139 .SaveJPGAsync( path, width, height, gChart)
146- |> Async.RunSynchronously
140+ |> AsyncHelper.taskSync
147141
148142 member this.RenderPNGAsync ( width : int , height : int , gChart : GenericChart.GenericChart ) =
149- async {
143+ task {
150144 use! browser = fetchAndLaunchBrowserAsync ()
151145
152146 return ! tryRenderAsync browser width height StyleParam.ImageFormat.PNG ( gChart |> toFullScreenHtml)
@@ -155,10 +149,10 @@ type PuppeteerSharpRenderer() =
155149 member this.RenderPNG ( width : int , height : int , gChart : GenericChart.GenericChart ) =
156150 ( this :> IGenericChartRenderer)
157151 .RenderPNGAsync( width, height, gChart)
158- |> Async.RunSynchronously
152+ |> AsyncHelper.taskSync
159153
160154 member this.SavePNGAsync ( path : string , width : int , height : int , gChart : GenericChart.GenericChart ) =
161- async {
155+ task {
162156 let! rendered =
163157 ( this :> IGenericChartRenderer )
164158 .RenderPNGAsync( width, height, gChart)
@@ -169,10 +163,10 @@ type PuppeteerSharpRenderer() =
169163 member this.SavePNG ( path : string , width : int , height : int , gChart : GenericChart.GenericChart ) =
170164 ( this :> IGenericChartRenderer)
171165 .SavePNGAsync( path, width, height, gChart)
172- |> Async.RunSynchronously
166+ |> AsyncHelper.taskSync
173167
174168 member this.RenderSVGAsync ( width : int , height : int , gChart : GenericChart.GenericChart ) =
175- async {
169+ task {
176170 use! browser = fetchAndLaunchBrowserAsync ()
177171
178172 let! renderedString =
@@ -184,10 +178,10 @@ type PuppeteerSharpRenderer() =
184178 member this.RenderSVG ( width : int , height : int , gChart : GenericChart.GenericChart ) =
185179 ( this :> IGenericChartRenderer)
186180 .RenderSVGAsync( width, height, gChart)
187- |> Async.RunSynchronously
181+ |> AsyncHelper.taskSync
188182
189183 member this.SaveSVGAsync ( path : string , width : int , height : int , gChart : GenericChart.GenericChart ) =
190- async {
184+ task {
191185 let! rendered =
192186 ( this :> IGenericChartRenderer )
193187 .RenderSVGAsync( width, height, gChart)
@@ -198,4 +192,4 @@ type PuppeteerSharpRenderer() =
198192 member this.SaveSVG ( path : string , width : int , height : int , gChart : GenericChart.GenericChart ) =
199193 ( this :> IGenericChartRenderer)
200194 .SaveSVGAsync( path, width, height, gChart)
201- |> Async.RunSynchronously
195+ |> AsyncHelper.taskSync
0 commit comments