improve error handling

This commit is contained in:
Celogeek 2023-04-25 11:15:33 +02:00
parent dbec9b81e8
commit 07e04e514b
Signed by: celogeek
SSH Key Fingerprint: SHA256:njNJLzoLQdbV9PC6ehcruRb0QnEgxABoCYZ+0+aUIYc
2 changed files with 30 additions and 31 deletions

View File

@ -49,12 +49,7 @@ type epubPart struct {
} }
func New(options *Options) *ePub { func New(options *Options) *ePub {
uid, err := uuid.NewV4() uid := uuid.Must(uuid.NewV4())
if err != nil {
fmt.Fprintln(os.Stderr, err)
os.Exit(1)
}
tmpl := template.New("parser") tmpl := template.New("parser")
tmpl.Funcs(template.FuncMap{ tmpl.Funcs(template.FuncMap{
"mod": func(i, j int) bool { return i%j == 0 }, "mod": func(i, j int) bool { return i%j == 0 },
@ -71,20 +66,12 @@ func New(options *Options) *ePub {
} }
func (e *ePub) render(templateString string, data any) string { func (e *ePub) render(templateString string, data any) string {
tmpl, err := e.templateProcessor.Parse(templateString) var result strings.Builder
if err != nil { tmpl := template.Must(e.templateProcessor.Parse(templateString))
fmt.Fprintln(os.Stderr, err) if err := tmpl.Execute(&result, data); err != nil {
os.Exit(1) panic(err)
} }
result := &strings.Builder{} return regexp.MustCompile("\n+").ReplaceAllString(result.String(), "\n")
if err := tmpl.Execute(result, data); err != nil {
fmt.Fprintln(os.Stderr, err)
os.Exit(1)
}
stripBlank := regexp.MustCompile("\n+")
return stripBlank.ReplaceAllString(result.String(), "\n")
} }
func (e *ePub) writeImage(wz *epubzip.EpubZip, img *epubimage.Image) error { func (e *ePub) writeImage(wz *epubzip.EpubZip, img *epubimage.Image) error {

View File

@ -21,30 +21,42 @@ func (img *ImageData) CompressedSize() uint64 {
return img.Header.CompressedSize64 + 30 + uint64(len(img.Header.Name)) return img.Header.CompressedSize64 + 30 + uint64(len(img.Header.Name))
} }
func exitWithError(err error) {
fmt.Fprintln(os.Stderr, err)
os.Exit(1)
}
func New(id int, part int, img image.Image, quality int) *ImageData { func New(id int, part int, img image.Image, quality int) *ImageData {
name := fmt.Sprintf("OEBPS/Images/%d_p%d.jpg", id, part) name := fmt.Sprintf("OEBPS/Images/%d_p%d.jpg", id, part)
return NewRaw(name, img, quality) return NewRaw(name, img, quality)
} }
func NewRaw(name string, img image.Image, quality int) *ImageData { func NewRaw(name string, img image.Image, quality int) *ImageData {
data := bytes.NewBuffer([]byte{}) var (
if err := jpeg.Encode(data, img, &jpeg.Options{Quality: quality}); err != nil { data, cdata bytes.Buffer
fmt.Fprintln(os.Stderr, err) err error
os.Exit(1) )
err = jpeg.Encode(&data, img, &jpeg.Options{Quality: quality})
if err != nil {
exitWithError(err)
} }
cdata := bytes.NewBuffer([]byte{}) wcdata, err := flate.NewWriter(&cdata, flate.BestCompression)
wcdata, err := flate.NewWriter(cdata, flate.BestCompression)
if err != nil { if err != nil {
fmt.Fprintln(os.Stderr, err) exitWithError(err)
os.Exit(1)
} }
wcdata.Write(data.Bytes())
wcdata.Close() _, err = wcdata.Write(data.Bytes())
if err != nil { if err != nil {
fmt.Fprintln(os.Stderr, err) exitWithError(err)
os.Exit(1)
} }
err = wcdata.Close()
if err != nil {
exitWithError(err)
}
t := time.Now() t := time.Now()
return &ImageData{ return &ImageData{
&zip.FileHeader{ &zip.FileHeader{