1
1
namespace Plotly.NET.ImageExport
2
2
3
+ open System.Threading
4
+ open System.Threading .Tasks
3
5
open Plotly.NET
4
6
open PuppeteerSharp
5
7
@@ -20,7 +22,7 @@ module PuppeteerSharpRendererOptions =
20
22
21
23
22
24
type PuppeteerSharpRenderer () =
23
-
25
+
24
26
/// adapted from the original C# implementation by @ilyalatt : https://github.com/ilyalatt/Plotly.NET.PuppeteerRenderer
25
27
///
26
28
/// creates a full screen html site for the given chart
@@ -61,7 +63,7 @@ type PuppeteerSharpRenderer() =
61
63
///
62
64
/// attempts to render a chart as static image of the given format with the given dimensions from the given html string
63
65
let tryRenderAsync ( browser : Browser ) ( width : int ) ( height : int ) ( format : StyleParam.ImageFormat ) ( html : string ) =
64
- async {
66
+ task {
65
67
let! page = browser.NewPageAsync() |> Async.AwaitTask
66
68
67
69
try
@@ -71,41 +73,33 @@ type PuppeteerSharpRenderer() =
71
73
return imgStr
72
74
73
75
finally
74
- page.CloseAsync() |> Async.AwaitTask |> Async.RunSynchronously
76
+ page.CloseAsync() |> AsyncHelper.taskSyncUnit
75
77
}
76
78
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
-
81
79
/// Initalizes headless browser
82
80
let fetchAndLaunchBrowserAsync () =
83
- async {
81
+ task {
84
82
match PuppeteerSharpRendererOptions.localBrowserExecutablePath with
85
83
| None ->
86
84
use browserFetcher = new BrowserFetcher()
87
85
88
- let! revision = browserFetcher.DownloadAsync() |> Async.AwaitTask
86
+ let! revision = browserFetcher.DownloadAsync()
89
87
90
88
let launchOptions =
91
89
PuppeteerSharpRendererOptions.launchOptions
92
90
93
91
launchOptions.ExecutablePath <- revision.ExecutablePath
94
92
95
- return ! Puppeteer.LaunchAsync( launchOptions) |> Async.AwaitTask
93
+ return ! Puppeteer.LaunchAsync( launchOptions)
96
94
| Some p ->
97
95
let launchOptions =
98
96
PuppeteerSharpRendererOptions.launchOptions
99
97
100
98
launchOptions.ExecutablePath <- p
101
99
102
- return ! Puppeteer.LaunchAsync( launchOptions) |> Async.AwaitTask
100
+ return ! Puppeteer.LaunchAsync( launchOptions)
103
101
}
104
102
105
- /// Initalizes headless browser
106
- let fetchAndLaunchBrowser () =
107
- fetchAndLaunchBrowserAsync () |> Async.RunSynchronously
108
-
109
103
/// skips the data type part of the given URI
110
104
let skipDataTypeString ( base64 : string ) =
111
105
let imgBase64StartIdx =
@@ -120,7 +114,7 @@ type PuppeteerSharpRenderer() =
120
114
interface IGenericChartRenderer with
121
115
122
116
member this.RenderJPGAsync ( width : int , height : int , gChart : GenericChart.GenericChart ) =
123
- async {
117
+ task {
124
118
use! browser = fetchAndLaunchBrowserAsync ()
125
119
126
120
return ! tryRenderAsync browser width height StyleParam.ImageFormat.JPEG ( gChart |> toFullScreenHtml)
@@ -129,10 +123,10 @@ type PuppeteerSharpRenderer() =
129
123
member this.RenderJPG ( width : int , height : int , gChart : GenericChart.GenericChart ) =
130
124
( this :> IGenericChartRenderer)
131
125
.RenderJPGAsync( width, height, gChart)
132
- |> Async.RunSynchronously
126
+ |> AsyncHelper.taskSync
133
127
134
128
member this.SaveJPGAsync ( path : string , width : int , height : int , gChart : GenericChart.GenericChart ) =
135
- async {
129
+ task {
136
130
let! rendered =
137
131
( this :> IGenericChartRenderer )
138
132
.RenderJPGAsync( width, height, gChart)
@@ -143,10 +137,10 @@ type PuppeteerSharpRenderer() =
143
137
member this.SaveJPG ( path : string , width : int , height : int , gChart : GenericChart.GenericChart ) =
144
138
( this :> IGenericChartRenderer)
145
139
.SaveJPGAsync( path, width, height, gChart)
146
- |> Async.RunSynchronously
140
+ |> AsyncHelper.taskSync
147
141
148
142
member this.RenderPNGAsync ( width : int , height : int , gChart : GenericChart.GenericChart ) =
149
- async {
143
+ task {
150
144
use! browser = fetchAndLaunchBrowserAsync ()
151
145
152
146
return ! tryRenderAsync browser width height StyleParam.ImageFormat.PNG ( gChart |> toFullScreenHtml)
@@ -155,10 +149,10 @@ type PuppeteerSharpRenderer() =
155
149
member this.RenderPNG ( width : int , height : int , gChart : GenericChart.GenericChart ) =
156
150
( this :> IGenericChartRenderer)
157
151
.RenderPNGAsync( width, height, gChart)
158
- |> Async.RunSynchronously
152
+ |> AsyncHelper.taskSync
159
153
160
154
member this.SavePNGAsync ( path : string , width : int , height : int , gChart : GenericChart.GenericChart ) =
161
- async {
155
+ task {
162
156
let! rendered =
163
157
( this :> IGenericChartRenderer )
164
158
.RenderPNGAsync( width, height, gChart)
@@ -169,10 +163,10 @@ type PuppeteerSharpRenderer() =
169
163
member this.SavePNG ( path : string , width : int , height : int , gChart : GenericChart.GenericChart ) =
170
164
( this :> IGenericChartRenderer)
171
165
.SavePNGAsync( path, width, height, gChart)
172
- |> Async.RunSynchronously
166
+ |> AsyncHelper.taskSync
173
167
174
168
member this.RenderSVGAsync ( width : int , height : int , gChart : GenericChart.GenericChart ) =
175
- async {
169
+ task {
176
170
use! browser = fetchAndLaunchBrowserAsync ()
177
171
178
172
let! renderedString =
@@ -184,10 +178,10 @@ type PuppeteerSharpRenderer() =
184
178
member this.RenderSVG ( width : int , height : int , gChart : GenericChart.GenericChart ) =
185
179
( this :> IGenericChartRenderer)
186
180
.RenderSVGAsync( width, height, gChart)
187
- |> Async.RunSynchronously
181
+ |> AsyncHelper.taskSync
188
182
189
183
member this.SaveSVGAsync ( path : string , width : int , height : int , gChart : GenericChart.GenericChart ) =
190
- async {
184
+ task {
191
185
let! rendered =
192
186
( this :> IGenericChartRenderer )
193
187
.RenderSVGAsync( width, height, gChart)
@@ -198,4 +192,4 @@ type PuppeteerSharpRenderer() =
198
192
member this.SaveSVG ( path : string , width : int , height : int , gChart : GenericChart.GenericChart ) =
199
193
( this :> IGenericChartRenderer)
200
194
.SaveSVGAsync( path, width, height, gChart)
201
- |> Async.RunSynchronously
195
+ |> AsyncHelper.taskSync
0 commit comments