Compare commits
4 Commits
05ac24254c
...
f05c4bbcc7
| Author | SHA1 | Date | |
|---|---|---|---|
| f05c4bbcc7 | |||
| d2ac081d5e | |||
| 39af776d00 | |||
| 15130938ce |
39
.drone.yml
Normal file
39
.drone.yml
Normal 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
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user