print msg when png and layout in progress

This commit is contained in:
Alexander Wang 2023-03-18 01:04:06 -07:00
parent 9e65f72952
commit 579bbace03
No known key found for this signature in database
GPG key ID: D89FA31966BDBECE
4 changed files with 44 additions and 0 deletions

View file

@ -6,6 +6,7 @@
- `--browser` flag on CLI controls `BROWSER` environment variable for not opening browser in watch mode. [#1052](https://github.com/terrastruct/d2/pull/1052)
- `elk` layout containers no longer overlap the label with children. [#1055](https://github.com/terrastruct/d2/pull/1055)
- Message emitted by CLI when a particular stage is taking a long time. [#1058](https://github.com/terrastruct/d2/pull/1058)
- `<title>` attribute of HTML in watch mode is the base file name, instead of the whole path. [#1054](https://github.com/terrastruct/d2/pull/1054)
#### Bugfixes ⛑️

View file

@ -27,6 +27,7 @@ import (
"oss.terrastruct.com/d2/d2target"
"oss.terrastruct.com/d2/d2themes"
"oss.terrastruct.com/d2/d2themes/d2themescatalog"
"oss.terrastruct.com/d2/lib/background"
"oss.terrastruct.com/d2/lib/imgbundler"
ctxlog "oss.terrastruct.com/d2/lib/log"
"oss.terrastruct.com/d2/lib/pdf"
@ -289,10 +290,17 @@ func compile(ctx context.Context, ms *xmain.State, plugin d2plugin.Plugin, sketc
if sketch {
opts.FontFamily = go2.Pointer(d2fonts.HandDrawn)
}
cancel := background.Repeat(func() {
ms.Log.Info.Printf("compiling & running layout algorithms...")
}, time.Second*5)
defer cancel()
diagram, g, err := d2lib.Compile(ctx, string(input), opts)
if err != nil {
return nil, false, err
}
cancel()
pluginInfo, err := plugin.Info(ctx)
if err != nil {

View file

@ -0,0 +1,28 @@
package background
import "time"
func Repeat(do func(), interval time.Duration) (cancel func()) {
t := time.NewTicker(interval)
done := make(chan struct{})
go func() {
defer t.Stop()
for {
select {
case <-t.C:
do()
case <-done:
return
}
}
}()
stopped := false
return func() {
if !stopped {
stopped = true
close(done)
}
}
}

View file

@ -5,6 +5,7 @@ import (
"encoding/base64"
"fmt"
"strings"
"time"
_ "embed"
@ -13,6 +14,7 @@ import (
pngstruct "github.com/dsoprea/go-png-image-structure/v2"
"github.com/playwright-community/playwright-go"
"oss.terrastruct.com/d2/lib/background"
"oss.terrastruct.com/d2/lib/version"
"oss.terrastruct.com/util-go/xmain"
)
@ -82,6 +84,11 @@ var genPNGScript string
const pngPrefix = "data:image/png;base64,"
func ConvertSVG(ms *xmain.State, page playwright.Page, svg []byte) ([]byte, error) {
cancel := background.Repeat(func() {
ms.Log.Info.Printf("converting to PNG...")
}, time.Second*5)
defer cancel()
encodedSVG := base64.StdEncoding.EncodeToString(svg)
pngInterface, err := page.Evaluate(genPNGScript, "data:image/svg+xml;charset=utf-8;base64,"+encodedSVG)
if err != nil {