Increase chunk size for graphics protocol since the VT parser now supports it

This commit is contained in:
Kovid Goyal 2023-11-09 10:03:41 +05:30
parent 35da87994b
commit 47a493c090
No known key found for this signature in database
GPG key ID: 06BC317B515ACE7C
2 changed files with 13 additions and 8 deletions

View file

@ -11,6 +11,7 @@ import (
"strconv"
"strings"
"kitty/tools/tty"
"kitty/tools/tui/loop"
"kitty/tools/utils"
)
@ -199,6 +200,9 @@ func (self GraphicsCommand) String() string {
return ans + ")"
}
var debugprintln = tty.DebugPrintln
var _ = debugprintln
func (self *GraphicsCommand) serialize_to(buf io.StringWriter, chunk string) (err error) {
var ws func(string)
if self.EncodeSerializedDataFunc == nil {
@ -264,7 +268,7 @@ func (self *GraphicsCommand) WriteWithPayloadTo(o io.StringWriter, payload []byt
return self.serialize_to(o, "")
}
if len(payload) <= compression_threshold {
return self.serialize_to(o, base64.StdEncoding.EncodeToString(payload))
return self.serialize_to(o, base64.RawStdEncoding.EncodeToString(payload))
}
gc := *self
if self.Format() != GRT_format_png {
@ -274,12 +278,13 @@ func (self *GraphicsCommand) WriteWithPayloadTo(o io.StringWriter, payload []byt
payload = compressed
}
}
data := base64.StdEncoding.EncodeToString(payload)
const chunk_size = 128 * 1024
data := base64.RawStdEncoding.EncodeToString(payload)
for len(data) > 0 && err == nil {
chunk := data
if len(data) > 4096 {
chunk = data[:4096]
data = data[4096:]
if len(data) > chunk_size {
chunk = data[:chunk_size]
data = data[chunk_size:]
} else {
data = ""
}

View file

@ -27,7 +27,7 @@ func TestGraphicsCommandSerialization(t *testing.T) {
test_serialize := func(payload string, vals ...string) {
expected := "\033_G" + strings.Join(vals, ",")
if payload != "" {
expected += ";" + base64.StdEncoding.EncodeToString([]byte(payload))
expected += ";" + base64.RawStdEncoding.EncodeToString([]byte(payload))
}
expected += "\033\\"
if diff := cmp.Diff(expected, gc.AsAPC([]byte(payload))); diff != "" {
@ -62,7 +62,7 @@ func TestGraphicsCommandSerialization(t *testing.T) {
if len(data) > 0 {
t.Fatalf("Unparsed remnant: %#v", string(data))
}
decoded, err := base64.StdEncoding.DecodeString(encoded.String())
decoded, err := base64.RawStdEncoding.DecodeString(encoded.String())
if err != nil {
t.Fatalf("Encoded data not valid base-64 with error: %v", err)
}
@ -89,7 +89,7 @@ func TestGraphicsCommandSerialization(t *testing.T) {
if diff := cmp.Diff(gc.AsAPC(nil), q.AsAPC(nil)); diff != "" {
t.Fatalf("Parsing failed:\n%s", diff)
}
if diff := cmp.Diff(q.response_message, base64.StdEncoding.EncodeToString([]byte("abcd"))); diff != "" {
if diff := cmp.Diff(q.response_message, base64.RawStdEncoding.EncodeToString([]byte("abcd"))); diff != "" {
t.Fatalf("Failed to parse payload:\n%s", diff)
}