mirror of
https://github.com/kovidgoyal/kitty
synced 2026-06-08 14:18:26 +02:00
icat: Report panics in the render function correctly
Also, only fallback to imagemagick on error when the engine is not specified as builtin
This commit is contained in:
@@ -5,6 +5,7 @@ package icat
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/kovidgoyal/go-parallel"
|
||||
"github.com/kovidgoyal/kitty/tools/tui/graphics"
|
||||
"github.com/kovidgoyal/kitty/tools/utils/images"
|
||||
)
|
||||
@@ -31,6 +32,11 @@ func Render(path string, ro *images.RenderOptions, frames []images.IdentifyRecor
|
||||
}
|
||||
|
||||
func render_image_with_magick(imgd *image_data, src *opened_input) (err error) {
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
err = parallel.Format_stacktrace_on_panic(r, 1)
|
||||
}
|
||||
}()
|
||||
err = src.PutOnFilesystem()
|
||||
if err != nil {
|
||||
return err
|
||||
|
||||
@@ -4,13 +4,15 @@ package icat
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"image"
|
||||
"image/gif"
|
||||
|
||||
"github.com/kovidgoyal/go-parallel"
|
||||
"github.com/kovidgoyal/kitty/tools/tty"
|
||||
"github.com/kovidgoyal/kitty/tools/tui/graphics"
|
||||
"github.com/kovidgoyal/kitty/tools/utils"
|
||||
"github.com/kovidgoyal/kitty/tools/utils/images"
|
||||
"github.com/kovidgoyal/kitty/tools/utils/shm"
|
||||
"image"
|
||||
"image/gif"
|
||||
|
||||
"github.com/kovidgoyal/exiffix"
|
||||
"github.com/kovidgoyal/imaging"
|
||||
@@ -151,6 +153,11 @@ func add_gif_frames(ctx *images.Context, imgd *image_data, gf *gif.GIF) error {
|
||||
}
|
||||
|
||||
func render_image_with_go(imgd *image_data, src *opened_input) (err error) {
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
err = parallel.Format_stacktrace_on_panic(r, 1)
|
||||
}
|
||||
}()
|
||||
ctx := images.Context{}
|
||||
switch {
|
||||
case imgd.format_uppercase == "GIF" && opts.Loop != 0:
|
||||
|
||||
@@ -279,7 +279,7 @@ func process_arg(arg input_arg) {
|
||||
var format string
|
||||
var err error
|
||||
imgd := image_data{source_name: arg.value}
|
||||
if opts.Engine == "auto" || opts.Engine == "native" {
|
||||
if opts.Engine == "auto" || opts.Engine == "builtin" {
|
||||
c, format, err = image.DecodeConfig(f.file)
|
||||
f.Rewind()
|
||||
can_use_go = err == nil
|
||||
@@ -299,12 +299,16 @@ func process_arg(arg input_arg) {
|
||||
}
|
||||
err = render_image_with_go(&imgd, &f)
|
||||
if err != nil {
|
||||
merr := render_image_with_magick(&imgd, &f)
|
||||
if merr != nil {
|
||||
report_error(arg.value, "Could not render image to RGB", err)
|
||||
return
|
||||
if opts.Engine != "builtin" {
|
||||
merr := render_image_with_magick(&imgd, &f)
|
||||
if merr != nil {
|
||||
report_error(arg.value, "Could not render image to RGB", err)
|
||||
return
|
||||
}
|
||||
err = nil
|
||||
}
|
||||
err = nil
|
||||
report_error(arg.value, "could not render", err)
|
||||
return
|
||||
}
|
||||
} else {
|
||||
err = render_image_with_magick(&imgd, &f)
|
||||
|
||||
Reference in New Issue
Block a user