Compare commits

...

4 Commits

Author SHA1 Message Date
f05c4bbcc7 Update wasm
All checks were successful
continuous-integration/drone/push Build is passing
2022-01-20 20:32:57 +01:00
d2ac081d5e Update pipeline 2022-01-20 20:32:40 +01:00
39af776d00 ci test 2
Some checks failed
continuous-integration/drone Build is failing
2022-01-20 17:10:11 +01:00
15130938ce ci test 1
Some checks reported errors
continuous-integration/drone/push Build was killed
2022-01-20 16:58:49 +01:00
2 changed files with 102 additions and 7 deletions

39
.drone.yml Normal file
View File

@@ -0,0 +1,39 @@
---
kind: pipeline
type: kubernetes
name: build-linux-amd64
steps:
- name: build
image: golang:1.17
environment:
GOOS: linux
GOARCH: amd64
commands:
- "go build -o covergen_$GOOS-$GOARCH ./cmd/covergen"
---
kind: pipeline
type: kubernetes
name: build-darwin-amd64
steps:
- name: build
image: golang:1.17
environment:
GOOS: darwin
GOARCH: amd64
commands:
- "go build -o covergen_$GOOS-$GOARCH ./cmd/covergen"
---
kind: pipeline
type: kubernetes
name: build-wasm
steps:
- name: build
image: golang:1.17
environment:
GOOS: js
GOARCH: wasm
commands:
- make wasm

View File

@@ -6,6 +6,7 @@ import (
"fmt"
"syscall/js"
"github.com/go-pdf/fpdf"
"github.com/thegrumpylion/jsref"
"covergen/pkg/covergen"
@@ -70,6 +71,18 @@ func settingsFromValue(arg js.Value) (*covergen.CoverSettings, error) {
}, nil
}
func pdfToJs(pdf *fpdf.Fpdf) (js.Value, error) {
var buf bytes.Buffer
if err := pdf.Output(&buf); err != nil {
return js.Null(), fmt.Errorf("failed to write pdf: %w", err)
}
s := buf.Bytes()
ta := js.Global().Get("Uint8Array").New(len(s))
js.CopyBytesToJS(ta, s)
return ta, nil
}
func generateCover(this js.Value, args []js.Value) interface{} {
defer func() {
if r := recover(); r != nil {
@@ -96,18 +109,61 @@ func generateCover(this js.Value, args []js.Value) interface{} {
return jsmap{"error": err.Error()}
}
var buf bytes.Buffer
if err = pdf.Output(&buf); err != nil {
jsBytes, err := pdfToJs(pdf)
if err != nil {
return jsmap{"error": err.Error()}
}
return jsBytes
}
func generateSplitCover(this js.Value, args []js.Value) interface{} {
defer func() {
if r := recover(); r != nil {
fmt.Println("recovered", r)
}
}()
if len(args) != 1 {
return jsmap{"error": "missing argument"}
}
arg := args[0]
if arg.Type() != js.TypeObject {
return jsmap{"error": "expected object"}
}
settings, err := settingsFromValue(arg)
if err != nil {
return jsmap{"error": err.Error()}
}
s := buf.Bytes()
ta := js.Global().Get("Uint8Array").New(len(s))
js.CopyBytesToJS(ta, s)
return ta
front, err := covergen.GenerateFrontCover(*settings)
if err != nil {
return jsmap{"error": fmt.Sprintf("failed to render front: %s", err.Error())}
}
back, err := covergen.GenerateBackCover(*settings)
if err != nil {
return jsmap{"error": fmt.Sprintf("failed to render back: %s", err.Error())}
}
frontJSBytes, err := pdfToJs(front)
if err != nil {
return jsmap{"error": fmt.Sprintf("failed to render front: %s", err.Error())}
}
backJSBytes, err := pdfToJs(back)
if err != nil {
return jsmap{"error": fmt.Sprintf("failed to render back: %s", err.Error())}
}
return jsmap{
"front": frontJSBytes,
"back": backJSBytes,
}
}
func main() {
js.Global().Set("covergen", js.FuncOf(generateCover))
js.Global().Set("generateCover", js.FuncOf(generateCover))
js.Global().Set("generateSplitCover", js.FuncOf(generateSplitCover))
<-make(chan bool)
}